Delphi: Comment savoir quand un TEdit change de taille?
Question
Je dois mettre à jour les éléments autour d'une zone de saisie lorsqu'elle change de taille.
TEdit n'a pas d'événement OnResize .
Une zone d’édition peut être redimensionnée à différents moments, par exemple:
- changer la largeur / la hauteur dans le code
- formulaire mis à l'échelle pour la mise à l'échelle DPI
- la police a changé
Et je suis sûr que d’autres, je ne les connais pas.
J'ai besoin d'un seul événement pour savoir quand une boîte d'édition a changé de taille. Existe-t-il un message Windows que je peux sous-classer dans la boîte de saisie et saisir?
La solution
OnResize est déclaré en tant que propriété protégée de TControl. Vous pouvez l'exposer à l'aide d'un "cracker". classe. C'est un peu un bidouillage, cependant.
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;
Autres conseils
Avez-vous essayé quelque chose comme ça:
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 ceci:
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.
Gestion du message wm_Size
. Sous-classez un contrôle en attribuant une nouvelle valeur à son WindowProc
propriété; veillez à stocker l'ancienne valeur pour pouvoir y déléguer d'autres messages.
Voir aussi: wm_WindowPosChanged