Schade, dass niemand Rat weiß;
irgendwie muss es aber gehen(!) - und zwar mit Auswertung der X- und Y-Koordinaten, denn damit kann man auch zusätzliche Klappmenüs in Anhängigkeit der Position des aktivierten DBGrid-Feldes öffnen. Einige Dinge habe ich dazu im Internet gefunden, hab's aber nicht verstanden.
Also musste ich mir selber helfen. Vielleicht ineressiert es jemanden, wie:
Leider wertet nur der normale "Linksclick" und "OnCellClick" die Position des aktivierten Feldes in einer DBGrid (Zeos) aus. Mit "OnCellClick" kann man aber (jedenfalls ich nicht) nicht auswerten, ob mit der rechten oder linken Maustaste geklickt wird
Zunächst schaute ich, in welcher "Reihenfolge" die Event-Ereignisse auftreten:
beim Linksklick:
Down (Zelle wird noch nicht gewechselt)
Up (neue zelle wird nicht angewählt Aber Da gibt es Shift State!)
Cellclick (neue Reihe ist angewählt NACH dem MouseUp
beim Rechtsklick
Down (Zelle wird noch nicht gewechselt)
Up (Zelle wird gewechselt Da gibt es aber Shift State!)
---- es gibt keinen: Cellclick
Ich wertete also im in OnMouseDown-Ereignis aus, welche Maustaste gedrückt wurde und gab das Ergenis in eine Variable
Code: Alles auswählen
If (ssCtrl in Shift) then
begin
Maus_ssCtrlAlt_erfolgt := 1;
end;
If (ssAlt in Shift) then
begin
Maus_ssCtrlAlt_erfolgt := 2;
end;
Diese Variable kann man dann im Ereignis "OnCellClick" auswerten - der Cursor steht ja jetzt an der richtigen Position
Code: Alles auswählen
if Maus_ssCtrlAlt_erfolgt = 1 then // also: Strg-Taste ist gedrückt
begin
////////
end;
if Maus_ssCtrlAlt_erfolgt = 2 then // also: Alt-Taste ist gedrückt
begin
///////
end;
Maus_ssCtrlAlt_erfolgt := 0;
Damit "umgehe" ich das Problem, indem ich statt Rechts- oder LinksKlick die linke Maustaste mit "Strg" oder "Alt" kombiniert drücke.
TROTZDEM!! Ich würde gerne dazulernen:
Kann mir noch jemand Hinweise geben, wie ich die X- und Y-Koordinaten des DBGrid-Feldes auswerten kann?
Nochmal mein eigentliches Problem:
Es ist für den Anwender recht fehleranfällig, wenn er in einer Liste mit der rechten Maustaste auf einen Eintrag klickt (TDB.Grid) und dann aber immer das Mausereignis bezogen auf den ersten Eintrag der Liste als Ergebnis bekommt. Der Anwender muss immer zuerst mit der linken Maustaste die Zeile anwählen, dann erst kann er mit dem Klick auf die rechte Maus das Ergebnis für diese zuerst selektierte Tabellenzeile erhalten.
Aliobaba