![]() |
Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Screen
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 |
AW: Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Sc
Liste der Anhänge anzeigen (Anzahl: 2)
Es sind im Endeffekt zwei voneinander völlig unabhängige Fragen:
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 Anhang 53492 Sage "Mache mir ein Bitmap von Panel1", kommt das hier raus: Anhang 53491 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. |
AW: Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Sc
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! |
AW: Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Sc
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 |
AW: Wie kann ich einen Ausschnitt des Bildschirms ausdrucken, nicht Fenster, nicht Sc
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... ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz