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/)
-   -   Delphi OnChange im TEdit verhindern (https://www.delphipraxis.net/115316-onchange-im-tedit-verhindern.html)

technofreak 10. Jun 2008 11:41


OnChange im TEdit verhindern
 
Hallo zusammen.

Ich habe da ein kleines Problem. Ich möchte für das Mitlesen an der seriellen Schnittstelle ein kleines Programm schreiben. Dazu soll das Messinterval einstellbar sein. Ich habe für die Eingabe zwei Edit- und zwei Combobox-Elememte verwendet. Es sollen Abtastfrequenz oder -Zeitintevall einstellbar sein. Je ein Edit-Feld für die Eingabe der Zahl für Zeit und Frequenz und je eine ComboBox für die Einheit (s, ms, Hz, kHz ...)beide Edit-Felder stehen zu Anfang auf 1 und die Einheiten sind s und Hz. Bei einer Änderung bei der Zeit soll die entsprechende Frequenz errechnet und in Edit und Combobox übernommen werden. Bei Änderung der Frequenz entsprechend für die Zeit. Die Abfrage der Edit-Felder mache ich über OnChange. Da aber der Inhalt auch durch die Berechnung verändert wird, wird OnChange auch wieder aufgerufen. Daraus folgt wieder eine Änderung des anderen Edit-Feldes und das Spiel geht von vorne los.

Gibt es eine Möglichkeit auf Eingaben zu reagieren (ähnlich wie OnChange) aber bei Änderung durch das Programm nur den Wert in das Feld zu schreiben ohne OnChange aufzurufen?

Silvio

Cyberbob 10. Jun 2008 11:49

Re: OnChange im TEdit verhindern
 
Du könntest OnChange für die dauer der Berechnung auch ausschalten. Oder im OnChange überprüfen, ob er denn Handeln darf, über eine Boolche Variable oder so.
Ansonsten wäre es vielleicht auch gut mal zu überdenken, ob das was du machst, nicht vielleicht bessr gelöst werden kann.

Gruß,
Chris

Brainshock 10. Jun 2008 11:55

Re: OnChange im TEdit verhindern
 
Hi,

hebe die Zuweisung des/der OnChange Events kurzzeitig auf, damit du diese Endlosschleife verhinderst.
Hier ein Beispiel:


Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var
  ChangeEvent: TNotifyEvent;
begin
  ChangeEvent:= Edit2.OnChange;
  Edit2.OnChange:= nil;
  try
    // deine Änderungen an Edit1
  finally
    Edit2.OnChange:= ChangeEvent;
  end;
end;
Gruß,


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 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