Text mit Pascal drucken

Hi,
gibt man diesen Quelltext in den Editor ein (beim mir Lazarus, also Free Pascal), sollte ja eigentlich der eingegebene Text ausgedruckt werden, statt dessen kommt Error: 103. Was muss man jetzt machen?

Program Drucken;
USES Crt, Printer ;
VAR Text: String;
BEGIN
Writeln (‚Bitte Text eingeben …‘);
Read (Text);
Write (Lst, Text );
END.

Hi

Nun, da du die Unit Crt reinholst, würde ich sagen, du arbeitest an einem DOS-Programm. Kann das sein?

Nach meinem Infostand, müsste am Schluss noch der Druck abgeschlossen werden, also z.B. so:

Program Drucken;
USES Crt, Printer ;
VAR Text: String;
BEGIN
Writeln (‚Bitte Text eingeben …‘);
Read (Text);
Write (Lst, Text );
Close (lst);
END.

Aber, dies löst dein Problem nicht… ich denke, das Problem ist folgendes: DOS-Programme drucken natürlich (wie früher) Standardmässig über den parallelen-Anschluss (LPT1) aus. Dieser ist aber inzwischen eigentlich ausgestorben… USB- und Netzwerkdrucker sind aktuell. Oder hat du tatsächlich den Drucker noch über LPT1 angeschlossen? Wenn nicht, könnte ich mir vorstellen, dass das Programm deswegen das Device nicht öffne kann (Fehler 103)=File Not Open error).

Versuche mal folgendes (unter Windows): Gebe dein Drucker im Netzwerk frei (Druckerfreigabe) und leite die Druckausgabe auf deinen Windows-Drucker um. Dazu musst du danach in der Eingabenaufforderung noch folgenden Befehl eingeben (Namen jeweils anpassen):

net use lpt1: \pc-name\druckerfreigabename

Versuche es danach nochmals. Viel Glück! :smile:

Gruss
Sam

Guten Tag,
wo muss den dieser lpti-code hin, soll man den ans Ende des zu druckenden Text eingeben, oder als Programmierzeile hinter Write (Lst, Text);?
(Bei mir hat beides nicht gefunzt ???)
Ich benutze übrigens eine USB-Verbindung zum Drucker.

Hi

Ne, dein Programm bleibt wie es ist, bis auf dem Close(Lst)-Befehl.
Zusätzlich musst du aber eine bat-Datei anlegen (im selben Ordner wie dein Programm), die z.B. myprog.bat heisst und etwas so aussieht.

@echo off
net use lpt1: \pc-name\druckerfreigabename
deinprg.exe
net use lpt1: /delete

Dann kannst du dein Programm über diese Batch-Datei starten. Zum Programmieren kannst Du auch eine solche Bacht-Datei anlegen, welche dann anstelle deines Programms die Programmiersprache startet, damit du da auch richtig arbeiten kannst.

Vorher musst du aber deinen Drucker freigeben, was so funktioniert:
http://support.microsoft.com/kb/814005/de
Abschnitt: Freigeben eines Druckers

Danach den Freigabenamen sowie den PC name Deines Gerätes entsprechend in die Batch-Datei beim Befehl net usw lpt1: einfügen. Könnte dann etwas so aussehen:
net use \pcalterna\HPDESKJET800

Noch mals kurz zur Erklährung: DOS kennt USB nicht, und somit ist das Drucken auf einen solchen Drucker von DOS aus nicht möglich. Um das zu umgehen, leiten (->deshalb net use LPT1… und er Batch) wir einfach die Ausgabe des virtuellen Druckeranschlusses LPT1 auf einen Netzwerkdrucker um, damit das klappt, muss auf deinem PC der Drucker für das Netzwerk freigegeben werden (->deshalb die Druckerfreigabe).

Alles klar soweit? :smile:

Gruss
Sam

Mein Ordner sieht dann so aus:
backup (ist ein Ordner)
drucker.bat
projekt1.compiled
projekt1.exe
projekt1.lpi
projekt1.lpr
projekt1.manifest
projekt1.o
projekt1.rc

Ich hab übrigens als „pcname“ den vollständigen Computernamen angegeben.
Und den Drucker hab ich so freigegeben (unter Win7): Start->Systemsteuerung->Drucker und Geräte->Druckereigenschaft->Reiter Freigeben->Haken bei Drucker freigeben

Leider funktioniert weder die exe-- noch die lpi-Datei???

Hi

Ok… wie sieht nun deine drucker.bat datei aus, wie ist dein Computername sowie der Druckerfreigabename? Dann kommen wir der Sache wohl wieder ein Schritt näher. :smile:

Gruss
Sam

Guten Tag,

drucker.bat:

@echo off
net use lpt1: \IL2110-PC\hp officejet 5500 series
deinprg.exe
net use lpt1: /delete

Der Freigabename des DRuckers ist gleich dem normalen Namen.

Guten Tag

Sorry, dass ich mich nicht mehr gemeldet habe. War in den Ferien. Also, ich habe mir das Problem nun eingehend angeschaut und dabei habe ich bemerkt, dass ich von einer falschen Ausgangslange ausgegangen bin, weil ich FreePascal nicht wirklich gut kenne. Ich arbeite mit Delphi 2010 (von TurboPascal 5.5 (DOS) beginnend…)

Ich dachte, du erstellt ein DOS-Programm, weil die Ausgabeweise früher so im DOS funktioniert hat und es die Unit crt im Delphi (Windows) nicht mehr gegeben hat. Aber wie ich nach der Installation von FreePascal und Lazarus festgestellt habe, erstellt man damit reinrassige Windows-Programme. Also ist die ganze Geschichte mit der Bacht-Datei (drucker.bat) hinfällig und unnötig.

Für die Ausgabe auf einen Windows-Drucker musst komplett anders vorgegangen werden. Die Ausgabe, wie du diese versucht hast, funktioniert nur unter UNIX (oder eben früher unter DOS), dazu wären aber scheinbar noch weitere Befehle nötig. Lazarus bietet dazu ein schöne unit bzw. Komponente.

Der Programmcode könnte also dann ca. so aussehen:

uses crt, printers; {

Also ich hab das jetzt mal zum Testen einfach eins zu eins übernommen und hab eine Fehlermeldung vom Compiler erhalten, dass eine Unit erwartet wird.

Hallo AlternaTech

Also, ich habe mich nochmals an dein Problem gemacht. Damit der Lazarus die Unit-Datei findet, muss der Suchpfad noch hinterlegt werden.

Hier ein komplettes kleines Beispiel-Projekt (von mir) zum Drucken:

http://www.tmg-online.ch/files/testprint.zip

In der Datei pfade.txt ist beschrieben, welche Suchpfade du wo in Lazarus hinterlegen musst.

Für mehr Infos zum Drucken, am besten mal dieses Beispiel anschauen:
C:\lazarus\components\printers\samples\dialogs

Gruss
Sam