Autor Beitrag
Addi
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 08.07.03 12:38 
Hallo!

Als Anfänger in DELPHI habe ich ein Problem welches sich sicherlich mit Eurer Hilfe lösen läßt.

Meine Anwendung - ein kleines Packprogramm - funktioniert zwar, doch wenn ich zB eine Datei mit ca 600 MB packen will und die Anwendung wird dabei kurz in den Hintergrund gesetzt und wieder nach vorne geholt, dann ist das ganze Fenster weiß und die Form wird erst wieder richtig angezeigt wenn die Anwendung fertig ist mit packen:(

Wie kann man das vermeiden?

Vielen Dank - vorallem bei Hilfe mit etwas Code.

cu Addi
Terra23
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 872

Win 8
Delphi 7
BeitragVerfasst: Di 08.07.03 12:47 
Ist dein PC vielleicht an seine Grenze gekommen oder deine Grafikkarte macht das nicht mit?

_________________
Hasta La Victoria Siempre
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Di 08.07.03 13:07 
hallo,

dein packen läuft vermutlich in einer schleife.
Du musst in die Schleife mal application.processmessages; einsetzen, damit dein Formular wieder neu gezeichnet werden kann.

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.07.03 14:11 
Überleg mal wie Windows Funktioniert. Windows arbeitet nachrichtenorientiert. Und wenn sich dein Fenster jetzt neu zeichenen muß, bekommt es von Windows eine Nachricht, diese holt dein Programm ab und zeichnet sich entsprechend neu.

So, wenn dein Programm jetzt am Packen ist, ist es beschäftigt und nicht in der Lage seine Nachrichten abzuholen geschweige denn zu verarbeiten. Ergo bleibt Windows nichts anderes übrig als den teil des Desktops weiß darzustellen, weil dein Programm nicht in der Lage ist sich zu aktualisieren und Windows natürlich nicht weiß, was es darstellen soll.

Eine Möglichkeit wäre, wenn deine Packroutine in einer Schelief liegt Application.Processmessages aufzurufen. Das sorgt dafür, dass dein Programm in die Nachrichtenschleife kuckt unmd eventuell anliegenden Nachrichten verarbeitet. Man sollte damit aber vorsichtig umgehen, da, wenn viele Nachrichten anliegen, die Performanz logischerweise leidet.

Besser wäre es, auch wenn deine Packroutine eine Schleife ist, das ganze in einen Thread auszulagern. Was anderes wird dir auch nicht übrigbleiben, wenn du eine DLL zum Packen benutzt und an den Pack-Code nicht dran kommst.
worm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 135


D6 Prof
BeitragVerfasst: Di 08.07.03 14:19 
@Luckie: Falls man die Möglichkeit hat, den Code zu verändern und Application.ProcessMessages zu benutzen, hat dann das Auslagern in einen Thread demgegenüber noch irgendwelche Vorteile?

_________________
In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 08.07.03 14:32 
Ja. Ich habe doch gesagt, wie Application.ProcessMessage funktioniert. Die Schleife wird doch jedes mal angehalten, weil dein Programm erst was anderes machen muß.
Addi Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 13.07.03 18:11 
Wie schon erwähnt bin ich noch Laie und das mit Thread und so sagt mir nun nichts:(

Und Application.ProcessMessage habe ich schon versucht an verschiedenen Stellen doch das brachte kein Ergebniss.