Einzelnen Beitrag anzeigen

Benutzerbild von CWBudde
CWBudde

Registriert seit: 21. Apr 2006
Ort: Hannover
12 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Unsichtbares Zeichnen eines Fensters anhand eines Handles

  Alt 8. Jan 2011, 16:39
Der Satz ergibt keinen Sinn. Deswegen frage ich dich: Was willst du?

Und noch der Hinweis: Nicht sichtbare Fenster werden von Windows nicht gezeichnet.
Ich kann nochmal den kompletten Kontext erläutern. Also:

Es geht um ein (bzw. mehrere) Plugins, das unter anderem eine Oberfläche anbietet. Diese Oberfläche kann man durch Übergeben eines Fenster-Handles (HWND) in ein Fenster zeichnen lassen. Über die Interna der Plugins ist nichts weiter bekannt, da diese von Drittanbietern erstellt sein können. Mir würde es aber auch reichen, wenn die Lösung erstmal nur für meine Plugins (mit Delphi erstellt) funktioniert.

Wie gesagt, wenn man dem Plugin ein Fenster-Handle übergibt (z.B. eines TForm-Objektes), dann reagiert das Plugin über dieses Handle auf Botschaften und lässt sich somit steuern und eben auch zeichnen. Das alles hängt natürlich zum einen von der Host-Applikation, aber auch vom Framework (VCL) und dem Betriebssystem ab.

Derzeit lasse ich das Plugin auf eine Form zeichnen um davon direkt einen Screenshot zu machen. Wenn aber der Taskmanager darüber liegt (Always-On-Top) ist das ganze Käse.

Der Versuch das Fenster einfach in einen Bereich außerhalb des sichtbaren Bildschirms zu schieben führt genau zu dem, was hier bereits angesprochen wurde. In dem Fall ist das Fenster nämlich nicht mehr sichtbar und wird auch nicht gezeichnet. Bzw. wenn ich das Fenster nur zur Hälfte aus dem Bildschirm herausschiebe, dann wird es auch nur zu even dieser Hälfte gezeichnet.

Ich hatte daher gehofft eventuell eine bestimmte Botschaft an das Plugin (bzw. mit Bezug auf das Handle) absetzen zu können, das ein Neuzeichnen (auch außerhalb des Bildschirmes) erzwingt.

Da es mir nur um einen Screenshot geht hatte ich gehofft, dass es vielleicht sogar möglich sei, z.B. den WM_Paint-Befehl direkt mit einem Device-Context-Handle des TBitmap-Objektes absetzen zu können um das Plugin sich direkt in das Bitmap zeichnen zu lassen (derzeit verwende ich BitBlit um den Screenshot zu kopieren).


Doch jetzt habe ich es. Du willst die Oberfläche eines nicht sichtbaren Fensters in ein Bitmap kopieren. Wie gesagt, nicht sichtbare Fenster werden nicht gezeichnet. Eventuell könnte man was mit WM_PRINT erreichen.
An WM_PRINT habe ich noch nicht gedacht. Ich muss mir mal die Dokumentation darüber durchlesen, bislang hatte ich nur mal bei WM_PAINT geschaut. Allerdings bin ich halt nicht so der WinAPI-Experte.

Trotzdem Danke für die schnelle Antwort,

Christian
Christian
  Mit Zitat antworten Zitat