![]() |
Dialog schließt sich nicht von selbst
Moin :hi:
Ich schreibe gerade einen Dialog für mein Programm der den Fortschritt der Suche Visualisiert. So weit so gut. Nachdem ich im OnActivate Event des Dlg's mit Search die Suche starte, will sich der Dlg nicht mehr von alleine schließen lassen (Die Suche ist abgeschlossen). Ich lasse den Dlg mit ShowModal anzeigen, und wollte ihn nach erfolgreicher Suche mit
Delphi-Quellcode:
wieder schließen klappt aber nicht auch ein einfaches
ModalResult := mrOK;
Delphi-Quellcode:
tut's nicht. Was tun?? :?
Close;
mfg phluphie |
Re: Dialog schließt sich nicht von selbst
Kannst du mal den Quelltext posten, zumindest den teil um den es geht, den rest kannst du ja rausnehmen. Manchmal liegts einfach an einem bug in der Delphi version. Bsp: Drucken bei Delphi 6 = immer Y-Koordinate < 0 in meiner jetzigen Version nicht mehr außerdem kommt jetzt beim textdrucken ein rand herum.. kann also sein dein Delphi hat einen bug.. naja, poste einfach mal den source, vielleicht lässt sich was machen
|
Re: Dialog schließt sich nicht von selbst
Morgen!
Also aufrufen tu ich den Dialog/Form wie folgt:
Delphi-Quellcode:
Anschließend passiert folgendes:
procedure TMainForm.FormActivate(Sender: TObject);
begin with TdlgSearch.Create(Self) do begin try ShowModal; finally Free; end; end; end;
Delphi-Quellcode:
Dann das:
procedure TdlgSearch.FormActivate(Sender: TObject);
begin StartSearch; end;
Delphi-Quellcode:
Eigentlich müsste die Form danach doch wieder verschwinden, da ich doch per Hand das ModalResult auf mrOK setzte oder??
procedure TdlgSearch.StartSearch;
begin //Hier findet eine lange und qualvolle Suche statt ;) ModalResult := mrOK; end; mfg phlux |
Re: Dialog schließt sich nicht von selbst
Das Problem ist das Activate-Ereignis, in diesem kannst Du keinen Befehl zum wieder schließen ausführen :|
...:cat:... |
Re: Dialog schließt sich nicht von selbst
Ahhh ich werd noch verrückt :shock: aber wie stelle ich es jetzt an, dass der Dialog gezeigt wird, danach die Suche ausgeführt wird und dann der Dialog geschlossen wird. Weiß jemand Rat?? :?
|
Re: Dialog schließt sich nicht von selbst
Versuche mal anstatt des Close ein
Delphi-Quellcode:
...:cat:...
SendMessage(Handle, WM_CLOSE, 0, 0);
|
Re: Dialog schließt sich nicht von selbst
Nein, funktioniert auch nicht :(
|
Re: Dialog schließt sich nicht von selbst
Moin Phlux,
ich hab' da einen Workaround für Dich: Statt die StartSearch Prozedur über OnActivate o.ä. zu starten, starte sie mit einem Timer.
Delphi-Quellcode:
Auf was Du das Interval einstellst musst Du mal ausprobieren.
procedure TDlgSearch.Timer1Timer(Sender: TObject);
begin Timer1.Enabled := false; StartSearch; ModalResult := mrOK; end; |
Re: Dialog schließt sich nicht von selbst
Hmm, das mit dem Timer ist mir auch schon in den Sinn gekommen, aber ich hab die Idee schnell wieder verschmissen :roll: , aber wenn mir schon ein Mod der DP dazu rät werd ich es wohl so machen, ;) vielleicht findet sich ja irgendwann eine bessere Lösung :?
mfg phluphie :hi: |
Re: Dialog schließt sich nicht von selbst
Moin Phlux,
so funktioniert es wenigstens ;-) Ich hab' Deine Variante auch mal ausprobiert und war selber überrascht, dass es nicht funktioniert, ohne wenigsten eine Fehlermeldung zu produzieren. Es werden nämlich OnCloseQuery und OnClose aufgerufen, nur hat das keine Wirkung. |
Re: Dialog schließt sich nicht von selbst
Ja ist ziemlich vertrackt das ganze :? hab schon an meinem Verstand gezweifelt, weil rein von der Logik her hätte es funktionieren müssen, naja mit der Zeit findet man ein paar Macken bei Delphi :mrgreen:
|
Re: Dialog schließt sich nicht von selbst
ist dasn bug, oder ist das extra so?
|
Re: Dialog schließt sich nicht von selbst
naja, bug würd ichs nicht nenne da in einem onActivate ja kein close zu suchen hat. Nen bug wäre es wenn es AfterActivate heißen würde. Eigentlich muss es ja auch so sein weil rein theoretich nicht beim activieren etwas geschlossen werden kann denn dann wäre ja das activieren nicth vollständig. Finds eigentlich in Ordnung das es so ist wies ist. Wenn ich recht durchsehe ist es ja auch so das die activate-message ausgelöst wird, dann wird von irgendeiner funktion die close-message ausgelöst und am ende des onactivates ereignisses wird die activate-message weitergegeben... (stell ich mir zumindest so vor und somit wird nach dem close die activate-message noch weitergesendet)
|
Re: Dialog schließt sich nicht von selbst
Hallo,
Du könntest es mit PostMessage(Handle,WM_CLOSE,0,0) versuchen. Im Gegensatz zu SendMessage wartet PostMessage nicht auf irgendeine Reaktion. |
Re: Dialog schließt sich nicht von selbst
dürfte auch nicht gehen da die message ja auch schon ankommt während onActivate noch ausgeführt wird
|
Re: Dialog schließt sich nicht von selbst
Hallo,
dreh es doch einfach rum. Nimm die Message nicht für Close, sondern um die Suche zu starten. On Activate ist sowieso nicht der richtige Ort, nimm lieber OnShow und starte über die Message deine Suche. Dann kannst Du dort auch ganz locker ein Close absetzen. Viele Grüße |
Re: Dialog schließt sich nicht von selbst
Ich glaube, ich muß mich noch erklären. WM_CLOSE kannst du natürlich nicht nehmen, aber Du kannst eine eigene Message WM_STARTSEARCH erklären und eine Botschaftsbehandlungsroutine dazu schreiben.
Viele Grüße |
Re: Dialog schließt sich nicht von selbst
Moin Jens,
OnCloseQuery und OnClose werden auch aufgerufen, nur wird das Formular nicht geschlossen. Deshalb spielt es auch keine Rolle, ob Du es nun mit dem Setzen von ModalResult, einem Close, SendMessage mit WM_SYSCOMMAND/SC_CLOSE, WM_CLOSE oder Postmessage und den genannten Messages probierst ;-) @Delphianer: Erst wenn das OnShow verlassen wird, wird das Formular angzeigt. |
Re: Dialog schließt sich nicht von selbst
Das Problem beim OnShow Event ist das die Form dann noch nicht gezeichnet ist, und die StatusBar auf der Form dann recht unnütz wäre :? Ich werde mir mal bei Zeit deinen Vorschlag genauer angucken, aber zu funzt es jetzt erstmal. ;)
|
Re: Dialog schließt sich nicht von selbst
Hallo,
ist ja richtig, dass das Formular in OnShow noch nicht angezeigt wird. Wenn ich aber dort eine Message mit PostMessage absetze, dann wird die Botschaftsbehandlungsroutine erst aufgerufen, wenn der Rest fertig ist, sprich das Fenster gezeichnet ist. Ich bin aber immer wieder erstaunt, wieviele Leute die Hilfe zu OnActivate ignorieren. OnActivate wird aufgerufen, wenn das Formular den Fokus erhält, das passiert zwar bei einem modalen Formular nur einmal, kann aber bei einem nichtmodalen Formular durchaus mehrmals passieren. Viele Grüße |
Re: Dialog schließt sich nicht von selbst
Dazu muss ich sagen, das ich _sehr wohl_ die Hilfe zu dem Event gelesen habe, und ich weiß auch _sehr wohl_ das der Event OnActivate mehrmals aufgerufen werden kann (halt jedes mal wo die Form aktiviert wird). Ich poste eigentlich Fragen in diesem Forum nur wenn ich wirklich keine Lösung mehr weiß, und das _nachdem_ ich die Forensuche und die OH bemüht habe. ;)
mit freundlichen grüßen, phlux :hi: |
Re: Dialog schließt sich nicht von selbst
Hallo,
war auch nicht böse gemeint, ich habe es eben nur schon wirklich oft gesehen. Viele Grüße |
Re: Dialog schließt sich nicht von selbst
Ich weiß nur solltest du es nicht vielleicht jedem unterstellen nur weil er in deinen Ohren eine vielleicht dämliche Frage stellt. Es gibt nunmal Leute die nicht schonmal "alles" mit Delphi gemacht haben und da mag zB etwas für den Könner sehr leicht sein, aber für jemanden (der vielleicht in anderen Sachen von Delphi mehr vertieft ist) der dies noch net ausgiebig gemacht hat zu einer schwierigen Frage ausarten kann.
Egal, ich werde auf die Idee mit der eigenen Message über kurz oder lang eh darauf zurückkommen müssen da es sich wohl so am unproblematischsten Gestalten lässt. |
Re: Dialog schließt sich nicht von selbst
Ich rege mich nicht über dämliche Fragen auf, die Du nicht gestellt hast, sondern über dämliche Kommentare. Du fühlst Dich zu Unrecht angegriffen.
Viele Grüße |
Re: Dialog schließt sich nicht von selbst
Ich rege mich doch gar nicht auf ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 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