![]() |
DBGrid Right Click
Hey, ich suche eine Möglichkeit einen Left Mouseclick auf den aktuellen Mouse Koordinaten zu simulieren wenn ich einen Rechtsclick an mein DBGrid sende.
Code:
Der Grund dafür ist das ich die die Row auch mit einem Rechtsclick anwählen möchte.
procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if Button = mbRight then begin LEFTCLICK ON MOUSE COORDINATES end; end; |
AW: DBGrid Right Click
Hallo,
Wenn ich einen Rechtsklick auf ein DBGrid mache, wird die Zeile direkt ausgewählt. (DBGrid.Options.dgRowSelect = True) Getestet beim "Fish Facts"-Demo |
AW: DBGrid Right Click
Hm ne die Row wird nicht selektiert sondern nur fokusiert würde ich sagen.
|
AW: DBGrid Right Click
Hm habe es mir nochmal angeguckt. Also es ist so das der Code zwischen dem 2ten begin und end nur funktioniert wenn ich im Grid auf eine Leere Stelle klicke. Wenn ich aber auf eine Row klicke dann klappts nicht.
Genauso verhält es sich mit dem PopupMenu wenn man es im OI dem Grid nicht zugewiesen hat. Die Lösung dafür wäre einfach -> Einfach die Zuweisungsetzen. Aber wie kann ich jetzt meine Function dem Grid zuweisen ?
Code:
procedure TForm1.DBGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); begin if Button = mbRight then begin MyFunction; end; end; |
AW: DBGrid Right Click
TCustomDBGrid.MouseDown schluck hier scheinbar
bei if FDatalink.Active then OnMouseUp nützt Dir nichts?? sonst vielleicht ein leeres Popupmenu und das Ereignis Popup missbrauchen? |
AW: DBGrid Right Click
Hallo -187-
Du könntest dir ein eigene DBGrid-Komponente von TCustomDBGrid ableiten und die procedure MouseDown überschreiben. Die müsste dann ungefähr so aussehen (ungetestet!):
Delphi-Quellcode:
procedure TMyDBGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin if (Button = mbRight) then Button := mbLeft; inherited MouseDown(Button, Shift, X, Y); end; |
AW: DBGrid Right Click
Danke, habs mir jetzt im OnMouseUp irgendwie zusammen gebastelt.
Code:
Wobei NUMBER Unique ist :)
if Button = mbRight then
begin Cell:=DBGrid1.SelectedField.AsString; GridDeSelectAll(DBGrid1); DBGrid1.DataSource.DataSet.Locate('NUMBER',Cell,[loPartialKey,loCaseInsensitive]); DBGrid1.SelectedRows.CurrentRowSelected:=True; PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y); end; |
AW: DBGrid Right Click
Hm jetzt hab ich aber das Problem das wenn mein DBGrid 20 Datensätze zeigt, meine DB mehr als 20 Datensätze hat sagen wir mal 200, dann springt der angewählte Eintrag immer nach ganz unten im DBGrid. Ok ich könnte mit MoveBy wieder nach oben moven aber ich weiss ja garnicht um wieviel. Schließlich möchte ich die Row wieder an der Stelle haben wo sie angewählt wurde.
Wieso macht das DBGrid überhaupt so einen Unfug ? |
AW: DBGrid Right Click
Push
|
AW: DBGrid Right Click
Du musst dir die aktuelle Zeile merken und hinterher wieder setzen.
Ich habe sowas mal gebaut gehabt um bei einem Refresh über einen Timer die Ansicht beizubehalten:
Delphi-Quellcode:
procedure TMyForm.RefreshTimerTimer(Sender: TObject);
var rowDelta: integer; row: integer; recNo: integer; TempScrollInfo: SCROLLINFO; begin // Position des aktuellen Datensatzes (vertical) rowDelta := -1 + MyDBGrid.Row; row := MyDBGrid.DataSource.DataSet.RecNo; // Position der horizontalen Scrollbar TempScrollInfo.cbSize := SizeOf(SCROLLINFO); TempScrollInfo.fMask := SIF_POS; GetScrollInfo(MyDBGrid.Handle, SB_HORZ, TempScrollInfo ); MyDBGrid.DataSource.DataSet.DisableControls; try MyZQuery.Refresh; // Die Ansicht wiederherstellen (vertical) with MyDBGrid.DataSource.DataSet do begin RecNo := row; MoveBy(-rowDelta) ; MoveBy(rowDelta) ; end; finally MyDBGrid.DataSource.DataSet.EnableControls; //Die horizontale Scrollposition wiederherstellen SetScrollInfo(MyDBGrid.Handle, SB_HORZ, TempScrollInfo, true); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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