Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi bild auf screenshot "legen" (https://www.delphipraxis.net/58474-bild-auf-screenshot-legen.html)

JWeis 7. Dez 2005 15:55


bild auf screenshot "legen"
 
hi leude

ich hab son problem:

ich mach mit meinemprog nen screenshot und den lass ich dan auf meiner ganzen form zeigen.
Delphi-Quellcode:
function GetScreenShot: TBitmap;
var
  Desktop: HDC;
begin
  Result := TBitmap.Create;
  Desktop := GetDC(0);
  try
    try
      Result.PixelFormat := pf32bit;
      Result.Width := Screen.Width;
      Result.Height := Screen.Height;
      BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY);
      Result.Modified := True;
    finally
      ReleaseDC(0, Desktop);
    end;
  except
    Result.Free;
    Result := nil;
  end;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Image1.Picture.Bitmap := GetScreenShot;
end;
so nun will ich, wenn ich irgendwo draufklicke an der position dan ein bild auftaucht.
kan mir jemand helfen.??

Khabarakh 7. Dez 2005 16:00

Re: bild auf screenshot "legen"
 
Du erzeugst ein Speicherleck, da du das von GetScreenshot erzeugte Bitmap nicht freigibst.
Andere Bitmaps kann man per Delphi-Referenz durchsuchenTCanvas.Draw auf die Canvas des Images kopieren.

JWeis 8. Dez 2005 07:31

Re: bild auf screenshot "legen"
 
danke mal vorerst ich muss mal testen.

Cicaro 14. Dez 2005 12:20

Re: bild auf screenshot "legen"
 
Zitat:

Zitat von Khabarakh
Du erzeugst ein Speicherleck, da du das von GetScreenshot erzeugte Bitmap nicht freigibst.

Doch DAS Ding gibt er frei (wenn das Image freigegeben wird), jedoch das Bitmap, das vor der Zuweisung mit dem Zeiger Image1.Picture.Bitmap adressiert werden konnte, ... tja, was damit ist, weiß nur der Compiler.

Khabarakh 14. Dez 2005 12:58

Re: bild auf screenshot "legen"
 
Zitat:

Zitat von Cicaro
Zitat:

Zitat von Khabarakh
Du erzeugst ein Speicherleck, da du das von GetScreenshot erzeugte Bitmap nicht freigibst.

Doch DAS Ding gibt er frei (wenn das Image freigegeben wird), jedoch das Bitmap, das vor der Zuweisung mit dem Zeiger Image1.Picture.Bitmap adressiert werden konnte, ... tja, was damit ist, weiß nur der Compiler.

Nö.
Da du eine Enterprise-Version besitzt, kannst du selbst in die Sourcen gehen und dich davon überzeugen, dass fast überall in der VCL/RTL im Setter von Objekt-Properties nur Assign aufgerufen und der Pointer nicht verändert wird.

Cicaro 15. Dez 2005 09:40

Re: bild auf screenshot "legen"
 
Zitat:

Zitat von Khabarakh
Zitat:

Zitat von Cicaro
Zitat:

Zitat von Khabarakh
Du erzeugst ein Speicherleck, da du das von GetScreenshot erzeugte Bitmap nicht freigibst.

Doch DAS Ding gibt er frei (wenn das Image freigegeben wird), jedoch das Bitmap, das vor der Zuweisung mit dem Zeiger Image1.Picture.Bitmap adressiert werden konnte, ... tja, was damit ist, weiß nur der Compiler.

Nö.
Da du eine Enterprise-Version besitzt, kannst du selbst in die Sourcen gehen und dich davon überzeugen, dass fast überall in der VCL/RTL im Setter von Objekt-Properties nur Assign aufgerufen und der Pointer nicht verändert wird.

Naja :), zumindest sind wir uns über das Speicherleck einig.


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