德尔福:如何知道什么时候TEDIT改变大小?(Delphi: How to know when a

2019-08-06 03:29发布

我需要更新周围的编辑框项目时,它改变大小。

TEDIT没有onResize受到事件。

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

  • 改变代码宽度/高度
  • 形成缩放为DPI缩放
  • 字体改变

我敢肯定,别人我不知道。

我需要一个单一的事件,当一个编辑框,改变它的大小就知道了。 是否有一个Windows消息我可以继承的编辑框,抓住?

Answer 1:

onResize受到被声明为的TControl的保护特性。 你可以使用所谓的“饼干”类揭露它。 这是一个黑客攻击的一位,虽然。

type
  TControlCracker = class(TControl);

...

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

procedure TForm1.MyEditResize(Sender: TObject);
begin
  Memo1.Lines.Add(IntToStr(Edit1.Width));
end;


Answer 2:

您是否尝试过这样的事情:

unit _MM_Copy_Buffer_;

interface

type
  TMyEdit = class(TCustomEdit)
  protected
    procedure Resize; override;
  end;

implementation

procedure TMyEdit.Resize;
begin
  inherited;
  if not (csLoading in ComponentState) then
  begin
    // react on new size
  end;
end;

end.

或这个:

unit _MM_Copy_Buffer_;

interface

type
  TCustomComboEdit = class(TCustomMaskEdit)
  private
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
  end;

implementation

procedure TCustomComboEdit.WMSize(var Message: TWMSize);
begin
  inherited;
  if not (csLoading in ComponentState) then
  begin
    // react on new size
  end;
  UpdateBtnBounds;
end;

end.


Answer 3:

处理wm_Size消息。 子类通过分配新的值传送至其控制WindowProc财产; 一定要保存旧的值,所以你可以委托其他消息出现。

参见: wm_WindowPosChanged



文章来源: Delphi: How to know when a TEdit changes size?