![]() |
[gelöst] Button, Groupbox etc. fotografieren/Screenshoot
Hallo,
ich habe in der DP ein Code für das Erstellen von Programm-Screenshoots gefunden und ein JPG erstellt. Es funktioniert prima und habe es abgeändert in mein aktuelles Projekt WinClean (erst ab version 1.0.3) eingebaut. DP lohnt sich! Hat jemand eine Ahnung wie ich Buttons, Groupboxen "fotografieren" kann und diese in meine Hilfe dann einzubauen? Klar, mit diversen Progs geht es ja, aber ein wenig mühsam, weil man jedes Button etc. den Screenshoot mit der Hand "zuschneiden" muss. Vielleicht hat ja jemand ein BUTTON1.SHOT:='C:\button1.bmp' oder shoot.Button1:='C:\button1.jpg' im Ärmel? Danke für die Unterstützung! GO2EITS |
Re: Button, Groupbox etc. fotografieren bez. Screenshoot
Hallo,
du willst von einen einzelnen Button eines Programms einen Screenshoot machen? - Ich glaube nicht das das möglich ist.... wenn schon, dann würde mich es auch interessieren. |
Re: Button, Groupbox etc. fotografieren bez. Screenshoot
Kann man nicht an jedes TWinControl (= Window) eine Message schicken, dass es sich auf einen bestimmten Bereich zeichnen soll?
|
Re: Button, Groupbox etc. fotografieren bez. Screenshoot
Stimmt! Da gibts doch z.B.
Delphi-Quellcode:
Button1.PaintTo()
|
Re: Button, Groupbox etc. fotografieren bez. Screenshoot
Geht genauso wie ein normaler Screenshot, nur dass du nicht den DC des Bildschirms in das Bitmap kopierst, sondern eben nur den DC des Controls. Dazu holst du dir das Handle des Controls mit FinWindow, FindWindowEx oder EnumWindows, EnumChildWindows und dann ganz normal mit
![]() @droppi: Und wie machst du das in einem fremden Programm? |
Re: Button, Groupbox etc. fotografieren bez. Screenshoot
Er hat ja geschrieben, dass er die Screenshots von seinem Programm machen will. Aber hast natürlich Recht. Von fremden Programmen geht das nicht so.
|
Re: Button, Groupbox etc. fotografieren bez. Screenshoot
Hallo, vielen Dank für Eure Beiträge.
Button1.paintto() benötigt x,y Koordinaten. Da finde ich kein Button1.Save.to. oder so. Ich meine aber den Screenshot z. B. meines Button1 in meinem Programm, da ich den bmp oder jpg vom Button1 dann in meine Hilfe kopiere. Es wird nicht der Button eines anderen Programmes benötigt. Wird schwierig, oder? GO2EITS |
Re: Button, Groupbox etc. fotografieren bez. Screenshoot
Also wenn du den Screenshot nur von deinem Programm brauchst, würde ich es so machen.
Ich kreiere mir im Hintergrund ein Bitmap. Das Bitmap hat ein Canvas. Haben wir schonmal den ersten Parameter. X und Y sind die Koordinaten wo der Button auf das Bitmap gezeichnet wird. Dann kannst du das Bitmap speichern. |
Re: Button, Groupbox etc. fotografieren bez. Screenshoot
@Droppi
Da komme ich nicht ganz mit. Ist es da nicht leichter ein Screenshoot Progamm zu nehmen? Ich habe eine Image so groß wie ein Button auf die Form geklatscht und ein Button drübergelegt und mit image1.save.to:='C:\image.tmp' oder so ähnlich, hab es schon gelöscht, versucht die Image zu speichern. NIX passierte. Der Profi wird lachen. Ich gleich mit, weil ich ahnte, das dies nicht funktioniert. Spass beiseite: Hier habe ich mal ne Prozedur aus der DP: ![]()
Delphi-Quellcode:
Klappt Super. Aber nur für den ganzen Screen.
procedure TForm1.Button1Click(Sender: TObject);
var DCDesk: HDC; // hDC of Desktop bmp: TBitmap; begin {Create a bitmap} bmp := TBitmap.Create; {Set a bitmap sizes} bmp.Height := Screen.Height; bmp.Width := Screen.Width; {Get a desktop DC handle - handle of a display device context} DCDesk := GetWindowDC(GetDesktopWindow); {Copy to any canvas, here canvas of an image} BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DCDesk, 0, 0, SRCCOPY); {Save the bitmap} bmp.SaveToFile('C:\ScreenShot.bmp'); {Release desktop DC handle} ReleaseDC(GetDesktopWindow, DCDesk); {Release a bitmap} bmp.Free; end; So. [Bin Anfänger, Vorsicht!] Wie kann ich mit bitBlt ein Button eine Groupbox etc. die angezeigt wird, kopieren. Das Konverten als jpg funktioniert bei mir schon. |
Re: Button, Groupbox etc. fotografieren bez. Screenshoot
Also beim Button geht das bei mir so:
Delphi-Quellcode:
Analog dazu die Groupbox. Auch mit Paintto. Du musst halt nur die Größe des Bitmaps festlegen.
procedure TForm1.Button1Click(Sender: TObject);
var bit:tbitmap; begin bit:=tbitmap.Create; bit.Width:=button1.Width; bit.Height:=button1.Height; button1.PaintTo(bit.Canvas,0,0); bit.SaveToFile('c:\test.bmp'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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