QR code hakkında yardım

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

QR code hakkında yardım

Mesaj gönderen tayipk »

Hepinize merhaba arkadaşlar bilindiği gibi son yıllarda QR code sistemi hayatımıza iyice girdi ve artık neredeyse QR code suz ürün kalmayacak gibi bir noktaya geldik. peki bu QR code çözümleme mantığı hakkında nerden nasıl bir kaynak bulabiliriz yani QR code un içindeki bilgiler neyi simgeliyor ve nasıl ayrıştırılıyor. İlaç üzerinden örnek verecek olursak ilaçların hepsinin üzerinde QR code mevcut ve bu kodun içinde o ürünün seri numarası parti numarası barkodu ve miad tarihi gizli
şimdi mantıkta baktığımızda (01) ile başlayan bölümde ürünün barkodu yazıyor hemen arkasından (21) ile başlayan parti no geliyor arkasından (17) ile başlayan miad geliyor arkasından (10) ile başlayan Seri no geliyor şimdi karekod okuyucuyu okuttuğumuz zaman veri
01869900000000021000001700001000000 şeklinde geliyor bu karekod düzenini hangi mantıkla aşağıdaki gibi

8699000000000
00000
0000
00000 olarak ayırabiliriz sonuçta bu bilgilerin ayrılıp VT da ayrı fieldlara aktarılması gerekecektir. QR code konusunda deneyimli arkadaşlar lütfen yardımınıza ihtiyacım internette de çok sağlıklı kaynaklar bulamadım. bu mantığı çözümlemem gerekmektedir :(
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: QR code hakkında yardım

Mesaj gönderen mrmarman »

Merhaba.

(*) Karekod içeriği sizin söylediğiniz gibi ise aşağıdaki hazırladığım örnek işinizi görecektir.
(-) Tasarımda eğer bu kodlar farklı sırada bile olsa çalışacak şekilde değerlendirdim. Yani 01, 21, 17, 10 şeklinde değil de; kodlar aynı olmak şartı ile 21,10,01,17 sırasıyla da gelse çalışacak şekildedir. Bilmem anlatabildim mi ...

- Başarılar.

Kod: Tümünü seç

Type tQRCode_Icerik = record
  k01_barkod,        // uz:13
  k21_partino,       // uz:05
  k17_miad,          // uz:04
  k10_seri : String; // uz:05
end;

Function KareKodBilgisi( strKod:String ): tQRCode_Icerik;
Const
  OrnekKod = '01869900000000021000001700001000000';
Var
  strBlok : String;
  iKod    : Integer;
begin
  ZeroMemory(@Result, sizeOf(Result) );
  if Length(strKod) < length(OrnekKod) then Exit;
  strBlok := Trim(strKod);
  while strBlok <> '' do
  begin
    iKod := StrToInt( Copy(strBlok, 1, 2) );
    system.Delete(strBlok, 1, 2);
    case iKod of
    01: begin
          Result.k01_barkod := Copy(strBlok, 1, 13);
          system.Delete(strBlok, 1, 13);
        end;
    21: begin
          Result.k21_partino := Copy(strBlok, 1, 05);
          system.Delete(strBlok, 1, 05);
        end;
    17: begin
          Result.k17_miad    := Copy(strBlok, 1, 04);
          system.Delete(strBlok, 1, 04);
        end;
    10: begin
          Result.k10_seri    := Copy(strBlok, 1, 05);
          system.Delete(strBlok, 1, 05);
        end;
    end;
  end;
end;
Kullanımı :

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Sonuc : tQRCode_Icerik;
begin
  Sonuc := KareKodBilgisi( Edit1.Text );
  Memo1.Lines.Add('Barcode : ' + Sonuc.k01_barkod  );
  Memo1.Lines.Add('PartiNo : ' + Sonuc.k21_partino );
  Memo1.Lines.Add('Miad    : ' + Sonuc.k17_miad    );
  Memo1.Lines.Add('SeriNo  : ' + Sonuc.k10_seri    );
end;
Resim
Resim
Resim ....Resim
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: QR code hakkında yardım

Mesaj gönderen xxxjedixxx »

Eğer mevzu ilaç sektörüyle ilgiliyse aşağıdaki linklere bakmanda yarar var. Muhtemelen sağlık bakanlığı tarafından belirlenen bir format gibi görünüyor.

http://itsportal.saglik.gov.tr/index.php?run=qrcode&w=1
Resim

Yaptığım örneği cep telefonundaki "QR Droid" uygulamasından okuttuğumda çıkan sonuç aşağıdaki gibi oldu.
018699211234567890 1731121410999

Bu linklere de bakmanda fayda var.
http://www.saglik.gov.tr/TR/dosya/1-721 ... avuzu.doc‎
http://www.gyazilim.com/htmldocs/sss/17 ... ikler/html
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: QR code hakkında yardım

Mesaj gönderen varyemez »

its kurallarında 17 nin önünde chr(29) vardır. şimdi tüm karekodlar 01 21 17 10 sırasına uygun olarak basılmakta (daha önce birkaç firma 01 10 17 21 de yaptı ama artık belli bir standarda girdi)
iki sorun var : direkt aletle karekoddan okutarak almak stringi , bir de düz stringten (yani 17 nin önünde bir şey olmayan) alıp parçalamak. ikisi farklı prosedürlerde ele alınmalı.
(21) seri no ve (10) lot no alanları max 20 karakter , alfanumerik , uppercase, Türkçe yok.
(01) gtin biliyorsun önüne sıfır gelmiş barkod 14 karakter.
(17) son kull tarihi yymmdd şeklinde 6 hane. burda dikkat edeceğin şey dd kısmı 00 (çift sıfır) olabiliyor (ne sebeple bunu çıkardıklarını hala anlayamadım , kimse de izah etmedi) bu şu demek: ayın son günü , yani 30 ,31 veya şubat için 28 29 . bu çevirmeyi de yapmak zorundasın.
standarda uygun basılmış karekoddan alatle okutarak parse etmek daha kolay. #29 u yakaladın mı korkma.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: QR code hakkında yardım

Mesaj gönderen tayipk »

muharrem hocam oluşturduğunuz örnek için teşekkürederim emeğinize sağlık. Fakat şöyle bir sorum olacak size varyemez hocamın dediği gibi 21 ve 10 kod numaralı yerler max. 20 karakter ama örneğin 21 nolu yerdeki bilgi bazen 5 bazen 7 karakter olabiliyor yada 10 nolu yer bazen 4 bazende 9 karakter olabiliyor yani karakter sayıları stabil değil o yüzden sizin yazdığınız örnek karakter sayıları sabit alındığı için değişken karakter sayılı karekodlarda sorun çıkaracaktır diye düşünüyorum bu sorunu nasıl aşabiliriz.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: QR code hakkında yardım

Mesaj gönderen tayipk »

xxxjedixxx yazdı:Eğer mevzu ilaç sektörüyle ilgiliyse aşağıdaki linklere bakmanda yarar var. Muhtemelen sağlık bakanlığı tarafından belirlenen bir format gibi görünüyor.

http://itsportal.saglik.gov.tr/index.php?run=qrcode&w=1
Resim

Yaptığım örneği cep telefonundaki "QR Droid" uygulamasından okuttuğumda çıkan sonuç aşağıdaki gibi oldu.
018699211234567890 1731121410999

Bu linklere de bakmanda fayda var.
http://www.saglik.gov.tr/TR/dosya/1-721 ... avuzu.doc‎
http://www.gyazilim.com/htmldocs/sss/17 ... ikler/html
evet hocam mevzu ilaç sektörü bu siteyi inceledim fakat net bir bilgiye ulaşamadım
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: QR code hakkında yardım

Mesaj gönderen tayipk »

varyemez yazdı:its kurallarında 17 nin önünde chr(29) vardır. şimdi tüm karekodlar 01 21 17 10 sırasına uygun olarak basılmakta (daha önce birkaç firma 01 10 17 21 de yaptı ama artık belli bir standarda girdi)
iki sorun var : direkt aletle karekoddan okutarak almak stringi , bir de düz stringten (yani 17 nin önünde bir şey olmayan) alıp parçalamak. ikisi farklı prosedürlerde ele alınmalı.
(21) seri no ve (10) lot no alanları max 20 karakter , alfanumerik , uppercase, Türkçe yok.
(01) gtin biliyorsun önüne sıfır gelmiş barkod 14 karakter.
(17) son kull tarihi yymmdd şeklinde 6 hane. burda dikkat edeceğin şey dd kısmı 00 (çift sıfır) olabiliyor (ne sebeple bunu çıkardıklarını hala anlayamadım , kimse de izah etmedi) bu şu demek: ayın son günü , yani 30 ,31 veya şubat için 28 29 . bu çevirmeyi de yapmak zorundasın.
standarda uygun basılmış karekoddan alatle okutarak parse etmek daha kolay. #29 u yakaladın mı korkma.
varyemez hocam verdiğin bilgiler için teşekkürederim burda dikkatimi çeken birşey oldu 17 den sonra #29 atıyor demişsin bunu sadece 17 den sonra mı atıyor yoksa her bloğun sonunda mı atıyor yani atıyorum 17 den sonra #29 attı 21 den sonra da bu #29 u atıyor mu ve bu #29 u nasıl yakalayabilirim.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: QR code hakkında yardım

Mesaj gönderen varyemez »

Hayır. sadece 17 den önce bir #29 var. mesela şöyle

01086995780900362100000000705137-17170502103018022 (buradaki eski işaretinin yerinde #29 var. ben görünür olsun diye eksi koydum)
ayrıca aşağıdaki linke de bakıver.

http://www.itstools.biz.tr/?page_id=15

unuttum söylemeye, edit in onkeypress olayına yazarsın ve #29 u buldurursun. Aslında sorduğun sorudaki serino nun boyu ile ilgili cevap burda yatıyor. seri no nun bittiğini #29 ile anlıyoruz. en sondaki lotno nun ucunda birşey aramaya gerek yok zaten.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: QR code hakkında yardım

Mesaj gönderen tayipk »

varyemez yazdı:Hayır. sadece 17 den önce bir #29 var. mesela şöyle

01086995780900362100000000705137-17170502103018022 (buradaki eski işaretinin yerinde #29 var. ben görünür olsun diye eksi koydum)
ayrıca aşağıdaki linke de bakıver.

http://www.itstools.biz.tr/?page_id=15

unuttum söylemeye, edit in onkeypress olayına yazarsın ve #29 u buldurursun. Aslında sorduğun sorudaki serino nun boyu ile ilgili cevap burda yatıyor. seri no nun bittiğini #29 ile anlıyoruz. en sondaki lotno nun ucunda birşey aramaya gerek yok zaten.
verdiğin bilgiler için sana çok teşekkürederim varyemez hocam verdiğin bilgilerle yeteri kadar aydınlandım çok sağol.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: QR code hakkında yardım

Mesaj gönderen mrmarman »

Bu bilgiler ışığında parse fonksiyonu da şu şekilde oluştu... :idea:

önce (#29) veya arada bunun yerine (' ') boşluk karakteri varsa ('|') karakterine dönüştürülüyor. Standardizasyon sağlandıktan sonra emin bir şekilde sorgulama başlıyor...

Kod: Tümünü seç

Type tQRCode_Icerik = record
  k01_GTIN_barkod,          // uz:14
  k21_SERI_partino,         // uz:01..pos:#29
  k17_SKT_miad,             // uz:04..pos (kod_10)
  k10_LOTTNO_seri : String; // uz:geriye kalan
end;

Function KareKodBilgisi( strKod:String ): tQRCode_Icerik;
Var
  strBlok : String;
  iUz,
  iKod    : Integer;
begin
  ZeroMemory(@Result, sizeOf(Result) );
  strBlok := Trim(strKod);
  strBlok := StringReplace(strBlok, #29, '|', [] );
  strBlok := StringReplace(strBlok, ' ', '|', [] );
  while strBlok <> '' do
  begin
    iKod := StrToInt( Copy(strBlok, 1, 2) );
    system.Delete(strBlok, 1, 2);
    case iKod of
    01: begin
          iUz := 14;
          Result.k01_GTIN_barkod := Copy(strBlok, 1, iUz);
          system.Delete(strBlok, 1, iUz);
        end;
    21: begin
          iUz := Pos('|', strBlok)-1;
          Result.k21_SERI_partino := Copy(strBlok, 1, iUz);
          system.Delete(strBlok, 1, iUz + 1);
        end;
    17: begin
          iUz := 04;
          while strBlok[iUz] + strBlok[iUz+1] <> '10' do inc(iUz);
          Dec(iUz);
          Result.k17_SKT_miad    := Copy(strBlok, 1, iUz);
          system.Delete(strBlok, 1, iUz);
        end;
    10: begin
          Result.k10_LOTTNO_seri := Trim(strBlok);
          strBlok := '';
        end;
    end;
  end;
end;
Kullanımı :

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text := '01086995041200112114078876651'#29'17111210K0016';
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  Sonuc : tQRCode_Icerik;
begin
  Sonuc := KareKodBilgisi( Edit1.Text );
  Memo1.Lines.Add('Barcode : ' + Sonuc.k01_GTIN_barkod  );
  Memo1.Lines.Add('PartiNo : ' + Sonuc.k21_SERI_partino );
  Memo1.Lines.Add('Miad    : ' + Sonuc.k17_SKT_miad     );
  Memo1.Lines.Add('SeriNo  : ' + Sonuc.k10_LOTTNO_seri  );
end;
Resim
Resim ....Resim
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: QR code hakkında yardım

Mesaj gönderen varyemez »

Muharrem hocam izninize sığınarak kodlarda bir parça değişiklik yaparak gerçek ilaç karekodlarını okuyabilir hale getirdim.
Bu arada bir şey sorayım. zeromemory nin amacı ne burada?
şunu da söyleyeyim. piyasada farklı karekod okuyucular okudukları escape karakterleri dışarı farklı olarak verebiliyorlar. Program dizayn edecek arkadaşların bunu gözönünde bulundurmasında yarar var.

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
Type tQRCode_Icerik = record
  k01_barkod,        // uz:13
  k21_serino,       // uz:05
  k17_miad,          // uz:04
  k10_partino : String; // uz:05
end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);

  private
    { Private declarations }

  public
    { Public declarations }
  end;
  Function KareKodBilgisi( strKod:String ): tQRCode_Icerik;
var
  Form1: TForm1;
  gstr:string;
implementation

{$R *.dfm}

Function KareKodBilgisi( strKod:String ): tQRCode_Icerik;
Var
  strBlok : String;
  iUz,
  iKod    : Integer;
begin
  ZeroMemory(@Result, sizeOf(Result) );
  strBlok := Trim(strKod);
  strBlok := StringReplace(strBlok, #29, '|', [] );
 // strBlok := StringReplace(strBlok, ' ', '|', [] );
  while strBlok <> '' do
  begin
    iKod := StrToInt( Copy(strBlok, 1, 2) );
    system.Delete(strBlok, 1, 2);
    case iKod of
    01: begin
          iUz := 14;
          Result.k01_barkod := Copy(strBlok, 1, iUz);
          system.Delete(strBlok, 1, iUz);
        end;
    21: begin
          iUz := Pos('|', strBlok)-1;
          Result.k21_serino := Copy(strBlok, 1, iUz);
          system.Delete(strBlok, 1, iUz + 1);
        end;
    17: begin
          iUz := 06;
          while strBlok[iUz] + strBlok[iUz+1] <> '10' do inc(iUz);
          Dec(iUz);
          Result.k17_miad    := Copy(strBlok, 1, iUz);
          system.Delete(strBlok, 1, iUz);
        end;
    10: begin
          Result.k10_partino := Trim(strBlok);
          strBlok := '';
        end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);

Var
  Sonuc : tQRCode_Icerik;
begin
// edit1.Text:=gstr;
  Sonuc := KareKodBilgisi( Edit1.Text );
  Memo1.Lines.Add('Barcode : ' + Sonuc.k01_barkod  );
  Memo1.Lines.Add('Seri : ' + Sonuc.k21_serino );
  Memo1.Lines.Add('Miad    : ' + Sonuc.k17_miad     );
  Memo1.Lines.Add('PartiNo  : ' + Sonuc.k10_partino  );
  edit1.Text:='';
  gstr:='';
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then begin
edit1.Text:=gstr;
Button1Click(self);
end;
gstr:=gstr+key;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:='01086995041200112114021876651'#29'17151231100K0016';
end;

end.


Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: QR code hakkında yardım

Mesaj gönderen mrmarman »

Merhaba.

Örnekteki ' ' şeklindeki boşluk olma durumunu ekrsta koymuştum, eğer bir karekod okuyucu gelen excape karakterlerini boşluk ile değiştirirse diye emniyey subabı idi yani. Normal olarak #29 gelmişse etkisiz elemandır. Bir etkisi olmaz...

- ZeroMemory'nin amacı, TYPE olarak verdiğim bilgi bloğunu bir defada sıfırlamak.

- Bir function tanımlayınca, tek bir tane değil de birden fazla sayıda değer dönecekse; bu durumda RECORD TYPE tanımlayıp veri grubunu belirtiyoruz. Bu grubu örnekteki gibi 3 - 4 adetlik bir grup da olabiliyor, 10'larca olanı da. Her birinin de tipi farklı olabiliyor. Kimisi Integer, kimisi boolean, kimisi de string vs. gibi...

- ZeroMemory ( Adnroid'de de FillChar fonksiyonu şeklinde kullanıyoruz ) bu değerleri ilk değer olarak sıfırlıyor.
Resim
Resim ....Resim
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: QR code hakkında yardım

Mesaj gönderen tayipk »

varyemez yazdı:Muharrem hocam izninize sığınarak kodlarda bir parça değişiklik yaparak gerçek ilaç karekodlarını okuyabilir hale getirdim.
Bu arada bir şey sorayım. zeromemory nin amacı ne burada?
şunu da söyleyeyim. piyasada farklı karekod okuyucular okudukları escape karakterleri dışarı farklı olarak verebiliyorlar. Program dizayn edecek arkadaşların bunu gözönünde bulundurmasında yarar var.

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
Type tQRCode_Icerik = record
  k01_barkod,        // uz:13
  k21_serino,       // uz:05
  k17_miad,          // uz:04
  k10_partino : String; // uz:05
end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);

  private
    { Private declarations }

  public
    { Public declarations }
  end;
  Function KareKodBilgisi( strKod:String ): tQRCode_Icerik;
var
  Form1: TForm1;
  gstr:string;
implementation

{$R *.dfm}

Function KareKodBilgisi( strKod:String ): tQRCode_Icerik;
Var
  strBlok : String;
  iUz,
  iKod    : Integer;
begin
  ZeroMemory(@Result, sizeOf(Result) );
  strBlok := Trim(strKod);
  strBlok := StringReplace(strBlok, #29, '|', [] );
 // strBlok := StringReplace(strBlok, ' ', '|', [] );
  while strBlok <> '' do
  begin
    iKod := StrToInt( Copy(strBlok, 1, 2) );
    system.Delete(strBlok, 1, 2);
    case iKod of
    01: begin
          iUz := 14;
          Result.k01_barkod := Copy(strBlok, 1, iUz);
          system.Delete(strBlok, 1, iUz);
        end;
    21: begin
          iUz := Pos('#29', strBlok)-1;
          Result.k21_serino := Copy(strBlok, 1, iUz);
          system.Delete(strBlok, 1, iUz + 1);
        end;
    17: begin
          iUz := 06;
          while strBlok[iUz] + strBlok[iUz+1] <> '10' do inc(iUz);
          Dec(iUz);
          Result.k17_miad    := Copy(strBlok, 1, iUz);
          system.Delete(strBlok, 1, iUz);
        end;
    10: begin
          Result.k10_partino := Trim(strBlok);
          strBlok := '';
        end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);

Var
  Sonuc : tQRCode_Icerik;
begin
// edit1.Text:=gstr;
  Sonuc := KareKodBilgisi( Edit1.Text );
  Memo1.Lines.Add('Barcode : ' + Sonuc.k01_barkod  );
  Memo1.Lines.Add('Seri : ' + Sonuc.k21_serino );
  Memo1.Lines.Add('Miad    : ' + Sonuc.k17_miad     );
  Memo1.Lines.Add('PartiNo  : ' + Sonuc.k10_partino  );
  edit1.Text:='';
  gstr:='';
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then begin
edit1.Text:=gstr;
Button1Click(self);
end;
gstr:=gstr+key;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:='01086995041200112114021876651'#29'17151231100K0016';
end;

end.
sayın varyemez hocam ve muharrem hocam ve yardımcı olabilecek arkadaşlar. yukarıdaki kodlarla birlekte karekodu ayrıştırabiliyorum fakat seri no yu bir türlü alamıyorum örneğin 010869951601315821739000237168821718123110EA1584 karekodunu bu şekilde yazarsam sonuç
Barkod : 08699516013158
Seri_no :
Miad : 181231
PartiNo : EA1584
şeklinde çıkıyor fakat 01086995160131582#29173900023716882#291718123110EA1584 şeklinde manule olarak düzeltirsem bu sefer istediğim sonuç istediğim gibi yani aşağıdaki
Barkod : 08699516013158
Seri_no : 73900023716882
Miad : 181231
PartiNo : EA1584

gibi çıkıyor bu durumu nasıl çözebilirim arkadaşlar
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
varyemez
Üye
Mesajlar: 262
Kayıt: 01 Oca 2009 11:00
Konum: Bursa
İletişim:

Re: QR code hakkında yardım

Mesaj gönderen varyemez »

edit1keypress olayına
gstr:=gstr+key;
burada #29 u kontrol edip eğer key=#29 ise key i | - veya ; ile değiştirerek devam et.

key:= #45 ; // tire işareti
gstr:=gstr+key;
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2381
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Re: QR code hakkında yardım

Mesaj gönderen freeman35 »

Delphi m olmadığı için bakamıyorum, lazarusta ben şöyle kullanabiliyorum

Kod: Tümünü seç

var x:TStringList;
begin
  x.Delimiter := #29;
  x.CommaText := stringdeğer
 ....
eğer oluyorsa

Kod: Tümünü seç

StringReplace(stringdeğer, #29, ',', [rfReplaceAll] );
x.CommaText := stringdeğer
pars etmekten daha kolay olur, en azından uzun uzadıya koda yamaya gerek kalmıyor. StringReplace ile #29 u "," çevirildiğinde okunan barkod içinde virgül varsa sıkıntı çıkacaktır. bu ihtimale karşı zaten klavye tuşu ile girilmeyecek karakterler ayraç olarak kullanılması en mantıklıdır. #29 gibi
Kolay gele
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Cevapla