![]() |
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 ![]() 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! |
Re: Fremde Anwendung in eigene Einbetten
Ganz einfach: hol dir das Handle vom Fenster das du auf deine Form setzen willst.
Anschliessend verwendest du ![]() Greetz alcaeus |
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 |
Re: Fremde Anwendung in eigene Einbetten
Geht eigentlich relativ einfach:
Mit FindWindow das Fensterhandle finden, und mit SetParent das neue Parent setzen.
Delphi-Quellcode:
aufrufen kannst du das dann so (z.B. um ein 2. Formular auf dein erstes zu legen):
procedure MySetParent(TitelDerAnwendung: string; NeuesParentHandle: HWnd);
begin Windows.SetParent(FindWindow(nil, PChar(TitelDerAnwendung)), NeuesParentHandle); end;
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 |
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?!
|
Re: Fremde Anwendung in eigene Einbetten
Zitat:
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 |
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 |
Re: Fremde Anwendung in eigene Einbetten
Zitat:
Modifiziert von mir sieht obiger Vorschlag übrigens so aus:
Delphi-Quellcode:
irgendwie ersichtlich, was ich falsch mache?
windows.SetParent(findwindow(nil,PCHar('VU Meter')),Panel_VU_Meter.Handle);
:roll: |
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