AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Screen
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Screen

Ein Thema von Gelmo · begonnen am 29. Dez 2020 · letzter Beitrag vom 30. Dez 2020
Antwort Antwort
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
31 Beiträge
 
Delphi 10.3 Rio
 
#1

Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Screen

  Alt 29. Dez 2020, 19:31
Hallo zusammen!
Ich habe jetzt in den letzten zwei Tagen versucht und gesucht, den Inhalt eines Panels mit zahlreichen Labels auszudrucken. Ich hatte es mir einfach vorgestellt, einen beliebigen Ausschnitt des Bildschirms anhand der Punkte links-oben und rechts-unten zu erfassen und in geeigneter Form an den Drucker zu übergeben. Habe aber von Grafik keine Ahnung. Schon bei der Frage ob die Informationen in Canvas, Bitmap oder Picture gehören und wo die Informationen überhaupt stecken – Image hat Canvas, Panel aber nicht und Label ??? –
Kurz: Ohne Hilfe komme ich gar nicht weiter.
Vielleicht möchte mir hier jemand die grundlegenden Zusammenhänge beschreiben.
Jedenfalls vielen Dank,
MfG Gelmo
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.157 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Sc

  Alt 29. Dez 2020, 19:57
Es sind im Endeffekt zwei voneinander völlig unabhängige Fragen:
  1. Wie erfasse ich einen Teil des Bildschirminhalts oder den Inhalt eines TWinControl (Form, Panel, Frame, ...)?
  2. Wie drucke ich diese Grafik aus?

Wenn ich das richtig rauslese steckst du an Punkt 1.

Der Bildschirm besteht aus Pixeln. Du kannst also praktisch nur eine Pixeltapete (Bitmap) aufnehmen, keinen glatten Text wie in einem Word-Dokument.

Das einfachste ist ein Ansatz wie "Mach mir ein Bitmap von diesem Panel". Oder Frame. Oder Form. Alles, was unter Windows praktisch ein "Fenster" (TWinControl) ist.

Also wenn ich auf meinem Button1 hier
screenshot-2020-12-29-195556.png

Sage "Mache mir ein Bitmap von Panel1", kommt das hier raus:
mybitmap.png

Ist das, was du willst? Wenn ja, hier ein Minimalbeispiel:

Delphi-Quellcode:
unit Unit1;

interface

uses
   System.SysUtils,
   System.Classes,

   Vcl.Graphics,
   Vcl.Controls,
   Vcl.Forms,
   Vcl.Dialogs,
   Vcl.StdCtrls,
   Vcl.ExtCtrls;

type
   TForm1 = class(TForm)
      Panel1: TPanel;
      Label1: TLabel;
      Label2: TLabel;
      CheckBox1: TCheckBox;
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
   end;

   TWinControlHelper = class helper for TWinControl
      function CreateBitmap(): TBitmap;
   end;


var
   Form1: TForm1;

implementation uses WinApi.Windows;

{$R *.dfm}

{ TWinControlHelper }

function TWinControlHelper.CreateBitmap(): Vcl.Graphics.TBitmap;
var
   DC:    HDC;
begin
   DC := GetWindowDC(Handle);
   try
      Result := Vcl.Graphics.TBitmap.Create();
      try
         Result.SetSize(ClientWidth, ClientHeight);
         BitBlt(
            Result.Canvas.Handle,
            0, 0, Result.Width, Result.Height,
            DC, 0, 0,
            WinApi.Windows.SRCCOPY
         );
      except
         Result.Destroy(); raise;
      end;
   finally
      ReleaseDC(Handle, DC);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   bitmapOfPanel: Vcl.Graphics.TBitmap;
begin
   bitmapOfPanel := Panel1.CreateBitmap();
   try
      bitmapOfPanel.SaveToFile('c:\users\günther\Desktop\myBitmap.bmp');
   finally
      bitmapOfPanel.Destroy();
   end;
end;

end.
  Mit Zitat antworten Zitat
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
31 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Sc

  Alt 29. Dez 2020, 20:16
Super!
Das wäre genau das Ergebnis, das ich gesucht habe. Ich möchte den Code mal in mein Programm einbauen. Das sollte auch funktionieren, wenn nicht die Ecken von Panel1 verwendet werden sondern von einem größeren Bereich?
Ich melde mich wieder, wenn ich den Code ausprobiert habe.
Vielen Dank!
  Mit Zitat antworten Zitat
Gelmo

Registriert seit: 14. Sep 2006
Ort: Niederrhein
31 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Sc

  Alt 30. Dez 2020, 14:50
Hallo zusammen!
Ich habe den Code von «Der schöne Günther» in mein Programm eingebaut. Alles bestens! Das Fenster «Struktur» links oben gibt die Fehlermeldung «TPanel enthält kein Element ‚CreateBitmap‘ in Zeile xy», das Programm wird aber vollständig kompiliert. Zudem wird nach «BitmapofPanel :=Panel1. » CreateBitmap als Option eingeblendet!
Die Druckerausgabe gelingt mit StretchDraw recht einfach, sogar ohne das Bitmap vorher zu speichern.
Mein Problem ist offensichtlich gelöst. Nochmals herzlichen Dank für die schnelle und lehrreiche Hilfe!
Mfg Gelmo
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.939 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Sc

  Alt 30. Dez 2020, 15:38
Dass du im Strukturpanel öfters Code als fehlerhaft angezeigt bekommst ist bis 10.3 Rio nichts ungewöhnliches.

In 10.4 Sydney wurde die IDE auf Nutzung von LSP und damit dem wirklichen Compiler als Parser umgestellt.
Der ist von der Syntax her ja "gezwungenermaßen" aktuell udn dadurch gibt's in Sydney jetzt so gut wie
keine falschen Meldungen im Strukturpanel mehr. Vorher hat die IDE einen anderen Parser für dieses ErrorInshight
benutzt gehabt und der war schon länger nicht mehr aktuell bzw. musste immer manuell nachgeführt werden.
Das bekommt man vom Compiler ja nun automatisch, da dieser bei SPracherweiterungen ja selber erweitert wird...
  Mit Zitat antworten Zitat
Alt 9. Jan 2021, 12:33     Erstellt von Adele73
Dieser Beitrag wurde von Daniel gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz