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

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
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Formular an andere Anwendung binden

  Alt 15. Jul 2012, 08:06
Zitat von MSDN:
For compatibility reasons, SetParent does not modify the WS_CHILD or WS_POPUP window styles of the window whose parent is being changed. Therefore, if hWndNewParent is NULL, you should also clear the WS_CHILD bit and set the WS_POPUP style after calling SetParent. Conversely, if hWndNewParent is not NULL and the window was previously a child of the desktop, you should clear the WS_POPUP style and set the WS_CHILD style before calling SetParent.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 15. Jul 2012, 09:54
Hey, danke, eigentlich habe ich den Artikel gelesen, aber manchmal braucht man irgendwie jemanden, der einen mit der Nase draufstößt ...

Ist der Aufruf so richtig (bzw. eher was stimmt daran nicht, nach dem zurückgeben hab ich nämlich immer noch nichts in der Taskbar ...) ?

Delphi-Quellcode:
 // als Child eintragen

SetWindowLongPtr(Application.Handle,GWL_STYLE,
  getWindowLong(Application.Handle, GWL_STYLE) or WS_CHILD and (not WS_POPUP));
Windows.SetParent(Application.Handle,NewHandle);

 // wieder "zurückgeben"

Windows.SetParent(Application.Handle,0);
SetWindowLongPtr(Application.Handle,GWL_STYLE,
  getWindowLong(Application.Handle, GWL_STYLE) or WS_POPUP and (not WS_CHILD));
Daniel NR

Geändert von G-Baumstamm (15. Jul 2012 um 11:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Formular an andere Anwendung binden

  Alt 15. Jul 2012, 10:47
Habe gerade nicht zum testen da, aber wieso Application.Handle, geht es nicht um ein Form?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  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 15. Jul 2012, 11:14
(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.)
Frag mich nicht warum das so ist, kam mir auch komisch vor.
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 11:45 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