AGB  ·  Datenschutz  ·  Impressum  







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

fehler in Delphi 7 bzgl Listbox?!

Ein Thema von padavan · begonnen am 4. Mai 2005 · letzter Beitrag vom 17. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#1

fehler in Delphi 7 bzgl Listbox?!

  Alt 4. Mai 2005, 07:20
Hallo Delphianer,

kann es sein, dass es im Delphi einen echt krassen Bug gibt?
(wahrscheinlich gibt es sowas, hätte aber nie gedacht, dass ein Amateur wie ich auf sowas stößt)
Oder mache ich evtl. einen äußerst dummen Fehler?

Folgendes:
Habe eine Listbox in einem MP3-Player (ja sowas soll´s geben) in dem Titel stehen, welche dann abgearbeitet werden.
Wenn ich jetzt zum Beispiel einen Titel irgendwo in der Liste ganz nach oben setzen will tat ich das immer so:

Delphi-Quellcode:
begin
  listbox1.Items.Insert(0,listbox1.Items[listbox1.itemindex]);
end;
So hatte ich es geschafft, dass er den Titel in der Liste welchen man sich greift quasi dann an oberste Stelle setzt.
Wenn man jetzt aber mehrere Titel auswählte, so spielte er ja den als nächstes welchen man zuletzt gewählt hat. Das fand ich doof, also habe ich folgende Änderung vorgenommen:

Delphi-Quellcode:
var wishes: integer;
begin
  listbox1.Items.Insert(wishes,listbox1.Items[listbox1.itemindex]);
end;
Wishes zähl ich jetzt einfach mit jedem "wunsch des Hochsetztens" hoch.
Die Variable wishes macht nun scheinbar Ärger, denn manchmal (ich konnte noch nicht greifen, wann das passiert) gibt´s einen so krassen Fehler im Programm, dass es sich quasi total aufhängt. Es kommen irgendwelche eigenartige Meldungen "Zugriffsverletzung in Modul xy" usw.
Ich habe beobachtet, dass er irgendwelche seltsamen Zeichen dann an oberste Stelle setzt.

Also habe die Aktion mit Try Except gekapselt.
Wenn dann der Fehler mal auftritt, löst die Exception auch aus, allerdings bringt´s nichts, denn danach kackt das Programm genauso ab, wie ohne Exception.

Nebenbei habe ich die Variable wishes als Globale Variable extra auf 0 vorbefruchtet und auch im OnCreate Erreignis auch noch zu 0 beschrieben, da ich dem Vorbefruchten in der Deklaration nicht getraut habe.
Ich konnte mir den Fehler nur so erklären, dass wishes einen Wert kleiner 0 hatte und deshalb der Fehler kam, aber das kann ich so eigentlich ausschließen.

Bin für jeden Hinweis dankbar.
Grüße
Padavan
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: fehler in Delphi 7 bzgl Listbox?!

  Alt 4. Mai 2005, 07:46
Zitat von padavan:
Wenn ich jetzt zum Beispiel einen Titel irgendwo in der Liste ganz nach oben setzen will tat ich das immer so:

Delphi-Quellcode:
begin
  listbox1.Items.Insert(0,listbox1.Items[listbox1.itemindex]);
end;
Kennst du schon die Methode Move()?

with Listbox1 do Items.Move(ItemIndex, 0); Bei Insert() müsstest du eigentlich bemerken, dass das Item kopiert wurde - üble Sache, wenn du Objekte an deine Strings angedockt hast.

Grüße vom marabu
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: fehler in Delphi 7 bzgl Listbox?!

  Alt 4. Mai 2005, 08:05
Moin!

Auch solltest du den Unterschied den du schon beobachtet hast, beachten: Bei MultiSelect gibt der ItemIndex immer nur die Zeile mit dem Fokus an und nicht zwangsweise die ausgewählte Zeile. Auch fragst du nicht ab, ob ItemIndex vielleicht -1 ist, was er durchaus sein kann, wenn keine Zeile einen Fokus hat. Nutze bei einer ListBox mit MultiSelect lieber die Selected[] Eigenschaft...

MfG
Muetze1
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: fehler in Delphi 7 bzgl Listbox?!

  Alt 4. Mai 2005, 10:08
also auf jeden Fall werde ich jetzt Move verwenden, warum ich das anders (umständlich) gemacht hab, kann ich gar nicht mehr sagen. (Habe das kopierte zwar anschließend gelöscht, damit ich nichts doppelt habe, aber das war trotzdem quatsch)

Aber das Listbox1.Itemindex = -1 sein könnte dürfte mit meinem Problem nichts zu tun haben, denn ich habe ja eine integervariable verwendet die auf keinen Fall kleiner 0 sein kann, da ich die Zahl von 0 aufwärts nur hoch- oder runterzähle, aber eben nur bis 0.

Bleibt also die Frage, warum die Listbox sich so übel aufhängt.
Ist zwar umständlich progammiert, sollte aber genauso funktionieren.

(Werde dennoch auf Move umstellen, da´s einfach simpler ist).
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: fehler in Delphi 7 bzgl Listbox?!

  Alt 4. Mai 2005, 11:18
Moin!

Zitat von padavan:
Aber das Listbox1.Itemindex = -1 sein könnte dürfte mit meinem Problem nichts zu tun haben, denn ich habe ja eine integervariable verwendet die auf keinen Fall kleiner 0 sein kann, da ich die Zahl von 0 aufwärts nur hoch- oder runterzähle, aber eben nur bis 0.
1. Integer als Typ kann negativ werden.
2. Du greifst direkt mit dem ItemIndex auf die Items-Eigenschaft zu - und da kommt es zu einem Problem wenn ItemIndex -1 ist.
3. Hast du die Bereichsprüfung (Projekt->Optionen->Compilereinstellungen->Bereichsprüfung) aktiviert? Wenn nicht, dann tue dies mal...

MfG
Muetze1
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: fehler in Delphi 7 bzgl Listbox?!

  Alt 4. Mai 2005, 11:20
Hallo padavan,

das einzige, was mit deinem zweiten Code-Fragment schief laufen kann, ist tatsächlich ein falscher Wert in der Variablen wishes, aber das führt bestimmt nicht zu einem Programmabsturz. Du musst an einer anderen Stelle noch viel Schlimmeres machen, die Folgen davon werden halt erst später bemerkt. Isoliere das Problem oder zeige mehr Code.

Außerdem noch ein Tipp: deine Art eine Playlist zu sortieren ist originell, das interaktive Umstellen der Einträge könntest du aber konventioneller durch die beiden Befehle MoveUp() und MoveDown() bewerkstelligen. Die kannst du recht simpel mit der Methode Exchange() implementieren:

Delphi-Quellcode:
  with Listbox do
    Items.Exchange(ItemIndex, Succ(ItemIndex));

  with Listbox do
    Items.Exchange(ItemIndex, Pred(ItemIndex));
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#7

Re: fehler in Delphi 7 bzgl Listbox?!

  Alt 4. Mai 2005, 11:43
Integer -2147483648..2147483647
Cardinal 0..4294967295

Wenn du Cardinal nimmst merkst du wenigstens falls diese kleiner 0 ist (anhand der Fehlermeldung)
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: fehler in Delphi 7 bzgl Listbox?!

  Alt 9. Mai 2005, 13:57
Hallo Leute,

danke für die Rege Beteiligung.

Also ich hoffe das ich keinen Denkfehler mache, aber ich verstehe einfach immernoch nicht, was meine Integervariable mit dem Absturz zu tun haben soll. Das sie kleiner 0 sein kann ist mir klar, aber ich benutze ja zum einfügen nicht den Listenindex, sondern einen Integerwert welchen ich ja von 0 begonnen hochzähle. Er kann also Programmtechnisch nicht kleiner 0 werden, habe mir das auch extra in einem Editfeld zum testen angeschaut. (Fehlersuche online quasi)

Habe meinen Programmteil gemäß des Vorschlags von marabu auf move geändert, das hat aber nichts an dem Problem des Absturzes geändert.

Was mich nur wundert liste ich jetzt nochmal kurz auf:

Funktioniert: (ist nicht die gewünschte Funktion, stürzt aber nicht ab)
********************

listbox1.Items.Move(listbox1.ItemIndex,0); ehemals so gelöst:
Delphi-Quellcode:
listbox1.Items.Insert(0,listbox1.Items[listbox1.itemindex]);
listbox1.DeleteSelected;
Funktioniert nicht: (davon ausgegangen, dass wishes nicht kleiner 0 sein kann, wie gesagt, hab´s getestet und ist Programmtechnisch "unmöglich", da ich von 0 ab hochzähle und wieder runter - aber eben nur bis 0)
********************

listbox1.Items.Move(listbox1.ItemIndex,wishes); ehemals so gelöst:
Delphi-Quellcode:
listbox1.Items.Insert(wishes,listbox1.Items[listbox1.itemindex]);
listbox1.DeleteSelected;

auf welche Weise ich es auch angehe, verwende ich die Wishes - Integervariable kommt´s gelegentlich zu abstürzen.

kompletter Auschnitt des Programmteils zur Übersicht:
Delphi-Quellcode:
  if Listbox1.SelCount = 1 then begin
    try
      listbox1.Items.Move(listbox1.ItemIndex,wishes);
      Wishes := Wishes + 1;// inc(wishes);
      LEDDisplay_wishes.Value := wishes;
    except
      Showmessage('error'); // wird übrigens auch noch angezeigt wenn der Fehler kommt, aber danach schmiert´s trotzdem ab
    end;
  end;
end;
(Das ganze ist eine Prozedur aus einem PopMenuClick)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#9

Re: fehler in Delphi 7 bzgl Listbox?!

  Alt 9. Mai 2005, 17:33
Moin!

1. Da du MultiSelect der ListBox auf True hast, enthält ItemIndex immer das Element der ListBox mit dem Fokus-Rechteck. Dieses kann auch sehr gut mal nicht vorhanden sein, dann ist der ItemIndex -1. Diesen Fall hatte ich dir oben schon genannt und diesen Fall beachtest du immernoch nicht!

2. Wenn MultiSelect auf True ist, dann nutze die Eigenschaft Selected[] den selektierten Eintrag heraus zu finden und nicht ItemIndex. ItemIndex hat eine ganz andere Bedeutung!

MfG
Muetze1
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: fehler in Delphi 7 bzgl Listbox?!

  Alt 10. Mai 2005, 07:53
He Mütze1,

jetzt hab ich´s hingekriegt - vielen Dank!
Frage jetzt auch auf Itemindex >= 0 ab und jetzt gibt´s keinen Absturz mehr.

Aber auf selected abzufragen hab ich nicht hingekriegt. Ich hab´s zwar geschafft, dass er mir zurückgibt wenn ein bestimmeter Eintrag selektiert wurde als Bool, aber ich hab´s noch nicht geschafft das mir der Eintrag als Zahl zurückgebenen wird. Anhand der OH kann ich nicht erkennen wie die Syntax für diesen Fall sein soll.

Trotzdem ist mein ursprüngliches Problem erstmal gelöst - Dank an alle
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:42 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