Hallo Community,
ich habe eine Klasse geschrieben, die ständig aktualisiert und gezeichnet werden muss. Zu Anfang hatte ich alles mit einem TTimer realisert, der Update; und Paint; der Klasse aufruft. Alles funktionierte sehr gut.
Da ich es nun mehr in
OOP-Style schreiben wollte, habe ich statt des TTImers setTimeEvent in der Klasse benutzt:
Delphi-Quellcode:
procedure TimingTimerCallback(uTimerID, uMessage: UINT; dwUser, dw1, dw2: DWORD); stdcall;
begin
if (dwUser <> 0) then
begin
TTimingTest(dwUser).TimerCallback(uTimerID);
end;
end;
procedure TTimingTest.TimerCallback(TimerID: Cardinal);
begin
if (FTimerID = TimerID) then
begin
Update;
Paint;
end;
end;
procedure TTimingTest.TimerStart(Interval: Cardinal);
begin
FTimerID := timeSetEvent(Interval, Interval, TFNTimeCallBack(@TimingTimerCallback), LongInt(Self), TIME_PERIODIC);
end;
procedure TTimingTest.TimerKill;
begin
if (FTimerID <> 0) then
begin
timeKillEvent(FTimerID);
FTimerID := 0;
end;
end;
Doch nun habe ich das Problem, dass das Fenster, was am Ende des Tests (wird durch ein Event an die Hauptunit signalisiert) angezeigt werden soll, nicht mehr modal ist, obwohl ShowModal aufgerufen wird:
Delphi-Quellcode:
// class method that creates, shows modal and releases the form
class procedure TMsgForm.ShowYourself(const Headline, Msg: String; const Cancel: Boolean = false);
var MsgForm: TMsgForm;
begin
MsgForm:= TMsgForm.Create(Application, Headline, Msg, Cancel) ;
try
MsgForm.ShowModal;
finally
MsgForm.Free; //Release;
end;
end;
Also das Fenster wird zwar angezeigt, ist aber nicht modal!
Und das nur, weil ich statt TTimer, setTimeEvent nutze...
Ich bin ratlos, und selbst der Guru Muetze1 weiß nicht weiter.
Hat jedmand eine Idee.
Danke
P.S.: Als ich statt MsgForm.Free MsgForm.Release aufgerufen habe, ist das ganze Programm stehen geblieben, also reagiere gar nicht mehr.
Schon das hat ewig gedauert festzustellen...