Autor Beitrag
Silvio
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 13.03.12 20:23 
Zum Druck könntest Du, zu Fuß:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
uses Printers;

.....
Printer.Begindoc;
Printer.Canvas.  // Draw/Ellipse//Textout // alles was Canvas halt kennt verwenden
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
 Print;					

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 16.03.12 18:07 
ausblenden 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]); // Textout Zeilenweise geht auch (x,y) berechnen
//  Canvas.Draw(100,100,Image1.Picture.Graphic); // alles außer Bitmaps
//  Canvas.Draw(100,100,Image1.Picture.Bitmap);   // Bitmaps
    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 user profile iconMartok: Delphi-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Fr 16.03.12 19:14 
Du machst nichts falsch, Du hast wahrscheinlich eine alte Delphiversion mit einer anderen Implementierung von TextRect.
ausblenden Delphi-Quelltext
1:
2:
3:
//  Canvas.TextRect(r,s,[tfWordBreak]); 
// kann wie folgt aufgerufen werden
DrawTextEx(Canvas.Handle, Pchar(s), Length(s), r, 16nil);


der Aufruf in den altern Versionen
ausblenden 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



BeitragVerfasst: Sa 17.03.12 00:21 
user profile iconSilvio hat folgendes geschrieben Zum zitierten Posting springen:
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:

ausblenden volle Höhe Delphi-Quelltext
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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!!
ausblenden 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, 16nil);
  //Canvas.TextRect(r,0,0,s);
  Canvas.Draw(100,100,Image1.Picture.Bitmap);   // Bitmaps
Printer.Enddoc;
end;

Danke

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
2:
DrawTextEx(PRINTER.Canvas.Handle, Pchar(s), Length(s), r, 16nil);
//etc..

_________________
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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 user profile iconNarses: Beiträge zusammengefasst

Ah, 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 18.03.12 15:53 
user profile iconSilvio hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich die Größe des Bildes bestimmen?
Unter höhe und breite tut sich gar leider gar nichts
Suchst du vielleicht Canvas.StretchDraw oder StretchBlt? ;-)
Silvio Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 18.03.12 16:48 
user profile iconSilvio hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: 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:
ausblenden 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, 16nil);
  Printer.Canvas.TextRect(r,50,50,s);
  Printer.Canvas.Draw(4000,500,Image1.Picture.Bitmap);   // Bitmaps
  //Printer.Canvas.StretchDraw (r,Image1.Picture.Bitmap);
Printer.Enddoc;



LG und danke

Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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