![]() |
Stringgrid zeichnet zum falschen Zeitpunkt
Hallo,
ich habe folgendes problem: Nach Eingabe in einem Memofeld wird nach Eingabe von Enter über das FormKeyPress Ereignis in einem bestehenden Stringgrid eine Zeile angefügt und mit Cells() beschrieben. Die neue Zeile wird aber nicht direkt auf dem Bildschirm angezeigt. Erst nachdem ich wieder etwas in das Memofeld eingebe und Enter drücke, wird der vorherige Zeileneintrag angezeigt. Weiss jemand Rat? Wolle |
AW: Stringgrid zeichnet zum falschen Zeitpunkt
Nur so eine idee, kann es gerade nicht prüfen, aber
gibt es nicht irgend etwas wie z.B. ein .refresh .update .repaint .invalidate oder so? Gruß steku |
AW: Stringgrid zeichnet zum falschen Zeitpunkt
Hab ich auch dran gedacht, .refresh etc. ohne Erfolg probiert.
Gruß Wolle |
AW: Stringgrid zeichnet zum falschen Zeitpunkt
Zitat:
|
AW: Stringgrid zeichnet zum falschen Zeitpunkt
Ok, versuchen wir es mit etwas Code.
Hier die Ereignisroutine vom Memo KeyPress
Delphi-Quellcode:
und hier der entsprechende teil vom FormKeyPress
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin if not (Key in ['0'..'9','a'..'z','/','-', DecimalSeparator, ThousandSeparator]) then Key := #0; end;
Delphi-Quellcode:
While i < GrdArtikel.RowCount-1 do
Begin Artikel := GrdArtikel.Cells[5,i]; While not datamodule2.DBSRabatt.Eof do Begin If Datamodule2.DBSRabatt.FieldValues['Gruppe'] = Artikel then Begin ClubRabatt := ClubRabatt+(StrToFloat(GrdArtikel.cells[4,i])*Datamodule2.DBSRabatt.FieldValues['Rabatt']/100); Inc(i); End; Datamodule2.DBSRabatt.Next; End; Inc(I); End; Mtg_Flag := 'J'; If ClubRabatt > 0 Then Begin; Clubrabatt := Clubrabatt*-1; Summe := Summe+Clubrabatt; lb_Summe.Caption := FloatToStrF(Summe,ffNumber,8,2); GrdArtikel.RowCount := Zeile; GrdArtikel.Cells[0,Zeile] := '1'; GrdArtikel.Cells[1,Zeile] := 'Clubrabatt'; GrdArtikel.Cells[3,Zeile] := FloatToStrf(Clubrabatt,ffNumber,8,2); GrdArtikel.Cells[4,Zeile] := FloatToStrf(Clubrabatt,ffNumber,8,2); GrdArtikel.Cells[5,Zeile] := '1111'; Inc(Zeile); End; Memo1.Text := ''; End; ShowMessage('Clubmitglied '+ Datamodule2.DBMitglieder.FieldByName('Vorname') .Value+' '+Datamodule2.DBMitglieder.FieldByName('Name').Value+#13+Datamodule2. DBMitglieder.FieldByName('Produkt').Value); End; das ShowMessage() wird ausgelöst. Jetzt kommen noch einige Routinen zum Bezahlvorgang. Nach erfolgter Zahlung wartet das Prg in dieser
Delphi-Quellcode:
Schleife.
procedure TForm1.Timer1Timer(Sender: TObject);
begin LblFirma.Caption := TimeToStr(Time); end; Erst wenn der nächste Artikel im Memo eingegeben und Enter gedrückt wird, wird die Stringgridzeile der Vorartikels ausgegeben. Gruß Wolle |
AW: Stringgrid zeichnet zum falschen Zeitpunkt
Zitat:
Der von dir eingestellte Code läßt es nicht ohne weiteres zu, den genannten Fehler zu finden. Ich würde hier erstmal mit einer lokalen Variable Zeile arbeiten, damit du sicherstellst, daß auch wirklich eine Zeile hinzugefügt wurde, falls du woanders mit der Zählung durcheinandergeraten bist:
Delphi-Quellcode:
Und wieso dieses umständliche Konstrukt?
GrdArtikel.Rowcount := GrdArtikel.Rowcount + 1.
Zeile := GrdArtikel.Rowcount -1; //Zählung beginnt bei 0
Delphi-Quellcode:
statt einfach:
Clubrabatt := Clubrabatt*-1;
Summe := Summe+Clubrabatt;
Delphi-Quellcode:
???
Summe := Summe - Clubrabatt;
Übrigens solltest du nicht mit Leerzeichen geizen, dein Code dadurch wird übersichtlicher. Empfehlung: Debugge einmal deinen Code, indem du auf GrdArtikel.RowCount := Zeile; einen Haltepunkt setzt. Schau dir im Debug-Fenster den Wert von Rowcount und von Zeile an. Vermutlich kommt dein Fehler daher, daß du die Zeile, in die du zuvor reinschreibst, erst später erzeugst. Müßte eigentlich einen Zugriffsfehler ergeben. |
AW: Stringgrid zeichnet zum falschen Zeitpunkt
Zitat:
Zitat:
Ich habe einen Haltepunkt bei GrdArtikel.RowCount := Zeile; gemacht. Row und Zeile haben den korrekten Wert (Also die Zeile, in der der Wert geschrieben werden soll). Wann kommt es denn vor, das ein Cells[] nicht sofort sichtbar wird? gruß Wolle |
AW: Stringgrid zeichnet zum falschen Zeitpunkt
Zitat:
Zitat:
Zitat:
|
AW: Stringgrid zeichnet zum falschen Zeitpunkt
Zitat:
|
AW: Stringgrid zeichnet zum falschen Zeitpunkt
Zitat:
Ich würde hier erstmal mit einer lokalen Variable Zeile arbeiten, damit du sicherstellst, daß auch wirklich eine Zeile hinzugefügt wurde, falls du woanders mit der Zählung durcheinandergeraten bist:
Delphi-Quellcode:
Darauf bist du nicht eingegangen. Und ich hab nun wirklich keine Lust mehr. Frag einen anderen ...
GrdArtikel.Rowcount := GrdArtikel.Rowcount + 1.
Zeile := GrdArtikel.Rowcount -1; //Zählung beginnt bei 0 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 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