Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Formular in DLL - Rücksprung in Hauptanwendung (https://www.delphipraxis.net/217766-formular-dll-ruecksprung-hauptanwendung.html)

Uli65 2. Sep 2025 16:20

Formular in DLL - Rücksprung in Hauptanwendung
 
Hallo,

ich habe folgendes Szenario:
Delphi-Anwendung, aus welcher aus der Main-Form heraus ein modales Fenster (Fenster1) aus der Exe aufrufen wird. In diesem modalen Fenster wiederum wird mittels Button zus. ein weiteres modales Fenster aus einer dyn. DLL aufgerufen (Fenster2), welchem der Application.Handle der Anwendung mitgegeben wird.
Der Aufruf aller Fenster funktioniert einwandfrei, jedoch beim Schließen von Fenster2 springt der Fokus nicht in Fenster1, sondern Fenster1 ist nicht mehr sichtbar, nur noch die Main-Form.
Fenster1 ist aber wohl noch im Hintergrund aktiv, denn das Programm ist blockiert und nur über den Taskmanager zu beenden.
Versuche mittels Fenster1.BringToFront() das Fenster sichtbar zu machen scheitern.

Rufe ich Fenster2 direkt aus der Main-Form auf, funktioniert der Rücksprung ohne Probleme.

Was muss ich tun, um beim Aufruf von Fenster2 aus Fenster1 heraus, nach dem Schließen von Fenster2, wieder auf Fenster1 zugreifen zu können?

Uli

TomyN 3. Sep 2025 11:30

AW: Formular in DLL - Rücksprung in Hauptanwendung
 
Hmm, dass liest sich so, dass Du aus Fenster 2 was im Hauptfenster machst. Da kann dann leicht ein Knoten reinkommen.
Was passiert, wenn Du dem Fenster 2 den Handle von Fenster1 mitgibst und eventuelle Kommunikation der DLL mit dem Hauptfenster dann von Fenster1 weitergeleitet wird?

himitsu 3. Sep 2025 13:30

AW: Formular in DLL - Rücksprung in Hauptanwendung
 
Du hast zwei Mal die VCL.
Die VCL der DLL setzt, beim Schließen einer Form den Fokus, auf eines seiner Fenster (davon gibt es aber Keines mehr und die Fenster der EXE kennt sie nicht).
Fazit: Der Fokus geht verloren, ala SetFocus(0), und weil die Anwendung keinen Fokus mehr hat, wird sie durch Windows in den Hintergrund verschoben.
UND ist der Fokus einmal weg, kann/darf eine Anwendung den Fokus nicht auf sich setzen (nur andere, genauer das aktive Programm, darf sowas machen)

Lösung: Das Handle der Form1 beim Aufruf übergeben, oder vor Anzeige der Form2 via GetActiveWindow es sich holen, und dann vor dem Close/Hide/Free ein Windows.SetFocus auf diese Form.

jaenicke 3. Sep 2025 20:57

AW: Formular in DLL - Rücksprung in Hauptanwendung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Probleme kenne ich eigentlich nur, wenn man in der DLL Application.Handle überschreibt.

Bei mir funktioniert es jedenfalls einfach so, Demo im Anhang.

himitsu 3. Sep 2025 21:28

AW: Formular in DLL - Rücksprung in Hauptanwendung
 
Es kommt auch etwas drauf an, welche Delphiversion, da hin und wieder mal bissl was an der Fokussteuerung rumgepfuscht wurde.

jaenicke 3. Sep 2025 22:14

AW: Formular in DLL - Rücksprung in Hauptanwendung
 
Wenn nichts anderes im Beitrag steht, gehe ich immer von einer aktuellen Version aus.

Ja, an der Fensterverwaltung wurde einiges geändert im Laufe der Versionen. Deshalb habe ich die Demo gepostet, wie sie bei mir geht. Dann braucht niemand raten.

himitsu 3. Sep 2025 22:18

AW: Formular in DLL - Rücksprung in Hauptanwendung
 
Ich hätte eher vielleicht mit maximal XE3 gerechnet, :oops:
drum die Nachfrage.

Grade zwischen XE und 10.x/11.x war schon einiges passiert, wie wir leidlich erleiden erfahren mußten.

MyRealName 4. Sep 2025 08:46

AW: Formular in DLL - Rücksprung in Hauptanwendung
 
wenn ich mit DLLs und Fenstern dort arbeite, bevorzuge ich doch eher Laufzeit-Packages, da funktioniert das dann einfach

himitsu 4. Sep 2025 10:50

AW: Formular in DLL - Rücksprung in Hauptanwendung
 
Bei Packages (also inkl. rtl und vcl) hast du dann nur noch eine VCL und auch viele globale Variablen sind dann nicht mehr doppelt, bzw. DLL und EXE nutzen Beide die Selben.


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