AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Formular in DLL - Rücksprung in Hauptanwendung
Thema durchsuchen
Ansicht
Themen-Optionen

Formular in DLL - Rücksprung in Hauptanwendung

Ein Thema von Uli65 · begonnen am 2. Sep 2025 · letzter Beitrag vom 4. Sep 2025
Antwort Antwort
Uli65

Registriert seit: 28. Jun 2013
2 Beiträge
 
#1

Formular in DLL - Rücksprung in Hauptanwendung

  Alt 2. Sep 2025, 15:20
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
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
294 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Formular in DLL - Rücksprung in Hauptanwendung

  Alt 3. Sep 2025, 10:30
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?
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.710 Beiträge
 
Delphi 12 Athens
 
#3

AW: Formular in DLL - Rücksprung in Hauptanwendung

  Alt 3. Sep 2025, 12:30
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.110 Beiträge
 
Delphi 12 Athens
 
#4

AW: Formular in DLL - Rücksprung in Hauptanwendung

  Alt 3. Sep 2025, 19:57
Probleme kenne ich eigentlich nur, wenn man in der DLL Application.Handle überschreibt.

Bei mir funktioniert es jedenfalls einfach so, Demo im Anhang.
Angehängte Dateien
Dateityp: zip DLLShowModal.zip (31,5 KB, 5x aufgerufen)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.710 Beiträge
 
Delphi 12 Athens
 
#5

AW: Formular in DLL - Rücksprung in Hauptanwendung

  Alt 3. Sep 2025, 20:28
Es kommt auch etwas drauf an, welche Delphiversion, da hin und wieder mal bissl was an der Fokussteuerung rumgepfuscht wurde.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.110 Beiträge
 
Delphi 12 Athens
 
#6

AW: Formular in DLL - Rücksprung in Hauptanwendung

  Alt 3. Sep 2025, 21:14
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.710 Beiträge
 
Delphi 12 Athens
 
#7

AW: Formular in DLL - Rücksprung in Hauptanwendung

  Alt 3. Sep 2025, 21:18
Ich hätte eher vielleicht mit maximal XE3 gerechnet,
drum die Nachfrage.

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

Geändert von himitsu ( 3. Sep 2025 um 21:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
700 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Formular in DLL - Rücksprung in Hauptanwendung

  Alt Gestern, 07:46
wenn ich mit DLLs und Fenstern dort arbeite, bevorzuge ich doch eher Laufzeit-Packages, da funktioniert das dann einfach
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.710 Beiträge
 
Delphi 12 Athens
 
#9

AW: Formular in DLL - Rücksprung in Hauptanwendung

  Alt Gestern, 09:50
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 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