Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ShowModal -> Fenster nicht modal (https://www.delphipraxis.net/87123-showmodal-fenster-nicht-modal.html)

Tubo 23. Feb 2007 15:46


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:
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...

Tubo 23. Feb 2007 16:25

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?

Tubo 4. Mär 2007 00:56

Re: ShowModal -> Fenster nicht modal
 
Jemand zumindest einen Ansatz?

thkerkmann 4. Mär 2007 09:46

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

Tubo 4. Mär 2007 16:15

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 10:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz