Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi kleine Frage zum screenshot machen (https://www.delphipraxis.net/99101-kleine-frage-zum-screenshot-machen.html)

cRayZo 6. Sep 2007 20:38


kleine Frage zum screenshot machen
 
hi ne kleine Frage^^

wieso geht

Delphi-Quellcode:
MakeScreenShot(Image1.Picture.Bitmap);
aber das hier nicht?
Delphi-Quellcode:
Var
Varscreen:TBitmap;
begin
MakeScreenShot(Varscreen);
Image1.Picture.Bitmap:=Varscreen;
(mit dem procedure)
Delphi-Quellcode:
procedure MakeScreenShot(const ATarget: TBitmap);
var
  DesktopDC: HDC;
begin
  DesktopDC := CreateDC('DISPLAY', nil, nil, nil);
  try
    ATarget.PixelFormat := pfDevice;
    ATarget.Width := Screen.Width;
    ATarget.Height := Screen.Height;

    BitBlt(ATarget.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DesktopDC, 0, 0, SRCCOPY);
  finally
    DeleteDC(DesktopDC);
  end;
end;
das versteh ich nciht das ist doch das Gleiche??:(

ich möchte den screenshot in eine Variable speichern, wie soll das denn anders gehen, wenn nicht da wie oben?

Alexander Roth 6. Sep 2007 20:42

Re: kleine Frage zum screenshot machen
 
hast du Varscreen creiert?

Gruß Alexander

Zacherl 6. Sep 2007 20:42

Re: kleine Frage zum screenshot machen
 
Weil du dein VarBitmap erstmal Createn musst ;) Und dann nicht einfach den Pointer zuweisen, sondern Image.Picture.Assign(VarBitmap) ..

cRayZo 6. Sep 2007 20:47

Re: kleine Frage zum screenshot machen
 
meinst du so?

Delphi-Quellcode:
Var
Varscreen:TBitmap;
begin
varscreen.Create;
Image1.Picture.Assign(Varscreen);
MakeScreenShot(Varscreen);
Image1.Picture.Bitmap:=Varscreen;
end;
das ändert nichts, krieg trotzdem einen error..:(

hab ich was falsch verstanden (wohl eher sehr warscheinlich^^)

Matze 6. Sep 2007 20:48

Re: kleine Frage zum screenshot machen
 
Delphi-Quellcode:
varscreen := TBitmap.Create;

Alexander Roth 6. Sep 2007 20:51

Re: kleine Frage zum screenshot machen
 
und noch was: assign nachher und diese Zuweisung mit := bei Instanzen von Klassen ist immer problematisch, da man sich im klaren sein muss, dass man NUR die Pointer auf die Instanzen verschiebt, und es so vorkommen kann, dass plötzlich kein Pointer auf die eine oder andere Instanz zeigt und so Speicherlecks entstehen können.
Delphi-Quellcode:
Var
Varscreen:TBitmap;
begin
varscreen := TBitmap.Create;
MakeScreenShot(Varscreen);
Image1.Picture.Assign(Varscreen);
end;

inherited 6. Sep 2007 20:52

Re: kleine Frage zum screenshot machen
 
Und nicht Image.Picture.Bitmap:=Varscreen; sondern

Image1.Picture.Bitmap.Assign(varscreen);
Sonst weist du nur den Pointer zu und sobald du varscreen wieder freigibst, was du machen musst!!!!, dann ist auch kein bild mehr zu sehen.

Matze 6. Sep 2007 20:54

Re: kleine Frage zum screenshot machen
 
Müsste es eigentlich nicht

Delphi-Quellcode:
procedure MakeScreenShot(var ATarget: TBitmap);
heißen? :gruebel:

Alexander Roth 6. Sep 2007 20:55

Re: kleine Frage zum screenshot machen
 
glaube nicht. (Auch nicht ganz sicher) ATarget ist ja eine Instanz einer Klasse und somit kann es mit const übergeben werden.

Gruß Alexander

Alexander Roth 6. Sep 2007 20:58

Re: kleine Frage zum screenshot machen
 
An cRayZo: Lies di mal das Durch:
http://dsdt.info/grundlagen/sprache/oo2.php

und hier gibt es noch viel mehr:
http://de.wikibooks.org/wiki/Program...ltsverzeichnis

Gruß Alexander


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 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