Stringgrid Popup-Menü -> Verweis auf aktuelle Zelle/Zeile

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Joh
Lazarusforum e. V.
Beiträge: 351
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Stringgrid Popup-Menü -> Verweis auf aktuelle Zelle/Zeile

Beitrag von Joh »

Moin,

ich möchte in einem Stringgrid mit einer Liste von Dateien eine Datei per PopUp-Menu automagisch öffnen.
Theoretisch klappt es so weit, praktisch scheitert es daran, das beim Rechtsklick die darunterliegende Zelle nicht den Focus erhält.

Im DBGrid gibt es das Element "dgAnyButtonCanSelect"; gibt es da im Stringgrid analoges?

aktuell habe ich es über eine globale Variable gelöst. aber das macht mich irgendwie nicht glücklich:

Code: Alles auswählen

procedure TfrmLpiStart.grdDateienMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var aCol, aRow: Integer;
begin
  grdDateien.MouseToCell(x, Y, aCol, aRow);
  aktZeile := aRow;
end;  
just my two Beer

Benutzeravatar
theo
Beiträge: 11257
Registriert: Mo 11. Sep 2006, 19:01

Re: Stringgrid Popup-Menü -> Verweis auf aktuelle Zelle/Zeile

Beitrag von theo »

Joh hat geschrieben: Mi 8. Apr 2026, 09:33 aktuell habe ich es über eine globale Variable gelöst. aber das macht mich irgendwie nicht glücklich:
Warum nicht?

Benutzeravatar
h-elsner
Lazarusforum e. V.
Beiträge: 311
Registriert: Di 24. Jul 2012, 15:42
OS, Lazarus, FPC: LINUX Mint21.1, Win10, Lazarus 4.3, FPC3.2.3
CPU-Target: X86-64; arm 32bit
Wohnort: Illertissen
Kontaktdaten:

Re: Stringgrid Popup-Menü -> Verweis auf aktuelle Zelle/Zeile

Beitrag von h-elsner »

Dafür gibt es doch die Procedur MouseToCell(x, y, iCol, iRow); Damit kann man beim MouseUp Event (alle Mouse Events, die x,y Position melden) die daunterliegende Zelle im StringGrid ermitteln.

Sieben
Beiträge: 299
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: Stringgrid Popup-Menü -> Verweis auf aktuelle Zelle/Zeile

Beitrag von Sieben »

Warum selektierst du die Zeile nicht gleich in deinem MouseDown? Der Event scheint ja vor dem PopUp zu kommen, sonst würde dir aktZeile ja auch nichts nützen. Dann hättest du beim PopUp genau die gewünschte Situation und kannst dir aktZeile sparen. Oder übersehe ich was?

Benutzeravatar
theo
Beiträge: 11257
Registriert: Mo 11. Sep 2006, 19:01

Re: Stringgrid Popup-Menü -> Verweis auf aktuelle Zelle/Zeile

Beitrag von theo »

Mir ist immer noch nicht ganz klar, wie das ablaufen soll, oder wo der Haken liegt.
Ich würde das PopupMenu nicht im Grid registrieren, sondern manuell auslösen.
Die Row kann man mit dem Row Property des StringGrid übergeben.
z.B. etwas in dieser Art:

Code: Alles auswählen

procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var aCol, aRow: Integer;
begin
  if ssRight in Shift then
  begin
    TStringGrid(Sender).MouseToCell(X, Y, aCol, aRow);
    TStringGrid(Sender).Row:=ARow;
    PopupMenu1.PopUp;
  end;
end;

procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
  TPopupMenu(Sender).Items[0].Caption:=StringGrid1.Row.ToString; //Test
end;

Joh
Lazarusforum e. V.
Beiträge: 351
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: Stringgrid Popup-Menü -> Verweis auf aktuelle Zelle/Zeile

Beitrag von Joh »

Alles ok...

Ich bin nur immer noch so gepolt, das globale Variablen nicht gut sind und ich von daher versuche drauf zu verzichten.
Die Art der Zuweisung liegt daran, das ich in einer anderen Prozedur ähnlichen mache und es für mich so auf den ersten Blick ersichtlich ist.
just my two Beer

Antworten