gpt4 book ai didi

delphi - 如何实现自定义TGraphicControl.OnResize?

转载 作者:行者123 更新时间:2023-12-03 15:18:24 25 4
gpt4 key购买 nike

我应该使用WM_WINDOWPOSCHANGED;吗? (我还没有见过 CM_WINDOWPOSCHANGED 或类似的)

TGraphicControl 是否会收到此消息的通知(它没有句柄)?正确的方法是什么?

谢谢。

<小时/>

接受答案后的一个想法:

奇怪的是,或者可能是故意的,即使只有控件位置的顶部/左侧发生了变化,OnResize也会触发:
在 Delphi 7 中,Resize 在调用 Perform(WM_WINDOWPOSCHANGED) 之后立即在 TControl.SetBounds 中调用,即使没有实际调整大小并且控件已被调用搬家了。
这是设计使然吗?

最佳答案

OnResize 事件已经在 TControl 中实现,它只是受到保护。要访问它,您只需为您的组件重新声明它。您还可以使用插入器类或“Hack”类来访问它。以 TImage 为例:

将其用于自己的组件:

TMycontrol=Class(TGraphicControl)
published
Property OnResize;
End;

使用插入器类:

type
TImage=Class(ExtCtrls.TImage)
Property OnResize;
End;

TForm3 = class(TForm)
//....

procedure TForm3.MyResize(Sender: TObject);
begin
Showmessage(Sender.ClassName)
end;


procedure TForm3.Button1Click(Sender: TObject);
begin
Image1.OnResize := MyResize;
Image1.Width := 300;
end;

就地使用“黑客”:

implementation

{$R *.dfm}
Type THack=Class(TControl)
Property OnResize;
End;

procedure TForm3.MyResize(Sender: TObject);
begin
Showmessage(Sender.ClassName)
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
THack(Image1).OnResize := MyResize;
Image1.Width := 300;
end;

该事件由父控件迭代 TWinControl.AlignControls 中包含的控件触发。

关于delphi - 如何实现自定义TGraphicControl.OnResize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20757347/

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