AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShowModal -> Fenster nicht modal

Ein Thema von Tubo · begonnen am 23. Feb 2007 · letzter Beitrag vom 4. Mär 2007
Antwort Antwort
Tubo
(Gast)

n/a Beiträge
 
#1

ShowModal -> Fenster nicht modal

  Alt 23. Feb 2007, 16:46
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...
  Mit Zitat antworten Zitat
Tubo
(Gast)

n/a Beiträge
 
#2

Re: ShowModal -> Fenster nicht modal

  Alt 23. Feb 2007, 17:25
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?
  Mit Zitat antworten Zitat
Tubo
(Gast)

n/a Beiträge
 
#3

Re: ShowModal -> Fenster nicht modal

  Alt 4. Mär 2007, 01:56
Jemand zumindest einen Ansatz?
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#4

Re: ShowModal -> Fenster nicht modal

  Alt 4. Mär 2007, 10:46
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
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Tubo
(Gast)

n/a Beiträge
 
#5

Re: ShowModal -> Fenster nicht modal

  Alt 4. Mär 2007, 17:15
Ja, die kurzen Intervalle sind besser geeignet bei einem Timing Test.
Und wie synchronisiere ich ein TNotifyEvent?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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