Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Form in eine Bitmap rendern (https://www.delphipraxis.net/2837-form-eine-bitmap-rendern.html)

DerKrasseHans 9. Feb 2003 17:06


Form in eine Bitmap rendern
 
moinsen,
folgendes Problem:
ich möchte eine Form in eine TBitmap render.
Bisher render ich die Form über .Show und .Repaint ganz kurz auf den Desktop und kopier sie über BitBlt() und dem DesktopDC in eine TBitmap und schließ sie nach dem Beendigung des Kopiervorgangs.
Dieses Vorgehen hat den entscheiden Nachteil, dass die Form (wie zu erwarten) kurz aufflickert. Irgendeine Idee wie ich da anders rangehen kann?

sakura 10. Feb 2003 08:46

Es gibt bestimmt bessere Methoden, aber das war jetzt meine erste Idee.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Bmp: TBitmap;
  Can: TCanvas;
  Source, Dest: TRect;
begin
  Self.BringToFront;
  Application.ProcessMessages;
  Can := TCanvas.Create;
  Bmp := TBitmap.Create;
  try
    // screen handle
    Can.Handle := GetDC(0);
    try
      // größe
      Bmp.Width := Self.Width;
      Bmp.Height := Self.Height;
      // ausschnitt festlegen
      Source := Rect(Self.Left, Self.Top, Self.Left + Pred(Self.Width), Self.Top +
          Pred(Self.Height));
      Dest := Rect(0, 0, Pred(Self.Width), Pred(Self.Height));
      // kopieren
      Bmp.Canvas.CopyRect(Dest, Can, Source);
      // speichern
      Bmp.SaveToFile('C:\Temp\Form.bmp');
    finally
      ReleaseDC(0, Can.Handle);
    end;
  finally
    Bmp.Free;
    Can.Free;
  end;
end;
...:cat:...

DerKrasseHans 13. Feb 2003 22:24

Sorry ich glaub ich hab mich nicht gut ausgedrückt, deshalb ein Beispiel:
Test.exe
wie ich ein auf dem desktop sichtbares fenster (ob adressiert durch self oder durch einen anderen Zeiger auf eine TForm) in eine TBitmap bekomme, ist mir bekannt.
Mir geht es darum eine nicht-sichtbare Form, direkt in meine TBitmap zu rendern ohne den Umweg des Sichtbarmachens auf dem Desktop.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz