Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Prozess in einen anderen 'hineinrendern'

  Alt 22. Mai 2013, 13:49
Ich habe eine Hauptanwendung und weitere optionale Bestandteile die als eigene Prozesse realisiert wurden. Momentan ist es so einfach, dass die Plugin-Bestandteile
  • auf dem selben System,
  • im gleichen Account,
  • und sogar Kindprozesse des Hauptprogramms
sind.

Das Hauptprogramm ist immer sichtbar und stellt einen Bereich zur Verfügung, in welchem die Plugins dargestellt werden sollen. Ganz grob einmal so wie im Anhang.

Bislang habe ich einfach das entsprechende Fenster des Plugins zum Kindfenster des Hauptprogramm-Fensters gemacht:
Delphi-Quellcode:
if SetParent(
   <Plugin-HWnd>,
   <Hauptprogramm-HWnd>
)=0 then
   logError();

if not SetWindowPos(
   <Plugin-HWnd>,
   HWND_TOP,
   640,
   8,
   0,
   0,
   SWP_FRAMECHANGED or SWP_NOSIZE or SWP_SHOWWINDOW //or SWP_NOMOVE
) then
   logError();

Das funktioniert eigentlich super. Ich frage mich nur,
  1. ob ich das richtig gemacht habe oder es bessere Wege gibt
  2. Was ich dagegen tun kann, dass das Hauptprogramm-Fenster mit einfriert, wenn es das Kindfenster tut!

Ich habe mir spaßeshalber auf der Oberfläche des Plugins einen Button mit sleep(5000) gelegt: Die Oberfläche des Plugins friert ein, die Hauptanwendung läuft weiter, die grafische Oberfläche wird auch weiterhin aktualisiert. Klicke ich nun irgendwo auf die Oberfläche des Hauptprogramms, wird diese auch nicht weiter aktualisiert.

Warum?
Ich lese immer von Multiple Document Interfaces, aber das scheint irgendwie auch eher eine Weltanschauung, als eine konkrete Menge an WinAPI-Befehlen zu sein, oder?
Miniaturansicht angehängter Grafiken
ist-das-so-etwas-wie-mdi.png  

Geändert von Der schöne Günther (22. Mai 2013 um 13:52 Uhr) Grund: Liebevoll gezeichnetes Bild
  Mit Zitat antworten Zitat