AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Prozess in einen anderen 'hineinrendern'
Thema durchsuchen
Ansicht
Themen-Optionen

Prozess in einen anderen 'hineinrendern'

Offene Frage von "Der schöne Günther"
Ein Thema von Der schöne Günther · begonnen am 22. Mai 2013 · letzter Beitrag vom 22. Mai 2013
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.158 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
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Prozess in einen anderen 'hineinrendern'

  Alt 22. Mai 2013, 15:12
Ich kann dir leider nicht sagen warum dann der Hauptprozess nicht aktualisiert wird, aber MDI Anwendungen bestehen eigentlich aus einem Prozess und mehreren Fenstern und nicht aus mehreren Prozessen.

Ich könnte mir Vorstellen, dass es was damit zu tun haben könnte dass die Plugins Kindprozesse sind. Aber da kenne ich mich nicht wirklich aus. Keine Ahnung was für Auswirkungen Kindprozesse auf ihre "Eltern" haben können.
Du könntest ja mal (testweise) verusche die Plugins als eigenständige Prozesse starten.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (22. Mai 2013 um 15:15 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Prozess in einen anderen 'hineinrendern'

  Alt 22. Mai 2013, 15:23
MDI Anwendungen bestehen eigentlich aus einem Prozess und mehreren Fenstern und nicht aus mehreren Prozessen
Schonmal gut zu wissen

Ich kann auch einmal einen wildfremden Prozess nehmen, glaube aber nicht, dass es etwas damit zu tun hat - Im Grund geht es ja wohl um die Message Loop:

Wenn
  • das Plugin-Fenster das aktive Fenster im Hauptprogramm-Fenster ist
  • und hängt
  • und ich nun irgendwo in das Hauptprogramm-Fenster klicke

scheint Windows wohl direkt erst einmal (nicht asynchron!) eine Nachricht an das aktive Fenster dort drinnen zu senden. Das reagiert nicht, also hängt alles. Ob das so sein könnte?

Von FireMonkey habe ich (noch) keine Ahnung, der Satz "As such, Firemonkey can serve as merely a UI for an external application, or serve as the application itself." auf Wikipedia hat mich allerdings neugierig gemacht. Vielleicht wäre FM ja eine bessere Lösung?
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz