Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fremde Anwendung in eigene Einbetten (https://www.delphipraxis.net/44293-fremde-anwendung-eigene-einbetten.html)

padavan 17. Apr 2005 09:38


Fremde Anwendung in eigene Einbetten
 
Hallo Delphianer,

hatte schon mal den Fall, dass ich einer anderen Anwendung beim starten die Position und Größe vorschreiben wollte. Klappte auch, ABER
wie schaffe ich es, wenn ich aus meiner Anwendung heraus ein anderes starte, das es dann in meins "eingebetet ist".

Konkreter Fall, wollte meinen Player um eine FFTAnalyse erweitern und habe dazu das VU_Meter-Projekt benutzt. Habe das Programm nun so abgeändert, dass es meinen Vorstellungen entspricht.
Klar, ich könnte den Quelltext mit übernehmen und es richtig integrieren, aber ich finde es als extra Prozess sinniger, da ich schon gemerkt habe,
dass es nicht 100% Kompatibel zu jeder Soundkarte ist, wenn das Programm also abschmiert, bleibt wenigstens mein Player am Leben.

Die Frage also, kann ich ähnlich wie einen Videostream eine andere Anwendung so in meiner Einbetten, dass es so aussieht also wäre es Teil des Hauptformulars?

Danke schonmal für jeden Anregung!

alcaeus 17. Apr 2005 09:40

Re: Fremde Anwendung in eigene Einbetten
 
Ganz einfach: hol dir das Handle vom Fenster das du auf deine Form setzen willst.
Anschliessend verwendest du SetParent um das Parent-Handle zu setzen (und verwendest dafuer Panel1.Handle oder was anderes)

Greetz
alcaeus

padavan 17. Apr 2005 11:45

Re: Fremde Anwendung in eigene Einbetten
 
Hallo alcaeus,

ganz einfach für den der´s drauf hat. Da kann ich mich leider noch nicht dazuzählen.
:-D

dürfte ich dich noch um ein kleines Beispiel bitten?
Wäre sehr nett.......
Grüße
Padavan

JasonDX 17. Apr 2005 12:12

Re: Fremde Anwendung in eigene Einbetten
 
Geht eigentlich relativ einfach:
Mit FindWindow das Fensterhandle finden, und mit SetParent das neue Parent setzen.

Delphi-Quellcode:
procedure MySetParent(TitelDerAnwendung: string; NeuesParentHandle: HWnd);
begin
  Windows.SetParent(FindWindow(nil, PChar(TitelDerAnwendung)), NeuesParentHandle);
end;
aufrufen kannst du das dann so (z.B. um ein 2. Formular auf dein erstes zu legen):
Delphi-Quellcode:
  MySetParent('Form2', Form1.Handle);

PS: Zum Thema Handle/Window Finden gibts hier in der dp einige Threads!



//Edit: Hab grad gemerkt, dass ich was vergessen hab

s.h.a.r.k 17. Apr 2005 13:41

Re: Fremde Anwendung in eigene Einbetten
 
Vielleicht ne blöde Frage, aber wird dann das Programm, welches eingebunden wurde, auch geschlossen, wenn das von padavan erstellte Programm beendet wird?!

Airblader 17. Apr 2005 13:43

Re: Fremde Anwendung in eigene Einbetten
 
Zitat:

Zitat von s.h.a.r.k
Vielleicht ne blöde Frage, aber wird dann das Programm, welches eingebunden wurde, auch geschlossen, wenn das von padavan erstellte Programm beendet wird?!

Probiers doch ;)

Ich kenn mich mit der API nich aus, aber ich würde sagen, wenn es nich so ist, könnte man per SendMessage einfach WM_CLOSE an die anwendung senden

air

alcaeus 17. Apr 2005 14:15

Re: Fremde Anwendung in eigene Einbetten
 
Ich denke nicht. Man koennte aber im OnClose des Parents aber einfach das ParentHandle des eingebundenen Fensters auf 0 setzen, und fertig. Alternativ koennte man auch das originale ParentHandle speichern und beim Schliessen des eigenen Programms wiederherstellen.

Greetz
alcaeus

padavan 19. Apr 2005 10:46

Re: Fremde Anwendung in eigene Einbetten
 
Zitat:

Delphi-Quellcode:
Windows.SetParent(FindWindow(nil, PChar(TitelDerAnwendung)), NeuesParentHandle);

wenn ich diesen Code ausführe, verschwindet die Anwendung vom Desktop (obwohl als "stayontop" deklariert), welche ich in mein Panel ziehen will.


Modifiziert von mir sieht obiger Vorschlag übrigens so aus:

Delphi-Quellcode:
windows.SetParent(findwindow(nil,PCHar('VU Meter')),Panel_VU_Meter.Handle);
irgendwie ersichtlich, was ich falsch mache?
:roll:

padavan 19. Apr 2005 11:46

Re: Fremde Anwendung in eigene Einbetten
 
Sorry, mein Fehler.

Hatte die Fremdanwendung ein paar Zeilen obendrüber (zwar in einer anderen Prozedur) mit Setpos ins Nirvarna Positioniert.

Wusste nicht, dass die vorgeschriebene Position damit quasi bis zum beenden gültigkeit hat.

Fazit: Funzt wunderbar.

:thumb:


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