![]() |
Ablauf verzögert sich
Hallo,
ich habe ein Problem bei folgender Aufgabe: Ich habe eine Spalte und möchte bei einer Eingabe überprüfen, ob die Eingabe eine Zahl oder nicht. Sollte sie keine Zahl sein, erscheint ein Hinweis, dass nur Zahlen eingegeben werden sollen. Am Ende der Spalte sollen alle Werte addiert werden.
Delphi-Quellcode:
1.Zeile der Spalte ist beschriftet und fixed, deshalb startet die FOR-Schleife mit 1.
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var Summe,i:Integer; begin //Wenn die gedrückte Tastarturtaste im Bereich von 0 bis 9 liegt if not (Key in ['0'..'9',Char(VK_BACK)]) then //VK(Virtual-Key)_BACK = Backspace begin //Die Falsche Eingabe wird mit der Backspace-Taste(#0) gelöscht Key := #0; Label1.Caption := 'NUR ZAHLEN'; end; //Variable wird initialisiert mit Startwert Summe := 0; //Tabellenspalte wird durchlaufen for i := 1 to StringGrid1.RowCount -2 do begin //Wenn das Feld leer ist, soll er mit der Abfrage weitermachen if StringGrid1.Cells[1,i] = '' then Continue else //Ist das Feld nicht leer, soll der Wert in die Variable addiert werden Summe :=Summe + StrToInt(StringGrid1.Cells[1,i]); //Letztes Feld kriegt die Summe aller Felder StringGrid1.Cells[1,StringGrid1.RowCount -1] := IntToStr(Summe); end; end; Problem: Der ganze Ablauf, mit dem Zählen, verzögert sich um eine Ausführung. Bsp: Feld1= 1 Summe= ist leer Feld2= 3 Summe= 1 Feld3= 6 Summe= 4 Was habe ich übersehen oder nicht bedacht? MfG |
AW: Ablauf verzögert sich
Wo legst du denn die Anzahl der Zeilen fest?
|
AW: Ablauf verzögert sich
Die Anzahl der Zeilen wird in den Eigenschaften auf 5 gesetzt. Ich ändere diese Einstellungen,nachdem ich das Grid erstellt habe,"noch" nicht.
|
AW: Ablauf verzögert sich
Tippe mal zwei Zahlen in ein Feld ein und schaue, was geschieht ;-)
Belasse die Tastenüberprüfung im OnKeyPress und verwende für die Berechnung stattdessen OnKeyUp. |
AW: Ablauf verzögert sich
Danke für den Tipp,es läuft wie es sein muss.
Wieso funktioniert es nicht sofort bei OnKeyPress? Werden, so zu sagen, beide Abfragen "gleichzeitig" durchgeführt und für die Abfrage in der FOR-Schleife ist beim ersten KeyPress,das Feld noch ohne den getätigten Eintrag? |
AW: Ablauf verzögert sich
Im OnKeyPress besteht noch der alte Wert der Zelle. Erst nach Abarbeitung des Events wird der Wert neu gesetzt. Du rechnest also noch mit dem alten Zelleninhalt, wenn Du die Berechnung innerhalb dieses Events durchführst.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz