Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.958 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TEdit beim überschreiten von MaxLength etwas auslösen

  Alt 13. Jul 2021, 17:22
Ableiten ist garnicht nötig.

OK, in der grauenhaft automatisch übersetzen deutschen MSDN-Variante, kann man es nicht wirklich lesen, aber
Zitat:
The parent window of the edit control receives this notification code through a WM_COMMAND message.
Delphi-Quellcode:
type
  TForm2 = class(TForm)
  protected
    procedure WndProc(var Message: TMessage); override;

    // oder eben auch via WM_COMMAND bzw. CN_COMMAND
    //procedure WMCommand(var Message: TWMCommand); message WM_COMMAND;
  end;

procedure TForm2.WndProc(var Message: TMessage);
begin
  if (Message.Msg = WM_COMMAND) and (TWMCommand(Message).NotifyCode = EN_MAXTEXT) then
    Beep; // TEdit(LParam)
  inherited;
end;
Da der BEEP erst nach der Notification kommt, hätte man vielleicht denken können, dass es doch eine Möglichkeit zum Unterdrücken gäbe.

Allerdings hilft das Result leider nicht, wie z.B.
Message.Result := 1; ,
und auch ein Delphi-Referenz durchsuchenAbort kann nicht helfen, da die VCL es vorher mit einem try-except abfängt, bevor der DefaultCode der Komponente es anschließend piepsen lässt.

Bei NonVCL könnte man vielleicht das DefWindowProc bzw. DispatchMessage einfach weglassen (ungetestet),
aber sowas ist in der VCL leider nicht möglich, also hier gäbe es nur Msg.Result, um mit Windows zu reden,
und ein Message.Msg := WM_NULL; geht sowieso nicht.



Fazit: Es bleibt bloß noch den Tastendruck abzubrechen, bevor es zu lang wird. (Copy&Paste oder WM_SETTEXT erstmal ignoriert)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (13. Jul 2021 um 17:28 Uhr)
  Mit Zitat antworten Zitat