Delphi: Wie kann man wissen, wenn ein TEdit Größe ändert?
Frage
ich brauche Elemente um ein Bearbeitungsfeld zu aktualisieren, wenn es Größe ändert.
TEdit hat keine OnResize Ereignis.
Ein Eingabefeld zu verschiedenen Zeiten kann die Größe, z.
- Ändern Breite / Höhe in Code
- Formular für DPI skaliert Skalierung
- Schriftart geändert
Und ich bin sicher, dass andere, weiß ich nicht über.
Ich brauche ein einzelnes Ereignis zu wissen, wann ein Bearbeitungsfeld seine Größe geändert hat. Gibt es eine Windows-Nachricht i das Bearbeitungsfeld für Unterklasse und greifen?
Lösung
OnResize ist als geschütztes Eigentum von TControl erklärt. Man könnte es aussetzen einen so genannten „Cracker“ Klasse. Es ist ein bisschen wie ein Hack, aber.
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;
Andere Tipps
Haben Sie so etwas wie diese versuchen:
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.
oder folgt aus:
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.
Gehen Sie mit der wm_Size
Nachricht. Subklassen eine Kontrolle durch einen neuen Wert zuweisen, um seine WindowProc
Eigenschaft; sicher sein, den alten Wert zu speichern, damit Sie es andere Nachrichten delegieren können.
Siehe auch: wm_WindowPosChanged