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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top