Hi und erstmal frohe Weihnachten, sowie Herzlich Willkommen in der
DP
Was Dein Problem angeht, so wurde hier ja schon der Vorschlag mit der globalen Variable gemacht. Ist in der Situation (
imho) das einfachste und geeigneste Verfahren, also ruhig so machen!
Aber trotzdem möchte ich kurz noch ergänzen, dass auch das Warten an sich möglich ist. Dazu kannst Du auf verschiedene Verfahren zurückgreifen. Das einfachste ist dabei, dass Du in einer Schleife wartest. Die Schleife darf dabei einfach erst verlassen werden, wenn ein bestimmtes Flag gesetzt wurde. Die Variable, die Du hier allerdings von der Paintbox zum OnClick des Button übertragen möchtest müsste auf jeden Fall global sein (also auch ein Flag), da die Signaturen bereits durch Delphi festgelegt sind.
An sich hast Du beim Warten in einer Schleife noch das Problem, dass so eine Schleife immer mit 100% CPU-Last ausgeführt wird (die Schleife nimmt alles, was Dein Programm an Rechenzeitbekommt), entsprechend wird das ganze Programm etwas träge weiterlaufen (garantiert nicht erwünscht). Deshalb musst Du in der Schleife dafür sorgen, dass hier das Programm nicht blockiert.
Die einfachste Variante stellt die Verwendung von Application.ProcessMessages dar, einfach in die Schleife rein und es wird bei jeder Iteration die Windows-Nachrichtenschleife abgearbeitet (das Fenster kann verschoben, andere Prozeduren gestartet werden).
Aber auch hier verschwendet man einfach eine Menge Ressourcen, da man völlig unnötig pollt (also ständig schaut, ob sich der Zustand/das Flag geändert hat). Besser ist es, wenn Du hier Ereignisorientierter Arbeitest. Dazu kannst Du einen Prozess mittels MsgWaitForMultipleObjects schlafen legen. Die genaue Syntax kannst Du dem Windows-
API entnehmen, sollte sich aber auch in der
DP leicht finden lassen. An sich ist die Verwendung schon etwas komplizierter, aber auch nicht wirklich schwer. An sich erlaubt Dir die Funktion eben, dass Du einen Thread schlafen legst, bestimmte Ereignisse aber noch verarbeitet werden (den Thread wieder aufwecken). Insbesondere kannst Du eben die Interaktion durch den Benutzer (Maus- und Tasturereignisse) zulassen. Der Vorteil ist dabei, dass wirklich nur dann etwas getan wird, wenn etwas passiert. Ansonsten schläft der Thread und verbraucht somit auch keine Ressourcen (erlaubt dann auch einer CPU, dass die sich schlafen legt).
Gruß Der Unwissende