AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Screenshot aber wie?!

Ein Thema von Skrenkovic · begonnen am 8. Jan 2014 · letzter Beitrag vom 8. Jan 2014
Antwort Antwort
Skrenkovic

Registriert seit: 7. Jan 2014
9 Beiträge
 
FreePascal / Lazarus
 
#1

AW: Screenshot aber wie?!

  Alt 8. Jan 2014, 17:41
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

Geändert von Skrenkovic ( 8. Jan 2014 um 18:25 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#2

AW: Screenshot aber wie?!

  Alt 8. Jan 2014, 18:42
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;
  Mit Zitat antworten Zitat
Skrenkovic

Registriert seit: 7. Jan 2014
9 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Screenshot aber wie?!

  Alt 8. Jan 2014, 18:46
hey danke jetzt versteh ich des mal ... aber warum kommt da der fehler immernoch ... irgenwie stimmt da was net ....
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Screenshot aber wie?!

  Alt 8. Jan 2014, 18:57
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');
fork me on Github
  Mit Zitat antworten Zitat
Skrenkovic

Registriert seit: 7. Jan 2014
9 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Screenshot aber wie?!

  Alt 8. Jan 2014, 19:09
So.... ich habs ma gekürzt...
Code:
R.TopLeft := Form1.BoundsRect.TopLeft;
  R.BottomRight := Form1.BoundsRect.BottomRight;
  MyDC := GetDC(Self.Handle);
  MyBitmap := TBitmap.Create;
  MyBitmap.Width := R.Right - R.Left;
  MyBitmap.Height := R.Bottom - R.Top;

  try
    MyBitmap.LoadFromDevice(MyDC);
    MyBitmap.SaveToFile('FormsAppearance.bmp');
  finally
    ReleaseDC(Self.Handle, MyDC);
    FreeAndNil(MyBitmap);
  end;
funktioniert ... is zwar kein png aber ... okay

wenn ihr mir jetzt verraten würdet wie ich ca 2 fingerbreit unten das bild kürzen könnte (weil ich nicht das ganze fester bracuhe sondern von der höhe nur ca 2/3
währe echt super von euch .... sry meine unwissenheit

Geändert von Skrenkovic ( 8. Jan 2014 um 19:12 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: Screenshot aber wie?!

  Alt 8. Jan 2014, 19:28
Wie schon erwähnt R := Form1.BoundsRect; macht in einer Zeile was du in zwei machst.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 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