AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi programm friert ein, progress bar, leerzeichen ignorieren...
Thema durchsuchen
Ansicht
Themen-Optionen

programm friert ein, progress bar, leerzeichen ignorieren...

Ein Thema von Headi · begonnen am 24. Dez 2005 · letzter Beitrag vom 27. Dez 2005
Antwort Antwort
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#1

Re: programm friert ein, progress bar, leerzeichen ignoriere

  Alt 25. Dez 2005, 18:41
Zitat von Headi:
dann zum zweiten Problem:

Ja es sind zeilenkommentare.
Mit dem pos bin ich irgendwie auch nicht weitergekommen,
irgendwie habe ich immer probleme mit den verschiedenen Formaten, also Strings, string, integer...
Mal eine einfache Lösung:

Delphi-Quellcode:
procedure extractComments(const ListWithComments, ListWithoutComments : TStringList);
var i : Integer;
begin
  // nachschauen, dass keine Referenz = nil ist
  if assigned(ListWithComments) and assigned(ListWithoutComments) then
    begin
      // löschen der Liste in die alle Zeilen ohne Kommentar kommen
      ListWithoutComments.Clear;
      // schauen ob es mindestens eine Zeile gibt
      if ListWithComments.Count > 0 then
        begin
          // übertragen der Einträge, dabei aber jeden Kommentar löschen
          for i := 0 to ListWithComments.Count - 1 do
            begin
              // wenn Zeile einen Kommentar enthält
              // > 1 -> keine Zeile die nur ein Kommentar ist wird kopiert
              if Pos(';', ListWithComments.Strings[i]) > 1 then
                begin
                  // kopieren des Teils der nicht zum Kommentar gehört
                  ListWithoutComments.Add(copy(ListWithComments.Strings[i], 1, Pos(';', ListWithComments.Strings[i]));
                end // if Pos(';', ListWithComments.Strings[i]) > 1
              // sonst die Zeile unverändert kopieren
              else
                begin
                  ListWithoutComments.Add(ListWithComments.Strings[i]);
                end;
            end; // for i := 0 to ListWithComments.Count - 1
        end; // if ListWithComments.Count > 0
    end; // if assigned(ListWithComments) and assigned(ListWithoutComments)
end;
Hier übergibst du einfach zwei StringListen. Die erste enthält den originalen Inhalt inklusive den Kommentaren. Die zweite kann ruhig leer sein (der Inhalt wird auf jeden Fall gelöscht). Es wird nun jede Zeile der ersten Liste genommen und immer der Teil in die zweite Liste kopiert, der vor einem Kommentar kommt. Statt Pos(';' ... ) solltest du lieber eine Konstante benutzen, falls du von ';' mal auf etwas anderes wechseln möchtest.

Zitat von Headi:
drittes Problem:

Also ich glaube, das ist ja sogar normal dass ein Programm bei längeren berechnungen einfriert,
aber ich glaube das kann man doch mit einem thread oder so umgehen?! Nur habe ich leider keine Ahnung davon.
Ja klar, du kannst einen Thread anlegen. Aber Nebenläufigkeit hat ein paar eigene Tücken. Ist nicht wirklich trivial da alles zu berücksichtigen. Du findest eine Menge Tutorials zu Threads und Delphi, aber hier dürfte es reichen, wenn du von Zeit zu Zeit etwas rechenzeit freigibst.
Wenn du eine große Schleife hast, die etwas berechnet und es nur lange dauert, da die Anzahl der Iterationen sehr groß ist, solltest du alle paar Durchläufe ein Application.ProcessMessages einbauen. Dieser Befehl lässt Windows auch andere Nachrichten verarbeiten, die sonst nicht zum Zuge kämen (betrifft dann u.A. neuzeichnen und verschieben von Fenstern).

So, jetzt guck ich doch nochmal in deinen Code. Ach Moment, du benutzt ein paar Komponenten, könntest du bitte angeben welche? (ist immer leichter sich Quellcode anzusehen, wenn man alle Komponenten kennt).

Ach und bitte nicht die .exe in ein zip, sondern nur die Files die man zum selber kompilieren braucht (hab nur einen ISDN Kanal zur Verfügung).

Gruß Der Unwissende
  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 07:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz