![]() |
ShowModal -> Fenster nicht modal
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:
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:
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;
Delphi-Quellcode:
Also das Fenster wird zwar angezeigt, ist aber nicht modal!
// 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; 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... |
Re: ShowModal -> Fenster nicht modal
Hm, ich lese gerade:
The timeSetEvent function starts a specified timer event. The multimedia timer runs in its own thread. After the event is activated, it calls the specified callback function or sets or pulses the specified event object. Also muss der Aufruf von TMsgForm.ShowYourself synchronisiert werden, oder? |
Re: ShowModal -> Fenster nicht modal
Jemand zumindest einen Ansatz?
|
Re: ShowModal -> Fenster nicht modal
Hi,
warum nimmst Du dafür den MultimediaTimer ? Brauchst du so kurze Intervalle ? Wenn das nicht nötig ist, nimm einen normalen Timer, der arbeitet mit Windows-Messages und kommt dir dann auch nicht in die Quere. Wenn Du den Multimedia Timer verwendes musst du synchronisieren. Gruss |
Re: ShowModal -> Fenster nicht modal
Ja, die kurzen Intervalle sind besser geeignet bei einem Timing Test.
Und wie synchronisiere ich ein TNotifyEvent? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz