Pregunta

necesito actualizar elementos alrededor de un cuadro de edición cuando cambia de tamaño.

TEdit no tiene ningún evento OnResize .

Un cuadro de edición puede cambiar de tamaño en varios momentos, por ejemplo:

  • cambio de ancho / alto en el código
  • formulario escalado para escalado DPI
  • fuente cambiada

Y estoy seguro de otros que no conozco.

Necesito un solo evento para saber cuándo un cuadro de edición ha cambiado de tamaño. ¿Hay un mensaje de Windows que puedo subclasificar el cuadro de edición y tomar?

¿Fue útil?

Solución

OnResize se declara como propiedad protegida de TControl. Podrías exponerlo usando un llamado "cracker". clase. Sin embargo, es un truco.

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;

Otros consejos

¿Intentaste algo como esto:

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.

o esto:

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.

Maneje el mensaje wm_Size . Subclasifique un control asignando un nuevo valor a su WindowProc propiedad; asegúrese de almacenar el valor anterior para poder delegar otros mensajes allí.

Consulte también: wm_WindowPosChanged

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top