// Es wird unter
Umgehung des Druckertreibers ein Text
(TMemo)
direkt auf // Getestet mit D4 unter XP uses winspool; function DirektDruck(txt: TStrings; Drucker, Ziel: string; RandLinks, Tab: byte; Variante1: boolean): boolean; var h: THandle; di: DOC_INFO_1; geschrieben, druckstellen: longword; x: integer; sl: TStringlist; begin result := false; sl := TStringlist.create; sl.add(''); for x := 0 to txt.count - 1 do sl.add(stringofchar(#32, RandLinks) + txt[x]); sl.text := stringreplace(sl.text, #9, stringofchar(#32, Tab), [rfreplaceall]); if Variante1 then begin sl.text := stringreplace(sl.text, 'ä', #204, [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ä', #216, [rfreplaceall]); sl.text := stringreplace(sl.text, 'ö', #206, [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ö', #218, [rfreplaceall]); sl.text := stringreplace(sl.text, 'ü', #207, [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ü', #219, [rfreplaceall]); sl.text := stringreplace(sl.text, 'ß', #222, [rfreplaceall]); end else begin sl.text := stringreplace(sl.text, 'ä', 'ae', [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ä', 'Ae', [rfreplaceall]); sl.text := stringreplace(sl.text, 'ö', 'oe', [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ö', 'Oe', [rfreplaceall]); sl.text := stringreplace(sl.text, 'ü', 'ue', [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ü', 'Ue', [rfreplaceall]); sl.text := stringreplace(sl.text, 'ß', 'ss', [rfreplaceall]); end; if (OpenPrinter(pchar(Drucker), h, nil)) then begin di.pDocName := 'Direktdruck'; di.pOutputFile := pchar(Ziel); di.pDatatype := 'RAW'; if StartDocPrinter(h, 1, @di) <> 0 then begin druckstellen := length(sl.text) + 1; WritePrinter(h, pchar(sl.text + #12), druckstellen, geschrieben); result := geschrieben = druckstellen; end; EndDocPrinter(h); ClosePrinter(h); end; sl.free; end; // Beispielaufruf procedure TForm1.Button6Click(Sender: TObject); var LeerzeichenLinks, TabWeite: byte; Port, DruckerBezeichnung: string; UmlautVariante: boolean; begin DruckerBezeichnung := 'Kyocera FS-680'; Port := 'LPT1:'; TabWeite := 8; LeerzeichenLinks := 10; UmlautVariante := true; if not DirektDruck(Memo1.Lines, DruckerBezeichnung, Port, LeerzeichenLinks, TabWeite, UmlautVariante) then showmessage('Fehler'); end; //
-------------------------------------------------------------- function DirektDruck2(txt: TStrings; prt: string; RandLinks, Tab: byte; Variante1: boolean): boolean; var f: Textfile; x: integer; sl: TStringlist; begin sl := TStringlist.create; sl.add(#$1B#$45); for x := 0 to txt.count - 1 do sl.add(stringofchar(#32, RandLinks) + txt[x]); sl.text := stringreplace(sl.text, #9, stringofchar(#32, Tab), [rfreplaceall]); if Variante1 then begin sl.text := stringreplace(sl.text, 'ä', #204, [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ä', #216, [rfreplaceall]); sl.text := stringreplace(sl.text, 'ö', #206, [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ö', #218, [rfreplaceall]); sl.text := stringreplace(sl.text, 'ü', #207, [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ü', #219, [rfreplaceall]); sl.text := stringreplace(sl.text, 'ß', #222, [rfreplaceall]); end else begin sl.text := stringreplace(sl.text, 'ä', 'ae', [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ä', 'Ae', [rfreplaceall]); sl.text := stringreplace(sl.text, 'ö', 'oe', [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ö', 'Oe', [rfreplaceall]); sl.text := stringreplace(sl.text, 'ü', 'ue', [rfreplaceall]); sl.text := stringreplace(sl.text, 'Ü', 'Ue', [rfreplaceall]); sl.text := stringreplace(sl.text, 'ß', 'ss', [rfreplaceall]); end; sl.add(#12); assignfile(f, prt); result := true; {$I-} rewrite(f); if ioresult = 0 then begin try write(f, sl.text); except result := false; end; closefile(f); end else result := false; {$I+} sl.free; end; // Beispielaufruf procedure TForm1.Button7Click(Sender: TObject); begin if not DirektDruck2(Memo1.lines, 'LPT1:', 10, 8, true) then showmessage('Fehler'); end; |
Zugriffe seit 6.9.2001 auf Delphi-Ecke