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:
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;
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.
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:
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;
... das selbe Resultat.