gpt4 book ai didi

delphi - 根据拖动区域动态调整控件大小

转载 作者:行者123 更新时间:2023-12-03 19:25:04 26 4
gpt4 key购买 nike

我有一个表格,左边有一个 TTreeview,右边有一个 TGroupbox。当通过拖动右边缘来调整表单大小时,我希望 Groupbox 相应地增长或缩小。当表单被拖动到左侧时,我希望 Treeview 调整大小。我尝试了下面的代码并且正确调整大小工作正常。但是左调整大小会导致 TreeView 增长得比它应该的长。实现这一目标的正确方法是什么?

procedure TForm1.FormResize(Sender: TObject);
var
p: TPoint;
begin
P:= ScreenToClient(Mouse.CursorPos);
if(P.X<0) then begin
Treeview1.Anchors:= [akLeft,akTop,akRight,akBottom];
Groupbox1.Anchors:= [akTop,akBottom];
end
else begin
Treeview1.Anchors:= [akLeft,akTop,akBottom];
Groupbox1.Anchors:= [akLeft,akTop,akRight,akBottom];
end;
end;

最佳答案

而不是处理 OnResize事件,您可以改为拦截 WM_SIZING 改为消息

Sent to a window that the user is resizing. By processing this message, an application can monitor the size and position of the drag rectangle and, if needed, change its size or position.



wParam value 准确地告诉您正在调整窗口的哪些边缘。您可以使用它来调整 Anchors因此,例如:
type
TForm1 = class(TForm)
TreeView1: TTreeView;
GroupBox1: TGroupBox;
private
{ Private declarations }
procedure WMSizing(var Message: TMessage); message WM_SIZING;
public
{ Public declarations }
end;

...

procedure TForm1.WMSizing(var Message: TMessage);
var
TreeViewAnchors: TAnchors;
GroupBoxAnchors: TAnchors;
begin
inherited;

TreeViewAnchors := [akTop, akBottom];
GroupBoxAnchors := [akTop, akBottom];

case Message.WParam of
WMSZ_LEFT, WMSZ_BOTTOMLEFT, WMSZ_TOPLEFT: begin
TreeViewAnchors := TreeViewAnchors + [akLeft, akRight];
GroupBoxAnchors := GroupBoxAnchors + [akRight];
end;
WMSZ_RIGHT, WMSZ_BOTTOMRIGHT, WMSZ_TOPRIGHT: begin
TreeViewAnchors := TreeViewAnchors + [akLeft];
GroupBoxAnchors := GroupBoxAnchors + [akLeft, akRight];
end;
end;

TreeView1.Anchors := TreeViewAnchors;
GroupBox1.Anchors := GroupBoxAnchors;
end;

关于delphi - 根据拖动区域动态调整控件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42369093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com