Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid und Popup (https://www.delphipraxis.net/106113-stringgrid-und-popup.html)

SaFu 5. Jan 2008 18:09


StringGrid und Popup
 
Hi kann mir vielleicht einer sagen wie ich es schaffe eine zelle im StringGrid mit Rechter maustaste zu selektieren und das dann ein popup menü auf geht habe es mal so versucht

Delphi-Quellcode:
procedure TForm7.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button = mbRight then
 StringGridpopup.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
end;
danke sascha

DeddyH 5. Jan 2008 19:10

Re: StringGrid und Popup
 
Ich habe gerade kein Delphi zur Hand, aber hat das StringGrid keine Property PopupMenu?

SaFu 5. Jan 2008 19:13

Re: StringGrid und Popup
 
Doch aber ich mus zuerst mit der linken Maustaste die Zelle makieren
und dann kann ich erst an der stelle mein popup ausführen

DeddyH 5. Jan 2008 19:14

Re: StringGrid und Popup
 
Schon mal mit MouseToCell versucht?

SaFu 5. Jan 2008 19:15

Re: StringGrid und Popup
 
Ja hat aber auch nicht so ganz geklappt dann wird es irgenwohin geschoben

DeddyH 5. Jan 2008 19:17

Re: StringGrid und Popup
 
Moment, wenn Du das PopupMenu im OI zuweist, könntest Du doch OnPopup die entsprechende Zelle ermitteln und markieren, oder geht das nicht? Wie gesagt, ich kann das gerade nicht ausprobieren.

SaFu 5. Jan 2008 19:20

Re: StringGrid und Popup
 
meinst du so ungefähr

Delphi-Quellcode:
procedure TForm7.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var col, row: integer;
begin
StringGrid1.MouseToCell(x, y, col, row);
if Button = mbRight then
 StringGridpopup.Popup(col, row);

end;

DeddyH 5. Jan 2008 19:25

Re: StringGrid und Popup
 
Gerade mal unter Ubuntu mit Lazarus versucht:
Delphi-Quellcode:
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var aCol,aRow: integer;
    p: TPoint;
begin
  p := StringGrid1.ScreenToClient(Mouse.CursorPos);
  StringGrid1.MouseToCell(p.X,p.Y,aCol,aRow);
  StringGrid1.Col := aCol;
  StringGrid1.Row := aRow;
end;

SaFu 5. Jan 2008 19:28

Re: StringGrid und Popup
 
Genau das wars hatte nicht an die Eigenschaft vom Popup gedacht dank dir Trotzdem :thumb:

SaFu 5. Jan 2008 19:50

Re: StringGrid und Popup
 
vielleicht doch noch einen kleinen tipp

das verhindern des Popups bei Spalte null

Delphi-Quellcode:
procedure TForm7.StringGridPopupPopup(Sender: TObject);
var iCol,iRow: integer;
    Position: TPoint;
begin
if StringGrid1.Col = 0 then
  begin
    abort;
  end
  else
  begin
   Position := StringGrid1.ScreenToClient(Mouse.CursorPos);
   StringGrid1.MouseToCell(Position.X,Position.Y,iCol,iRow);
   StringGrid1.Col:= iCol;
   StringGrid1.Row:= iRow;
  end;
end;
geht net so ganz

taaktaak 5. Jan 2008 22:05

Re: StringGrid und Popup
 
Moin, Moin.

Vielleicht mal einen alternativer Lösungsansatz ...

Delphi-Quellcode:
procedure TfoTest9.StringGrid1MouseDown(Sender:TObject;Button:TMouseButton;Shift:TShiftState;X,Y:Integer);
var iCol,iRow,
    dx,dy     : Integer;
begin
  if Button=mbRight then
    with StringGrid1 do begin
      MouseToCell(X,Y,iCol,iRow);
      if iCol>=FixedCols then
        if iRow>=FixedRows then begin
          Col:=iCol;
          Row:=iRow;
          dx :=foTest9.Left+StringGrid1.Left-10; // -10 << adjusts Popup relative to cursor
          dy :=foTest9.Top +StringGrid1.Top +20; // +20 << adjusts Popup relative to cursor
          PopUpMenu1.Popup(X+dx,Y+dy);
          end;
      end;
end;
Achtung: Die Eigenschaft "AutoPopup" des PopUpMenüs muss FALSE sein! Durch die Addition/Subtraktion der beiden Zahlenwerte bei der Ermittlung von dx und dy kann die Position des Popup-Menüs noch optimiert werden. Durch die Verwendung von FixedCols/FixedRows wird das Öffnen des PopUp für alle nicht verschiebbaren (grau hinterlegten) Zellen verhindert.

Gruß Ralph

SaFu 6. Jan 2008 16:02

Re: StringGrid und Popup
 
Der lösungsansatz ist genauso gut wie der andere aber wie mach ich das jetzt das, das popup in der Spalte 0 nicht auf geht mein ansatz geht nicht fehlerfrei

DeddyH 6. Jan 2008 19:04

Re: StringGrid und Popup
 
Ich kann es gerade nicht ausprobieren, aber versuch es mal so:
Delphi-Quellcode:
procedure TForm7.StringGridPopupPopup(Sender: TObject);
var iCol,iRow: integer;
    Position: TPoint;
begin
  Position := StringGrid1.ScreenToClient(Mouse.CursorPos);
  StringGrid1.MouseToCell(Position.X,Position.Y,iCol,iRow);
  if iCol = 0 then
    abort
  else
    begin
     StringGrid1.Col:= iCol;
     StringGrid1.Row:= iRow;
    end;
end;

taaktaak 6. Jan 2008 19:07

Re: StringGrid und Popup
 
Moin, Moin Sascha.
Genau DAS wird doch mit meinem Code verhindert: das Öffnen des PopUps über Spalte 0 / Zeile 0 (sofern diese als FIXED deklariert sind) - hast du den Code-Schnipsel denn nicht ausprobiert??
Gruß Ralph

SaFu 6. Jan 2008 19:08

Re: StringGrid und Popup
 
doch hab ich aber es geht trotzdem auf

taaktaak 6. Jan 2008 19:10

Re: StringGrid und Popup
 
Na, ich glaub mich laust ein Affe!
Bei mir funktioniert das einwandfrei! Hast du denn FixedRows=0 ???

SaFu 6. Jan 2008 19:12

Re: StringGrid und Popup
 
uuuuuuuuups da war ne 1 drin sorry jetzt gehts auch

taaktaak 6. Jan 2008 19:16

Re: StringGrid und Popup
 
joooooo, ist schon ok :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz