Announcement

Collapse
No announcement yet.

Mouseover in einer Listbox

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mouseover in einer Listbox

    Hallo,

    ich habe in eine Listbox die Dateien eines Verzeichnisses eingetragen.
    Mit der Maus soll eine Datei angewählt werden können. Mit einen Klick soll die Datei geöffnet werden.

    Einen kleinen Fehler kann ich aber nicht ausmerzen:
    Wenn ich auf dem untersten Eintrag die Maustaste drücke und festhalte und den Mauszeiger dann nach unten aus der Listbox ziehe, dann kommt eine Fehlermeldung (list index out of ... -1).

    Ich kann den Fehler nicht nicht erkennen.

    <pre>
    //alle Dateien eines Verzeichnisses in eine Listbox laden
    procedure TForm1.FormActivate(Sender: TObject);
    var
    zpath:string;
    x,z:integer;

    begin
    zPath := 'e:\*.*';
    z:=ListBox1.Perform(LB_DIR, DDL_READWRITE, LongInt(@zPath[1])); //z muss die Anzahl der Dateien sein
    x:= ListBox1.Count ; //Anzahl der Listboxelemente , =z+1 ermitteln
    label2.Caption:= IntToStr(x); // nur zur Kontrolle
    ListBox1.Height:=ListBox1.ItemHeight *x; //Listboxhöhe setzen
    listbox1.Selected[0]:=true; // den 1. Eintrag selektieren
    end;
    //**************************************************
    //wenn mit der Maus über einen Eintrag gefahren wird, dann den Eintrag im Label zeigen
    Procedure Tform1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    var
    Point: TPoint;
    z:integer;

    begin
    Point.x:=x;
    Point.y:=y;
    z:=listbox1.ItemAtPos(point,true); // nur zur kontrolle
    label2.Caption:=inttostr(z); // nur zur kontrolle
    Label1.Caption:=ListBox1.Items[ListBox1.ItemAtPos(Point,True)]; //hier tritt der Fehler auf beim leeren Eintrag auf
    end;
    //***********************************************
    // wenn ein ListboxEintrag angeklickt wurde, dann mit dem reg. Prog öffnen.
    procedure TForm1.ListBox1Click(Sender: TObject);
    var
    dat:string;
    begin
    dat:='e:\'+label1.Caption;
    ShellExecute(0,'open',PChar(dat),Nil,Nil,SW_NORMAL );
    end;
    </pre>

  • #2
    Hallo Werner,<p>
    der Fehler den Du machst ist einfach zufinden. Er liegt in der Zeile in der der Fehler auftritt die Funktion Listbox1.ItemAtPos(...) gibt -1 zurück, weil ausserhalb der Listbox kein Eintrag gefunden wird. Ein Element mit der Ordnungszahl Listbox1.Items[-1] gibt es nunmal nicht. Du musst Deine Abfrage in einem if formulieren

    <pre>
    if Listbox1.ItemAtPos( Point, True ) > -1 then
    begin
    Label1.Caption := Listbox1.Items[ Listbox1.ItemAtPos( Point, True ) ];
    end;
    </pre>
    Gruss
    Frank Lin

    Comment


    • #3
      Danke Frank,

      jetzt funktioniert es.

      Gruß
      Werne

      Comment

      Working...
      X