Hallo zusammen,
Ich bin ich noch recht am Anfang mit Lazarus und dem Thema Programmieren und verzweifle gerade,
habe etliche Tutorials durch und hab das Gefühl ich habe alles im Netz zu dem Thema abgegrast.
Mein Projekt besteht aus mehreren Formen, indem der Nutzer Einträge und Auswahlen vornehmen kann. Die Einträge werden in einer DBA gespeichert, anschließend wird alles entsprechend der Auswahl zusammengefasst und soll dann gedruckt werden.
Und genau daran scheitert es dann. Ich bekomm den Ausdruck zwar irgendwie hin, aber bekomme nur die DB-Werte angesprochen. Ich habe aber ein Paar ComoBoxen die an eine ImageList hängen, welche via Canvas über den Wert der ComboBox gezeichnet werden.
Wenn ich ausdrucke bekomme ich nur den DrawItem-Wert oder den DBA- Wert hin, aber nicht das eigentliche Bild dazu.
Nach einer guten Woche recherchieren und probieren, habe ich nun aufgegeben und erzeuge jetzt eine weitere TForm als "Ausgabe", mit zwei TPanel als Container,
Panel1 als Menü und Panel2 stellt den zusammengefassten Inhalt dar. Auf Panel2 werden jetzt auch durch ComboBoxen erneut die entsprechenden Bilder dargestellt.
Nun wollte ich Panel2, wie dargestellt ausdrucken inkl. der dargestellten ComboBoxen. Jetzt habe ich versucht von Panel2 eine Bitmap zu erzeugen um diese dann auszudrucken aber irgendwie arbeite ich mich von Lauffehler zu Lauffehler um dann nach dem kompilieren ein Programmfehler zubekommen.
Ich denke für das Problem fehlt mir noch das nötige Verständnis und vielleicht hat jemand einen guten Ansatz für mich, um das TPanel auszudrucken?
Liebe Grüße
Sina
TPanel drucken/TBitmap erzeugen
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TPanel drucken/TBitmap erzeugen
Habe ich dich richtig versanden, das willst den Inhalt von einem TPanel auf Papier bringen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: TPanel drucken/TBitmap erzeugen
Genau, ich möchte das TPanel gern ausdrucken. Wobei es wichtiger wäre es zumindest via MS Print to PDF auszugeben, damit wir uns das per EMail schicken können.
Gruß
Sina
Gruß
Sina
- Jorg3000
- Lazarusforum e. V.
- Beiträge: 359
- Registriert: So 10. Okt 2021, 10:24
- OS, Lazarus, FPC: Win64
- Wohnort: NRW
Re: TPanel drucken/TBitmap erzeugen
Hi!
Ich hatte mir mal Folgendes gebastelt, um einen Screenshot von einem PageControl zu machen.
Wenn man in meinem Code "PageControl" durch den Namen des Panels ersetzt, sollte es auch dafür funktioniert (nicht getestet).
Meine Procedure kann nicht drucken, aber wenn man ein Bitmap hat, ist das ja schon mal der erste Schritt.
Ich weiß nicht, ob es vielleicht auch einfacher geht.
Grüße, Jörg
Ich hatte mir mal Folgendes gebastelt, um einen Screenshot von einem PageControl zu machen.
Wenn man in meinem Code "PageControl" durch den Namen des Panels ersetzt, sollte es auch dafür funktioniert (nicht getestet).
Meine Procedure kann nicht drucken, aber wenn man ein Bitmap hat, ist das ja schon mal der erste Schritt.
Ich weiß nicht, ob es vielleicht auch einfacher geht.
Grüße, Jörg
Code: Alles auswählen
type THackWinControl = class(TWinControl);
procedure TForm1.Screenshot1Click(Sender: TObject);
var cv: TCanvas;
Src: THackWinControl;
Img: TImage;
ImgBmp: TBitmap;
notUsed: HWND;
SrcR, DestR: TRect;
begin
notUsed:=0;
cv:=TCanvas.Create;
Img:=TImage.Create(nil);
ImgBmp:=Img.Picture.Bitmap;
Src:=THackWinControl(self.PageControl); // damit .GetDeviceContext() sichtbar wird
try
cv.Handle:=Src.GetDeviceContext({var}notUsed); // in Windows gleichbedeutend mit: cv.Handle:=GetDC(self.PageControl.Handle);
SrcR:=Rect(0,0,Src.Width,Src.Height);
DestR:=SrcR;
ImgBmp.PixelFormat:=pf24Bit;
ImgBmp.Width:=Src.Width;
ImgBmp.Height:=Src.Height;
Img.Canvas.CopyRect(DestR,cv,SrcR);
FreeAndNIL(cv);
ImgBmp.SaveToFile('Test.bmp'); // nicht getestet, nur als Beispiel
finally
Img.Free;
cv.Free;
end;
end;
- af0815
- Lazarusforum e. V.
- Beiträge: 6770
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TPanel drucken/TBitmap erzeugen
Für mich stellt sich die Frage, warum ein Panel etc. ausdrucken.
Du bringst die nötigen Daten in die DB ein, was du dann machen willst sieht dannach aus, das du einen Report über die Simulation der Panels zu erzwingen. Das macht man nicht. Wenn ich etwas nur zum Ansehen auf Papier oder Bildschirm bringen will, so verwende ich einen Report.
Lazarus/FPC hat da verschieden zur Auswahl. Verbreitet ist LazReport oder auch fpReport. Für LazReport gibt es die meiste Info und das ist am ANfang sicher das einfachste. Beide haben Reportdesigner die mit Lazarus zusammenarbeiten und so kann man sich den Report "relativ einfach" zusammenklicken und speichern.
Du bringst die nötigen Daten in die DB ein, was du dann machen willst sieht dannach aus, das du einen Report über die Simulation der Panels zu erzwingen. Das macht man nicht. Wenn ich etwas nur zum Ansehen auf Papier oder Bildschirm bringen will, so verwende ich einen Report.
Lazarus/FPC hat da verschieden zur Auswahl. Verbreitet ist LazReport oder auch fpReport. Für LazReport gibt es die meiste Info und das ist am ANfang sicher das einfachste. Beide haben Reportdesigner die mit Lazarus zusammenarbeiten und so kann man sich den Report "relativ einfach" zusammenklicken und speichern.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 6910
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: TPanel drucken/TBitmap erzeugen
Oder er kennt einfach TPrinter, von der Unit Printers nicht.Lazarus/FPC hat da verschieden zur Auswahl. Verbreitet ist LazReport oder auch fpReport. Für LazReport gibt es die meiste Info und das ist am ANfang sicher das einfachste.
Da kann man direkt in einen Canvas schreiben und zeichnen.
https://lazarus-ccr.sourceforge.io/docs ... inter.html
und
https://wiki.freepascal.org/Using_the_printer/de
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot