![]() |
Grafik als screenshot
Ich maniupuliere in einem delphi7-pogramm eine geladene bitmap-Datei farblich.
Dies möchte ich innerhalb meines Programmes ausdrucken ohne erst (extern) hardcopy zu installieren. Der Umweg über Druck - in word datei kopieren und druckensoll nicht beschritten werden. |
Re: Grafik als screenshot
dazu könntest du die Unit Printers einbinden und über Printer.Canvas dann drucken. Ein gutes Tutorial gibts hier:
so kannst du zum Beispiel Text ausdrucken
Delphi-Quellcode:
Über die suche findet sich da sicher auch noch einiges dazu.
Printer.BeginDoc();
Printer.Canvas.TextOut(10, 10, 'MeinText'); Printer.EndDoc(); [Edit] Hast du dich eventuell im Titel vertan? Was hat ein Screenshot mit deinem Problem (das Drucken) zu tun? |
Re: Grafik als screenshot
Ich Lade zunächst eine bitmap-Datei (Umrisse der Bundesländer).
Dann färbe ich die einzelnen Bundesländer nach den stärksten politischen Fraktionen. Jetzt möchste ich dieses neue Bild ausdrucken, erhalte über print aber nur die originäre bitmap-Datei, nicht die farblich überschriebene (mit floodfil). Dein Hinweis löstz so das Problem nicht.[delphi] |
Re: Grafik als screenshot
Herzlich willkommen in der Delphi-PRAXiS, Hartfrid.
Vielleicht bringt dich dieser Code auf die richtige Spur: ![]() Freundliche Grüße |
Re: Grafik als screenshot
So klappt das noch nicht.
Hier mehr - neben eoiner bitmap der Umrisse der Bundesländer, die durch die Prozedure unterschiedlich farblich markiert werden. Der Ausdruck sollte mit den farblichen Flächenfüllungen - also bunt - erfolgen.
Delphi-Quellcode:
[edit=r_kerber]Delphi-Tags eingefügt. Das nächste Mal bitte selbst machen. Mfg, r_kerber[/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) PaintBox1: TPaintBox; Button1: TButton; Button2: TButton; procedure form1show(sender:TObject); procedure PaintBox1Paint(Sender: TObject); procedure Button1Click(Sender: TObject); procedure einfaerben(sender:TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Bitmap1: TBitmap; Form1: TForm1; implementation {$R *.dfm} procedure tform1.form1show(sender:TObject); begin form1.Height:=19*screen.Height div 20; form1.Left:=(screen.Width-form1.Width) DIV 2; form1.Top:=(screen.Height-form1.Height) div 2; button1.top:=form1.Top+form1.Height-4*button1.height; button2.Top:=button1.Top; button2.left:=button1.Left+21*button1.width div 20; paintbox1.Height:=645; paintbox1.width:=486; paintbox1.Left:=(form1.Width-paintbox1.Width) div 2; paintbox1.Top:=(form1.Height-paintbox1.Height) div 2; paintbox1paint(sender); end; procedure TForm1.PaintBox1Paint(Sender: TObject); begin Bitmap1 := TBitmap.Create; Bitmap1.LoadFromFile('DeutschUmriss.bmp'); PaintBox1.Canvas.Draw(0,0,Bitmap1); Bitmap1.Free; einfaerben(sender); end; procedure tform1.einfaerben(sender:TObject); Var farbe:tcolor; x,y:integer; begin with canvas do with paintbox1 do begin moveto(paintbox1.Left,paintbox1.Top); lineto(paintbox1.Left+paintbox1.Width,paintbox1.Top); lineto(paintbox1.Left+paintbox1.Width,paintbox1.Top+paintbox1.Height); lineto(paintbox1.Left,paintbox1.Top+paintbox1.Height); brush.color:= clred; //Berlin farbe:= pixels[X,Y]; floodfill(paintbox1.Left+385,paintbox1.Top+200,farbe, fsborder); brush.color:= clyellow; //Hamburg farbe:= pixels[X,Y]; floodfill(paintbox1.Left+220,paintbox1.Top+115,farbe, fsborder); brush.color:= clblack; //Bremen farbe:= pixels[X,Y]; floodfill(paintbox1.Left+154,paintbox1.Top+160,farbe, fsborder); floodfill(paintbox1.Left+150,paintbox1.Top+124,farbe, fsborder); brush.color:= clgreen; //Nieders farbe:= pixels[X,Y]; floodfill(paintbox1.Left+170,paintbox1.Top+150,farbe, fsborder); brush.color:= clmaroon; //NRW farbe:= pixels[X,Y]; floodfill(paintbox1.Left+80,paintbox1.Top+260,farbe, fsborder); end; end; procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); begin showmessage('Aber wie???'); end; end. |
Re: Grafik als screenshot
was funktionert denn nicht? du weist x und y nie einen wert zu.
|
Re: Grafik als screenshot
Hallo,
mit deinem Code lädst du das Bild, und zeichnest es dann auf den Canvas der Paintbox und dann färbst du einige Bereiche auf dem Canvas der Paintbox ein. Deine Bilddatei wird dadurch jedoch nicht geändert. Hier ist ein wenig Code, wie du deine gezeichneten Bereiche in die Bilddatei speicherst.
Delphi-Quellcode:
Wenn du Canvas deiner Paintbox ausdrucken möchtest, dann müsste es etwa so aussehen: (allerdings nicht getestet)
procedure TForm1.Button1Click(Sender: TObject);
var Bitmap1: TBitmap; begin Bitmap1 := TBitmap.Create; try Bitmap1.LoadFromFile('DeutschUmriss.bmp'); Bitmap1.Canvas.CopyRect(Rect(0, 0, Bitmap1.Width, Bitmap1.Height), PaintBox1.Canvas, Rect(0, 0, Bitmap1.Width, Bitmap1.Height)); Bitmap1.SaveToFile('DeutschUmriss.bmp');//wird jetzt überschrieben! finally Bitmap1.Free; end; end;
Delphi-Quellcode:
uses printers;
procedure TForm1.Button2Click(Sender: TObject); var Bitmap1: TBitmap; begin Bitmap1 := TBitmap.Create; try//oder du druckst den Bitmap1.Canvas aus(dann Code anpassen) Bitmap1.LoadFromFile('DeutschUmriss.bmp');//breite und höhe feststellen Printer.BeginDoc; Printer.Canvas.CopyRect(Rect(0, 0, Bitmap1.Width, Bitmap1.Height), PaintBox1.Canvas, Rect(0, 0, Bitmap1.Width, Bitmap1.Height)); Printer.EndDoc; finally Bitmap1.Free; end; end; |
Re: Grafik als screenshot
danke, das klappt hervorragend.
Nun doch noch eine Frage: Wie muss ich dies abändern, um nicht nur die bveränderte bitmap auszudrucken, sondern die gesamte Form54, die noch einige andere listbox' etc enthält?? danke für die Unterstützung h.k. |
Re: Grafik als screenshot
Delphi-Quellcode:
Wie der Name der Procedur es schon vermuten lässt, kann man wenn die Parameter verändert werden, auch nur ein Bildausschnitt ausdrucken.
uses Printers;
Procedure BildAusSchnitt(hWND: HWND; iLeft, iTop, iWidth, iHeight: integer); var c: TCanvas; begin BringWindowToTop(hWND); c:= TCanvas.Create; c.Handle:= GetWindowDC(hWND); try printer.begindoc; printer.Canvas.CopyRect(Rect(0, 0, iWidth* 10, iHeight* 10), c, Rect(iLeft, iTop, iLeft+ iWidth, iTop+ iHeight)); printer.enddoc; finally ReleaseDC(hWND, c.handle); c.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin BildAusSchnitt(Form54.Handle, 0, 0, Form54.Width, Form54.Height); end; Theoretisch kannst du damit auch fremde Fenster ausdrucken, wenn du das Handle des Fensters kennst. |
Re: Grafik als screenshot
Wunderbar, wie das klappt.
Zu jeder Frage gibt es eine Neue: auf dem Bildschirm erscheint nunmehr eine Grenzen-Karte n Deutschlands(als bmp-Datei). Jetzt möchte ich erreichen, dass die Bundesländernamen angezeigt werden, wenn man mit der Maus über die Fläche fährt. Wenn es eine Schaltfläche wäre, ginge es ganz gut, aber die Differenzierung innerhalb der Karte macht Schwierigkeiten Idee?? Danke für die Hilfe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 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