Announcement

Collapse
No announcement yet.

Textdatei drucken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Textdatei drucken

    Hallo,<BR>
    Frage 1:<BR>
    Ich möchte die Datei (z.B. C:\Test.txt) so wie sie ist drucken.<BR>
    Den Drucker möchte ich im Quelltext angeben können,<BR>
    denn das ganze soll im Hintergrund passieren,<BR>
    ohne daß erst ein Dialog aufgeht oder ein Anwender eine Auswahl treffen muß.<BR>
    Ich krieg das nicht hin, obwohl ich dachte,<BR>
    das ist eine ganz einfache Aufgabe.<BR>
    Kann mir bitte jemand helfen?

    Frage 2:<BR>
    Außerdem möchte ich von meiner Anwendung aus das Programm UltraEdit ansteuern,<BR>
    die Datei (z.B. C:\Test.txt) dorthin senden und ausdrucken lassen.<BR>
    Hab gelesen, daß UltraEdit folgenden DDE- Befehl unterstützt:

    <PRE>[printto("Dateiname","Druckername","Druckertreiber" ,"Port")]</PRE>

    Leider hab ich noch nie was mit DDE gemacht,<BR>
    habe es aber natürlich mal versucht mit DdeClientConv1 und DdeClientItem,<BR>
    aber ich krieg das nicht hin.<BR>
    Kann mir auch hierbei bitte jemand helfen?

    Danke im Vorraus

  • #2
    Hi Beate,<br>du könntest einfach eine neue Form erzeugen, einen Quickrep mit memo draufziehen. Den memotext liest du aus deiner Textdatei. Danach druckst du mit Quickrep1.print :-)<br>Michae

    Comment


    • #3
      Hallo Michael,<BR>
      danke erstmal für die schnelle Antwort,<BR>
      aber ich wollte eigentlich das Einlesen der Datei in irgendeine Komponente vermeiden,<BR>
      da ich nicht abschätzen kann, wie groß die Dateien werden können<BR>
      und bei solchen Komponenten könnte mir das doch durch ein beschränktes Aufnahmevermögen irgendwann mal auf die Füße fallen.?<BR&gt

      Comment


      • #4
        Hi Beate,<br>ich habe mal rumgegoogelt: <br>
        Standardmässig ist der Text im Richedit auf 64 KB beschränkt.
        Indem man die Maxlength auf $7FFFFFF0 setzt, kann man ungefähr 2 GB
        Text im TRichEdit haben.
        <br>Dies entspricht der Filegrößenbeschränkung. Müsste doch reichen, oder? ;-)<br>Michae

        Comment


        • #5
          Hallo Beate,<BR><BR>
          zum Ausdruck kann man im einfachsten Fall die Windows API bemühen.<PRE>
          Uses
          ShellApi;
          ...
          ShellExecute(0,'print', PChar(FMyFileName),'','',SW_HIDE);
          </PRE>
          Damit wird die Datei auf dem Standard-Drucker mit dem zur Erweiterung gehörigem Programm gedruckt. Je nach Programm (txt = Editor, doc = Word ...) erscheint aber noch eine Anzeige.<BR>
          Wenn es so nicht reich, mußt du die Unit Printers bemühen.
          Da kannst du mit AssignPrn ... uber eine Dateivariable mit Writln zeilenweise drucken.<BR>
          Wenn du nicht klarkommst, kann ich ein Beispiel posten.<BR><BR>
          Gruß, Fran

          Comment


          • #6
            Hallo Frank,<BR>
            also diesen Aufruf über die ShellAPI habe ich auch schon versucht,<BR>
            aber da passiert gar nichts.<BR>
            Kann das daran liegen, daß diese Textdateien keine Dateiendung haben?<BR>
            Über ein Beispiel über den Weg der Unit Printers würde ich mich freuen.<BR>
            Dank

            Comment


            • #7
              Hallo Michael,<BR>
              das werde ich mal versuchen,<BR>
              man sagt ja immer:"Viele Wege führen zunm Ziel...",<BR>
              da wird jawohl auch einer für mich dabei sein ;-)<BR>
              Danke für deine Hilf

              Comment


              • #8
                Hi Beate,<BR><BR>
                es ist richtig, bei Dateien ohne Endung funktioniert der Aufruf über die API nicht.<BR>
                Also, hier eine weitere Möglichkeit:
                <PRE>
                procedure PrintTextFile(AFileName: String);
                Var
                APrtFile: TextFile;
                AFile : TextFile;
                ARow : String;
                begin
                if not FileExists(AFileName) then
                exit;
                AssignFile(AFile, AFileName);
                AssignPrn(APrtFile);
                try
                // Öffnen der zu druckenden Datei
                Reset(AFile);
                // DruckDatei öffnen
                ReWrite(APrtFile);
                while not eof(AFile) do
                begin
                // Zeile für Zeile in Variable ARow
                Readln(AFile, ARow);
                // und Zeile an Drucker senden
                WriteLn(APrtFile, ARow);
                ARow := '';
                end;
                finally
                System.CloseFile(APrtFile);
                System.CloseFile(AFile);
                end;
                end;
                </PRE>
                Da kein Programm wie Editor etc. beteiligt sind, erfolgt auch keine Formatierung und keine Kontrolle von Seitenrändern etc.<BR>
                Versuch mal dein Glück,<BR><BR>
                Fran

                Comment


                • #9
                  Hallo Frank,

                  diese procedure funktioniert zwar so wie von dir beschrieben,<BR>
                  dafür erstmal recht herzlichen Dank,<BR>
                  aber der Ausdruck sieht nun durch die fehlenden Formatierungen und Seitenränder ganz anders aus, als in dem Originalbeleg.<BR>
                  (Außerdem wird ja zwangsläufig der Standarddrucker benutzt, aber das wäre ja erstmal nicht ganz so relevant.)

                  Deshalb war meine 2. Idee UltraEdit über die DEE anzusprechen.<BR>
                  Dort kann ich ja Seitenränder usw. vorher einstellen, die Formatierungen würden auch erhalten bleiben und ich könnte selbst den zu verwendenden Drucker angeben.<BR>

                  Auszug aus der Hilfe von UltraEdit:<BR>
                  ------------------------------------------<BR>
                  UltraEdit unterstützt folgende DDE-Befehle (Dynamic Data Exchange). Sie sind alle Bestandteil des Systems.<BR>

                  [printto("Dateiname","Druckername","Druckertreiber" ,"Port")]<BR>

                  Druckt die angegebene Datei am durch den Druckernamen, den Druckertreiber und den Anschluss angegebenen Drucker aus.<BR>

                  Diese Befehle müssen genau in der dargestellten Weise übergeben werden.<BR>
                  ------------------------------------------

                  Nur ich krieg das nicht hin.

                  Beat

                  Comment


                  • #10
                    Hi Beate,<BR><BR>
                    vielleicht solltest du doch mal die Variante von Michael Köcher mit dem Report in Betracht ziehen.<BR>
                    Wie sehen die Dateien denn aus. Ist es nur Text? Dann wird doch eine Datei kaum grösser als ein paar hundert Kb. Die kannst du locker in ein Memo einlesen ohne Probleme.<BR>
                    Ich lese z.T. auch mal 16 MB - Files in ein TStrings - Object für einen Datenimport ohne Probleme. Dann hast du immer noch die Möglichkeit, deine Datei (ohne Extension) in ein temporäres Verzeichnis halt mit Extension (TXT) zu kopieren, mit ShellExecute auszudrucken und dann zu löschen. Ich habe immer mentale Probleme mit solchen Lösungen über DDE / OLE.<BR>
                    Und dann gibt es ja noch TRichEdit, wo du mit Lines.LoadFromFile eine Datei laden und mit Print drucken kannst.<BR><BR>
                    Gruß, Fran

                    Comment

                    Working...
                    X