AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Unsichtbares Zeichnen eines Fensters anhand eines Handles
Thema durchsuchen
Ansicht
Themen-Optionen

Unsichtbares Zeichnen eines Fensters anhand eines Handles

Ein Thema von CWBudde · begonnen am 8. Jan 2011 · letzter Beitrag vom 8. Jan 2011
Antwort Antwort
Benutzerbild von CWBudde
CWBudde

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

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
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 22:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz