GetFormImage liefert schwarzes Rechteck
GetFormImage liefert schwarzes Rechteck
Ich benutze Lazarus 1.0.14 (SVN Revision 43446) unter Win XP.
Der Aufruf von tForm.GetFormImage liefert ein großes schwarzes Rechteck.
Gibt es dafür (oder dagegen) eine Lösung?
Wichard
Der Aufruf von tForm.GetFormImage liefert ein großes schwarzes Rechteck.
Gibt es dafür (oder dagegen) eine Lösung?
Wichard
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2816
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: GetFormImage liefert schwarzes Rechteck
Kann ich hier ( allerdings mit 1.0.8 ) nicht nachvollziehen. Zeig doch einmal ein bisschen Code. Vielleicht geht ja woanders etwas schief.
Zuletzt geändert von m.fuchs am So 22. Dez 2013, 12:04, insgesamt 1-mal geändert.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: GetFormImage liefert schwarzes Rechteck
Mein Code ist äußerst simpel:
procedure TForm_BMScanline.Button3Click(Sender: TObject);
begin
getformimage.SaveToFile('c:\formimage.bmp');
end;
Der File wird erzeugt. Wenn ich ihn z.B. mit Irfanview öffne, bekomme ich ein schwarzes Rechteck.
Wichard
procedure TForm_BMScanline.Button3Click(Sender: TObject);
begin
getformimage.SaveToFile('c:\formimage.bmp');
end;
Der File wird erzeugt. Wenn ich ihn z.B. mit Irfanview öffne, bekomme ich ein schwarzes Rechteck.
Wichard
Re: GetFormImage liefert schwarzes Rechteck
Ja, da ist etwas merkwürdig.
Probier mal so (Nur auf Linux getestet):
Das Bitmap musst du sowieso selber freigeben, also
getformimage.SaveToFile('c:\formimage.bmp');
ist ohnehin fahrlässig, da du so kein Handle mehr darauf hast.
Probier mal so (Nur auf Linux getestet):
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var fi: TBitmap;
begin
fi:=GetFormImage;
fi.Canvas.Changed;
fi.SaveToFile('c:\formimage.bmp');
fi.free;
end;
getformimage.SaveToFile('c:\formimage.bmp');
ist ohnehin fahrlässig, da du so kein Handle mehr darauf hast.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2816
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: GetFormImage liefert schwarzes Rechteck
Jetzt habe ich das nochmal auf meinem Notebook unter 1.0.12 ausprobiert und habe das gleiche Problem wie du.
Könnte ein Fehler sein, machst du einen Bugreport auf?
Könnte ein Fehler sein, machst du einen Bugreport auf?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: GetFormImage liefert schwarzes Rechteck
Theos Variante funktioniert bei mir:
Die Variante mit direktem getformimage.SaveToFile('c:\formimage.bmp'); ohne Canvas.Changed funktioniert bei mir ebenfalls nicht.
Lazarus 32bit 1.3 r43538 FPC 2.7.1-Trunc bei Win7 64bit
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
with GetFormImage do begin
Canvas.Changed;
SaveToFile('c:\01\01.bmp');
Free;
end;
end;
Lazarus 32bit 1.3 r43538 FPC 2.7.1-Trunc bei Win7 64bit
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: GetFormImage liefert schwarzes Rechteck
Das ist schön, danke.Michl hat geschrieben:Theos Variante funktioniert bei mir
Ich möchte aber betonen, dass das "with" keyword in meiner Variante nicht vorkommt.
Ich rate jedem und vor allem Anfängern dringend davon ab, das "with" keyword zu verwenden.
Jedes Debugging von fremdem Code beginnt bei mir mit der "with" Entrümpelung.

Re: GetFormImage liefert schwarzes Rechteck
Offtopic: kannst Du mir das erklären?! Wegen der Lesbarkeit oder wegen der (noch) vorhandenen Möglichkeit einen Hack zu machen?theo hat geschrieben:Ich möchte aber betonen, dass das "with" keyword in meiner Variante nicht vorkommt.
Ich rate jedem und vor allem Anfängern dringend davon ab, das "with" keyword zu verwenden.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2816
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: GetFormImage liefert schwarzes Rechteck
Ja, mit .Changed geht es hier jetzt auch. Also doch kein Bug, warum auch immer es unter der anderen Intsallation ohne .Changed ging.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: GetFormImage liefert schwarzes Rechteck
Weil man sich damit einfach nur selber in den Fuß schießt.Michl hat geschrieben:Offtopic: kannst Du mir das erklären?! Wegen der Lesbarkeit oder wegen der (noch) vorhandenen Möglichkeit einen Hack zu machen?theo hat geschrieben:Ich möchte aber betonen, dass das "with" keyword in meiner Variante nicht vorkommt.
Ich rate jedem und vor allem Anfängern dringend davon ab, das "with" keyword zu verwenden.
Code Completion weiss nicht mehr was gemeint ist, ich weiss nicht mehr was gemeint ist und der Compiler "frisst" den falsch gemeinten Code auch noch ohne zu murren. Es ist einfach eine unnötige Quelle der Verunsicherung und Vernebelung.
Simples Bsp.
Code: Alles auswählen
TMyObj=class
private
FMyWidth: integer;
procedure SetMyWidth(AValue: integer);
public
property MyWidth:integer read FMyWidth write SetMyWidth;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
with TMyObj.Create do
begin
Width:=500;
Free;
end;
end;
Mit "MyObj.Width:=500" würde er meckern.
Zuletzt geändert von theo am So 22. Dez 2013, 14:23, insgesamt 1-mal geändert.
Re: GetFormImage liefert schwarzes Rechteck
MMn ist es durchaus ein Bug, wir haben einfach einen Workaround gefunden.m.fuchs hat geschrieben:Ja, mit .Changed geht es hier jetzt auch. Also doch kein Bug, warum auch immer es unter der anderen Intsallation ohne .Changed ging.
Wer macht den Bugtracker Eintrag? Freiwillige vor!

Re: GetFormImage liefert schwarzes Rechteck
Das verstehe ich, nutze es eigentlich selber recht selten, eben wegen der schlechteren Lesbarkeit. Als mögliche Fehlerquelle hatte ich das noch nicht betrachtet - danke für die Erleuchtung!theo hat geschrieben:Es ist einfach eine unnötige Quelle der Verunsicherung und Vernebelung.
Werde mir sobald ich "with" eingebe selber auf die Finger klopfen - das war jetzt das erste Mal

Wenn Ihr nicht wollt, mache ich den...theo hat geschrieben:Wer macht den Bugtracker Eintrag? Freiwillige vor!
[Edit:] http://bugs.freepascal.org/view.php?id=25448
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;