Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Emitteln welche Pixel zur Zeit gemalt werden (https://www.delphipraxis.net/32808-emitteln-welche-pixel-zur-zeit-gemalt-werden.html)

waschi 28. Okt 2004 09:54


Emitteln welche Pixel zur Zeit gemalt werden
 
Hallo Delphifreunde.

Ist es mit hilfe einer Windows API zu erfahren welche auf dem Bildschirm Pixel gerade neu gezeichtnet werden?

Danke

Tschüss waschi

Luckie 28. Okt 2004 09:58

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
Nein, gibt es meines Wissens nicht. Und wenn es das gäbe, viel Spass beim Verarbeiten der Informationsflut: Nehmen wir eine Auflösung von 1280 x 1024 und wir holen ein maximiertes Fenster au der Taskbar, dann wären das 1310720 geänderte Pixel.

Tubos 28. Okt 2004 10:04

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
...und wenn beim Zeichnen jedes Pixels Informationen gespeichert werden müssten, welches Pixel das ist, würde das Ganze seeehr langsam werden...

waschi 28. Okt 2004 10:15

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
Windows selber muss es ja auch irgendwo machen :wink:

Noch jemand eine Idee?

Luckie 28. Okt 2004 11:14

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
Nein, das ermiitelt den Berich der neu gezeichnet werden muss und schickt, dann an das oder die Fenster, die in diesem Breich liegen eine WM_PAINT Nachricht und benachricgtigt so die entsprechenden Fesnter, dass sie sich neu zeichnen müssen.

waschi 28. Okt 2004 11:29

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
genau den Bereich brauche ich!
Eine Idee wie ich an den Bereich komme?

waschi 29. Okt 2004 08:46

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
kannst du mir helfen Luckie?

Tubos 29. Okt 2004 08:54

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
Hier im Forum suchenHooks
MSDN-Library durchsuchenHooks
Bei Google suchenDelphi Hooks

Habe aber noch nie mit Hooks gearbeitet.

waschi 8. Nov 2004 09:15

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
leider kann ich mit deiner antwort nix anfangen.

luckie hatte doch schon einen ansatz, könntest du noch ein wenig darauf eingehen bitte, luckie

alcaeus 8. Nov 2004 09:39

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
Hi waschi,

du musst mit Hilfe von Hooks überprüfen, ob die WM_PAINT-Nachricht an ein x-beliebiges Fenster gesendet wurde (in deinen Fenstern bemerkst du dies ja mit OnPaint). Verwend doch einfach mal die Suchlinks, Hooks wurden hier schon oft genug durchbesprochen. (AFAIK gibts auch irgendwo ein Tut dafür).

Greetz
alcaeus

atreju2oo0 8. Nov 2004 10:17

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
Mit diesem Vorgehen kriegst Du aber mehr als die zu Ändernden Pixel...
Wenn Du 2 Fenster hast die sich überlappen und das eine um 3 Pixel bewegst
zeichnet Windows trotzdem das ganze Fenster. Du kriegst also nur die Handles der
Fenster heraus und kannst von dennen die Größe kriegen.
Und um die dann zu ändern müßtest Du dann die Paint-Methoden der Fenster überschreiben...

Das Tutorial hierzu kriegste hier und ist sehr gut erklärt... finde ich!
Tutorial Hooks
Aber auch gute Erklärungen machen ein schwieriges Thema nicht leicht... :zwinker:

Vjay 8. Nov 2004 10:54

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
Zitat:

Zitat von atreju2oo0
Mit diesem Vorgehen kriegst Du aber mehr als die zu Ändernden Pixel...
Wenn Du 2 Fenster hast die sich überlappen und das eine um 3 Pixel bewegst
zeichnet Windows trotzdem das ganze Fenster. Du kriegst also nur die Handles der
Fenster heraus und kannst von dennen die Größe kriegen.
Und um die dann zu ändern müßtest Du dann die Paint-Methoden der Fenster überschreiben...

Das Tutorial hierzu kriegste hier und ist sehr gut erklärt... finde ich!
Tutorial Hooks
Aber auch gute Erklärungen machen ein schwieriges Thema nicht leicht... :zwinker:

Nö, es werden nur die 3 Pixel-Spalten/Zeilen als nicht validierte Region markiert. Wenn in der WM_PAINT das Programm allerdings alles neu zeichnet, wie es meist Delphi-Programme machen (OnPaint und getDC statt BeginPaint - alles neu) ist das eigentlich falsch.

atreju2oo0 8. Nov 2004 11:20

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
Ups... Das wusste ich nicht!
Also bestimmt im Endeffekt die Paint-Methode des Fensters was neu gezeichnet wird?
Wie kommt man denn dann an die Zone ran? :gruebel:

waschi 8. Nov 2004 11:33

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
hey schoen das schon ein paar über, das meiner meinung nach sehr interessante, thema diskutieren. :thumb:


vielleicht schaffen wir es ja ein bisschen code zu sammeln.

Vjay 8. Nov 2004 11:42

Re: Emitteln welche Pixel zur Zeit gemalt werden
 
Zitat:

Zitat von atreju2oo0
Ups... Das wusste ich nicht!
Also bestimmt im Endeffekt die Paint-Methode des Fensters was neu gezeichnet wird?
Wie kommt man denn dann an die Zone ran? :gruebel:

Delphi-Quellcode:
int GetUpdateRgn(

    HWND hWnd,   // handle of window
    HRGN hRgn,   // handle of region
    BOOL bErase    // erase background flag
   );
oder alternativ

Delphi-Quellcode:
BOOL GetUpdateRect(

    HWND hWnd,    // handle of window
    LPRECT lpRect,    // address of update rectangle coordinates
    BOOL bErase    // erase flag
   );
Oder nicht die Standard-Canvas benutzen sondern mit

Delphi-Quellcode:
HDC BeginPaint(

    HWND hwnd,   // handle to window
    LPPAINTSTRUCT lpPaint   // pointer to structure for paint information
   );
arbeiten. Diese setzt automatisch die Clipping-Region. Kann man auch bei

Delphi-Quellcode:
HDC GetDCEx(

    HWND hWnd,   // handle of window
    HRGN hrgnClip,   // handle of clip region
    DWORD flags    // device-context creation flags
   );
als Flag angeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:50 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