Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Screenshot aber wie?! (https://www.delphipraxis.net/178441-screenshot-aber-wie.html)

Skrenkovic 8. Jan 2014 17:52

Screenshot aber wie?!
 
Hi Ihr Programmier lustigen :)

Ich habe in einem anderem Forum (bitte Verzeiht mir) einen Code gefunden der genau passt bis auf zwei Kleinigkeiten.
1) Wie kann ich den Code so umschreiben dass der mir auf "Form4" den Screenshot macht und
2) Wo ist der Fehler (in der Zeile wo die ganzen ################### sind ^^
Es kommt folgende Fehlermeldung: unit3.pas(76,40) Fatal: Syntax error, ")" expected but "," found


Code:
procedure TForm1.Button5Click(Sender: TObject);
 
var
  MyBitmap: TBitmap;
  MyBitmap2: TBitmap;
  MyDC: HDC;
  png: TPortableNetworkGraphic;
  R: TRect;
begin
  R.TopLeft := Form1.BoundsRect.TopLeft;
  R.BottomRight := Form1.BoundsRect.BottomRight;
  MyDC := GetDC(Self.Handle);
  MyBitmap := TBitmap.Create;
  MyBitmap2 := TBitmap.Create;
  MyBitmap2.Width := R.Right - R.Left;
  MyBitmap2.Height := R.Bottom - R.Top;
  png := TPortableNetworkGraphic.Create;
 
  try
    MyBitmap.LoadFromDevice(MyDC);
    MyBitmap.SaveToFile('FormsAppearance.bmp');
    //MyBitmap2.Canvas.CopyRect(ClientRect,MyBitmap.Canvas,ClientRect);
    ########################################MyBitmap2.Canvas.copyRect(Rect(0, 0, MyBitmap2.Width, MyBitmap2.Height),MyBitmap.Canvas, R);
    MyBitmap2.SaveToFile('FormsAppearance2.bmp');
    png.Assign(MyBitmap2);
    png.SaveToFile('shottest.png');
  finally
    ReleaseDC(Self.Handle, MyDC);
    FreeAndNil(MyBitmap);
    FreeAndNil(MyBitmap2);
    png.Free;
  end;
end;
die screenshots werden erstellt ... aber das png ist schwarz ...

Luckie 8. Jan 2014 18:12

AW: Screenshot aber wie?!
 
2. Guck dir mal die Zeile an. Fällt dir da was auf?

Aviator 8. Jan 2014 18:17

AW: Screenshot aber wie?!
 
Zitat:

Zitat von Luckie (Beitrag 1242734)
2. Guck dir mal die Zeile an. Fällt dir da was auf?

Ich gehe mal davon aus, dass er die davor geschrieben hat um deutlich zu machen, wo der Fehler ist. Wenn nicht, dann geb ich dir recht. :P

Skrenkovic 8. Jan 2014 18:19

AW: Screenshot aber wie?!
 
Zitat:

Zitat von Luckie (Beitrag 1242734)
2. Guck dir mal die Zeile an. Fällt dir da was auf?

wenn ich den Fehler finden würde dann hätte ich hier nicht gefragt :D

Ich kenn mich mit canvas nicht wirklich aus und ich weiss wirklich nicht wo der Fehler is

Skrenkovic 8. Jan 2014 18:20

AW: Screenshot aber wie?!
 
Zitat:

Zitat von Aviator (Beitrag 1242736)
Zitat:

Zitat von Luckie (Beitrag 1242734)
2. Guck dir mal die Zeile an. Fällt dir da was auf?

Ich gehe mal davon aus, dass er die davor geschrieben hat um deutlich zu machen, wo der Fehler ist. Wenn nicht, dann geb ich dir recht. :P

achso ... ja klar ##### sin nur zu zeigen wo Fehlermeldung kommt :thumb:

Luckie 8. Jan 2014 18:32

AW: Screenshot aber wie?!
 
Das war mir klar. Aber er meckert doch wegen der Klammern. Mach mal die Augen auf.

Skrenkovic 8. Jan 2014 18:41

AW: Screenshot aber wie?!
 
Zitat:

Zitat von Luckie (Beitrag 1242742)
Das war mir klar. Aber er meckert doch wegen der Klammern. Mach mal die Augen auf.

Oo aber wie soll man die denn sonst setzten ... habe so ziemlich jede möglichkeit eben ausprobiert ohne erfolg


Edit:
also ich komm echt nicht drauf ich habe alles verucht ... bitte bitte seid so gut und schreibt mir mal die Lösung
ach ja und ich benutze Lazarus falls das wichtig ist

Popov 8. Jan 2014 19:42

AW: Screenshot aber wie?!
 
Zitat:

Ich kenn mich mit canvas nicht wirklich aus
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
 
var
  MyBitmap: TBitmap;
  MyBitmap2: TBitmap;
  MyDC: HDC;
  png: TPortableNetworkGraphic;
  R: TRect;
begin
  //Ermittelt den BoundsRect Bereich von Form1.
  //Das geht einfacher - aber das warum einfach, wenn es auch kompliziert geht
  //R := Form1.BoundsRect;
  R.TopLeft := Form1.BoundsRect.TopLeft;
  R.BottomRight := Form1.BoundsRect.BottomRight;
  //Ermittelt Handle für einen Gerätekontext, hier Wohl von Self.Handle
  MyDC := GetDC(Self.Handle);
  //Zwei Bitmaps-Objekte erstellen
  MyBitmap := TBitmap.Create;
  MyBitmap2 := TBitmap.Create;
  //Breite und Höhe für Bitmap2 zuweisen
  MyBitmap2.Width := R.Right - R.Left;
  MyBitmap2.Height := R.Bottom - R.Top;
  //Ein Png-Objekt erstellen
  png := TPortableNetworkGraphic.Create;
 
  try
    //Kenne ich nicht, läd vermutlich das Bild aus dem Gerätekontext
    MyBitmap.LoadFromDevice(MyDC);
    //Speichert das Bild irgendwo unter "FormsAppearance.bmp"
    //Richtige Pfadangeben sind besser. Ansonsten wird in dem aktuellen Ordner gespeichert.
    MyBitmap.SaveToFile('FormsAppearance.bmp');
    //Kopiert Bild von MyBitmap nach MyBitmap2 mit Rect-Bereichen (Quelle, Ziel) von ClientRect
    //ClientRect ist wohl der Rect-Bereich von dem aktuellen Formular
    // 
    //MyBitmap2.Canvas.CopyRect(ClientRect,MyBitmap.Canvas,ClientRect);
    //eine Variante
    ########################################MyBitmap2.Canvas.copyRect(Rect(0, 0, MyBitmap2.Width, MyBitmap2.Height),MyBitmap.Canvas, R);
    //MyBitmap2 speichern irgendwo
    MyBitmap2.SaveToFile('FormsAppearance2.bmp');
    //An Png übergeben über Assign
    png.Assign(MyBitmap2);
    //Png speichern irgendwo
    png.SaveToFile('shottest.png');
  finally
    //Freigaben
    ReleaseDC(Self.Handle, MyDC);
    FreeAndNil(MyBitmap);
    FreeAndNil(MyBitmap2);
    png.Free;
  end;
end;

Skrenkovic 8. Jan 2014 19:46

AW: Screenshot aber wie?!
 
hey danke :D jetzt versteh ich des mal ... aber warum kommt da der fehler immernoch ... irgenwie stimmt da was net ....

sx2008 8. Jan 2014 19:57

AW: Screenshot aber wie?!
 
Hinterlege mal deine Delphiversion in deinem Profil.
Wenn deine Delphiversion nicht zu alt ist müsste Folgendes gehen:
Delphi-Quellcode:
procedure SaveFormImage(f: TForm; fn: TFileName);
begin
  with f.GetFormImage do
  begin
    SaveToFile(fn);
    Free;
  end;
end;

...
// und der Aufruf dazu
SaveFormImage(Form4, 'FormsAppearance2.bmp');


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

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 by Thomas Breitkreuz