Programm im Programm?

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
NicoOD
Beiträge: 6
Registriert: Fr 8. Apr 2011, 08:38
OS, Lazarus, FPC: WinXP Prof. / Win2k (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit

Programm im Programm?

Beitrag von NicoOD »

Hallo Forum!

Ich bin zwar hier neu angemeldet, aber schon länger heimlicher Mitleser von den Beiträgen hier. Außerdem sind mir Delphi und Lazarus nicht unbedingt fremd...

Meine Frage ist entweder zu speziell, oder die Suche versagt... :(

Also: Ich möchte auf einem PNA mit WinCE 5.0 ein Programm laufen lassen, welches sozusagen einen Rahmen bildet und in einem Fenster oder einem Bereich (Frame?) ein weiteres (fremdes) Programm laufen lassen kann.
Beispielsweise soll mein Programm die Bildschirmauflösung 480x272 Pixeln voll ausnutzen und in einem Fenster/Rahmen/Object/etc... mit einer Auflösung von 320x240 Pixeln ein fremdes Programm eingebettet werden.

Ist soetwas möglich? Im Webbrowser geht das doch auch...(?)

Vielen Dank schon mal an Euch!

Gruß -

Nico ;o)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Programm im Programm?

Beitrag von pluto »

Theoretisch müsste das über TProcess gehen: http://wiki.lazarus.freepascal.org/Exec ... rograms/de" onclick="window.open(this.href);return false;

Aber ob das wirklich geht kann ich nicht sagen. Ich weiß z.b. beim mPlayer(Ein Multimediaplayer unter Linux), dass es dort entsprechende Aufruf Parameter gibt. Vielleicht ist das in deinem Fall auch so.
MFG
Michael Springwald

NicoOD
Beiträge: 6
Registriert: Fr 8. Apr 2011, 08:38
OS, Lazarus, FPC: WinXP Prof. / Win2k (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit

Re: Programm im Programm?

Beitrag von NicoOD »

Hi nochmal,
pluto hat geschrieben:Theoretisch müsste das über TProcess gehen: http://wiki.lazarus.freepascal.org/Exec ... rograms/de" onclick="window.open(this.href);return false;
Danke für den Link - soweit war ich auch schon. Aber das ist nicht ganz mein Problem.

Ich habe mal ein in Lazarus angefertigtes Formular angehängt, wie ich mir das vorstelle. In diesem Fall habe ich den Frame für das fremde Programm mit einem gelben Panel dargestellt.
Das Hauptprogramm muß natürlich weiterlaufen. Das eingebettete "Unterprogramm" soll auch (fast) uneingeschränkt weiterlaufen - mit eben der Einschränkung, daß es sich (grafisch) nur in dem zugewiesenen Frame bewegen darf. Optimal wäre es, wenn das "gefangene" Programm den Frame als Vollbild-Auflösung ansieht...

Da es in Browsern ohne weiteres möglich ist und diese auch irgendwie programmiert wurden, bin ich mir sicher, daß es mit FreePascal/Lazarus auch geht...

Was meint Ihr..?

Ach ja, was auch noch dazu paßt:
Kann man dem anderen Programm auch einen anderen "Screen.width"-/"Screen.height"-Parameter vorgaukeln/vorgeben und dann starten?
Das wäre zumindest eine Alternative...

Gruß -

Nico ;o)
So stelle ich mir das optisch vor... ;-)
So stelle ich mir das optisch vor... ;-)

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Programm im Programm?

Beitrag von MAC »

wie meinst du das ,dass in Browsern geht ?
Im Broser wird soweit ich wie nie ein Programm dar gestellt- zumindest keine executable - wenn dann wird höchstens ein Programm aus einer Skriptsprache interpretiert , aber eine eigene Skriptsprache ist "schwer" zu erstellen...

Code: Alles auswählen

Signatur := nil;

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Programm im Programm?

Beitrag von Maik81ftl »

MAC hat geschrieben:wie meinst du das ,dass in Browsern geht ?
Im Broser wird soweit ich wie nie ein Programm dar gestellt- zumindest keine executable - wenn dann wird höchstens ein Programm aus einer Skriptsprache interpretiert , aber eine eigene Skriptsprache ist "schwer" zu erstellen...
Diese vergleich meint er wohl auch... :D
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

NicoOD
Beiträge: 6
Registriert: Fr 8. Apr 2011, 08:38
OS, Lazarus, FPC: WinXP Prof. / Win2k (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit

Re: Programm im Programm?

Beitrag von NicoOD »

Maik81ftl hat geschrieben:Diese vergleich meint er wohl auch... :D
Jepp, den Vergleich meine ich... ;-)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Programm im Programm?

Beitrag von pluto »

Das was du vorhast geht nicht so einfach.

Eine andre Idee wäre: Unter Windows kann man relativ einfach ein eigenen Desktop erstellen.
Vielleicht kann man den Desktop so einstellen, dass es aussieht, als ob der Desktop im Programm wäre. Und das Programm was du starten möchtest, könntest du in dem Desktop Starten.
Aber ob das geht weiß ich nicht. Es wäre nur vorstellbar.
MFG
Michael Springwald

Maik81ftl
Beiträge: 619
Registriert: Mi 9. Mär 2011, 16:34
OS, Lazarus, FPC: Ubuntu10.04 LTS (L 0.9.31.0 FPC 2.4.4)
CPU-Target: 64Bit
Wohnort: seit 01.06.2011 in Wahlstedt

Re: Programm im Programm?

Beitrag von Maik81ftl »

pluto hat geschrieben:Das was du vorhast geht nicht so einfach.

Eine andre Idee wäre: Unter Windows kann man relativ einfach ein eigenen Desktop erstellen.
Vielleicht kann man den Desktop so einstellen, dass es aussieht, als ob der Desktop im Programm wäre. Und das Programm was du starten möchtest, könntest du in dem Desktop Starten.
Aber ob das geht weiß ich nicht. Es wäre nur vorstellbar.
das, was ich eher denken würde wäre die Verwendung des TProzess. dies allerding in ein frame reinzugekommen, macht hier wohl die eigendlich sache aus.
alterativ das Teilprogramm extra schreiben (als dll) und versuchen das dann einzubinden. solange es nur durch das eigendliche Progi aufgerufen werden soll sollte dies kein thema sein.
Ubuntu 10.04 LTS ist meine Heimat. Lazarus ist meine Sprache :D und der Kreis Segeberg meine LIEBE :D

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Programm im Programm?

Beitrag von carli »

NicoOD hat geschrieben:
PiP1.jpg
Für sowas müsstest du ja die gesamte Grafikpipeline des Betriebssystems nachbauen. Gerade um solche Szenarien zu ermöglichen, wurde auch das Wayland-Protokoll entworfen, welches aber sich eher auf Mobile Geräte und auf die Linux-Domäne einschränken wird.

Für deinen Fall könntest du das innere Programm als NSPlugin (auch als Firefox-Plugin bekannt) bauen oder als ActiveX-Komponente.
Oder du denkst dir selbst ein Interface aus, mit dem du die Grafikinformation raus, und die Maus/Tastaturdrücke reinbringst.

Da es aber ein fremdes Programm ist, würde das schwer werden.
Der einfachste Weg wäre in dem Fall, das innere Programm als "immer im Vordergrund" zu platzieren und die Position des Fensters setzen.
Dann bleibt es zwar Einzelprogrammbetrieb, aber das macht WinCE ja sowieso aus.

NicoOD
Beiträge: 6
Registriert: Fr 8. Apr 2011, 08:38
OS, Lazarus, FPC: WinXP Prof. / Win2k (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit

Re: Programm im Programm?

Beitrag von NicoOD »

carli hat geschrieben:Der einfachste Weg wäre in dem Fall, das innere Programm als "immer im Vordergrund" zu platzieren und die Position des Fensters setzen.
Dann bleibt es zwar Einzelprogrammbetrieb, aber das macht WinCE ja sowieso aus.
@Carli:
Das klingt ja schon nach einer annehmbaren Teil-Lösung. Zumindest zum Experimentieren.
Was ich aber noch nicht geschafft habe, ist, daß ich dem "inneren Programm" die Position und den "Rahmen" vorgebe. Mit der Realisierung haperts da. Bisher legt sich das Programm dann immer als Vollbild in den Vordergrund...
Hast Du/hat jemand da vielleicht ein Programm-Schnipsel zur Ansicht?

Gruß -

Nico ;o)

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Programm im Programm?

Beitrag von carli »

http://msdn.microsoft.com/en-us/library ... s.71).aspx
msdn hat geschrieben:WS_EX_TOPMOST Specifies that a window created with this style should be placed above all nontopmost windows and stay above them even when the window is deactivated. An application can use the SetWindowPos member function to add or remove this attribute.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Programm im Programm?

Beitrag von Christian »

Haarstreubend die Antworten,

ich fasse mal zusammen
Pluto Antwort 1: Das geht bestimmt über TProcess
Pluto Antwort 2 : Das geht nicht so einfach.

Div. geplänkel darüber was er nun mit im Webbrowser meint.
Carli: Dafür muss man eine grafikpipeline des BS nachbaun ???

Solangs bei Windows bleibt ist hier deine Antwort:
http://msdn.microsoft.com/en-us/library/ms633541(VS.85" onclick="window.open(this.href);return false;).aspx

Für andere Plattformen muss man das allerdings gesondert betrachten.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Bora4d
Beiträge: 290
Registriert: Mo 24. Dez 2007, 13:14
OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
CPU-Target: AMD64X2

Re: Programm im Programm?

Beitrag von Bora4d »

Das geht, ich hab's mal unter Windows XP gemacht dort alle mögliche Programme Windows-Taschenrechner, Firefox, Thunderbird, Office Programme in einem Panel laufen lassen. Du mußt einfach Hauptfenster-Handle von dem Program ermitteln und mit Windows.Setparent dein Panel als Parent-Fenster übergeben.
Mit TProcess kannst du Programm kontrollieren, also ob die noch laufen ... Wenn die extern gestartet werden mußt du in bestimmten Intervallen kontrollieren ob die noch laufen.
Ob das auf WinCe übertragbar ist weiß ich nicht, aber ich denke mal schon weil beide fast gleiche haben soll.
Suche in Windows api nach:
FindWindow
SetParet


Google nach "Delphi FindWindow SetParent" da wirst du haufen alte Beispiele finden.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Programm im Programm?

Beitrag von carli »

Christian hat geschrieben: Carli: Dafür muss man eine grafikpipeline des BS nachbaun ???

Solangs bei Windows bleibt ist hier deine Antwort:
http://msdn.microsoft.com/en-us/library/ms633541(VS.85" onclick="window.open(this.href);return false;).aspx
Ah gut, wusste ich vorher nicht :)

NicoOD
Beiträge: 6
Registriert: Fr 8. Apr 2011, 08:38
OS, Lazarus, FPC: WinXP Prof. / Win2k (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit

Re: Programm im Programm?

Beitrag von NicoOD »

Bora4d hat geschrieben:Das geht, ich hab's mal unter Windows XP gemacht dort alle mögliche Programme Windows-Taschenrechner, Firefox, Thunderbird, Office Programme in einem Panel laufen lassen. Du mußt einfach Hauptfenster-Handle von dem Program ermitteln und mit Windows.Setparent dein Panel als Parent-Fenster übergeben.
Mit TProcess kannst du Programm kontrollieren, also ob die noch laufen ... Wenn die extern gestartet werden mußt du in bestimmten Intervallen kontrollieren ob die noch laufen.
Ob das auf WinCe übertragbar ist weiß ich nicht, aber ich denke mal schon weil beide fast gleiche haben soll.
Sorry, war mal 'n Tag nicht am Compi... ;-)

Also, das was Du da schreibst, Bora4d, klingt echt sehr interessant. Kannst Du mir da ein wenig unter die Arme greifen? Wenn man das fremde Programm (der Name ist beim Aufruf dann schon bekannt) in einem TPanel ablaufen lassen kann, wäre das DER Hit! So in der Art habe ich mir das auch vorgestellt...
Zuerst würde ich das dann auch in deiner Win32-Umgebung (WinXP) versuchen. Entweder mit Delphi, oder mit Lazarus.
Später kann man das ja immer noch versuchen auf WinCE zu übertragen.
Hast Du den Code davon noch? Ich möchte nicht alles abkupfern, nur mir Anregungen holen. Da geht das Lernen (bei mir) wesentlich schneller...

@all: Also der Vergleich mit dem Browser ist nur entstanden, da man ja z.B. eine Seite mit - sagen wir mal - 20 Frames erstellen kann, die wiederum z.B. jeweils einen Flash-Video eingebunden haben. Eine Instanz vom Flash-Player wird in jedem Frame einzeln gestartet, wobei sich der Player auch jeweils an die Frame-Maße (Auflösung) anpassen muß. Und da geht das ja auch...

Aber schonmal VIELEN DANK für Eure Ansätze !!!
Als ich damals vor vielen Monden noch Programme in Maschinensprache für den C64 (kennt den noch jemand?) geschrieben habe, gab es noch lange kein Forum (schon gar nicht ein "Internet")... ;-)

Schönen Wochenstart -

Nico ;o)

Antworten