Delphi: ¿Cómo saber cuándo un TEdit cambia de tamaño?
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?
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