我已经尝试了很多方法来强制执行FormResize事件而不需要包含SetWindowPos。使用鼠标调整窗体大小时,以下代码非常有效,但我还需要使用代码手动调用此代码。但我不希望表格以任何方式改变。
procedure TFormMain.FormResize( Sender: TObject );
begin
dxDockPanelFolders1.Height := dxVertContainerDockSite1.Height div 3;
dxDockPanelFiles1.Height := dxVertContainerDockSite1.Height div 3;
dxDockPanelPreview1.Height := dxVertContainerDockSite1.Height div 3;
end;
在搜索网页时,我还没有看到完成此任务。
答案 0 :(得分:5)
我会使用一些间接:
procedure TFormMain.UpdateDockPanelLayout;
begin
dxDockPanelFolders1.Height := dxVertContainerDockSite1.Height div 3;
dxDockPanelFiles1.Height := dxVertContainerDockSite1.Height div 3;
dxDockPanelPreview1.Height := dxVertContainerDockSite1.Height div 3;
end;
procedure TFormMain.FormResize(Sender: TObject);
begin
UpdateDockPanelLayout;
end;
现在,您可以直接从代码中的任意位置拨打UpdateDockPanelLayout
。
我意识到你可以打电话给FormResize
并传递Sender
,但这个解决方案让我觉得很脏。按照上面的建议执行此操作还允许您更具体地命名方法,而不是与驱动它的UI事件紧密耦合。
答案 1 :(得分:0)
你真的需要触发事件,还是仅仅执行事件处理程序就足够了?如果是,只需执行
FormResize(Self);
如果您确实需要触发事件,请执行
Resize;
答案 2 :(得分:-1)
呃,请致电
FormResize(nil);
何时需要调整控件?