我应该用WM_WINDOWPOSCHANGED;吗?(我没见过CM_WINDOWPOSCHANGED或类似)
TGraphicControl是否会被通知此消息(它没有Handle)?什么是正确的方法?
谢谢.
接受答案后只是一个问题:
OnResize即使只有控制位置的顶部/左侧发生了变化,奇怪地或者可能有意地触发:即使没有进行实际的调整并且控制被移动,在调用之后立即调用
Delphi 7 Resize中.
这是设计的吗?TControl.SetBoundsPerform(WM_WINDOWPOSCHANGED)
OnResize事件已经在TControl中实现,它只是受到保护.要访问它,您只需为组件重新声明它.您也可以使用插入类或"Hack"类来访问它.作为TImage的示例:
将它用于自己的组件:
TMycontrol=Class(TGraphicControl)
published
Property OnResize;
End;
Run Code Online (Sandbox Code Playgroud)
使用插入类:
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;
Run Code Online (Sandbox Code Playgroud)
使用"hack"就位:
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;
Run Code Online (Sandbox Code Playgroud)
该事件由parentcontrol触发,迭代TWinControl.AlignControls中包含的控件.