Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Drucken im Netzwerk (https://www.delphipraxis.net/35890-drucken-im-netzwerk.html)

_HAWK_ 15. Dez 2004 15:36

Re: Drucken im Netzwerk
 
ich habs jetzt mal wie gesagt mit printer versucht
Code:
          printer.PrinterIndex:=-1;
          printer.BeginDoc;
          printer.Canvas.TextOut(0,0, 'test1' );
          printer.Canvas.TextOut(0,0, 'test2' );
          printer.EndDoc;
Das Problem ist nur, dass mir die zwei texte nebeneinander ausgedruckt werden und nicht, wie ich es eigentlich will, untereinander...
Gibt es da noch nen Befehl wie ln oder sowas?

_HAWK_ 16. Dez 2004 15:27

Re: Drucken im Netzwerk
 
hat denn nicht noch jemand ne idee?

mfg HAWK

_HAWK_ 17. Dez 2004 11:04

Re: Drucken im Netzwerk
 
Code:
var lst1:textfile;
begin
          AssignPRN(LST1);
          Rewrite( LST1);
          WriteLn( LST1, '; Chargen.FMT' );
          WriteLn( LST1, 'M l LBL;CHARGEN' );
          WriteLn( LST1, 'R VA;',sArtikelnummer );
          WriteLn( LST1, 'R VAB;',sABEZ );
          WriteLn( LST1, 'R VWE;',sWENR );
          WriteLn( LST1, 'R TWE;WE - Nummer' );
          WriteLn( LST1, 'R TH;CHARGEN - ETIKETT' );
          WriteLn( LST1, 'R TA;Artikelnummer' );
          WriteLn( LST1, 'R TAB;Artikelbez.' );
          WriteLn( LST1, 'R BWE;',sWENR );
          WriteLn( LST1, 'R BA;',sSAP );
          WriteLn( LST1, 'A',sMenge );

          System.CloseFile(LST1);
end;
So ich habe es jetzt mal auf diese weise probiert und funktioniert.
Das Problem ist nur ich habe ein Etikettendrucker und diese Befehler sind Druckerspezifisch. Der Drucker druckt mir das allerdings genauso aus wie es da steht. Er sollte aber diese Befehle umsetzen können.
Hat da vielleicht jemand ne ahnung ob man da noch was einstellen kann, dass der drucker das als befehl interpretiert und nicht als normalen text?

Bei dem code würde es funktionieren nur das ist dann kein nw-drucker sondern die parallele schnittstelle...

Code:
var lst1:text;
    begin
          AssignFile(LST1,'LPT1');
          Rewrite( LST1);
          WriteLn( LST1, '; Chargen.FMT' );
          WriteLn( LST1, 'M l LBL;CHARGEN' );
          WriteLn( LST1, 'R VA;',sArtikelnummer );
          WriteLn( LST1, 'R VAB;',sABEZ );
          WriteLn( LST1, 'R VWE;',sWENR );
          WriteLn( LST1, 'R TWE;WE - Nummer' );
          WriteLn( LST1, 'R TH;CHARGEN - ETIKETT' );
          WriteLn( LST1, 'R TA;Artikelnummer' );
          WriteLn( LST1, 'R TAB;Artikelbez.' );
          WriteLn( LST1, 'R BWE;',sWENR );
          WriteLn( LST1, 'R BA;',sSAP );
          WriteLn( LST1, 'A',sMenge );

          CloseFile(LST1);
end;
Danke schon mal im Vorraus!

mfg HAWK

Steve 17. Dez 2004 11:27

Re: Drucken im Netzwerk
 
Zitat:

Zitat von _HAWK_
ich habs jetzt mal wie gesagt mit printer versucht
Code:
          printer.PrinterIndex:=-1;
          printer.BeginDoc;
          printer.Canvas.TextOut(0,0, 'test1' );
          printer.Canvas.TextOut(0,0, 'test2' );
          printer.EndDoc;
Das Problem ist nur, dass mir die zwei texte ... nicht, wie ich es eigentlich will, untereinander

Hi,

die ersten beiden Parameter von TCanvas.TextOut geben den Anfangspunkt an. Wenn Du 2 Text an die gleiche Stelle schreibst, können sie wohl nicht untereinander sein :zwinker:

Über TCanvas.TextHeight erhälst Du die Zeilenhöhe des Textes, den Du ausgeben möchtest. Mit dieser Information kannst Du die Y-Position der nächsten Zeile bestimmen.
Hier mal ein kleines Beispiel:
Delphi-Quellcode:
VAR
  SL  : Tstringlist;
  i,dy : integer;
BEGIN
  Printer.BeginDoc;
  SL := TStringList.Create;
  sl.Add('Test 1');
  sl.Add('Test 2');
  sl.Add('Test 3');
  dy := round(Printer.Canvas.TextHeight(SL[0])*1.2); // Texthöhe + Zwischenraum
  FOR i:=0 TO SL.Count -1 DO
  BEGIN
    Printer.Canvas.TextOut(50,    // X: Linker Rand
                           i*dy,  // Y: Zeile*Zeilenhöhe
                           SL[i]); // Text
  END;
  FreeAndNil(SL);
  Printer.EndDoc;
END;
PS: Warum einfach wenns auch umständlich geht :zwinker: :mrgreen:

Gruß
Stephan :dance: :xmas:

_HAWK_ 17. Dez 2004 12:07

Re: Drucken im Netzwerk
 
ja mein problem ist nur dass der drucker das auch als kommando versteht und nicht einfach das kommando schreibt (siehe letzte beitrag von mir)
mfg HAWK

Hansa 17. Dez 2004 17:03

Re: Drucken im Netzwerk
 
Natürlich wird alles gedruckt, was zwischen '' steht ! Solche Sachen wie TAB sind nicht druckbare Steuerzeichen. Das ist der Name des Zeichens und nicht das Zeichen selber. Die anderen kommen mir aber sehr dubios vor. :shock: Für das Tab mußt du schreiben "chr (9)" und nicht 'TAB' :!: Und natürlich auch nicht "chr (9)" in die '' mit reinschreiben. :lol:

Außerdem fehlen vermutlich einige ESC. Das wäre dann "chr (27)". Ich empfehle dir dringend zuerst einmal mit einer besonderen Eigenschaft des Druckers, z.B. Breitschrift zu experimentieren und nicht gleich mit 10 Druckersequenzen. Sonst wird das nichts.

Skasch 11. Jun 2008 10:47

Re: Drucken im Netzwerk
 
Hi,

besser spät als nie.... ;)

Beispiel wie man druckt:
Delphi-Quellcode:
unit uFunctions;

interface

uses
  printers,

procedure PrintSomething(const aPrinterName:string);

implementation

procedure PrintSomething(const aPrinterName:string);
var
  idx: integer;
begin
  idx := Printers.Printer.Printers.IndexOf(aPrinterName);
  if (idx = -1) then
  begin
    // Der Printername existiert nicht!
    MessageBox(0, PChar(
       'Printername ' + aPrinterName + ' exisitiert nicht!'#13#10 +
       'Diese Printernamen sind möglich:'#13#10 +
       Printers.Printer.Printers.Text), 'Fehler!', 0);
    exit;
  end;
  Printers.Printer.PrinterIndex := idx;
  // Printer session öffnen
  Printers.Printer.BeginDoc();
  // Seite 1
  Printers.Printer.Canvas.TextOut(50, 50, 'Seite1');
  // Seite 2
  Printers.Printer.NewPage();
  Printers.Printer.Canvas.TextOut(50, 50, 'Seite2');
  // Seite 3
  Printers.Printer.NewPage();
  Printers.Printer.Canvas.TextOut(50, 50, 'Seite3');
  // Printer session schliessen
  Printers.Printer.EndDoc();
end;

end.
Das geht auch problemlos mit Netzwerkdrukkern die einen eigenen Printserver integeriert haben.

Wichtig ist hierbei Printers.Printer.PrinterIndex := idx;, da die Printers unit einen Fehler enthält und mit *.EndDoc() den DC des Druckers nicht freigiebt. Das führt mit Netzwerkdruckern regelmässig zu Problemen (speziell HP).
Wird jedoch Printers.Printer.PrinterIndex := idx; oder auch einfach Printers.Printer.PrinterIndex := Printers.Printer.PrinterIndex; vor *.BeginDoc(); ausgeführt ist das DC Handle freigegeben und alles geht ohne Probleme.

Hoffe das hilft euch weiter.

Gruss

O.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:49 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz