Autor |
Beitrag |
ebs
      
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.
|
Verfasst: Sa 23.04.05 21:23
Hallo!
Ich drucke mit dieser Funktion ein Formular:
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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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  ).
Die Zwichenablage kann man ansteuern, und andere Anwendungen auch (z.B.: OLE).
|
|
ebs 
      
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.
|
Verfasst: 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.
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: So 24.04.05 16:40
Darf man erfahren zu welchem Zweck?
|
|
ebs 
      
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.
|
Verfasst: 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
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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:
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', nil, nil, nil); try ATarget.PixelFormat := pfDevice; ATarget.Width := Screen.Width; ATarget.Height := Screen.Height; BitBlt(ATarget.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DesktopDC, 0, 0, SRCCOPY); finally DeleteDC(DesktopDC); end; end; |
Das kannst du ja an dein Programm anpassen.
|
|
ebs 
      
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.
|
Verfasst: 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
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Do 28.04.05 15:41
ebs hat folgendes geschrieben: | Wird dann nicht vom ganzen Bildschirm ein Screenshot gemacht |
Jawoll. Guck mal:
Heiko 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:
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', nil, nil, nil); try ATarget.PixelFormat := pfDevice; ATarget.Width := Screen.Width; ATarget.Height := Screen.Height; BitBlt(ATarget.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DesktopDC, 0, 0, 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. 
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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:
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', nil, nil, nil); try ATarget.PixelFormat:=pfDevice; ATarget.Width:=Form1.Width; ATarget.Height:=Form1.Height; BitBlt(ATarget.Canvas.Handle, -Form1.Left, -Form1.Top, Form1.Left+Form1.Width, Form1.Top+Form1.Height, DesktopDC, 0, 0, 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:
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'); 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  .
|
|
WeBsPaCe
      
Beiträge: 2322
Erhaltene Danke: 1
FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
|
Verfasst: Do 28.04.05 18:03
|
|
ebs 
      
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.
|
Verfasst: 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 
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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:
Delphi-Quelltext 1:
| Bild:=FormX.GetFormImage; |
Damit bekommst du das gesamte Formular kopiert, ohne Rand und ohne dass das Formular im Vordergrund sein muss.
|
|
ebs 
      
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.
|
Verfasst: 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
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Sa 30.04.05 15:08
Delphi-Quelltext 1: 2: 3:
| Printer.BeginDoc; Printer.Canvas.Draw(Bild, 0, 0); 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 nach TBITMAP DRUCKEN guggen  .
|
|
ebs 
      
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.
|
Verfasst: Sa 30.04.05 15:15
Ich habs ja so probiert, aber der Drucker wirft nur ne leere Seite aus.  Wenn ich aber das Bitmap speicher, wird auch das Formular gespeichert.
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Sa 30.04.05 15:26
Das gleiche Problem hatte ich auch schon und hab es auf Anhieb auch nit hinbekommen  . Ich wred danach nochmal guggen, wie ich es hinkriege.
|
|
ebs 
      
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.
|
Verfasst: So 01.05.05 10:11
Hallo!
Da ist mir aber ein blöder Fehler passiert  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:
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
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: So 01.05.05 10:15
|
|
ebs 
      
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.
|
Verfasst: 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. 
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: So 01.05.05 11:17
Funktioniert es nun nachdem du tbit-->bmp gemacht hast?
|
|
|