Delphi FAQ

Jak rysować po pulpicie

Adam Boduch

Po pulpicie można rysować jak w zwykłym Canvasie. Wystarczy tylko pobrać uchwyt pulpitu:

Canvas.Handle:=GetWindowDC(GetDesktopWindow);
//tutaj używamy funkcji Canvas'a do rysowania
 
// rysujemy np. kwadrat
Canvas.Rectangle(20, 20, 220, 220);
FAQ

5 komentarzy

Do rysowania bezposrednio po pulpicie trzeba wyciagnac okno znajdujace sie najnizej (pulpit) ponizej jak to zrobic (dziala w Win9x na 100%, w WinXP z tez wg wstepnych testow):

function GetDesktopListViewHandle: THandle;
var 
  S: String;
begin
  Result := FindWindow('ProgMan', nil);
  Result := GetWindow(Result, GW_CHILD);
  Result := GetWindow(Result, GW_CHILD);
  SetLength(S, 40);
  GetClassName(Result, PChar(S), 39);
  if PChar(S) <> 'SysListView32' then
  Result := 0;
end;

nastepnie podobnie jak w przykladzie powyzej tyle ze korzystamy z zrobionej funkcji do uchwycenia okna pulpitu/tapety np:

Canvas.Handle:=GetWindowDC(GetDesktopListViewHandle);
Canvas.Rectangle(20, 20, 220, 220);

PiXel: pulpit mozna wyczyścić w ten sposób:

procedure TForm1.Button2Click(Sender: TObject);
var p: PRect;
begin
New(p);

p.Left := 20; p.Right := 220;
p.Top := 20; p.Bottom := 220;

RedrawWindow(GetDesktopWindow, p, 0, RDW_ERASE or RDW_INVALIDATE or RDW_FRAME or RDW_ALLCHILDREN);

Dispose(p);
end;

Sanjuro: wszystko działa jak należy, tylko jak wyczyścic canvas pulpitu?

no dobrze, wypowiedzi tego typu jest PEŁNO na necie, ale tutaj tak naprawdę nie rysujemy po pulpicie tylko po ekranie, jak w takim razie rysować po pulpicie (czyli pod tym "czyś" co jest pod ikonkami)