Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   message CM_TEXTCHANGED (https://www.delphipraxis.net/192629-message-cm_textchanged.html)

idefix2 6. Mai 2017 15:51

message CM_TEXTCHANGED
 
Ich bin dabei, mir eine Komponente von TEdit abzuleiten.

Dabei würde ich gerne, auch weil ich damit Erfahrungen sammeln möchte, direkt auf die Windows Messages reagieren. Ich habe also eine Methode
Delphi-Quellcode:
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
versucht. Zur Designzeit wird die Methode einmal beim Erstellen des Formulars und dann jedesmal, wenn man den Text des Felds verändert, aufgerufen. Aber zur Laufzeit wird die Methode nur aufgerufen, wenn das Formular erstellt wird, aber nicht, wenn man in dem Edit-Feld Änderungen vornimmt, und auch nicht beim Verlassen des geänderten Edit-felds. Verstehe ich da CM_TEXTCHANGED falsch?

Füge ich der Deklaration inherited hinzu, dann stürzt die IDE übrigens beim Versuch zu kompilieren komplett ab, bringt alle paar Sekunden eine Meldung Zugriffsverletzung und kann nur mehr über den Task Manager beendet werden. Das Verhalten verstehe ich überhaupt nicht. In der Prozedur wird inherited aufgerufen und anschliessend eine Kontrollmeldung am Bildschirm ausgegeben, sonst passiert noch gar nichts.

Michael II 6. Mai 2017 20:23

AW: message CM_TEXTCHANGED
 
Dein Edit empfängt die Meldung

CM_TEXTCHANGED,

wenn du den Namen des Edit änderst.


Beispiel:

Delphi-Quellcode:
type TmyEdit = class(TEdit)
      private
        procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
    end;
...
...
  hedit : TMyEdit;

implementation

{$R *.dfm}

procedure TMyEdit.CMTextChanged(var Message: TMessage);
begin
  inherited;
  ShowMessage('Name geändert');
end;

procedure TForm83.Button1Click(Sender: TObject);
begin
hedit.Name := 'neuername';
end;

procedure TForm83.FormCreate(Sender: TObject);
begin
  hedit := TMyEdit.Create( self );
  hedit.Visible := true;
  hedit.Left := 10;
  hedit.Top := 10;
  hedit.Width := 210;
  hedit.Height := 40;
  hedit.Parent := form83;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz