Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dialog schließt sich nicht von selbst (https://www.delphipraxis.net/9872-dialog-schliesst-sich-nicht-von-selbst.html)

phlux 6. Okt 2003 20:25


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:
ModalResult := mrOK;
wieder schließen klappt aber nicht auch ein einfaches
Delphi-Quellcode:
Close;
tut's nicht. Was tun?? :?

mfg phluphie

SirThornberry 6. Okt 2003 23:05

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

phlux 7. Okt 2003 13:13

Re: Dialog schließt sich nicht von selbst
 
Morgen!
Also aufrufen tu ich den Dialog/Form wie folgt:
Delphi-Quellcode:
procedure TMainForm.FormActivate(Sender: TObject);
begin
  with TdlgSearch.Create(Self) do
  begin
    try
      ShowModal;
    finally
      Free;
    end;
  end;
end;
Anschließend passiert folgendes:
Delphi-Quellcode:
procedure TdlgSearch.FormActivate(Sender: TObject);
begin
  StartSearch;
end;
Dann das:
Delphi-Quellcode:
procedure TdlgSearch.StartSearch;
begin
  //Hier findet eine lange und qualvolle Suche statt ;)
  ModalResult := mrOK;
end;
Eigentlich müsste die Form danach doch wieder verschwinden, da ich doch per Hand das ModalResult auf mrOK setzte oder??

mfg phlux

sakura 7. Okt 2003 13:14

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

phlux 7. Okt 2003 13:18

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

sakura 7. Okt 2003 13:32

Re: Dialog schließt sich nicht von selbst
 
Versuche mal anstatt des Close ein

Delphi-Quellcode:
SendMessage(Handle, WM_CLOSE, 0, 0);
...:cat:...

phlux 7. Okt 2003 13:34

Re: Dialog schließt sich nicht von selbst
 
Nein, funktioniert auch nicht :(

Christian Seehase 7. Okt 2003 14:14

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:
procedure TDlgSearch.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  StartSearch;
  ModalResult := mrOK;
end;
Auf was Du das Interval einstellst musst Du mal ausprobieren.

phlux 7. Okt 2003 14:25

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:

Christian Seehase 7. Okt 2003 14:37

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.

phlux 7. Okt 2003 14:40

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:

Pseudemys Nelsoni 7. Okt 2003 14:47

Re: Dialog schließt sich nicht von selbst
 
ist dasn bug, oder ist das extra so?

SirThornberry 7. Okt 2003 15:26

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)

Jens Schumann 7. Okt 2003 15:31

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.

SirThornberry 7. Okt 2003 15:33

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

Delphianer 7. Okt 2003 15:34

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

Delphianer 7. Okt 2003 15:36

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

Christian Seehase 7. Okt 2003 15:43

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.

phlux 7. Okt 2003 15:45

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. ;)

Delphianer 7. Okt 2003 15:54

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

phlux 7. Okt 2003 16:39

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:

Delphianer 7. Okt 2003 17:12

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

phlux 7. Okt 2003 17:18

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.

Delphianer 7. Okt 2003 17:31

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

phlux 7. Okt 2003 18:15

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