Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Programm druckt nicht immer.


Tony-S - Do 26.02.09 22:23
Titel: Programm druckt nicht immer.
Hallo Community,
ich habe eine Art "Wordpad" geschrieben, und bin jetzt durch Zufall auf ein Problem gestossen, was mir nicht ganz klar ist. Ich habe 2 verschiedene RTF-Dokumente mit diesem Programm geschrieben, und wollte diese aus Testzwecken beide drucken. Leider wird aber nur eins der beiden gedruckt.

Im Anhang befindet sich:

- Das Programm-

Der Druckdialog (vllt liegt es ja schon daran) sieht so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Drucken1Click(Sender: TObject);
begin

if printdialog1.Execute=true then RichEdit1.Print(RichEdit1.Lines.Text);
end;

bzw

procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

if (key = ord('P')) and (ssctrl in shift) then
      begin
            if printdialog1.execute then RichEdit1.Print(RichEdit1.Lines.Text);
            (...)

Moderiert von user profile iconNarses: Dateien als Anhang hochgeladen
// Info-Blatt ist die Datei, die sich nicht drucken lässt.
// Notiz ist die Datei, die sich drucken lässt.

Wäre nett von euch, mir zu sagen, woran es liegt das die eine Datei nicht gedruckt wird. Danke schonmal.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Dude566 - Do 26.02.09 22:36

Mach dein Quellcode doch bitte in die Delphi Tags.


Tony-S - Do 26.02.09 22:46

Das geht wie ^^? - möchte aller dings auch nicht den ganzen Text hier öffentlich stellen


DelphiMarkus - Do 26.02.09 23:07

Hallo!

Hier in der Hilfe steht wie das geht: http://www.delphi-forum.de/help_schreiben_bbcodes_source.html&sub=,19,27,32
Und die rtf-Dateien kannst du doch in ein zip-Archiv packen und dann hier hochladen. Das ist viel schöner als das bei rapidshare.com runterzuladen. Einen Archivierer wirst du doch bestimmt haben, oder? [url=http://www.7-zip.org/]7zip[/url] :zwinker:


Tony-S - Do 26.02.09 23:33

Hm k, der Witz ist, ich möchte hier nicht den ganzen Text posten von daher,
was könnte denn falsch sein, kann ja nur am Drucken liegen.


Narses - Fr 27.02.09 01:02

Moin!

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Leider wird aber nur eins der beiden gedruckt.
Was genau heißt das denn, was passiert? Löst du den Druck über Strg+P aus? :gruebel:

cu
Narses


Timosch - Fr 27.02.09 14:00

Wenn du ein MainMenu benutzt, lassen sich Shortkeys viel leichter implementieren. Schau dir mal die entsprechende Eigenschaft des Menüeintrags an.


Tony-S - Fr 27.02.09 18:24

Ich kann den Druck einmal über das Mainmenu öffnen File --> open o. Über Strg + P . Die Frage ist nur wieso das eine Dokument nicht gedruckt wird, d.h., es wird kein Druckdialog gestartet, wenn ich das zuvor geöffnete Dokument öffnen möchte. Gibt es da keinen Grund für??


Timosch - Fr 27.02.09 18:33

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Ich kann den Druck einmal über das Mainmenu öffnen File --> open o. Über Strg + P . Die Frage ist nur wieso das eine Dokument nicht gedruckt wird, d.h., es wird kein Druckdialog gestartet, wenn ich das zuvor geöffnete Dokument öffnen möchte. Gibt es da keinen Grund für??

Wie ich schon sagte: Stell im MenuItem für Drucken den ShortCut Strg+P ein. Dann kannst du dir diese ganze Prozedur sparen.
Mal ganz ins Blaue geraten: Wahrscheinlich ist nicht immer das RichEdit im Fokus.


Tony-S - Fr 27.02.09 21:43

Nein das wäre ja Blödsinn, ich kann mit beiden Methoden das Dokument nicht drucken!
- Das andere Dokument lässt sich mit beiden Prozeduren drucken..


jaenicke - Di 03.03.09 21:48

Das nicht druckbare Dokument enthält ein eingebettetes RTF-Objekt (der ganze Inhalt), ich vermute einmal, dass das deshalb nicht geht. Ausprobiert, was bei mir da passiert, habe ich noch nicht.


jaenicke - Di 03.03.09 22:37

Nein, der Fehler liegt ganz wo anders. Der zum Drucken angegebene Titel ist einfach zu lang...
Ich hatte mich ja schon gewundert, warum du den ganzen Text als Überschrift beim Drucken haben willst. Aber in dem Fall funktioniert es so gar nicht. Am besten nimmst du nur die erste Zeile oder den Dateinamen oder eine eigene Überschrift oder so.

Nebenbei ist dein Vergleich auf true falsch:

Delphi-Quelltext
1:
if printdialog1.Execute=true then                    
Das kann ins Auge gehen.
Der Vergleich mit Booleanwerten ist nicht nur unschön und unlogisch, sondern falsch.
Hier habe ich mal ein kleines Beispiel gebastelt, wann es schief geht:
http://www.delphi-forum.de/viewtopic.php?p=548760#548760
Mehr dazu steht hier:
http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/page/4/


Tony-S - Di 03.03.09 22:49

Hm wie meinst du das der Titel zum Drucken ist zu lang, im Infoblatt steht ja nur "expression (c)" in Notiz hingegen "eXpression lite (c), ist in der Lage, in verschiedenen Farben, Schriftarten und Größen zu " wäre also länger, auch wenn ich nur ein Wort als "Überschrift" nehme wird es nicht gedruckt

und das mit execute = true, hast du mir ja schonmal erklärt, das war dort nur, weil ich es kopiert hatte.


jaenicke - Di 03.03.09 23:14

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Hm wie meinst du das der Titel zum Drucken ist zu lang
Naja, du übergibst doch als Seitenüberschrift den gesamten Text.

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
auch wenn ich nur ein Wort als "Überschrift" nehme wird es nicht gedruckt
Also bei mir (Turbo Delphi / Delphi 2006) funktioniert es dann. Welche Version benutzt du denn? Und mit welchem Quelltext ging es dann nicht?


Tony-S - Mi 04.03.09 00:11

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Naja, du übergibst doch als Seitenüberschrift den gesamten Text.

Du meinst praktisch den Titel den der Drucker dann angibt?
Hab einfachmal "Notiz" als Überschrift genommen, und gedruckt hat es nicht.

auch wenn ich nur ein Wort als "Überschrift" nehme wird es nicht gedruckt

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Welche Version benutzt du denn?

Delphi 7

Und mit welchem Quelltext ging es dann nicht?

Das ist eigentlich noch derselbe Text ^^ nur ohne execute = true, aber daran wirds nich liegen ;D


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
      if (key = ord('P')) and (ssctrl in shift) then
      begin
            if printdialog1.execute then RichEdit1.Print(RichEdit1.Lines.Text);

und

Delphi-Quelltext
1:
if printdialog1.Execute then RichEdit1.Print(RichEdit1.Lines.Text);                    

Der Fehler liegt wohl in dem was ich RichEdit1.Print in Klammer zuweise - ja ?
Wenn ja und wenn es daran liegt müsste ich in Klammer ja so etwas rein schreiben wie Zeile 1...

:D ehm ich denk nach vllt isses ja ganz leicht

Moderiert von user profile iconNarses: Delphi- und Quote-Tags hinzugefügt


jaenicke - Mi 04.03.09 00:21

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
if printdialog1.Execute then RichEdit1.Print(RichEdit1.Lines.Text);                    
Du übergibst doch immer noch den gesamten Text als Überschrift... :roll:

Vielleicht solltest du dir einmal die Hilfe anschauen was der Parameter eigentlich macht, denn das ist dir offenbar ja nicht klar.
Delphi-Hilfe [http://docs.codegear.com/docs/radstudio/radstudio2007/RS2007_helpupdates/HUpdate4/DE/html/delphivclwin32/ComCtrls_TCustomRichEdit_Print.html] hat folgendes geschrieben:
Mithilfe von Print kann der Inhalt eines RTF-Eingabefeldes gedruckt werden. Der Parameter Caption gibt dabei den Titel an, der im Druckmanager und auf Netzwerk-Titelseiten angezeigt wird.


Tony-S - Mi 04.03.09 00:27

Ich weiß jetzt nicht, ob das die schlaueste Methode is was ich gemacht habe ^^.... aber ES GEHT

if printdialog1.Execute then RichEdit1.Print(RichEdit1.Lines[1]);

höhö ^^


jaenicke - Mi 04.03.09 00:30

Und was, wenn das Dokument nur eine Zeile hat, du aber versuchst die zweite zu nehmen? :roll:
Wie wäre es mit einem passenden Text...

Delphi-Quelltext
1:
2:
if PrintDialog1.Execute then
  RichEdit1.Print('Mein Druckauftrag');
Oder wie wäre es wie gesagt mit dem Dateinamen, da es ja ein Editor ist?


Tony-S - Mi 04.03.09 00:34

Ok wusste nicht as ich praktisch einen "beliebigen Text" übergeben kann, zumindestens weiß ich jetzt woran es liegt. Danke


jaenicke - Mi 04.03.09 00:49

Das steht doch in der Hilfe. Der angegebene Text steht in der Liste der Druckaufträge, weshalb da normalerweise der Dateiname oder ähnliches drin steht. Damit man den Druckauftrag identifizieren kann, wenn es mehrere sind.

Ich pack mal ein Bild in den Anhang, in dem Fall habe ich diese Seite vom Browser aus gedruckt, deshalb steht da der Titel der Seite...


Zorro - Mi 04.03.09 14:16

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
if printdialog1.Execute then RichEdit1.Print(RichEdit1.Lines.Text);                    
Du übergibst doch immer noch den gesamten Text als Überschrift... :roll:



Der Begriff "Überschrift", um den Namen des Druckauftrages zu bezeichnen, klingt wohl eher verwirrend, da der weniger geübte User/Programmierer damit wohl etwas wie eine Kapitelüberschrift oder Seitenüberschrift assoziiert und nicht denjenigen (kurzen) Text, der in der Liste der Druckaufträge erscheinen soll.


Greetz Zorro


jaenicke - Mi 04.03.09 16:04

Es ist die Überschrift des Druckauftrags, und der englische Name des Parameters ist Caption...
Was das bedeutet steht ja in der Hilfe.