我需要更新周围的编辑框项目时,它改变大小。
TEDIT没有onResize受到事件。
编辑框可以在不同的时间,例如调整:
- 改变代码宽度/高度
- 形成缩放为DPI缩放
- 字体改变
我敢肯定,别人我不知道。
我需要一个单一的事件,当一个编辑框,改变它的大小就知道了。 是否有一个Windows消息我可以继承的编辑框,抓住?
我需要更新周围的编辑框项目时,它改变大小。
TEDIT没有onResize受到事件。
编辑框可以在不同的时间,例如调整:
我敢肯定,别人我不知道。
我需要一个单一的事件,当一个编辑框,改变它的大小就知道了。 是否有一个Windows消息我可以继承的编辑框,抓住?
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;
您是否尝试过这样的事情:
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.
处理wm_Size
消息。 子类通过分配新的值传送至其控制WindowProc
财产; 一定要保存旧的值,所以你可以委托其他消息出现。
参见: wm_WindowPosChanged