Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   letzte gedrückte taste im Stringgrid abfragen (https://www.delphipraxis.net/29301-letzte-gedrueckte-taste-im-stringgrid-abfragen.html)

schlock 7. Sep 2004 11:36


letzte gedrückte taste im Stringgrid abfragen
 
Hallo,
ich habe ein Problem mit den Stringgrid. Ich brauche in der Validierungsroutine meines Stringgrids die Information welche Taste zuletzt gedrückt wurde und ob es eine Maustaste war oder nicht.
Ein Ansatz den ich hier im Forum gefunden habe war folgender:

Delphi-Quellcode:
procedure TfrmJournal.KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  pLastKey:= Key
end;

procedure TfrmJournal.MouseDown(Sender: TObject; Button: TMouseButton;
                              Shift: TShiftState; X, Y: Integer);
begin
  pLastKey:= 0;
end;

// Das Validierungsevent in dem ich die zuletzt gedrückte Taste brauche
procedure TfrmJournal.CellValidate(Sender: TObject; ACol, ARow: Integer;
                                   var Value: string; var Valid: Boolean);
begin
  inherited;
  if (pLastKey <> 0) then
  begin
    // Mach irgedwas
  end;
end;
Leider geht das so nicht, da das Validierungsevent vor den beiden anderen Events aufgerufen wird und
ich dann immer die vorletzt gedrückte Taste erhalte.
Hat irgendjemand eine Idee ??

moritz 7. Sep 2004 11:42

Re: letzte gedrückte taste im Stringgrid abfragen
 
Wann brauchst du das Validiersungsevent denn und was macht es?
(Hau es doch einfach an das Ende der Mouse/Key-Down Funktionen...)

schlock 7. Sep 2004 11:53

Re: letzte gedrückte taste im Stringgrid abfragen
 
Das Validierungsevent soll beim Verlassen einer bestimmten Zelle eine neue
Zeile in das Grid einfügen. Dies soll aber nur passieren, falls die Zelle
mit Tab oder Enter verlassen wurde. Das geht bei mir auch, allerdings wird
die Zeile immer eingefügt, egal wie ich die Zelle verlasse.
Optimal wäre natürlich eine Event, ählich dem Validierungsevent, bei dem
auch noch die Taste mit übergeben wird. Das gibts aber nicht.

moritz 7. Sep 2004 11:59

Re: letzte gedrückte taste im Stringgrid abfragen
 
Löse doch einfach, sobald Tab oder Enter gedrückt werden, das Event aus.

schlock 7. Sep 2004 12:42

Re: letzte gedrückte taste im Stringgrid abfragen
 
Dann weiss ich aber nicht an welcher Stelle im Grid ich mich gerade befinde, da KeyDown diese
nicht als Übergabeparameter hat. Abfragen auf Grid.Col und Grid.Row um dies festzustellen
funktionieren auch nicht. Hab ich probiert.

himitsu 7. Sep 2004 12:55

Re: letzte gedrückte taste im Stringgrid abfragen
 
Zitat:

Zitat von schlock
Dann weiss ich aber nicht an welcher Stelle im Grid ich mich gerade befinde, da KeyDown diese
nicht als Übergabeparameter hat. Abfragen auf Grid.Col und Grid.Row um dies festzustellen
funktionieren auch nicht. Hab ich probiert.

Und was ist mit StringGrid1.Selection? (notfalls auch mal mit TStringGrid(Sender).Selection, oder (Sender as TStringGrid).Selection versuchen - manchmal funktioniert der direkte Weg innerhalb einer Ereignissroutiene des Objekts nicht richtig)

schlock 7. Sep 2004 13:21

Re: letzte gedrückte taste im Stringgrid abfragen
 
Das war schon die halbe Miete. Mit Selection scheinen die Angaben zu stimmen.
Jetzt hab ich das Problem für mein eines Grid gelöst.
Das Problem beim anderen ist, dass die Zelle die verlassen wird als Editor
einen Datepicker hat, und da reagiert das OnKeyDown-Event nicht richtig darauf
wenn ich Tab oder Enter drücke, d.h. er springt in die nächste Zelle und
Selection bringt dann entsprechend die Koordinaten dieser Zelle.

Trotzdem schon mal vielen Dank für die Hilfe.


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