![]() |
Listbox + Popupmenu
Ich hab eine Listbox und ein Popupmenu die mit ihr verknüpft ist. Dieses soll aber deaktiv sein falls die Listbox keinen Eintrag hat, sprich leer ist, sonst kommt ja die Fehlermeldung: List index out of bounds (-1).
Das Popupmenu hat folgende Optionen: Markierten Eintrag aus Listbox löschen Alles aus der Listbox löschen Eintrag verschieben. Ich hab dann OnMouseMove folgendes eingesetzt:
Delphi-Quellcode:
Leider funktioniert dies nur zum Teil. Wenn die Listbox nicht ganz voll ist kommt es zu Fehlern. Manchmal ist das Popupmenu deaktivert obwohl ich einen Eintrag markiert hatte. Und anderesherum ist es mal aktiviert wenn ich mal keinen Eintrag markiert hatte.
if listbox1.Itemindex = listbox1.Count - 1 then
begin lschen1.enabled:=false; alleslschen1.Enabled:=false; verschieben1.Enabled:=false; end; if listbox1.Itemindex < listbox1.Count - 1 then begin lschen1.enabled:=true; alleslschen1.Enabled:=true; verschieben1.Enabled:=true; end; Ich hab dann im Forum nach if Itemselected := true gesucht, aber noch nichts passendes gefunden. Vielleicht hat einer von Euch eine Idee. Ich hab dann folgendes noch ausprobiert:
Delphi-Quellcode:
... das selbe Resultat.
procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var point : TPoint; lbpos : TPoint; begin if Listbox1.Itemindex > -1 then begin lschen1.enabled:=true; alleslschen1.Enabled:=true; verschieben1.Enabled:=true; end //if Listbox1.Itemindex <= -1 then //begin else begin lschen1.enabled:=false; alleslschen1.Enabled:=false; verschieben1.Enabled:=false; end; if Button In [mbRight] then begin point.X := x; point.Y := y; ListBox1.ItemIndex := ListBox1.ItemAtPos(point,true); lbpos.X := Listbox1.Left + self.Left + x; lbpos.y := Listbox1.top + self.top + y; PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y); end; end; |
Re: Listbox + Popupmenu
Ich weiß jetzt nicht, was deine ganzen Variablen bedeuten, aber ich würde das so machen:
Delphi-Quellcode:
Oder hab ich da was falsch verstanden? :gruebel:
procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var begin if Listbox1.Itemindex <> -1 then PopUpMenu1.Enabled:=false end; Denn wenn der ItemIndex<>-1 ist, dann ist ja ein Item ausgewählt, von daher ist das sozusagen das gleiche wie das gesuchte itemselected |
Re: Listbox + Popupmenu
Hat sich erledigt. Ich hab die Option
Delphi-Quellcode:
entfernt. Da der Code
procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var point : TPoint; lbpos : TPoint; begin {if Listbox1.Itemindex > -1 then begin lschen1.enabled:=true; alleslschen1.Enabled:=true; verschieben1.Enabled:=true; end //if Listbox1.Itemindex <= -1 then //begin else begin lschen1.enabled:=false; alleslschen1.Enabled:=false; verschieben1.Enabled:=false; end; if Button In [mbRight] then begin point.X := x; point.Y := y; ListBox1.ItemIndex := ListBox1.ItemAtPos(point,true); lbpos.X := Listbox1.Left + self.Left + x; lbpos.y := Listbox1.top + self.top + y; PopupMenu1.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y); end;} end;
Delphi-Quellcode:
bei mousemove drinsteht und ich das Popupmenu nun mit der Listbox verknüpft habe [hatte ich zuvor nicht] funktioniert es nun wie es soll.
if Listbox1.Itemindex > -1 then
begin lschen1.enabled:=true; alleslschen1.Enabled:=true; verschieben1.Enabled:=true; end; if Listbox1.Itemindex <= -1 then begin lschen1.enabled:=false; alleslschen1.Enabled:=false; verschieben1.Enabled:=false; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz