TPanel drucken/TBitmap erzeugen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Sina
Beiträge: 3
Registriert: So 19. Mär 2023, 12:25

TPanel drucken/TBitmap erzeugen

Beitrag von Sina »

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

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TPanel drucken/TBitmap erzeugen

Beitrag von Mathias »

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

Sina
Beiträge: 3
Registriert: So 19. Mär 2023, 12:25

Re: TPanel drucken/TBitmap erzeugen

Beitrag von Sina »

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

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 168
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: TPanel drucken/TBitmap erzeugen

Beitrag von Jorg3000 »

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

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;

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6200
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

Beitrag von af0815 »

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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Mathias
Beiträge: 6167
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TPanel drucken/TBitmap erzeugen

Beitrag von Mathias »

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.
Oder er kennt einfach TPrinter, von der Unit Printers nicht.
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

Antworten