Delphi: Comment savoir quand un TEdit change de taille?

Je dois mettre à jour les éléments autour d’une zone d’édition quand elle change de taille.

TEdit n’a pas d’événement OnResize .

Une boîte d’édition peut être redimensionnée à différents moments, par exemple:

  • changer la largeur / hauteur en code
  • forme mise à l’échelle pour la mise à l’échelle DPI
  • police changée

Et je suis sûr que d’autres que je ne connais pas.

J’ai besoin d’un seul événement pour savoir quand une zone d’édition a changé de taille. Y a-t-il un message Windows que je peux sous-classer pour la boîte d’édition et saisir?

OnResize est déclarée comme propriété protégée de TControl. Vous pourriez l’exposer en utilisant une classe dite “cracker”. C’est un peu un hack, 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; 

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 ca:

 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. 

wm_Size message wm_Size . Sous-classe un contrôle en atsortingbuant une nouvelle valeur à sa propriété WindowProc ; Veillez à stocker l’ancienne valeur afin d’y déléguer d’autres messages.

Voir aussi: wm_WindowPosChanged