Hier ein Beispielquellcode:
Also ich habe einen Thread:
Delphi-Quellcode:
TMyThread = class(TThread)
private
FOpenTime : TDateTime;
procedure OpenForm2;
protected
procedure Execute;override;
public
constructor Create;
end;
constructor TMyThread.Create;
begin
inherited Create(False);
end;
procedure TMyThread.Execute;
begin
while not Terminated do
begin
sleep(10);
if Now > FOpenTime then
Synchronize(OpenForm2);
end;
end;
procedure TMyThread.OpenForm2;
begin
with TForm2.Create(Application) do
begin
try
ShowModal;
finally
Free;
end;
end;
end;
Ist nur ein Beispiel, kann jeder ausprobieren. Kann aber Fehler enthalten, da ich das nur schnell hingekritzelt habe.
Das Ganze bewirkt eine Erinnerungsfunktion.
Auf Form1 und auf Form2 sind jeweils MainMenus.
Wenn ich jetzt eben im MainMenu von Form1 aktiv bin und währenddessen durch den Thread meine Form2 aufgerufen wird, dann ist das MainMenu auf Form 2 inaktiv.
Allerdings hängt das nicht mit dem Thread zusammen!
Wenn ich auf Form1 einen Timer habe:
Delphi-Quellcode:
procedure TForm1.TimerTimer(Sender : TObject);
begin
if Now > FOpenTime then
with TForm2.Create(Application) do
begin
try
ShowModal;
finally
Free;
end;
end;
end;
Hier passiert genau das gleiche.
Ausserdem passiert sowas ähnliches:
Wenn ich Form1 verschiebe (Titelleiste mit Maus) und währenddessen die Form2 aufgerufen wird, dann kann ich Form2 nicht über die TitelLeiste verschieben.