procedure TForm1.Button7Click(Sender: TObject);
var
  i,dx,dy,bx,by: integer;
  dc,DCDtOrig,DCBildBg, hMaskeDC,DCBackg,DCTemp,DCZ: HDC;
  hbm,hbold,hbBackg,hbTemp: HBitmap;
  Bildbg,maske,z: TBitmap;
  ierr: Boolean;
begin
  BildBg:= TBitmap.Create;
  BildBg.LoadFromFile('BigSky.bmp');
  Bx:= Bildbg.Width;
  by:= Bildbg.Height;
  DCBildBg:= BildBg.Canvas.Handle;
  dc:= CreateDC('Display',nil,nil,nil);
  dx:= screen.Width;
  dy:= screen.Height;
  // ursprünglichen Desktop in hbOld sichern
  DCDtOrig:= CreateCompatibleDC(dc);
  hbm:= CreateCompatibleBitmap(dc,dx,dy);
  Hbold:= SelectObject(DCDtOrig,hBM);
  BitBlt(DCDtOrig,0,0,dx,dy,dc,0,0,SRCCopy);
 // Bitmap (Bild auf Desktop zeichnen)
  StretchBlt(dc,0,0,dx,dy,DCBildbg,0,0,bx,by,SRCCopy);
  //Bildschirm in Speicherbitmap hbBildg abspeichern
  DCBackg:=  CreateCompatibleDC(dc);
  hbbackg:= CreateCompatibleBitmap(dc,dx,dy);
  SelectObject(DCBackg, hbbackg);
  BitBlt(DCBackg,0,0,dx,dy,dc,0,0,SRCCopy);
//Bildschirm in temporärer Speicherbitmap ablegen,in die später gezeichnet werden soll
  DCTemp:=   CreateCompatibleDC(dc);
  hbTemp:= CreateCompatibleBitmap(dc,dx,dy);
  SelectObject(DCTemp, hbTemp);
  BitBlt(DCTemp,0,0,dx,dy,DCBackg,0,0,SRCCopy);
  //Bitmap für maske, Datei enthält zwei Masken um das Bitmap transparent zu zeichnen
  maske:= TBitmap.Create;
  maske.LoadFromFile('Maske2.bmp');
  hMaskeDC:= Maske.Canvas.Handle;
  //weiteres Temporäres Bitmap, das in die temporäre Oberfläche kopiert wird
  z:= TBitmap.Create;
  z.Width:= 32;
  z.Height:= 32;
  DCZ:= z.Canvas.Handle;
  i:= 0;
  While (i < 400) do
  Begin
    inc(i,20);
    ierr:= BitBlt(DCTemp,0,0,dx,dy,DCBackg,0,0,SRCCopy);
    // transparentes Sprite erzeugen
    ierr:= Bitblt(DCZ,0,0,32,32,DCTemp,1250-i,550+i,SRCCopy);
    ierr:= BitBlt(DCZ,0,0,32,32,hMaskeDC,0,0,srcAnd);
    ierr:= BitBlt(DCZ,0,0,32,32,hMaskeDC,32,0,srcPaint);
    // Sprite in die temporäre Oberfläche kopieren
    ierr:= Bitblt(DCTemp,1250-i,550+i,32,32,dcz,0,0,srccopy);
    //temporäre Oberfläche auf den Bildschirm zurückkopieren
    ierr:= BitBlt(dc,0,0,dx,dy,DCTemp,0,0,SRCCopy);
 //   ierr:= Bitblt(DC,1250-i,550+i,32,32,DCZ,0,0,SRCCopy);
 //   delay(100);
  end;
  delay(1000);
  // Aufräumen
  BildBg.Free;
  Maske.Free;
  z.Free;
  BitBlt(dc,0,0,dx,dy,DCDtOrig,0,0,SRCCopy);
  SelectObject(dc,hbold);
  DeleteObject(hbm);
  DeleteObject(hbBackg);
  DeleteObject(hbTemp);
  DeleteDC(DCBackg);
  DeleteDC(DCTemp);
  DeleteDC(DCDtOrig);
  DeleteDC(dc);
end;                                                    
