Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [gelöst] Button, Groupbox etc. fotografieren/Screenshoot (https://www.delphipraxis.net/72749-%5Bgeloest%5D-button-groupbox-etc-fotografieren-screenshoot.html)

Go2EITS 6. Jul 2006 10:01


[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

ferby 6. Jul 2006 15:12

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.

DGL-luke 6. Jul 2006 15:16

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?

droppi 6. Jul 2006 15:24

Re: Button, Groupbox etc. fotografieren bez. Screenshoot
 
Stimmt! Da gibts doch z.B.
Delphi-Quellcode:
Button1.PaintTo()

Luckie 6. Jul 2006 15:26

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 MSDN-Library durchsuchenGetDC den DC holen. Das geht natürlich nur mit Windows Fensterklassen, die auch ein Handle besitzen. reine VCL Steuerelemnet wie TLabel besitzen kein Handle und da geht das nicht.

@droppi: Und wie machst du das in einem fremden Programm?

droppi 6. Jul 2006 15:31

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.

Go2EITS 6. Jul 2006 18:03

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

droppi 6. Jul 2006 18:10

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.

Go2EITS 6. Jul 2006 18:35

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:
http://www.delphipraxis.net/internal...ght=image+save
Delphi-Quellcode:
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;
Klappt Super. Aber nur für den ganzen Screen.

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.

droppi 6. Jul 2006 18:44

Re: Button, Groupbox etc. fotografieren bez. Screenshoot
 
Also beim Button geht das bei mir so:
Delphi-Quellcode:
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;
Analog dazu die Groupbox. Auch mit Paintto. Du musst halt nur die Größe des Bitmaps festlegen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:09 Uhr.
Seite 1 von 2  1 2      

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