![]() |
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 |
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? |
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. |
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. |
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.
|
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. |
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. |
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
|
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