AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

message CM_TEXTCHANGED

Ein Thema von idefix2 · begonnen am 6. Mai 2017 · letzter Beitrag vom 6. Mai 2017
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

message CM_TEXTCHANGED

  Alt 6. Mai 2017, 16:51
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
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.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
703 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: message CM_TEXTCHANGED

  Alt 6. Mai 2017, 21:23
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;
Michael Gasser
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:30 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