Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TFindDialog wird OnClose nicht gefeuert (Delphi Rio) (https://www.delphipraxis.net/205622-tfinddialog-wird-onclose-nicht-gefeuert-delphi-rio.html)

skoschke 29. Sep 2020 09:50

TFindDialog wird OnClose nicht gefeuert (Delphi Rio)
 
Hallo,

Nach einem Öffnen des FindDialogs und dann darin Abbrechen klicken verliert die gesamte Anwendung den Focus und verschwindet hinter anderen geöffneten Programmen.
Dabei habe ich feststellen müssen, das das OnClose des Dialogs nicht gefeuert wird und ich damit keine Möglichkeit habe, manuell den Focus wieder zu korrigieren.

In einer älteren Delphi-Version hat das mal funktioniert...

Das tritt dann natürlich auch auf wenn man ein WPTools WPRichText verwendet, welches standardmäßig auch den FindDialog verwendet.

Kennt jemand das Problem und eventuell auch eine Abhilfe?

Ciao
Stefan

himitsu 29. Sep 2020 10:33

AW: TFindDialog wird OnClose nicht gefeuert (Delphi Rio)
 
Bei solchen Dialogen passiert dieser Fehler oft, wenn nach dem Schließen der Fokus nicht an ein sichtbares Fenster übergeben werden konnte.
z.B. bei Dialogen im OnClose oder nach anderen Dialogen/Fenstern, die schonwieder zu sind.
Beim Öffnen eines Dialogs/Fensters wird das Handle des aktiven Fensters/Delphi-Dialogs gespeichert und nach dem Schließen fokusiert, aber wenn es Dieses Fenster nicht mehr gibt, dann...
Hat kein Fenster mehr den Fokus, dann geht die Kontrolle ans vorherrige Programm über.

Versuch mal explizit das gewünschte Fenster anzugeben.
Delphi-Quellcode:
FindDialog1.Execute(Self.Handle); // oder Application.MainFormHandle


Achtung: Bei manchen Dialogen kann man im Execute zwar ein Handle rein geben, aber der Parameter er wird dann "ignoriert", was beim TFindDialog aber gehen sollte.

skoschke 29. Sep 2020 10:36

AW: TFindDialog wird OnClose nicht gefeuert (Delphi Rio)
 
funktioniert leider nicht!

Ciao
Stefan

himitsu 29. Sep 2020 11:01

AW: TFindDialog wird OnClose nicht gefeuert (Delphi Rio)
 
Delphi-Quellcode:
procedure TCommonDialog.WMDestroy(var Message: TWMDestroy);
begin
  inherited;
  DoClose;
end;

procedure TCommonDialog.WndProc(var Message: TMessage);
begin
  if Message.Msg = WM_STYLEDLGDESTROY then
  begin
    DoClose;
    Exit;
  end;
  ...

destructor TSysDialogStyleHook.Destroy;
begin
  if Application.DialogHandle = Handle then
  begin
    Application.DialogHandle := 0;
    SendMessage(Handle, WM_STYLEDLGDESTROY, 0, 0);
  end;
Versuch mal VCL-Styles zu benutzen ... scheinbar funktioniert das OnClose nicht bei nativen Dialogen. :roll:
Neee, das scheint niemals zu funktionieren und müsste eher OnDestroy heißen.

skoschke 29. Sep 2020 13:10

AW: TFindDialog wird OnClose nicht gefeuert (Delphi Rio)
 
Leider auch nicht, denn der Dialog soll beim schließen nicht zerstört werden sondern beim nächsten Aufruf dann noch die letzten Inhalte (Suchen nach / vorwärts / rückwärts etc behalten...

Ciao
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:05 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