![]() |
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? |
Es gibt bestimmt bessere Methoden, aber das war jetzt meine erste Idee.
Delphi-Quellcode:
...:cat:...
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; |
Sorry ich glaub ich hab mich nicht gut ausgedrückt, deshalb ein Beispiel:
![]() 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 13:01 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