[gelöst] Popupmenü

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
DAP
Beiträge: 55
Registriert: Sa 15. Jan 2011, 00:14
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

[gelöst] Popupmenü

Beitrag von DAP »

Hallo,

ich komme einfach nicht weiter, vielleicht kann mir einer von Euch helfen.

Ich habe zwei Stringgrids und ein Popupmenü, jetzt möchte ich gerne
abfragen, wer der Sender (Auslöser) des Menüaufrufes ist.

Das onclick Ereignis ( procedure TForm1.GridPMenu_CopyClick(Sender: TObject);)
vom Popupmenü hat jedoch als Sender das Menü selber. Auch das Parent
vom Popupmenü wäre ja eigentlich nur die Form.

Gibt es eine Möglichekeit mit einem Popupmenü auf zwei Komponenten,
hier Stringdrids, unterschiedliche zu reagieren?
Zuletzt geändert von DAP am Fr 25. Jan 2013, 13:53, insgesamt 1-mal geändert.

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

Re: Popupmenü

Beitrag von theo »

Naja, das sauberste wäre wohl, zwei Popupmenus zu verwenden.
Der Spruch "ich komme einfach nicht weiter" ist für grössere Probleme reserviert. ;-)

Alternativ kann man auch bei jedem StringGrid im OnMouseDown Ereignis den aktuellen StringGrid in einer Variable speichern.
Das Popupmenu kommt ja gleich danach.

Zur Illustration:

Code: Alles auswählen

procedure TForm1.PopupMenu1Popup(Sender: TObject);
begin
   PopupMenu1.Items[0].Caption:=Caption;
end;
 
procedure TForm1.StringGridMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssRight in Shift then Caption:=TControl(Sender).Name;
end; 

DAP
Beiträge: 55
Registriert: Sa 15. Jan 2011, 00:14
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Popupmenü

Beitrag von DAP »

theo hat geschrieben:Naja, das sauberste wäre wohl, zwei Popupmenus zu verwenden.
Der Spruch "ich komme einfach nicht weiter" ist für grössere Probleme reserviert. ;-)
Ok, sehe ich ein, ich kam aber wirklich nicht weiter.

Mehrere PopupMenüs kommen in diesem Fall nicht in Frage, da ich ca. 10 Tabellen habe.

Beim Versuch dein Beispiel umzusetzen bricht er beim zweiten Aufruf von doCopyToClipBoard
ab. Beim direkten Ansprechen der StringGrid1 - Komponente funktioniert der Aufruf!
(Den zweiten Aufruf von doCopytoClipBoard habe ich nur zu Testzwecken eingeführt)

Code: Alles auswählen

  //TForm = ...
 
  public
    { public declarations }
    LastGridMouseDown : TObject;
  end;  
 
procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if ssRight in Shift then LastGridMouseDown := Sender;
end;  
 
procedure TForm1.GridPMenu_CopyClick(Sender: TObject);
begin
  StringGrid1.doCopyToClipBoard;
 
  with TStringGrid(LastGridMousedown) do
  begin
    doCopyToClipBoard;  //Abruch Fehler: SIGSEGV 
  end;
 
end; 
 
[/quote]

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

Re: Popupmenü

Beitrag von theo »

DAP hat geschrieben: Mehrere PopupMenüs kommen in diesem Fall nicht in Frage, da ich ca. 10 Tabellen habe.
Die könnte man auch dynamisch erzeugen.
DAP hat geschrieben: Beim Versuch dein Beispiel umzusetzen bricht er beim zweiten Aufruf von doCopyToClipBoard
ab. Beim direkten Ansprechen der StringGrid1 - Komponente funktioniert der Aufruf!
(Den zweiten Aufruf von doCopytoClipBoard habe ich nur zu Testzwecken eingeführt)
Warum bzw. wie verwendest du die protected Methode doCopytoClipBoard, und nicht einfach die public Methode CopytoClipBoard ?

DAP
Beiträge: 55
Registriert: Sa 15. Jan 2011, 00:14
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Popupmenü

Beitrag von DAP »

theo hat geschrieben: Warum bzw. wie verwendest du die protected Methode doCopytoClipBoard, und nicht einfach die public Methode CopytoClipBoard ?
hatte ich auf die Schnelle als Beispiel verwendet, aber mit CopytoClipBoard kommt der gleiche Fehler.

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

Re: Popupmenü

Beitrag von theo »

Keine Ahnung, dann ist LastGridMouseDown halt aus irgend einem Grund zu diesem Zeitpunkt wieder ungültig.
Das musst du debuggen, was da abgeht. Das weiss ich doch auch nicht.

DAP
Beiträge: 55
Registriert: Sa 15. Jan 2011, 00:14
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

[gelöst] Re: Popupmenü

Beitrag von DAP »

Deine Antwort lies mich vermuten, dass ich im Code nicht ganz so viel falsch
haben kann, deshalb habe ich das gleiche in einem neuen Projekt probiert
und siehe da, es klappt wunderbar.

Der Ausnahmefehler muss also an etwas anderm liegen.

Danke Theo

Antworten