Früher habe ich hier und da ein wenig mit Turbo Pascal programmiert, nun bin ich dabei Lazarus kennenzulernen.
Folgende Ausgangssituation: Ich lasse in meinem Programm auf 'nem TImage-Feld einen aus um die 2.000 Linien bestehenden Farbübergang zeichnen (durch For-Schleifen), was soweit auch problemlos klappt - ich klicke auf den Button und das Bild erscheint.
Da das Bild jedoch direkt "in voller Pracht" zu sehen ist, wollte ich eine Delay-Funktion einbauen um zu sehen, wie sich die einzelnen Linien aufbauen. Schnell stellte ich fest, dass es die in Lazarus leider so nicht gibt. Ich bin dann auf die Sleep-Funktion gestoßen, die ich dann in die For-Schleifen eingebaut habe. Leider klappte das nicht, da Lazarus zuerst die komplette Zeit in den For-Schleifen zusammenrechnete, solange wartete und dann das komplette Bild wieder übergangslos anzeigte, nicht jedoch die sich aufbauenden einzelnen Linien.
Danach probierte ich den TTimer aus. Das klappte auch, hier stellte ich jedoch fest, dass es bei der kleinstmöglichen Einstellung (1 Millisekunde) über 30 Sekunden dauerte bis die 2.000 Linien sich zum kompletten Bild aufgebaut hatten, also ein Schritt tatsächlich ca. 16-17 Millisekunden dauerte.
Im Anschluss suchte ich in den Foren weiter und stieß auf diese Prozedur:
Code: Alles auswählen
procedure Delay(msec: integer);
var start, stop: LongInt;
begin
start := GetTickCount64;
repeat
stop := GetTickCount64;
Application.ProcessMessages;
until (stop-start)>=msec;
end;
Dann versuchte ich mir meine eigene Delay-Funktion zu bauen, indem ich mir eine Prozedur mache, in der eine For-Schleife einfach ein paar hunderttausend mal ohne weiteren Inhalt durchlaufen wird. Das Ergebnis war leider dasselbe wie in der Sleep-Funktion: Zuerst machte das Programm ein paar Sekunden garnichts, um danach das Bild übergangslos und sofort aufzubauen.
Zu guter Letzt nahm ich den Befehl "Application.ProcessMessages" aus der Delay-Funktion und baute ihn statt der kompletten Funktion in die For-Schleifen ein, die die Linien zeichnen. Das brachte weiteren Fortschritt: Das Aufbauen einer Linie dauert nun ca. 3-4 Millisekunden, sodass alle Linien und damit das komplette Bild in ca. 6-7 Sekunden aufgebaut ist. Damit bin ich allerdings noch nicht ganz zufrieden, das sollte eigentlich noch kürzer sein - allerdings wiegesagt nicht so kurz, dass man garnicht sieht, wie sich das Bild aufbaut - und genau da komme ich nicht weiter.
Hat jemand 'ne Idee? Vielen Dank schonmal!
Hunnsrigga Bu