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
Popupmenu: Rechtsklick soll auch Item selektieren
Re: Popupmenu: Rechtsklick soll auch Item selektieren
Probier mal im Popupmenu AutoPopup auszuschalten.
Dann im Listview das Ereignis OnMouseUp so zu behandeln:
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;
-
- 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
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.
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
Re: Popupmenu: Rechtsklick soll auch Item selektieren
Hallo,
vielen Dank, ich habe es nun folgendermaßen gelöst:
Pascal
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;
-
- Beiträge: 32
- Registriert: Sa 13. Aug 2011, 16:15
Re: Popupmenu: Rechtsklick soll auch Item selektieren
Da möchte ich noch was tolles hinzufügen, wenn man MULTISELECT eingeschaltet hat:
Jetzt ist es genau wie im Microsoft-Explorer 
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;
