Yazıcıya dos modunda yazı yazdırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Yazıcıya dos modunda yazı yazdırma

Mesaj gönderen pentiumkivanc »

Selamlar;
Ben Argox x-1000 model bir etiket yazıcıya bu yazıcının kendi dilindeki (PPLB) etiket bilgilerini taşıyan bir bilgiyi yollamak istiyorum. örneğin etiket.txt adındaki bir dosyayı dos tan yazdırmak için

Kod: Tümünü seç

copy etiket.txt  :lpt1
gibi bir komutla yazdırınca yaptığım program sadece lokal çalışıyor. Benim istediğim ise ağdaki başka bir kullanıcı da bu programdan etiket yazdırsın. Kullanıcı "etiketi yaz" düğmesine basınca bir printer dialog açılsın ağdaki diğer kullanıcı etiket cihazının bağlı olduğu bilgisayardaki yazıcıyı gelen dialogdan seçsin ve böylece ağdan bilgiyi yazdırsın. Ancak bulduğum kodlar şöyle:

Kod: Tümünü seç

uses Printers;
...
procedure TForm1.Button1Click(Sender: TObject) ;
var
   F, F2: TextFile;
   i, j: Integer;
begin
   AssignPrn(F) ;
   Rewrite(F) ;
   Writeln(F, RichEdit1.Lines[0]) ;
   for i:=1 to RichEdit1.Lines.Count-1 do
   begin
     if Printer.PageNumber<2 then
       Writeln(F, RichEdit1.Lines) ;
     if Printer.PageNumber>1 then
     begin
       CloseFile(F) ;
       Break;
     end;
   end;
bununla dosyadaki komutları delphi içinden yazdırabilirim ama gelen printdialog kutusundan seçtiğim etiket yazıcıdan (başka bilgisayardaki lpt1 e bağlı) yazdırmasını nasıl sağlarım?
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Mesaj gönderen m_ekici »

Ben şöyle yapmıştım;

Kod: Tümünü seç

varvar
PRN             :TextFile;
begin
     AssignFile(PRN,AYAR_YOL.Value); //   AYAR_YOL.Value = '\\diger\oki'
     Rewrite(PRN);
     WriteLn(PRN,CHR(27)+'1   ');


Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Bir ek:
Sonuna

Kod: Tümünü seç

CloseFile(PRN);
unutmamak gerek
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

ilginize teşekkürler

Kod: Tümünü seç

WriteLn(PRN,CHR(27)+'1   '); 

kodunun anlamı nedir? Birde bahsetmek istediğim bir konu daha var: ben şimdilik bu yazdırma işini argox yazıcının winpplb.dll diye bir kütüphanesini kullanarak yapıyorum ama onda yazıcıdan çıktı alma olayı için iki seçenek verilmiş: ya lpt1 i kullanır ve lokal yazdırırsın, yada etiket çıktısını dosyaya kaydedersin. Yani bir yazıcı diyaloğu çıkartmak gibi bir olasılık yok. Bende etiket bilgilerini bir dosyaya kaydettirip yazıcıya

Kod: Tümünü seç

IF printdialog1.Execute then
begin
  assignfile(dd,form5.edit1.Text);
  reset(dd);
   assignprn(prntr);
   rewrite(prntr);
 while not eof(dd) do begin
  readln(dd,komut);
  writeln(prntr,komut);
 end;
 closefile(dd);
  closefile(prntr);
end;
Kodlarıyla yaptırıyorum. ancak bu şekilde yapıtğımda heralde içinde truetype fontları komutlarını da kullandığımdan normalde tek sayfalık etiketi 9 sayfaya çıkarıp, abuk subuk kodlar yazdırıyor (bilirsiniz anlaşılmaz ASCII karakterler)
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Mesaj gönderen m_ekici »

Kod: Tümünü seç

 
WriteLn(PRN,CHR(27)+'1   ');  
özür, onun bir anlamı yok kopyalarken orada kalmış. Aslında DLL'i kullanmana gerek yok. Barkod cihazını bir yazıcı Barkoddan çıkan yazıyıda normal printer çıktısı gibi düşün. istediğin ebada göre sayfayı dizayn et ve gönder (ebat önemli, büyük olursa cihaz hata verir).
DLL i kullanmak istersende aynı kodları dosya yerine yukarıda kullandığım

Kod: Tümünü seç

WriteLn(PRN,CHR(27)+chr(xx)+chr(xx) ........ 
kodlarla gönder. Ama kodlamayı iyi bilmen lazım. yanlış harılamıyorsam koordinat vererek yapıyorsun. Uzun süre önce buna benzer birşey yapmıştım. X,Y koordinatı vererek yazıları ve barkodu yazdırıyorsun.
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

Peki bunu fastreport gibi bir bileşenle yapmam mümkünmü? argox yazıcılar bunu destekliyormu?
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Mesaj gönderen m_ekici »

1000 modelinde denemedim. 214x modelinde olmuştur.
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

Etiketin sayfa boyu 200 dpi idi. FR ile yazdırmaya çalışırken etiketin yarısını çıkarıp cihaz hataya düştü. Galiba dediğiniz gibi sayfa boyutları ile ilgili bir durum. Birde yukarıda

Kod: Tümünü seç

WriteLn(PRN,CHR(27)+chr(xx)+chr(xx)
kodu ile

Kod: Tümünü seç

D10
S2
q436
Q610,24
OD
JB
GG100,100,"AA"
GG100,100,"AB"
GG100,100,"AC"
GG100,100,"AD"
GG100,100,"AE"
P1
bilgilerini içeren dosyayı karakter karaker okutup ilk karakeri ESC tuşu olacak anlamına mı geliyor? yani dosyanın en başında #27 olup diğer satırlar olduğu gibi mi yazdırılacak?
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Kod: Tümünü seç

unit Print;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  PrintPort=(Lpt1,Lpt2);
  FPrint = class(TComponent)
  private
    { Private declarations }
    Prt            :PrintPort;
    TrControl      :Boolean;
    function  Kontrol(Deg:String):String;
    function  Yaz(Kar:Byte):Boolean;
    Procedure SetPort(Value:PrintPort);
//    Procedure SetTr(Value:Boolean);
  protected
    { Protected declarations }
  public
    { Public declarations }
    procedure Lprint(Han:Boolean;Deg:String);
    Procedure Dar;
    Procedure Normal;
    Procedure Genis;
  published
    Property Lpt:PrintPort Read Prt Write SetPort;
  //  Property Turkce_Kontrol:Boolean Read TrControl Write SetTr Default True;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Facom', [FPrint]);
end;
{Procedure FPrint.SetTr(Value:Boolean);
begin
     TrControl:=Value;
end;}
Procedure FPrint.SetPort(Value:PrintPort);
begin
     Prt:=Value;
end;

Procedure FPrint.Genis;
begin
     Yaz(14);
end;
Procedure FPrint.Dar;
begin
     Yaz(15);
     Yaz(15);
end;
Procedure FPrint.Normal;
begin
     Yaz(18);
end;

function FPrint.Kontrol(Deg:String):String;
var A:Integer;
begin
FOR a := 1 TO Length(Deg) do
        if  copy(Deg, A, 1) = 'İ' Then
            Deg[A]:= '˜'
        else if copy(Deg, A, 1) = 'ı' Then
            Deg[A]:= '&#141;'
        else if copy(Deg, A, 1) = 'Ü' Then
            Deg[A]:= 'š'
        else if copy(Deg, A, 1) = 'Ş' Then
            Deg[A]:= '&#158;'
        else if copy(Deg, A, 1) = 'Ç' Then
            Deg[A]:= '€'
        else if copy(Deg, A,1) = 'Ö' Then
            Deg[A]:= '™'
        else if copy(Deg, A, 1) = 'ö' Then
            Deg[A]:= '”'
        else if copy(Deg, A, 1) = 'ç' Then
            Deg[A]:= '‡'
        else if copy(Deg, A, 1) = 'Ğ' Then
            Deg[A]:= '¦'
        else if copy(Deg, A, 1) = 'ğ' Then
            Deg[A]:= '§'
        else if copy(Deg, A, 1) = 'ü' Then
            Deg[A]:= '&#129;'
        else if copy(Deg, A, 1) = 'ş' Then
            Deg[A]:= 'Ÿ'
        else if copy(Deg, A, 1) = '&#141;' Then
            Deg[A]:= '&#141;';
Result:=Deg;
end;
function FPrint.Yaz(Kar:Byte):Boolean;
var Han:Word;
begin
if Prt=Lpt1 then
   Han:=0
else if Prt=Lpt2 then
   Han:=1
else Han:=0;
            asm
               mov ah,0
               mov Al,Kar
               mov Dx,Han
               Int 17h
             end;

end;
procedure FPrint.Lprint(Han:Boolean;Deg:String);
var A:Integer;
begin
     // if TrControl then
          Deg:=Kontrol(Deg);
     for a:=1 to Length(Deg) do
         Yaz(Ord(Deg[a]));
     if Han Then
        begin
        Yaz(10);
        Yaz(13);
        end;
end;


end.
Bu da komponenti Arşivimden :P

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

ilginize teşekkürler, ama bu uniti nasıl kullanıcam? :oops:
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Arama yapalım :wink: Forum da bu konu daha önce geçti :)

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Bulamadınız Galiba :!:

viewtopic.php?p=9681#9681

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
pentiumkivanc
Üye
Mesajlar: 350
Kayıt: 19 Şub 2004 10:24
İletişim:

Mesaj gönderen pentiumkivanc »

Bu componenti derlerken

[Fatal Error] print.pas(1): Program or unit 'print.pas' recursively uses itself

bir hata alıyorum.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Package File Name kısmına Print1 ismini ver başarılı olamazsan mail adresini verirsen derlenmiş halini gönderirim.


Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

m_ekici yazdı:1000 modelinde denemedim. 214x modelinde olmuştur.
Sayın m_ekici ben de Argox 214 uzerinde Fastreport ile etiket basmaya calisiyorum. Fakat ilk basımdan sonra yazıcının ışıkları yanıp sonerek hata durumuna dustugunu gosteriyor. Yazıcıyı resetlemek gerekiyor....

Bu konudaki tecrubenizden istifade etmek isterim...

Kolay gelsin....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Cevapla