Einzelnen Beitrag anzeigen

Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Über den gesamten Bildschirm zeichnen

  Alt 22. Jul 2007, 18:50
Wenn ihr direkt über alle Fenster drüber hinweg zeichnen wollt und dazu bequem eine Canvas nehmen wollt, macht es so:
Delphi-Quellcode:
var
  DesktopDC: HDC;
  DesktopCanvas: TControlCanvas;
begin
  DesktopDC := GetDC(0);
  if DesktopDC = 0 then
  begin
    //Hier Fehlerbehandlung einfügen
  end
  else
  try
    DesktopCanvas := TControlCanvas.Create;
    try
      DesktopCanvas.Handle := DesktopDC;

      //Hier Zeichnen, z. B.
      DesktopCanvas.Draw(0, 0, Application.Icon);
    finally
      DesktopCanvas.Free;
    end;
  finally
    ReleaseDC(0, DesktopDC);
  end;
end;
Wenn ihr dann über den gesamten Bildschirm gemalt habt, könnt ihr mit folgendem aufruf ALLE Fenster neuzeichnen.
RedrawWindow(0, nil, 0, RDW_UPDATENOW or RDW_ALLCHILDREN or RDW_INVALIDATE or RDW_ERASE or RDW_INTERNALPAINT); Wenn ihr nur in einem Bereich gezeichnet habt, übergebt als zweites den Zeiger auf den rechteckigen Bereich.
Delphi-Quellcode:
var MyRect: TRect;
...
//z. B. MyRect := Rect(...);
RedrawWindow(0, @MyRect, 0, RDW_UPDATENOW or RDW_ALLCHILDREN or RDW_INVALIDATE or RDW_ERASE or RDW_INTERNALPAINT);
Anpassungsmöglichkeiten: Bei GetDC, ReleaseDC, RedrawWindow kann statt der (ersten) 0 auch ein Fensterhandle angegeben werden. Dann wird nicht über den gesamten Bildschirm, sondern nur über ein Fenster zezeichnet (auch von Fremdanwendungen).

Damit könnt ihr Cheats, die in einer Bildschirmecke ein unauffälliges Bildchen erscheinen lassen, programmieren für eure Spielchen.
Felix Alter
Japanurlaub 2015
  Mit Zitat antworten Zitat