AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi KillDuplicates gibt Fehler mit CoolTrayIcon?
Thema durchsuchen
Ansicht
Themen-Optionen

KillDuplicates gibt Fehler mit CoolTrayIcon?

Ein Thema von lucius · begonnen am 29. Nov 2005 · letzter Beitrag vom 1. Dez 2005
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#1

KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 29. Nov 2005, 23:41
Hallo Leute etwas seltsames ist mir passiert und ich weiss nicht weiter.
Ich benutze ein CoolTrayIcon fuer mein Programm.
Jetzt wollte ich ueber der Function KillDuplicates doppelte Eintraege aus einer TStringListe entfernen aber dabei gibt das CoolTrayIcon einen Fehler aus.
Delphi-Quellcode:
procedure TDemoForm.SpeedButton1Click(Sender: TObject);
Var Sl:Tstringlist;
    i,Anzahl:integer;
    Listitem:Tlistitem;
begin
  Screen.Cursor := crHourGlass;
  Listview.Items.BeginUpdate;
  Listview.clear;
  sl:=TStringList.Create;
  try
    sl.LoadFromFile(label2.caption + '\torrents.db');
    //anzahl lesen
    anzahl:=strtoint(sl[0]);
    KillDuplicates(sl); <----------------------
    for i:=0 to anzahl do
      begin
        listitem:=listview.Items.add;
        //caption des items lesen
        listitem.Caption := sl[i*2+1];
        //alle subitems des items mit einmal lesen
        listitem.SubItems.CommaText := sl[i*2+2];
      end;
  finally
   Groupbox2.Caption := 'Aantal torrents: ' + IntTostr(Listview.Items.count);
    sl.free;
    Listview.Items.EndUpdate;
  end;
Screen.Cursor := crDefault;
end;
Der Fehler:
Zitat:
EStringListError List index out of Bounds(813);
Dan fragt er um die.pas file vom Cooltrayicon.
Kan mir bitte einer helfen?
Danke im voraus.
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#2

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 00:08
Hallo,

bevor ich dir auf eine egtl. Frage antworten kann, muss ich selbst ein paar Dinge wissen:

was liest du mit "anzahl:=strtoint(sl[0]);" aus? bzw. bist du sicher, dass die auswertung stimmt.

du gehst mit "for i:=0 to anzahl do " eine Schleife durch. Bist du sicher, dass da kein - 1 hin kommt?

Das verstehe ich nicht:

Zitat:
Dan fragt er um die.pas file vom Cooltrayicon.
meinst du, er markiert die CoolTrayIcon.pas?

an welcher code-stelle tritt der Out-Of-Bounds Fehler auf?
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 00:21
Hi dahead,
Zitat:
was liest du mit "anzahl:=strtoint(sl[0]);" aus?
Damit lese ich die Anzahl der Zeilen in de TStringListe(sl) aus., und die Auswertung stimmt(810).
Bei der schleife kommt keine -1 for.
Zitat:
an welcher code-stelle tritt der Out-Of-Bounds Fehler auf?
An der Stelle mit dem Pfeil.
Aber der Sinn der Sache ist eigentlich um doppelte Eintraege ob nun in der TStringListe oder direct aus der Listview zu entfernen.
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#4

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 00:48
ahja, dann nehme ich mal an, dass killduplicates die menge der einträge kürzt. du aber mit der variable anzahl noch auf die alte menge zugreifst.

du musst also entweder die variable neu zuweisen (anzahl := SL.Count-1) oder aber in der for schleife for I := 0 to SL.Count - 1 verwenden.
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 00:56
Hmmm dahead funzt nicht richtig, bekomme immer noch out of bounds.
Gibt es denn ne Function womit man doppelte Eintraege aus der Listview loeschen kann?
Meine Listview hat 4 Spalten und das ich dann zum Beispiel nach der 3en Spalte gucke ob da doppelte Eintraege vorhanden sind.
  Mit Zitat antworten Zitat
Benutzerbild von dahead
dahead

Registriert seit: 16. Mai 2005
620 Beiträge
 
#6

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 01:05
also ich kenne keine direkte funktion. du könntest dir eine selber basteln (z.b. zwei for-schleifen, die den text der stringliste vergleichen und bei gleichheit löschen. das könntest du mit "for I := SL.Count - 1 downto 0 do for F := SL.Count - 1 downto 0 do ..." lösen).

aber ich denke, dass deine killdupes funktion/routine das schon macht, oder? wie sieht die denn aus, bzw. was passiert, wenn du diese ausklammerst, geht dann alles reibungslos?
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 09:41
Morgen dahead, so sieht die Killduplicates aus.
Delphi-Quellcode:
procedure KillDuplicates(s: TStrings);
var
  iLow, iHigh: integer;
begin
  for iLow := 0 to s.Count - 2 do
    for iHigh := Pred(s.Count) downto Succ(iLow) do
      if s[iLow] = s[iHigh] then
        s.Delete(iHigh);
Gruss Lucius.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 09:45
da liegt der Fehler:
du löschst in KillDuplicates ein Element aus der Liste.
beim Durchgehen der Liste beachtest du dies aber nicht und läufst bis zur Original-Länge der Liste.

=> Du muss also nach dem Duplikat-Löschen noch mal die Länfe ermitteln (anzahl := ...)
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#9

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 09:47
das müsste funktionieren:

Delphi-Quellcode:
procedure KillDuplicates(s: TStrings);
var
  iLow, iHigh: integer;
begin
  for iLow := s.Count-1 downto 0 do
    for iHigh := s.Count-1 downto 0 do
      if s[iLow] = s[iHigh] then
      begin
        s.Delete(iLow);
        break;
      end;
  Mit Zitat antworten Zitat
lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: KillDuplicates gibt Fehler mit CoolTrayIcon?

  Alt 30. Nov 2005, 10:16
Leider mumu, funzt auch nicht richtig.
List index out of Bounds(1).
Dann wieder die Message zum oeffnen van der CoolTrayIcon.pas was ich getan habe da gibt er an:
Delphi-Quellcode:
// Pass the message on
Msg.Result := CallWindowProc(OldWndProc, (Owner as TWinControl).Handle, <------- Zeile wird markiert
              Msg.Msg, Msg.wParam, Msg.lParam);
Ich raff es auch nicht mehr.
Irgendwas stoert CoolTrayIcon an den KillDublicates.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 09:33 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