NicoOD hat geschrieben:
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...
Ich könnte den ganzen Code geben aber habe nicht mehr. Ich hatte letzten Sommer meine Partition mit der ARbeit von 15 Jahren überschrieben weil ich mal wieder beschies..... Linux ausprobieren wollte.
Ich hatte herumprobiert wie Tabbed-Windowoberfläche aussehen würde. Ich hatte den Bildschirm in 3 Bereiche geteilt rechts und unten kleine Bereich wo Hilfsprogramme plaziert werden oben Links große Bereich wo Hauptprogramme erscheinen. Nun zu deinem Problem ich sehe du hast es schon einiges gelöst. Vielleicht helfen dir diese Sachen weiter:
1. Alle geöffneten Fensterhandles bekommst du mit Windows.
EnumWindows. Wenn ein Fenster als Vorgänger (Parent) DesktopWindow hat und bei GWL_ExStyle-Eigenschaft die Attribute WS_EX_TOOLWINDOW nicht hat dann ist es Hauptfenster.
2. Wenn du ein bestimmtes Programm einbetten willst dan Starte es mit TProcess und bette danach ein. Weil ansonsten bekommst du nicht mit ob das Programm beendet wird. Und mit Timer zu kontrollieren ob das Programm noch läuft ist kein gute Lösung. Hier sind Beispiele für TProcess:
http://wiki.lazarus.freepascal.org/Exec ... rograms/de
Aber viel bessere Lösung ist das was Windows Task Leiste auch verwendet
WH_SHELL Hook. Damit wird dein Programm automatisch über neu erstelltes und zerstörtes (PRogramm beenden) oder Fokusänderung.... von Fenster benachrichtigt. Und du Bekommst nur Handle von Hauptfenster.
Leider funktioneren die DLLs die mit Delphi erstellt werden indem Fall nicht. In dem Theme ist Internet ist voll mit Fragen von frustierten Delphi-Programmierern.
Ich habe auch nach Tagen erfolglose DLL erstellung bei Torry ein fertiges dll-gefungen. Packe hier als Anhang. Quelltext liegt bei vielleicht gelingt es dir mit mit Freepascal funktionierende dll zu erstellen. Der Junge hat auch aus dem Grunde nur dll mit C-Programmiert als andere in Delphi.
Da liegt auch ein Bespielspielprogramm dort kannst du z.b. jedes neues FEnster in dein Panel einbetten und wieder entfernen achte auf HSHELL_WINDOWCREATED, HSHELL_WINDOWDESTROYED Messages.
Edit:
Ob ShellHooks mit WinCE funktionieren weiß ich nicht deshalb würde ich erst in WinCE-Api danach gucken. Wenn du in windows.pas von WinCE die Funktion ShellProc und Message WH_SHELL findest mußte es funktionieren. Ich habe nie WinCE verwendet außer einmal zu schauen ob Lazarus wirklich WinCE programme erstellen kann. Also ein Paar Buttons kompilieren ausführen fertig
Edit2:
Vielleicht kennst du es auch aber bei Schweizer gibts gute tipps:
http://www.swissdelphicenter.ch/de/system.php
http://www.delphi-treff.de/tipps/system/
So ein Tipps&Tricks Pages wäre doch für Lazarus-Forum auch gut
Torry.net ist momentan down deshalb hast du die Biblothek hier: