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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top