Delphi: Como saber quando um TEdit muda de tamanho?
Pergunta
Eu preciso atualizar itens em torno de uma caixa de edição quando se muda de tamanho.
TEdit não tem OnResize evento.
Uma caixa de edição é possível redimensionar em vários momentos, por exemplo:.
- mudando largura / altura em código
- forma escalado para escala DPI
- pia batismal mudada
E eu tenho certeza que outros eu não sei sobre.
Eu preciso de um único evento para saber quando uma caixa de edição mudou seu tamanho. Existe uma mensagem do Windows i pode subclasse a caixa de edição para e agarrar?
Solução
OnResize é declarada como uma propriedade protegida de TControl. Você poderia expô-lo usando uma chamada classe "cracker". É um pouco de um truque, no entanto.
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;
Outras dicas
Você tentou algo como isto:
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.
ou este:
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.
Lidar com o wm_Size
mensagem . Subclasse um controle, atribuindo um novo valor à sua WindowProc
propriedade ; não se esqueça de armazenar o valor antigo para que você possa delegar outras mensagens lá.
Veja também: wm_WindowPosChanged