Dot Matrix çıktıda türkçe karakter sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Nemesis2005
Üye
Mesajlar: 136
Kayıt: 18 Oca 2005 05:24
Konum: İzmir

Dot Matrix çıktıda türkçe karakter sorunu

Mesaj gönderen Nemesis2005 »

Herkeze selam

Kod: Tümünü seç

// YaziYaz('C:\Temp\Temp.prn', Printer.Printers[Printer.PrinterIndex]);


procedure YaziYaz(const PrnFile, PrinterName: String);
Var
 AFile: TextFile;
begin
 AssignFile(AFile, PrnFile);
 ReWrite(AFile);
 try

  WriteLn(AFile,'Yazılacak Satır 1');
  WriteLn(AFile,'Yazılacak Satır 2');
  WriteLn(AFile,'Yazılacak Satır 3');
  .
  .
  .


 finally
  CloseFile(AFile);
 end;
 If SpoolFile(PrnFile, PrinterName) <> 0 then
   MessageDlg('Belge Yazdırılamıyor !',mtError,[mbOK],0);
end;


Function SpoolFile(const FileName, PrinterName: string): Integer;
var
  Buffer: record
    JobInfo: record
      Path: PChar;
      JobID: DWORD;
    end;
    PathBuffer: array[0..255] of Char;
  end;
  SizeNeeded: DWORD;
  Handle: THandle;
  PrtName: string;
  ok: Boolean;
begin
  If not FileExists(FileName) Then
  begin
   Result:= 99;
   Exit;
  end;
  PrtName:= PrinterName;
  if PrtName = '' then
    PrtName:= TrimPrinter(Printer.Printers[Printer.PrinterIndex]);
  ok:= False;
  if OpenPrinter(PChar(PrtName), Handle, nil) then
    if AddJob(Handle, 1, @Buffer, SizeOf(Buffer), SizeNeeded) then
      if CopyFile(PChar(FileName), Buffer.JobInfo.Path, True) then
        if ScheduleJob(Handle, Buffer.JobInfo.JobID) then
          ok := True;
  if not ok then
  begin
   Result:= GetLastError
  end else begin
   If FileExists(FileName) Then
   begin
    try
     DeleteFile(PChar(FileName));
    finally
    end;
   end;
   Result := 0;
  end;
end;
kodlarını kullanarak hazırladığım fatura diyaznını dosyaya kaydettiriyorum
ve daha sonra bu dosyayı SpoolFile fonksiyonu ile yazıcıya yazdırıyorum fakat türkçe karakterlerde problem yaşıyorum bu karakterleri dos modundaki türkçe karakterlerle değiştirmem lazım. Dosyayı yada dosyaya kaydetmeden önce TStringList gibi bir nesneye değerleri yükleyim türkçe karakterleri nasıl değiştirebilirim.
Her iyinin içinde bir Kötülük.Her Kötnün içide de bir iyilik vardır
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ben yazdığım aşağıdaki fonksiyonu kullanıyorum.

Kod: Tümünü seç

function WinToDos(St: string): string;
var
  i: integer;
  k: char;
  st2: string;
begin
  st2 := '';
  for i := 1 to length(St) do
  begin
    k := St[i];
    case ord(k) of     {  Windows Türkçesinden MS-DOS T&#129;rk‡esine.}
        231: k := #135;  {ç ‡}
        199: k := #128;  {Ç €}
        240: k := #167;  {ğ §}
        208: k := #166;  {Ğ ¦}
        221: k := #152;  {İ ˜}
        253: k := #141;  {ı &#141;}
        246: k := #148;  {ö ”}
        214: k := #153;  {Ö ™}
        254: k := #159;  {ş Ÿ}
        222: k := #158;  {Ş &#158;}
        252: k := #129;  {ü &#129;}
        220: k := #154;  {Ü š}
     end;
    st2 := st2 + k;
  end;
  result := st2;
end;
Yazıcıya göndermeden önce rapor dosyasını satır satır yukarıdaki fonksiyonu çağırarak yeni bir dosyaya yada TStringList in satırlarını Türkçe harfleri değiştirerek oluşturabilirsin. Yada ilk başta raporu oluştururken Türkçe çevrimini yapabilirsin.. :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Kod: Tümünü seç

function WinToDos(s:string):string;
 const
   win:string='ıİĞÜŞÖÇöçşğü';
   dos:string='&#141;˜¦š&#158;™€”‡Ÿ§&#129;';
 var
  j:byte;
 begin
    for j:=1 to length(win) do
     while pos(win[j],s)>0 do
       s[pos(win[j],s)]:=dos[j];
    result:=s;
 end;
Bende aynı işi yapan ama daha farklı yazılmış bir kod vereyim dedim. Çeşitlilik olsun
Nemesis2005
Üye
Mesajlar: 136
Kayıt: 18 Oca 2005 05:24
Konum: İzmir

Mesaj gönderen Nemesis2005 »

Peki nasıl bir döngü ile text dosyayı okutacağım ve yerine dönen değeri nasıl yazacağım, Print fonksiyonunda karakter karakter yazmıyor sanırım
Her iyinin içinde bir Kötülük.Her Kötnün içide de bir iyilik vardır
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

Merhaba,
Text dosyayı oluşturduğun kod kısmında şöyle bir değişiklik yap mesela :

Kod: Tümünü seç

AssignFile(AFile, PrnFile);
 ReWrite(AFile);
 try

  WriteLn(AFile,WinToDos('Yazılacak Satır 1'));
  WriteLn(AFile,WinToDos('Yazılacak Satır 2'));
  WriteLn(AFile,WinToDos('Yazılacak Satır 3'));
  .
  .
  . 
O zaman hazırlanan dosya dos karakterleriyle değiştirilmiş olacaktır.
Nemesis2005
Üye
Mesajlar: 136
Kayıt: 18 Oca 2005 05:24
Konum: İzmir

Mesaj gönderen Nemesis2005 »

Cevaplarınız için çok teşekürler gerçekten çok yararlı oldu.
Her iyinin içinde bir Kötülük.Her Kötnün içide de bir iyilik vardır
Cevapla