AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Screenshot des aktiven Fenster genau wie Alt+Druck
Thema durchsuchen
Ansicht
Themen-Optionen

Screenshot des aktiven Fenster genau wie Alt+Druck

Ein Thema von Alex_ITA01 · begonnen am 2. Okt 2015 · letzter Beitrag vom 4. Jul 2016
 
Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Screenshot des aktiven Fenster genau wie Alt+Druck

  Alt 2. Okt 2015, 07:48
Hallo zusammen,
ich erstelle wie folgt ein Screenshot eines Fensters:

Delphi-Quellcode:
var
  aFormat : Word;
  aBMP : TBitMap;
  AData : THandle;
  APalette : HPALETTE;

  procedure ScreenShot(Wnd: HWND; ATo: TBitmap);
  var
    hDCMem : HDC;
    DC : HDC;
    rect : TRect;
    bmp : HBITMAP;
    hOld : HGDIOBJ;
  begin
    hDCMem := CreateCompatibleDC(0);

    GetWindowRect(Wnd, rect);

    DC := GetDC(Wnd);
    bmp := CreateCompatibleBitmap(DC, rect.Right-rect.Left, rect.Bottom-rect.Top);
    ReleaseDC(Wnd, DC);

    hOld := SelectObject(hDCMem, bmp);
    SendMessage(wnd, wm_Print, hDCMem, PRF_CHILDREN or PRF_CLIENT or PRF_ERASEBKGND or PRF_NONCLIENT or PRF_OWNED);

    SelectObject(hDCMem, hold);
    DeleteObject(hDCMem);

    ATo.FreeImage;
    ATo.Handle := bmp;
  end;

begin
  aBMP := TBitmap.Create;
  try
    ScreenShot(Self.Handle, aBMP); //<- Self.Handle ist meine "Form1"

    // Bild in Zwischenablage
    aBMP.SaveToClipBoardFormat(aFormat, AData, APalette);
    ClipBoard.SetAsHandle(aFormat,AData);
  finally
    aBMP.Free;
  end;
Das funktioniert auch soweit.
Nur wenn ich eine zweite Form über diese Form1 lege und dann den Screenshot mache, dann wird nur von der Form1 der Screenshot erstellt aber das was von Form2 in dem sichtbaren Bereich der Form1 ist, wird nicht mitgenommen. Also die Funktion sollte so sein, wie Alt+PrintScreen. Da wird ja einfach das aktuelle Fenster ge-screenshot-et bis zum jeweiligen Rahmen. Auch wenn andere Fenster in dem sichtbaren Bereich rein ragen, wird eben deren Ausschnitt auch genommen.

Habt ihr eine Idee, wie man genau das macht? Oder kann ich einfach die Tastenkombination Alt+PrintScreen als Command abschicken, das würde mir auch reichen.

Grüße
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
 


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 13:45 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