AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Drucken im Netzwerk
Thema durchsuchen
Ansicht
Themen-Optionen

Drucken im Netzwerk

Ein Thema von _HAWK_ · begonnen am 13. Dez 2004 · letzter Beitrag vom 11. Jun 2008
Antwort Antwort
Seite 2 von 2     12   
_HAWK_

Registriert seit: 16. Jun 2004
Ort: Zeulenroda
22 Beiträge
 
#11

Re: Drucken im Netzwerk

  Alt 15. Dez 2004, 16:36
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?
In Mitten der Schwierigkeit liegt die Möglichkeit
  Mit Zitat antworten Zitat
_HAWK_

Registriert seit: 16. Jun 2004
Ort: Zeulenroda
22 Beiträge
 
#12

Re: Drucken im Netzwerk

  Alt 16. Dez 2004, 16:27
hat denn nicht noch jemand ne idee?

mfg HAWK
In Mitten der Schwierigkeit liegt die Möglichkeit
  Mit Zitat antworten Zitat
_HAWK_

Registriert seit: 16. Jun 2004
Ort: Zeulenroda
22 Beiträge
 
#13

Re: Drucken im Netzwerk

  Alt 17. Dez 2004, 12:04
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
In Mitten der Schwierigkeit liegt die Möglichkeit
  Mit Zitat antworten Zitat
Benutzerbild von Steve
Steve

Registriert seit: 2. Mär 2004
Ort: Würzburg
730 Beiträge
 
Delphi 2006 Personal
 
#14

Re: Drucken im Netzwerk

  Alt 17. Dez 2004, 12:27
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

Ü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

Gruß
Stephan
Stephan B.
Wer andern eine Grube gräbt ist Bauarbeiter!
Wer im Glashaus sitzt, sollte sich lieber im Dunkeln ausziehen!
Außerdem dieser Satz kein Verb...
  Mit Zitat antworten Zitat
_HAWK_

Registriert seit: 16. Jun 2004
Ort: Zeulenroda
22 Beiträge
 
#15

Re: Drucken im Netzwerk

  Alt 17. Dez 2004, 13:07
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
In Mitten der Schwierigkeit liegt die Möglichkeit
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

Re: Drucken im Netzwerk

  Alt 17. Dez 2004, 18:03
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. Für das Tab mußt du schreiben "chr (9)" und nicht 'TAB' Und natürlich auch nicht "chr (9)" in die '' mit reinschreiben.

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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Skasch
Skasch

Registriert seit: 14. Nov 2005
4 Beiträge
 
#17

Re: Drucken im Netzwerk

  Alt 11. Jun 2008, 11:47
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz