AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBGrid Right Click

Ein Thema von -187- · begonnen am 8. Okt 2010 · letzter Beitrag vom 9. Okt 2010
Antwort Antwort
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#1

AW: DBGrid Right Click

  Alt 8. Okt 2010, 14:01
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;
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: DBGrid Right Click

  Alt 8. Okt 2010, 14:51
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?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#3

AW: DBGrid Right Click

  Alt 8. Okt 2010, 15:05
Danke, habs mir jetzt im OnMouseUp irgendwie zusammen gebastelt.

Code:
  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;
Wobei NUMBER Unique ist
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#4

AW: DBGrid Right Click

  Alt 8. Okt 2010, 15:18
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 ?
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#5

AW: DBGrid Right Click

  Alt 9. Okt 2010, 12:59
Push
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#6

AW: DBGrid Right Click

  Alt 9. Okt 2010, 13:17
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;
Micha
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#7

AW: DBGrid Right Click

  Alt 9. Okt 2010, 13:40
Hm weiss nicht so recht wie ich das anwenden soll. Ich merke mir den aktuellen Datensatz:
Code:
Cell:=DBGrid1.SelectedField.AsString;
Und nach danach spring ich da mit Locate wieder hin. Aber aus deinem Code kann man ja sehen das du dir die Scrollbar Position merkst, und diese dann wieder anfährst. Die Idee ist perfekt, jedoch hat das bei mir noch nicht geklappt:

Code:
var
  Cell: String;
  TempScrollInfo: SCROLLINFO;
begin
  if Button = mbRight then
  begin
    TempScrollInfo.cbSize := SizeOf(SCROLLINFO);
    TempScrollInfo.fMask := SIF_POS;
    GetScrollInfo(DBGrid1.Handle, SB_HORZ, TempScrollInfo);
    Cell:=DBGrid1.SelectedField.AsString;
    GridDeSelectAll(DBGrid1);
    DBGrid1.DataSource.DataSet.Locate('NUMBER',Cell,[loPartialKey,loCaseInsensitive]);
    DBGrid1.SelectedRows.CurrentRowSelected:=True;
    SetScrollInfo(DBGrid1.Handle, SB_HORZ, TempScrollInfo, True);
    PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#8

AW: DBGrid Right Click

  Alt 8. Okt 2010, 15:00
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;
Micha
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 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