AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Phänomen (zumindest für mich) mit Showmessage
Thema durchsuchen
Ansicht
Themen-Optionen

Phänomen (zumindest für mich) mit Showmessage

Ein Thema von padavan · begonnen am 25. Aug 2005 · letzter Beitrag vom 25. Aug 2005
Antwort Antwort
padavan

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

Phänomen (zumindest für mich) mit Showmessage

  Alt 25. Aug 2005, 20:38
Guten Abend Delphianer,

ich dreh echt fast durch, keine Ahnung was der große Manitu des Programmierens von mir will.
Unten folgende Routine soll doppelte Einträge aus einer Playlist schmeißen.
Tut sie auch, ABER:
Wenn kein doppelter Eintrag vorhanden ist, schmeißt sie trotzdem immer einen Eintrag raus.
Da dachte ich mir, ich Debugge die Sache mal mit Showmessage(..) und lass mir dabei gleich anzeigen was die Routine da so treibt.
Geholfen hat´s mir nichts, außer der Erkenntniss, dass wenn ich eine der beiden auskommentierten Zeilen "Scharf schalte" die Routine genau das macht was sie soll.
Kommentiere ich die die Zeilen wieder aus, habe ich den gleichen Bug wie vorher.
Die Showmessage(..)- Dinger verändern doch nichts, wie kann es sein, das sie Einfluss auf die Sache haben?
Hat die Anwendung während eine Message kommt, etwa Zeit die Variable "kill" ordentlich zu schreiben, oder so?
Ich verstehe das alles nicht.

Jemand ´ne Ahnung???

Delphi-Quellcode:
(* Doppelte Einträge raus! -->  Playlist säubern *)
procedure TForm1.AbColBitBtn_PlaylistcleanClick(Sender: TObject);
var i,j: integer;
    kill: bool;
    killed: integer;
begin
  if Listbox1.Count = 0 then showmessage('No title there...')
  else begin
    if Application.messagebox('Are you sure to delete several titles?','Dreamplayerquestion',52) = 6 then begin
      try
        ProgressBar_Fortschritt.Visible := true;
        ProgressBar_Fortschritt.Position := 0;
        ProgressBar_Fortschritt.Max := Listbox1.Count;
        screen.cursor := crAppstart;
        killed := 0;
        j := Listbox1.Count - 1;
        repeat
          if (getasynckeystate(vk_escape) <> 0) then break;
          Progressbar_Fortschritt.Position := j;

          i := j - 1;
          repeat
            application.ProcessMessages;
            if (getasynckeystate(vk_escape) <> 0) then break;
            if comparetext(Listbox1.Items[i], Listbox1.Items[j]) = 0 then begin
//showmessage(inttostr(j) + Listbox1.Items[j] + ' ' + inttostr(i) + Listbox1.Items[i]);
              kill := true;
            end else begin
              dec(i);
            end;
          until (i = -1) or (kill = true);
          if (kill = true) and (i > -1) then begin
//showmessage(inttostr(j) + Listbox1.Items[j] + ' löscht ' + inttostr(i) + Listbox1.Items[i]);
            Listbox1.Items.Delete(i);
            inc(killed);
            kill := false;
          end else kill := false;
          dec(j);
        until j = 0; //wenn nur noch ein Titel da, kann er nicht doppelt sein
        Label_Message.caption := inttostr(killed) + ' Title(s) has been killed';
      except
        ProgressBar_Fortschritt.Visible := false;
        screen.Cursor := crdefault;
      end;
      ProgressBar_Fortschritt.Visible := false;
      Label_Titelanzahl_Anzeige.Value := Listbox1.Count;
      screen.Cursor := crdefault;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Phänomen (zumindest für mich) mit Showmessage

  Alt 25. Aug 2005, 21:26
Warum Dein Programm mit der Messagebox funktioniert und warum ohne nicht kann ich Dir nicht sagen.

Ich frage mich nur warum Du das so kompliziert machst, da gäbs doch eine viel elegantere Lösung...

Delphi-Quellcode:
procedure CleanList(aListBox: TListBox);
var
   i: integer;
   lTempList: TStringList;
begin
  if (aListBox <> nil) then
  begin
     lTempList := TStringList.Create;
     try
        aListBox.Items.BeginUpdate;
        try
           for i := 0 to aListBox.Items.Count - 1 do
              if (lTempList.IndexOf(aListBox.Items[i]) = -1) then //IndexOf liefert -1 wenn nicht gefunden
                 lTempList.Add(aListBox.Items[i]);
           aListBox.Items.Clear;
           aListBox.Items.AddStrings(lTempList);
       finally
         aListBox.Items.EndUpdate;
       end;
     finally
        lTempList.Free;
     end;
  end;
end;
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  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 10:58 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