Delphi:如何知道TEdit何时改变大小?

Ian*_*oyd 3 windows delphi events resize editbox

我需要在更改大小时更新编辑框周围的项目.

TEdit没有OnResize事件.

编辑框可以在不同时间调整大小,例如:

  • 在代码中改变宽度/高度
  • 表格缩放为DPI缩放
  • 字体改变了

我相信其他人我不知道.

我需要一个单独的事件来知道编辑框何时改变了它的大小.是否有Windows消息我可以为编辑框子类化并抓取?

Bru*_*Gee 9

OnResize被声明为TControl的受保护属性.您可以使用所谓的"cracker"类来公开它.不过,这有点像黑客.

type
  TControlCracker = class(TControl);
Run Code Online (Sandbox Code Playgroud)

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  TControlCracker(Edit1).OnResize := MyEditResize;
end;

procedure TForm1.MyEditResize(Sender: TObject);
begin
  Memo1.Lines.Add(IntToStr(Edit1.Width));
end;
Run Code Online (Sandbox Code Playgroud)

  • 最优雅,并且展示了大多数 OO 库中存在的抽象漏洞。 (2认同)