Autor |
Beitrag |
Silvio
      
Beiträge: 16
|
Verfasst: Di 13.03.12 20:11
Hallo,
ich habe ein Programm geschrieben, in dem Memofelder und Images sind. Wie kann ich diese im ausdrucken, oder vielleicht sogar als PDF speichern, um es späer ausdrucken zu können.
Ich habe den "PrintDialog" gefunden, weiß jedoch nicht, was ich genau schreiben soll, damit ich das speichern bzw. drucken kann.
Vielen Dank schon mal für eure Hilfe
LG S
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Di 13.03.12 20:23
Zum Druck könntest Du, zu Fuß:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| uses Printers;
..... Printer.Begindoc; Printer.Canvas. Printer.Enddoc; |
verwenden ...
Du könntest per OLE Word fernsteuern
oder Du verwendest einen Reportgenerator, persönlich würde ich FastReport empfehlen ...
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Silvio 
      
Beiträge: 16
|
Verfasst: Mi 14.03.12 08:33
Hi,
vielen Dank für die schnelle Antwort. Leider habe ich keinen Schimmer was du meinst.
Ich habe mir Delphi selbst beigebracht und leider noch nicht alle Sachen und Tools verstanden.
Habe gestern Abend noch das Geschriebene ausprobiert, jedoch leider ohne Erfolg.
Wenn ich das Formular in ein PDF umwandle, geht das mit 2 oder 3 Handgriffen einfacher, bzw. geht das überhaupt??
Ich glaube, dass wäre mir sogar lieber, dann kann jeder Benutzer selbst entscheiden, ob es gedruckt werden soll.
Dank und LG S
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mi 14.03.12 08:43
Ich habe noch keine Vorstellung was genau Du vor hast.
Wenn Du nur Dein Formular drucken willst, wähle beim Druckerdialog einen PDF-Drucker aus und rufe
Delphi-Quelltext
auf. Manche Komponenten (z.B. TRichedit) werden hierbei allerdings nicht wie gewünscht dargestellt.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Für diesen Beitrag haben gedankt: Silvio
|
|
Silvio 
      
Beiträge: 16
|
Verfasst: Mi 14.03.12 08:53
Also ich wähle im form1 etwas bestimmtes aus und bekomme dann in form 2 untersiedliche Ausschreibungstexte in einem Memofeld angezeigt. Außerdem bekomme ich ebenfalls ein Bild von der ausgewählten Sache zu sehen. Dieses möchte ich dann drucken oder ein PDF von erstellen.
Kann nur leider im Moment nichts ausprobieren, da ich an der Abeit bin.
Danke für deine schnellen Antworten und Hilfestellungen
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 14.03.12 09:04
PDFs lassen sich in Delphi leicht mit der Synopse PDF Engine erstellen.
[url]synopse.info/fossil/wiki?name=Downloads[/url]
Zuletzt bearbeitet von jaenicke am Do 15.03.12 09:38, insgesamt 1-mal bearbeitet
|
|
Silvio 
      
Beiträge: 16
|
Verfasst: Do 15.03.12 08:53
Guten Morgen,
das mit "print" hat gut funtioniert, aber leider nicht so wie ich es mir gedacht habe.
Werde am Wochenende noch einmal die anderen Vorschläge ausprobieren.
Vielen Dank
|
|
Silvio 
      
Beiträge: 16
|
Verfasst: Fr 16.03.12 18:07
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var r:TRect; s:String; begin s := Memo1.Text; r:=memo1.ClientRect; Canvas.TextRect(r,s,[tfWordBreak]); Canvas.StretchDraw(Rect(100,100,200,200),Image1.Picture.Graphic); end; |
Hallo, habe das eben ausprobiert. Doch leider kommt ein Fehler bei der eckigen Klammer.
Ich habe keine Ahnung was ich falsch mache.
Moderiert von Martok: Delphi-Tags hinzugefügt
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Fr 16.03.12 19:14
Du machst nichts falsch, Du hast wahrscheinlich eine alte Delphiversion mit einer anderen Implementierung von TextRect.
Delphi-Quelltext 1: 2: 3:
| DrawTextEx(Canvas.Handle, Pchar(s), Length(s), r, 16, nil); |
der Aufruf in den altern Versionen
Delphi-Quelltext 1:
| Canvas.TextRect(r,0,0,s); |
bringt keinen Zeilenumbruch
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Zuletzt bearbeitet von bummi am Sa 17.03.12 00:50, insgesamt 1-mal bearbeitet
|
|
Perlsau
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 17.03.12 00:21
Silvio hat folgendes geschrieben : | Hallo,
ich habe ein Programm geschrieben, in dem Memofelder und Images sind. Wie kann ich diese im ausdrucken, oder vielleicht sogar als PDF speichern, um es späer ausdrucken zu können. |
Viele Wege führen nach Rom. Du könntest dir z.B. einen PDF-Drucker installieren (ich bevorzuge den PDF-Creator), und druckst dann einfach auf den Canvas des Druckers. Ich hab mal ein kleines Tool gemacht, mit dem man eingescannte Buchseiten in eine Listbox einlesen, entsprechend anordnen (sortieren) und als PDF-Datei ausdrucken konnte. Meine Druckerprozedur sah so aus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure TFormMain.Button_KonvertClick(Sender: TObject); VAR Bild : TImage; i,z : Integer; Datei : String;
begin IF ListBox_Bilder.Count = 0 THEN EXIT;
Bild := TImage.Create(FormMain);
z := ListBox_Bilder.Count -1;
Printer.Title := Edit_Projektname.Text; Printer.BeginDoc;
FOR i := 0 TO z DO BEGIN Datei := ListBox_Bilder.Items[i]; IF FileExists(Datei) THEN BEGIN Bild.Picture.Bitmap.LoadFromFile(Datei); Printer.Canvas.Draw(PixLinks,PixOben,Bild.Picture.Graphic); IF i < z THEN Printer.NewPage;
StatBar.Panels[1].Text := IntToStr(i); Application.ProcessMessages; END; END;
Printer.EndDoc;
FreeAndNil(Bild); StatusBarAktuell; end; |
Fertiges Programm incl. Quellcode und Handbuch herunterladen
|
|
Silvio 
      
Beiträge: 16
|
Verfasst: So 18.03.12 15:09
Hallo,
also bei mir funtioniert das drucken zwar, aber es kommt weder ein Bild noch der Text aus dem Memofeld.
Ich weiß nicht wo mein Fehler liegt.
Bitte helft mir!!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm2.Drucken1Click(Sender: TObject); var r:TRect; s:String; begin Printer.Begindoc; Printer.Canvas.Font.Size := 12; Printer.Canvas.Font.Name := 'Verdana'; s := Memo1.Text; r:=memo1.ClientRect; DrawTextEx(Canvas.Handle, Pchar(s), Length(s), r, 16, nil); Canvas.Draw(100,100,Image1.Picture.Bitmap); Printer.Enddoc; end; |
Danke
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: So 18.03.12 15:13
Auf Deinem Form müsste jetzt das zu sehen sein was Du malst, es sei denn es ist verdeckt von anderen Controls.
Es fehlt ein Printer. vor Deinem Canvas, so sprichst Du das Canvas Deiner Form an
Delphi-Quelltext 1: 2:
| DrawTextEx(PRINTER.Canvas.Handle, Pchar(s), Length(s), r, 16, nil); |
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Zuletzt bearbeitet von bummi am Di 20.03.12 14:54, insgesamt 1-mal bearbeitet
Für diesen Beitrag haben gedankt: Silvio
|
|
Silvio 
      
Beiträge: 16
|
Verfasst: So 18.03.12 15:30
Ja danke,
er druckt jetzt wenigstens schon mal den Anfang, jedoch nur immer 20 Buchstaben hintereinander und dann wieder eine neue Zeile.
Den Printer habe ich doch drin, was meinst du mit Canvas Diner Form? Moderiert von Narses: Beiträge zusammengefasstAh, ok. Habe das mit dem Printer verstanden.
Wie kann ich denn dem Bild sagen, an welcher Blattstelle es sein soll, also wenn ich es rechsoben haben möchte beispielsweise??
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 18.03.12 15:44
Naja, wohin gezeichnet werden soll steht in r drin. Da übergibst du ja nicht umsonst ein Rechteck. Siehe Doku:
msdn.microsoft.com/e...ibrary/dd162499.aspx
|
|
Silvio 
      
Beiträge: 16
|
Verfasst: So 18.03.12 15:51
Woran erkenne ich das Rechteck?
Habe die Position jetzt ändern können
Wie kann ich die Größe des Bildes bestimmen?
Unter höhe und breite tut sich gar leider gar nichts
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 18.03.12 15:53
|
|
Silvio 
      
Beiträge: 16
|
Verfasst: So 18.03.12 16:02
Printer.Canvas.StretchDraw (r,Image1.Picture.Bitmap);
ok danke, bild wird größer, aber bestimmen kann ich es immer noch nicht.
StretchBlt gibt es nicht
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 18.03.12 16:48
Silvio hat folgendes geschrieben : | StretchBlt gibt es nicht |
Nicht in Canvas, das ist eine einzelne Funktion. Wenn die nicht gefunden wird, fehlt dir die Unit Windows in der uses Klausel.
|
|
Silvio 
      
Beiträge: 16
|
Verfasst: Mo 19.03.12 20:37
DrawTextEx(PRINTER.Canvas.Handle, Pchar(s), Length(s), r, 16, nil);
hallo,
für was steht die 16?
ich habe jetzt einige sachen ausprobiert, er druckt das bild auch groß, aber immer nur an den linken rand, und ich möchte es gerne am rechten rand haben. der text aus dem memofeld soll rechts ausgegeben werden, aber der druckt immer nur drei zeilen und in jeder zeile max 10 buchstaben, an was liegt das??
hier noch mal mein quelltext:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm2.Drucken1Click(Sender: TObject); var r:TRect; s:String; begin Printer.Begindoc; Printer.Canvas.Font.Size := 12; Printer.Canvas.Font.Name := 'Verdana'; s := Memo1.Text; r:=memo1.ClientRect; DrawTextEx(PRINTER.Canvas.Handle, Pchar(s), Length(s), r, 16, nil); Printer.Canvas.TextRect(r,50,50,s); Printer.Canvas.Draw(4000,500,Image1.Picture.Bitmap); Printer.Enddoc; |
LG und danke
Moderiert von Martok: Delphi-Tags hinzugefügt
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Di 20.03.12 00:23
16 >> DT_WORDBREAK = $10;
versuch mal zu verstehen was TRect ist und wofür r hier verwendet wird ...
Jaenicke hatte Dir schon einen Link bzgl. DrawTextEx geschickt.
Hast Du schon einmal F1 gedrückt wenn der Cursor auf dem entsprechenden Wort steht.
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
|