Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Ablauf verzögert sich (https://www.delphipraxis.net/194140-ablauf-verzoegert-sich.html)

Jinchuuriki 21. Okt 2017 14:40

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:
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;
1.Zeile der Spalte ist beschriftet und fixed, deshalb startet die FOR-Schleife mit 1.

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

zeras 22. Okt 2017 07:28

AW: Ablauf verzögert sich
 
Wo legst du denn die Anzahl der Zeilen fest?

Jinchuuriki 22. Okt 2017 08:42

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.

blawen 22. Okt 2017 09:20

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.

Jinchuuriki 22. Okt 2017 14:12

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?

TBx 22. Okt 2017 14:41

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 00:16 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