Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Antworten
wennerer
Beiträge: 290
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von wennerer »

Hallo an Alle,
ich habe eine Form welche größer als der Bildschirm ist und möchte von dieser Form einen Screenshot machen und in eine Bitmap kopieren. Leider wird mir der nicht sichtbare Teil der Form nicht richtig dargestellt. Unter Windows hatte ich mit paintto und auch mit getformimage Erfolg. Unter Linux habe ich noch keine funktionierente Lösung gefunden.
Weiß hier jemand Rat?

Viele Grüße
Bernd

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

Re: Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von wp_xyz »

Der folgende Code funktioniert bei mir sowohl unter Windows als auch Ubuntu (gtk2, gtk3, qt5), auch wenn ich das Formular so weit aufziehe, dass es breiter ist als der Bildschirm:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := GetFormImage;
  try
    bmp.SaveToFile('test.bmp');
  finally
    bmp.Free;
  end;
end;

wennerer
Beiträge: 290
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von wennerer »

Vielen Dank für die Antwort,
bei mir gehts leider nicht. Sieht so aus:
Test.bmp.png
Test.bmp.png (7.64 KiB) 233 mal betrachtet
Viel Grüße
Bernd

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

Re: Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von wp_xyz »

Das schaut nach selbst-gezeichnet aus. Kannst du ein kleines Projekt zusammenstellen, an dem man das Problem nachvollziehen kann?

wennerer
Beiträge: 290
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von wennerer »

Ich versuche es mal, leider ist mein Progrämmchen schon ziemlich groß geworden.
Melde mich sobald ich es hin bekommen habe.
Vielen Dank
Bernd

wennerer
Beiträge: 290
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von wennerer »

Also scheinbar gehts bei mir schon in der einfachsten Variante nicht. Ich erzeuge eine Form und schiebe diese per Maus halb aus dem Monitor. Der nicht sichtbare Teil wird nicht richtig dargestellt. Mein System: Lazarus 2.0.10 r64667M FPC 3.2.0 x86_64-linux-gtk2. Unter Windows gehts ohne Problem.
halbeformklein.png
halbeformklein.png (166.04 KiB) 224 mal betrachtet
Ergebnis:
Getformimage.png
Getformimage.png (6.69 KiB) 224 mal betrachtet

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

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

type

  { TForm1 }

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

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  bmp: TBitmap;
begin
  bmp := TBitmap.Create;
  bmp := GetFormImage;
  try
    bmp.SaveToFile('test.bmp');
  finally
    bmp.Free;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  width :=800;
  height:=800;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  canvas.Brush.Color:=clRed;
  canvas.Rectangle(10,10,780,30);
  canvas.Rectangle(10,770,780,790);
end;

end.
Viele Grüße
Bernd
Dateianhänge
project1.zip
(126.58 KiB) 5-mal heruntergeladen

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

Re: Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von wp_xyz »

Mit Ubuntu 20.10 und LMDE4 Cinnamon kann ich das nicht, mit Lubuntu 20.10 (LXQt) dagegen schon reproduzieren, jeweils Laz 2.0.10(64 bit) mit gtk2

wennerer
Beiträge: 290
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von wennerer »

Danke für die Auskunft!
Ich habe es mit Mint 20 Cinnamon versucht. Offensichtlich mache ich dann aber erst mal nichts falsch.
Ich werde mal noch etwas herumprobieren, vielleicht finde ich ja noch eine Lösung mit der ich das Problem umgehen kann.

Viele Grüße
Bernd

kupferstecher
Beiträge: 301
Registriert: Do 17. Nov 2016, 11:52

Re: Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von kupferstecher »

Sowas habe ich auch schon versucht, ging mit GTK2 nicht und wurde im englischen Forum auch so bestätigt. Ich habe dann unter Linux QT als Widgetset ausgewählt, da funktioniert es, auch auf dem Raspi.

wennerer
Beiträge: 290
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon, Lazarus Stable 2.0.10 r63673M FPC 3.2.0
CPU-Target: x86_64-linux-gtk2

Re: Wie kopiere ich nicht sichtbare Form in eine Bitmap?

Beitrag von wennerer »

Danke für die Info. Werde ich dann auch mal so probieren.

Viele Grüße
Bernd

Antworten