AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listbox + Popupmenu

Ein Thema von DRPEnc · begonnen am 23. Okt 2004 · letzter Beitrag vom 23. Okt 2004
Antwort Antwort
DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#1

Listbox + Popupmenu

  Alt 23. Okt 2004, 21:21
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.
CU

DRPEnc
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Listbox + Popupmenu

  Alt 23. Okt 2004, 21:34
Ich weiß jetzt nicht, was deine ganzen Variablen bedeuten, aber ich würde das so machen:
Delphi-Quellcode:
procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
begin
if Listbox1.Itemindex <> -1 then
     PopUpMenu1.Enabled:=false
end;
Oder hab ich da was falsch verstanden?

Denn wenn der ItemIndex<>-1 ist, dann ist ja ein Item ausgewählt, von daher ist das sozusagen das gleiche wie das gesuchte itemselected
Julian J. Pracht
  Mit Zitat antworten Zitat
DRPEnc

Registriert seit: 20. Feb 2004
Ort: Noch unterm Mond
126 Beiträge
 
#3

Re: Listbox + Popupmenu

  Alt 23. Okt 2004, 21:35
Hat sich erledigt. Ich hab die Option

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;
entfernt. Da der Code

Delphi-Quellcode:
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;
bei mousemove drinsteht und ich das Popupmenu nun mit der Listbox verknüpft habe [hatte ich zuvor nicht] funktioniert es nun wie es soll.
CU

DRPEnc
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz