Autor Beitrag
ebs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 213

Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
BeitragVerfasst: Sa 23.04.05 21:23 
Hallo!
Ich drucke mit dieser Funktion ein Formular:
ausblenden Delphi-Quelltext
1:
2:
Printer.Orientation := poLandscape;
Form1.Print;

1. Problem ist, dass ich Ränder darum haben wollte, aber ich finde keine Funktion, wo ich die ändern könnte.
2. Problem ist, dass ja ein Kasten darum gezogen wird, der aber nicht vollständig angezeigt wird.
3. Problem ist, dass die Qualität ja nicht besonders berauschend ist. Gibt es vieleicht eine andere Methode?

Danke!
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Sa 23.04.05 21:36 
Mit der Tastenkombination Alt-Druck kannst du das aktuelle Fenster (z.B. dein Formular) in die Zwischenablage geben.
Danach kannst du das in Word, OpenOffice, PhotoShop oder sonstwo wieder einfügen als Bild.
Das ganze lässt sich vermutlich auch programmieren, habe ich aber noch nie gemacht (kein Bedarf :wink: ).
Die Zwichenablage kann man ansteuern, und andere Anwendungen auch (z.B.: OLE).
ebs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 213

Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
BeitragVerfasst: So 24.04.05 10:01 
Das nützt mir aber garnichts! Ich will das ganze ja nicht in andere Programme kopieren, sondern direkt drucken.
Fabian W.
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1766

Win 7
D7 PE
BeitragVerfasst: So 24.04.05 16:40 
Darf man erfahren zu welchem Zweck?
ebs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 213

Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
BeitragVerfasst: Mo 25.04.05 17:16 
Hallo!
Ich habe mehere Bilder, die in einer bestimmten Anordnung auf dem Formular ist. Nun wollte ich das ganze halt drucken.
Vieleicht könnte man das ganze ja auch in einen Quickreport zwischen speichern, nur ich wüsste nicht, wie das geht.
Danke!
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mo 25.04.05 17:41 
Ich würde von dem Formular ein Scrennshot machen und das Bild dann ausdrucken, da du den Drucker selber kontrollieren kannst.

Hier der Quelltext für einen Screenshot vom ganzen Bildschirm:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure MakeScreenShot(const ATarget: TBitmap);
var
  DesktopDC: HDC;
begin
  DesktopDC := CreateDC('DISPLAY'nilnilnil);
  try
    ATarget.PixelFormat := pfDevice;
    ATarget.Width := Screen.Width;
    ATarget.Height := Screen.Height;
  
    BitBlt(ATarget.Canvas.Handle, 00, Screen.Width, Screen.Height, DesktopDC, 00, SRCCOPY);
  finally
    DeleteDC(DesktopDC);
  end;
end;


Das kannst du ja an dein Programm anpassen.
ebs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 213

Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
BeitragVerfasst: Do 28.04.05 15:37 
Hallo!
Wird dann nicht vom ganzen Bildschirm ein Screenshot gemacht :?:
Ich will doch einfach nur von meinem Formular einen Ausdruck machen.
Danke!
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Do 28.04.05 15:41 
user profile iconebs hat folgendes geschrieben:
Wird dann nicht vom ganzen Bildschirm ein Screenshot gemacht :?:

Jawoll. Guck mal:

user profile iconHeiko hat folgendes geschrieben:
Ich würde von dem Formular ein Scrennshot machen und das Bild dann ausdrucken, da du den Drucker selber kontrollieren kannst.

Hier der Quelltext für einen Screenshot vom ganzen Bildschirm:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure MakeScreenShot(const ATarget: TBitmap);
var
  DesktopDC: HDC;
begin
  DesktopDC := CreateDC('DISPLAY'nilnilnil);
  try
    ATarget.PixelFormat := pfDevice;
    ATarget.Width := Screen.Width;
    ATarget.Height := Screen.Height;
  
    BitBlt(ATarget.Canvas.Handle, 00, Screen.Width, Screen.Height, DesktopDC, 00, SRCCOPY);
  finally
    DeleteDC(DesktopDC);
  end;
end;


Das kannst du ja an dein Programm anpassen.


Ich glaube, du sollst den Code noch ein wenig verändern. ;)

//EDIT: Hab was falsch gelesen. Ich weiß im Moment auch nicht, was du am Code machen kannst. :nixweiss:
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Do 28.04.05 17:44 
So ich habe gerade nochmal nach dem Problem gesucht und bin fündig geworden. Davor aber die Variante die ich zuerst angesprochen hatte:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure MakeScreenShot(const ATarget: TBitmap);
var DesktopDC: HDC;
begin
 DesktopDC:=CreateDC('DISPLAY'nilnilnil);
 try
  ATarget.PixelFormat:=pfDevice;
  ATarget.Width:=Form1.Width;
  ATarget.Height:=Form1.Height;
  BitBlt(ATarget.Canvas.Handle, -Form1.Left-Form1.TopForm1.Left+Form1.WidthForm1.Top+Form1.Height, DesktopDC, 00, SRCCOPY)
 finally
  DeleteDC(DesktopDC)
 end
end;


Die gerade geschriebene Variante hat aber ein Nachteil, denn bei XP sind ja die Kanten vom Fenster abgerundet, wodurch du oben links und rechts je ein paar Pixel vom Hintergrund des Fensters hast. Bietet dafür den Vorteil, dass du den Rand des Fensters mitkopierst. Wenn du nur am Client-Bereich interessiert bist (also ohne Fensterrahmen), geht folgende Variante:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
var
 Bitmap: TBitmap;
begin
 Bitmap:=GetFormImage;
 Bitmap.SaveToFile('Hallo_hier_ist_ein_Bitmap.bmp'); //Speichern als Beispiel
 Bitmap.Free;
end;


PS @WeBsPaCe: Warum wusstes du nicht was du am Code machen solltest? Das einzige was ich ausprobieren musste war, wie die Werte bei BitBlt sind, da es ja das Windows-Koordinatensystem ist :wink: .
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Do 28.04.05 18:03 
user profile iconHeiko hat folgendes geschrieben:
PS @WeBsPaCe: Warum wusstes du nicht was du am Code machen solltest? Das einzige was ich ausprobieren musste war, wie die Werte bei BitBlt sind, da es ja das Windows-Koordinatensystem ist :wink: .

:rofl: Hab die 0,0 nicht gesehn... ;) :mrgreen:
ebs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 213

Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
BeitragVerfasst: Do 28.04.05 19:46 
Tja,
dass ganze funktioniert aber bei mir nicht so toll. Und zwar habe ich mehrere Formulare, die übereinander liegen, so werden dann halt alle Formulare mit abgespeichert und nicht nur das eine. Die Qualität der Ausgabe gefällt mir aber, aber dieses TBITMAP hat scheinbar keine Druckausgabe, oder habe ich das was übersehen?
Aber mich stört wirklich diese obere Leiste.
Vieleicht kriege ich ja noch ein paar Tips!
Danke :D
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Fr 29.04.05 19:53 
So, ich habe mich jetzt mal nach einem Tutorial zum drucken umgeschaut, damit du dir das selber erarbeiten kannst, denn beim selber erarbeiten versteht man das meiste doch ehr. Hier der Link. Ich hoffe es ist verständlich, da ich mir es selber nicht durchgelesen habe, da ich bisher drucken fast noch nie gebraucht habe. Es ist relativ leicht zu drucken. Wenn du was nicht verstehst frag einfach hier wieder nach.

Aber jetzt wieder zu dem Bild was du machen willst. Wenn es also ohne dem Rand haben willst, reicht es wenn du folgendes verwendest:

ausblenden Delphi-Quelltext
1:
Bild:=FormX.GetFormImage; //statt FormX musst du den Namen des Formulars, welches kopert werden soll, angegeben					

Damit bekommst du das gesamte Formular kopiert, ohne Rand und ohne dass das Formular im Vordergrund sein muss.
ebs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 213

Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
BeitragVerfasst: Sa 30.04.05 15:02 
Das drucken sollte für mich kein Problem sein, nur ich finde keine Funktion, womit ich ein TBitmap drucken kann. Auch in diesem Tutorial steht leider nichts drin.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Sa 30.04.05 15:08 
ausblenden Delphi-Quelltext
1:
2:
3:
Printer.BeginDoc;
Printer.Canvas.Draw(Bild, 00);
Printer.EndDoc


Steht das etwa nicht drin?
Außerdem gibt es in diesem Forum zum drucken von TBitmap schon etwas. Du solltest mal die Forensuche nehmen und nachSuche in: Delphi-Forum, Delphi-Library TBITMAP DRUCKEN guggen :wink: .
ebs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 213

Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
BeitragVerfasst: Sa 30.04.05 15:15 
Ich habs ja so probiert, aber der Drucker wirft nur ne leere Seite aus. :evil: Wenn ich aber das Bitmap speicher, wird auch das Formular gespeichert.
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Sa 30.04.05 15:26 
Das gleiche Problem hatte ich auch schon und hab es auf Anhieb auch nit hinbekommen :wink: . Ich wred danach nochmal guggen, wie ich es hinkriege.
ebs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 213

Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
BeitragVerfasst: So 01.05.05 10:11 
Hallo!
Da ist mir aber ein blöder Fehler passiert :oops: Ich hatte das printer vor canvas vergessen. Ok, jetzt wird gedruckt, aber nicht auf der ganzen Seite, sondern nur genau in der Mitte. Dann habe ich mich mal umgeschaut und diesen Code gefunden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Uses Printers;

procedure TForm1.DruckeBild;
var Bmp: TBitmap;
begin
  Bmp:=TBitmap.Create;
  try
tbit:=Tgraph.GetFormImage;
       with Printer do begin
      BeginDoc;
      Canvas.Draw((PageWidth - Bmp.Width) div 2, (PageHeight - Bmp.Height) div 2, Bmp);
      EndDoc;
    end;
  finally
    Bmp.Free;
  end;
end;

Das klappt aber auch nicht. Was habe ich falsch gemacht?
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 01.05.05 10:15 
user profile iconebs hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Uses Printers;

procedure TForm1.DruckeBild;
var Bmp: TBitmap;
begin
 Bmp:=TBitmap.Create;
 try
  tbit:=Tgraph.GetFormImage;
  with Printer do
   begin
    BeginDoc;
    Canvas.Draw((PageWidth - Bmp.Width) div 2, (PageHeight - Bmp.Height) div 2, Bmp);
    EndDoc;
  end
 finally
  Bmp.Free;
 end;
end;


Also ich sehe auf Anhieb nur einen Fehler. TGraph ist dein Formularname? Wenn nicht liegt dort auch ein Fehler. Der mackierte Teil muss nicht TBit heißen, sondern Bmp! Und was ist überhaupt TBit?
ebs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 213

Suse Linux 9.2, Win 98, Win NT, Win XP, Win for Workgroups, Win XP SP2, Dos 6.1
D3 Prof, D2005 PE, Delphi 2006 Prof.
BeitragVerfasst: So 01.05.05 11:09 
Ach.. Ich habe einfach nur die Methode aus dem Internet kopiert und mein Tbit mit rein gemacht. Also es gillt TBit:=BMP, und Tgraph ist mein Formular. :D
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 01.05.05 11:17 
Funktioniert es nun nachdem du tbit-->bmp gemacht hast?