AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Grafik als screenshot
Thema durchsuchen
Ansicht
Themen-Optionen

Grafik als screenshot

Offene Frage von "Hartfrid Krause"
Ein Thema von Hartfrid Krause · begonnen am 20. Feb 2007 · letzter Beitrag vom 18. Mär 2007
Antwort Antwort
Seite 1 von 3  1 23      
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#1

Grafik als screenshot

  Alt 20. Feb 2007, 20:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Grafik als screenshot

  Alt 20. Feb 2007, 20:27
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:
Printer.BeginDoc();
Printer.Canvas.TextOut(10, 10, 'MeinText');
Printer.EndDoc();
Über die suche findet sich da sicher auch noch einiges dazu.

[Edit]
Hast du dich eventuell im Titel vertan? Was hat ein Screenshot mit deinem Problem (das Drucken) zu tun?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#3

Re: Grafik als screenshot

  Alt 22. Feb 2007, 16:50
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]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Grafik als screenshot

  Alt 22. Feb 2007, 16:58
Herzlich willkommen in der Delphi-PRAXiS, Hartfrid.

Vielleicht bringt dich dieser Code auf die richtige Spur: klick

Freundliche Grüße
  Mit Zitat antworten Zitat
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#5

Re: Grafik als screenshot

  Alt 25. Feb 2007, 16:33
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:
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.
[edit=r_kerber]Delphi-Tags eingefügt. Das nächste Mal bitte selbst machen. Mfg, r_kerber[/edit]
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: Grafik als screenshot

  Alt 25. Feb 2007, 18:35
was funktionert denn nicht? du weist x und y nie einen wert zu.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Grafik als screenshot

  Alt 25. Feb 2007, 19:41
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:
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;
Wenn du Canvas deiner Paintbox ausdrucken möchtest, dann müsste es etwa so aussehen: (allerdings nicht getestet)
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;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#8

Re: Grafik als screenshot

  Alt 26. Feb 2007, 14:03
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.
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Grafik als screenshot

  Alt 26. Feb 2007, 19:00
Delphi-Quellcode:
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;
Wie der Name der Procedur es schon vermuten lässt, kann man wenn die Parameter verändert werden, auch nur ein Bildausschnitt ausdrucken.
Theoretisch kannst du damit auch fremde Fenster ausdrucken, wenn du das Handle des Fensters kennst.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#10

Re: Grafik als screenshot

  Alt 4. Mär 2007, 13:32
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:47 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