Popupmenu: Rechtsklick soll auch Item selektieren

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Pascal95

Popupmenu: Rechtsklick soll auch Item selektieren

Beitrag von Pascal95 »

Hallo,

ich habe ein Popupmenü mit einer Listbox verknüpft.
Nun möchte ich, dass zuerst das Item selektiert wird, wo die Maus drauf ist und sich dann das Popupmenü öffnet (vgl. auch Windows Explorer).

Ich habe nämlich dann in einem Menüitem eine Funktion, die sich auf das gewählte Item in der Listbox bezieht und so wäre es schön wenn man mit der rechten Maustaste das Item auch anwählt.

Vielen Dank
Pascal

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

Re: Popupmenu: Rechtsklick soll auch Item selektieren

Beitrag von theo »

Probier mal im Popupmenu AutoPopup auszuschalten.

Dann im Listview das Ereignis OnMouseUp so zu behandeln:

Code: Alles auswählen

procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button=mbRight then PopupMenu1.PopUp;
end;

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Popupmenu: Rechtsklick soll auch Item selektieren

Beitrag von shokwave »

Hallo,

die Listbox hat ein Ereignis "OnContextPopup" in dem du die Position der Maus bekommst und mit der Funktion "TListBox.ItemAtPos()" bekommst du den dazugehörigen ItemIndex.

Hoffe das hilft dir weiter.
mfg Ingo

Pascal95

Re: Popupmenu: Rechtsklick soll auch Item selektieren

Beitrag von Pascal95 »

Hallo,

vielen Dank, ich habe es nun folgendermaßen gelöst:

Code: Alles auswählen

procedure TForm1.ListBox1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var
  x: Integer;
begin
  if ListBox1.Items.Count>0 then begin
    x:=ListBox1.ItemAtPos(MousePos, True);
    ListBox1.ItemIndex:=x;
    PopupMenu1.PopUp;
  end;
end;
Pascal

markkowalt
Beiträge: 32
Registriert: Sa 13. Aug 2011, 16:15

Re: Popupmenu: Rechtsklick soll auch Item selektieren

Beitrag von markkowalt »

Da möchte ich noch was tolles hinzufügen, wenn man MULTISELECT eingeschaltet hat:

Code: Alles auswählen

procedure TForm1.ListBox1ContextPopup(Sender: TObject; MousePos: TPoint;
  var Handled: Boolean);
var
  x: Integer;
begin
  if ListBox1.Items.Count>0 then begin
    x:=ListBox1.ItemAtPos(MousePos, True);
    if not ListBox1.Selected[x] then
      ListBox1.ItemIndex := x;
    if x > -1 then
      PopupMenu1.PopUp;
  end;
end;
Jetzt ist es genau wie im Microsoft-Explorer 8)

Antworten