[gelöst] eigenes Formular im Screenshot verbergen - xubuntu 22.04.1

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
ps4711
Beiträge: 16
Registriert: Mi 1. Dez 2021, 13:39
OS, Lazarus, FPC: Lazarus 2.2.0 // FPC 3.2.2 x86_64-linux-gtk2 // xubuntu 22.04
CPU-Target: 64Bit

[gelöst] eigenes Formular im Screenshot verbergen - xubuntu 22.04.1

Beitrag von ps4711 »

Hallo,

seit langer Zeit versuche ich aus einem Programm einen Screenshot zu erstellen, in dem mein eigenes Form nicht dargestellt wird. In meiner Verzweiflung bin ich nun hingegangen und habe ein neues Projekt eröffnet und den Code aus https://wiki.freepascal.org/Developing_ ... the_screen (Taking a screen shot but excluding your application from the screenshot ) umgesetzt (copy&paste).
Bei diesem habe ich jedoch den selben Effekt ... das Form ist nach wie vor auf dem Screenshot zu sehen.

Fügt man hinter dem Sleep(2000); eine Inputbox ein, dann verschwindet das Form ... leider ist dann die Inputbox auf dem Screenshot

Hat hier jemand eine Idee für mich? Danke schon mal!

Infos zu freepascal/lazarus:
Lazarus 2.2.0+dfsg1-5ubuntu1 (rev Debian package 2.2.0+dfsg1-5ubuntu1) FPC 3.2.2 x86_64-linux-gtk2

Infos zum OS:
xubuntu 22.04.1 LTS
Lazarus wurde aus den Quellen installiert (sudo apt install lazarus )

Der Code:

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
  LCLIntf, LCLType;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  ScreenDC: HDC;
  MyRec : TRect;
  LocalBitmap : TBitmap;
  //sFilename : String;
begin
  Form1.Visible := False;
  Sleep(2000);          // wait to ensure your application is not visible
  //sFilename :=  InputBox( 'speichern unter', 'Bitte Dateinamen ohne Endung eingeben:','MeinBildname') + '.bmp';
  LocalBitmap := TBitmap.Create;
  ScreenDC := GetDC(0);
  Try
    LocalBitmap.LoadFromDevice(ScreenDC);
    LocalBitmap.SaveToFile('screenshot.bmp');
    LocalBitmap.Free;
    Form1.Visible := True;

  finally
    ReleaseDC(0, ScreenDC);
  end;

end;

end.

Zuletzt geändert von ps4711 am So 13. Nov 2022, 19:22, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: eigenes Formular im Screenshot verbergen - xubuntu 22.04.1

Beitrag von theo »

Da muss ein Processmessages rein.
Probiere es so:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  ScreenDC: HDC;
  MyRec : TRect;
  LocalBitmap : TBitmap;
  //sFilename : String;
begin
  Form1.Visible := False;
  Application.ProcessMessages;
  Sleep(500);          // wait to ensure your application is not visible
  //sFilename :=  InputBox( 'speichern unter', 'Bitte Dateinamen ohne Endung eingeben:','MeinBildname') + '.bmp';
  LocalBitmap := TBitmap.Create;
  ScreenDC := GetDC(0);
  Try
    LocalBitmap.LoadFromDevice(ScreenDC);
    LocalBitmap.SaveToFile('/home/theo/screenshot.bmp');
    LocalBitmap.Free;
    Form1.Visible := True;

  finally
    ReleaseDC(0, ScreenDC);
  end;

end;   

ps4711
Beiträge: 16
Registriert: Mi 1. Dez 2021, 13:39
OS, Lazarus, FPC: Lazarus 2.2.0 // FPC 3.2.2 x86_64-linux-gtk2 // xubuntu 22.04
CPU-Target: 64Bit

[gelöst] eigenes Formular im Screenshot verbergen - xubuntu 22.04.1

Beitrag von ps4711 »

Vielen Dank!!!

ps4711
Beiträge: 16
Registriert: Mi 1. Dez 2021, 13:39
OS, Lazarus, FPC: Lazarus 2.2.0 // FPC 3.2.2 x86_64-linux-gtk2 // xubuntu 22.04
CPU-Target: 64Bit

Re: [gelöst] eigenes Formular im Screenshot verbergen - xubuntu 22.04.1

Beitrag von ps4711 »

Noch eine Frage zum besseren Verständnis.

In dem Beispiel Code im Lazarus-Wiki wurde kein Application.ProcessMessages ausgelöst. Hängt das damit zusammen, das das Beispiel auf Windows lief und unter GNU/Linux eben dieses Application.ProcessMessages ausgelöst werden muß?

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst] eigenes Formular im Screenshot verbergen - xubuntu 22.04.1

Beitrag von theo »

Ich hab's nicht auf Windows getestet, aber Application.ProcessMessages ist da auf jeden Fall richtig.
Ins Wiki kann jeder schreiben, da ist nicht alles immer 100%ig akkurat.

wp_xyz
Beiträge: 4885
Registriert: Fr 8. Apr 2011, 09:01

Re: [gelöst] eigenes Formular im Screenshot verbergen - xubuntu 22.04.1

Beitrag von wp_xyz »

Ich habe das wiki-Beispiel aktualisiert.

Antworten