Einzelnen Beitrag anzeigen

peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#7

AW: Form in Service rendern

  Alt 19. Jun 2019, 07:36
Hallo Leute,
ich habe eine ungewöhnliche Anforderung erhalten:
Ich brauche einen Windows-Dienst, der eine Form rendern soll und die als Bitmap (oder natürlich komprimiert) übers Netzwerk verschicken soll.
Kurz zu den Hintergründen: Gesamtarchitektur ist ein Windows Server 2012R2, auf dem ein Dienst läuft (den soll ich machen). Dieser Dienst erzeugt irgendwie eine schöne Darstellung eines Dashboards und streamt diese Darstellung per Netzwerk (Multicast) an mehrere Clients. Ob das nun Mini-PCs werden oder irgendwas à la DLNA, MJPEG, H.264 o.Ä. wird, ist erstmal nebensächlich, es geht erstmal darum, ob das überhaupt machbar ist. Die Framerate ist unkritisch (1 fps reicht).

Meine Idee ist jetzt, die Darstellung als unsichtbare TForm zu erstellen, um die VCL nutzen zu können (die Form gibts nämlich schon als normale VCL-Anwendung). Das ganze muss aber zwingend als Dienst laufen, da der Server ja normalerweise headless läuft und niemand angemeldet ist. Die Anwendung auf die ganzen Empfänger zu verteilen ist aus Sicherheitsgründen (Netztrennung der gemonitorten Daten) leider keine Option (so war's nämlich vorher). Und evtl. geht der Empfang später sogar ohne Mini-PCs mit der DLNA-Funktion der Fernseher.

Um endlich mal aufn Punkt zu kommen: wie kann ich in einem Service eine unsichtbare Form rendern und das Ergebnis als Bitmap erhalten?
Ich hab schon was gelesen, dass interaktive Services nicht mehr möglich sind, aber interaktiv brauch ichs ja nicht, ich wills ja nicht direkt dem User anzeigen... Das Dashboard komplett per Software in ein Bitmap quasi per Hand zu zeichnen wird wahrscheinlich viiiiel zu aufwendig - deswegen die Idee mit der VCL.
Mir fehlt leider komplett der Ansatzpunkt. Habt ihr eine Idee?

Vielen Dank schonmal für euer Hirnschmalz.

Stephan
Ein Service läuft normalerweise ohne einen Desktop und damit kann man da, soweit ich weis, auch keine Window-Handles erzeugen. Aber es gibt da eine API-Funktion CreateDesktop, die Du Dir mal ansehen solltest.

Wenn Du das Form ohne Fehler erzeugen kannst sollte es per PaintTo möglich sein, es auf einen Bitmap-Canvas zu zeichnen.
Peter Below
  Mit Zitat antworten Zitat