AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Formular an andere Anwendung binden

Ein Thema von G-Baumstamm · begonnen am 6. Jul 2012 · letzter Beitrag vom 15. Jul 2012
Antwort Antwort
G-Baumstamm

Registriert seit: 9. Jan 2010
63 Beiträge
 
Delphi 7 Enterprise
 
#1

Formular an andere Anwendung binden

  Alt 6. Jul 2012, 07:37
Delphi-Version: 7
Heyho,

ich habe ein Formular, welches ich quasi als Overlay über einer anderen, nicht von mir geschriebenen Anwendung anzeigen lassen möchte, so dass es wie ein weiteres Menü diese Formulars wirkt. Dazu habe ich z.B. einen Hotkey, den ich global abfange, und falls meine externe Anwendung das ForeGroundWindow ist entsprechend meine Form Zeige oder Hide.

Wie auch immer, damit das ganze vernünftig funktioniert muss meine Form ja immer genau eine Ebene vor der Anwendung sein, wenn beide Forms von mir wären würde ich die eine ja einfach andocken, geht aber in diesem Fall irgendwie nicht ...

Irgendwelche Ideen?
Daniel NR
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Formular an andere Anwendung binden

  Alt 6. Jul 2012, 07:59
Hallo,

verstanden habe ich es nicht ...
Was ist ein Overlay ?

Aber mals o:
Du weisst schon, dass die andere Anwendung gar kein "Form", sondern ein Window hat mit einem Handle.
Das Handle könntest du dir zumindestens besorgen.
Ob du dich da als Parent eintragen kannst, hoffe ich nicht.

Wäre schlimm, wenn MS sowas erlauben würde.

Suche mal nach "DLL injection", viell. ist es ja das, was du willst.

Heiko
Heiko
  Mit Zitat antworten Zitat
G-Baumstamm

Registriert seit: 9. Jan 2010
63 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Formular an andere Anwendung binden

  Alt 6. Jul 2012, 09:29
Mh, dann versuche ich nochmal das zu präzisieren ...

Ich möchte, das mein Formular immer genau eine Ebene höher als eine andere Anwendung (nennen wir sie Anwendung X), deren Handle ich habe, angezeigt werde.

Wenn ich zum Beispiel Anwendung X anklicke, kommt sie ja in den Vordergrund, und dann möchte ich das mein Formular trotzdem noch davor angezeigt wird. Wenn ich danach eine weitere Anwendung in den Vordergrund hole, soll diese ganz oben angezeigt werden, danach meine Anwendung, danach Anwendung X.

Die Fensterstruktur soll also immer so aussehen:

0-n andere Anwendungen
meine Anwendung
Anwendung X
0-n andere Anwendungen

Also quasi wie wenn ich meine Anwendung an Anwendung X andocken würde.

Hoffe das war jetzt verständlicher ...
Daniel NR
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: Formular an andere Anwendung binden

  Alt 6. Jul 2012, 11:20
Du kannst dein Fenster auch direkt als ChildWindow der Fremdanwendung setzten. MSDN-Library durchsuchenSetParent
Delphi programming
  Mit Zitat antworten Zitat
G-Baumstamm

Registriert seit: 9. Jan 2010
63 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Formular an andere Anwendung binden

  Alt 6. Jul 2012, 14:38
Danke, das hab ich gesucht.

Gibt es irgendeine Möglichkeit, herauszufinden, wann die als Parent gesetzte Anwendung geschlossen wird, um in meiner Anwendung darauf zu reagieren ?
Daniel NR
  Mit Zitat antworten Zitat
G-Baumstamm

Registriert seit: 9. Jan 2010
63 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: Formular an andere Anwendung binden

  Alt 14. Jul 2012, 22:16
Jetzt muss ich hier doch noch mal nachhaken, sorry.

Da ich keine Möglichkeit gefunden habe, das über nen Event oÄ zu machen, habe ich mir mit einem Timer geholfen, der immer wieder polled, also überprüft, ob eine bestimme Anwendung gestartet wurde (und in diesem Fall meine Application als Child einträgt) und anschließend, ob diese noch läuft, und wenn nicht eigentlich meine Application wieder lösen sollte.

Das krieg ich aber nicht hin. Wenn ich einfach SetParent(Application.Handle,0); aufrufe, passiert irgendwie nichts, also ich sehe im Taskmanager, dass mein Prozess noch läuft, wenn ich alle anderen Fenster wegschiebe sehe ich auch mein Fenster noch, aber es wird nicht mehr in der Taskleiste oder im Tray angezeigt, man kann es als Anwender also nicht mehr richtig benutzen.

"Workaround" von mir ist momentan, die Application in diesem Fall einfach neu zu starten, läuft zwar, hat aber einige Nachteile. Größter davon ist sicherlich, dass ich nicht verhindern kann, das 2 Instanzen meiner Anwendung gleichzeitig laufen (was ich gerne würde), da für einen kurzen Moment ja tatsächlich 2 offen sein müssen ... außerdem ist das sicherlich stiltechnisch ziemlich unschön.

Lange Rede kurzer Sinn, wie gebe ich meine Application wieder "zurück", nachdem ich sie für ne Weile irgendwo als Child eingetragen hatte ?

(Hinweis: Ich weiß nicht ob das richtig ist, aber ich benutze bewusst Application.Handle und nicht das Handle einer Form. Ich habe 2 Forms, und wenn ich das Handle einer dieser Forms nehme funktioniert es nicht richtig, sie wird dann nicht vernünftig als Child angezeigt sondern flackert allenfalls ein bisschen und ist sonst garnicht zu sehen.)
Daniel NR
  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 02:12 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