ArÅŸiv Anasayfa Delphi Makaleleri
Sayfalar: 1
Barkod Yazdırma Gönderen: dynamo Tarih: 16 April 2007 16:55:25
vaktiyle,net'ten ücretsiz barkod yazdırma komponenti aramıştım,fakat istediğim gibi bir komponent bulamadım. Sad Bulduğum barqr5 komponenti de programı çalıştırdığında hata veriyordu.kaynak kodlarını inceleyerk hatalı olan satırları iptal ettim Olamaz :

:
     //if PrintWhere = ParentReport.QRPrinter.Canvas then       //iptal ettiği satırlar ///////
     //BEGIN
      // UsePixelsPerInchX :=
      //     GetDeviceCaps(ParentReport.QRPrinter.Canvas.Handle,LOGPIXELSX);
      // UsePixelsPerInchY :=
      //      GetDeviceCaps(ParentReport.QRPrinter.Canvas.Handle, LOGPIXELSY);
     //END;

ayrıca barkodun yükseklik ve genişliğini tam ayarlanamıyor,font engi değiştirme özelliği yok.yine de acil durumlarda işgörebilir.barqr5 adlı Quickreport komponentini kullanarak Quickrepottan barkod yazdırma işlemini yapalım.deneme şansım olmadı,ARGOX vb. barkod yazdırma cihazlarında çalışacağını sanmıyorum.

İlk programımız Quickreportta 4 tane barkod yazdırma olsun.QuickRep->DetailBand üzerinde 4 tane QRLabel ve 4 tane QRBarcode komponenti var.Fiyat Yazdır->EVET ise QRLabel'lar fiyatı gösterir:



:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 if combobox1.Text='HAYIR'  then begin
   qrlabel1.Caption:='';
   qrlabel2.Caption:='';
   qrlabel3.Caption:='';
   qrlabel4.Caption:='';
   qrbarcode1.Text:=edit1.Text;
   qrbarcode2.Text:=edit1.Text;
   qrbarcode3.Text:=edit1.Text;
   qrbarcode4.Text:=edit1.Text;
   quickrep1.Preview;
 end;
 if combobox1.Text='EVET'  then begin
   qrlabel1.Caption:=trim(edit2.Text)+' '+trim(edit3.Text);
   qrlabel2.Caption:=trim(edit2.Text)+' '+trim(edit3.Text);
   qrlabel3.Caption:=trim(edit2.Text)+' '+trim(edit3.Text);
   qrlabel4.Caption:=trim(edit2.Text)+' '+trim(edit3.Text);
   qrbarcode1.Text:=edit1.Text;
   qrbarcode2.Text:=edit1.Text;
   qrbarcode3.Text:=edit1.Text;
   qrbarcode4.Text:=edit1.Text;
   quickrep1.Preview;
 end;

rapor ekranı:




2. programımız biraz daha profesyonel tarzda olsun.İstediğim kolon sayısı istediğim adette Barkod,Ürün Kodu,Ürün Adı,Fiyat,Özel Mesaj bilgilerini barkod yazdırıken gösterelim.Ayrıca Quickreport ekranında hangi alanların gösterileceği Checkbox seçili ise göstersin.

QuickRep->DetailBand  üzerinde QRLabel ve QRBarcode bileşenlri yok. bunları runtime da kodla oluşturacağız.Nesneleri dinamik diziler kullanarak oluşturuyoruz. dizinin sınırı kolon sayısıdır.yani kolon sayısı kadar label,barkodlar oluşturuyor.:

:
procedure TfrmBarkod.BitBtn1Click(Sender: TObject);
var
     QRLabela:array of TQRLabel;
     QRLabelb:array of TQRLabel;
     QRLabelc:array of TQRLabel;
     QRLabeld:array of TQRLabel;
     QRBarcode:array of TQRBarcode;
     QRLabelyazi:array of TQRLabel;
     x1,x2,x3,x4,x5,x6,x7:integer;
     i :Integer;
begin

   if  trim(edit1.Text)='' then begin
      ShowMessage('Barkod Değerini Giriniz...');
      edit1.SetFocus;
      exit;
   end;

   //ini dosyadan ayarları al
   ayarlari_al();
   QuickRep1.Bands.DetailBand.Height:=EtiketY;
   //--------------------------------------------------------------
   if CheckBox1.Checked then   SetLength(QRLabela,kolonsayisi);
   if CheckBox2.Checked then   SetLength(QRLabelb,kolonsayisi);
   if CheckBox3.Checked then   SetLength(QRLabelc,kolonsayisi);
   if CheckBox4.Checked then   SetLength(QRLabeld,kolonsayisi);
   SetLength(QRBarcode,kolonsayisi);
   SetLength(QRLabelyazi,kolonsayisi);
   //---------------------------------------------------------------
   x1:=StokKoduX;
   x2:=StokAdiX;
   x3:=FiyatX;
   x4:=MesajX;
   if combobox1.Text='Code128' then begin
     x6:=BarkodX-5;   //barkod için
     x7:=(BarkodGenislik div 2)-5;   // EAN dışındakiler için barkod rakamı
   end
   else begin
     x6:=BarkodX;   //barkod için
     x7:=(BarkodGenislik div 2);
   end;
   //-----------------------------------------------------------------
   for i:=0 to kolonsayisi-1 do begin
      //stokkodu----
      if CheckBox1.Checked then begin
        QrLabela[i]         := TQrLabel.Create(DetailBand1);
        QRLabela[i].Parent  := DetailBand1;
        QrLabela[i].Name    := 'QrLabela' + IntToStr(i);
        QRLabela[i].Size.Height:=2;
        QrLabela[i].Size.Width:=38;
        QrLabela[i].Size.Top:=StokKoduY;
        QrLabela[i].Size.Left:=x1;
        x1:=x1+EtiketX;
      end;
      //stokadı----
      if CheckBox2.Checked then begin
        QrLabelb[i]         := TQrLabel.Create(DetailBand1);
        QRLabelb[i].Parent  := DetailBand1;
        QrLabelb[i].Name    := 'QrLabelb' + IntToStr(i);
        QRLabelb[i].Size.Height:=2;
        QrLabelb[i].Size.Width:=38;
        QrLabelb[i].Size.Top:=StokAdiY;
        QrLabelb[i].Size.Left:=x2;
        x2:=x2+EtiketX;
      end;
      //fiyat-------
      if CheckBox3.Checked then begin
        QrLabelc[i]         := TQrLabel.Create(DetailBand1);
        QRLabelc[i].Parent  := DetailBand1;
        QrLabelc[i].Name    := 'QrLabelc' + IntToStr(i);
        QRLabelc[i].Size.Height:=2;
        QrLabelc[i].Size.Width:=38;
        QrLabelc[i].Size.Top:=FiyatY;
        QrLabelc[i].Size.Left:=x3;
        x3:=x3+EtiketX;
      end;
      //mesaj---------
      if CheckBox4.Checked then begin
        QrLabeld[i]         := TQrLabel.Create(DetailBand1);
        QRLabeld[i].Parent  := DetailBand1;
        QrLabeld[i].Name    := 'QrLabeld' + IntToStr(i);
        QRLabeld[i].Size.Height:=2;
        QrLabeld[i].Size.Width:=38;
        QrLabeld[i].Size.Top:=MesajY;
        QrLabeld[i].Size.Left:=x4;
        x4:=x4+EtiketX;
      end;
      //barkod ----
      QRBarcode[i]:=TQRBarcode.Create(DetailBand1);
      QRBarcode[i].Parent:=DetailBand1;
      QRBarcode[i].Name:='QRBarcode'+IntToStr(i);
      //---------------barkod tipi seç----------
      if combobox1.Text='EAN13' then QRBarcode[i].BarCodeType:=EAN13;
      if combobox1.Text='EAN8' then QRBarcode[i].BarCodeType:=EAN8;
      if combobox1.Text='Code39' then QRBarcode[i].BarCodeType:=Code39;
      if combobox1.Text='Code128' then QRBarcode[i].BarCodeType:=Code128;
      if combobox1.Text='Int2of5' then QRBarcode[i].BarCodeType:=Interleaved2Of5;
      if combobox1.Text='Postnet' then QRBarcode[i].BarCodeType:=Postnet;
      //////------------------------
      QRBarcode[i].Size.Height:=BarkodYukseklik;
      QRBarcode[i].Size.Width:=BarkodGenislik;
      QRBarcode[i].Size.Top:=BarkodY;
      QRBarcode[i].Size.Left:=x6;
      x6:=x6+EtiketX;

      //EAN dışındaki barkodlar için barkod rakamı-----
      if (combobox1.Text='Code39') or (combobox1.Text='Code128') or (combobox1.Text='Int2of5') or (combobox1.Text='Postnet') then begin
        QrLabelyazi[i]:=TQrLabel.Create(DetailBand1);
        QrLabelyazi[i].Parent:=DetailBand1;
        QrLabelyazi[i].Name:='QRLabelyazi'+IntToStr(i);
        QRLabelyazi[i].Size.Height:=1;
        QrLabelyazi[i].Size.Width:=BarkodGenislik;
        QrLabelyazi[i].Size.Top:=BarkodY+BarkodYukseklik+2;
        QrLabelyazi[i].Size.Left:=x7;
       // QrLabelyazi[i].Alignment:=taCenter;
       // QrLabelyazi[i].AutoSize:=false;
        x7:=x7+EtiketX;
      end ;

  end; //for
  //-------------------------------------------------------
  QuickRep1.Preview;
  //-------------------------------------------------------
  if CheckBox1.Checked then
    for i:=0 to kolonsayisi-1 do
      QRLabela[i].Free;
  if CheckBox2.Checked then
    for i:=0 to kolonsayisi-1 do
      QRLabelb[i].Free;
  if CheckBox3.Checked then
    for i:=0 to kolonsayisi-1 do
      QRLabelc[i].Free;
  if CheckBox4.Checked then
    for i:=0 to kolonsayisi-1 do
      QRLabeld[i].Free;
  for i:=0 to kolonsayisi-1 do
      QRBarcode[i].Free;
  if (combobox1.Text='Code39') or (combobox1.Text='Code128') or (combobox1.Text='Int2of5') or (combobox1.Text='Postnet') then
    for i:=0 to kolonsayisi-1 do
      QRLabelyazi[i].Free;
 //----------------------------------------------------------


end;

QuickRep1->NeedData olayında yazdırma işlemi gerçeklşiyor:

:
procedure TfrmBarkod.QuickRep1NeedData(Sender: TObject;
  var MoreData: Boolean);
var
   i:integer;
begin
  MoreData := CurrentIndex < adet;
  if MoreData then begin
    for i:=0 to kolonsayisi-1 do begin

        if CheckBox1.Checked then  TQRLabel(DetailBand1.FindComponent('QrLabela' + IntToStr(i))).Caption := trim(edit2.Text);
        if CheckBox2.Checked then  TQRLabel(DetailBand1.FindComponent('QrLabelb' + IntToStr(i))).Caption := trim(edit3.Text);
        if CheckBox3.Checked then  TQRLabel(DetailBand1.FindComponent('QrLabelc' + IntToStr(i))).Caption := trim(edit4.Text);
        if CheckBox4.Checked then  TQRLabel(DetailBand1.FindComponent('QrLabeld' + IntToStr(i))).Caption := trim(edit5.Text);
        TQRBarcode(DetailBand1.FindComponent('QRBarcode' + IntToStr(i))).Text :=trim(edit1.Text);
        if (combobox1.Text='Code39') or (combobox1.Text='Code128') or (combobox1.Text='Int2of5') or (combobox1.Text='Postnet') then
           TQRLabel(DetailBand1.FindComponent('QrLabelyazi' + IntToStr(i))).Caption :=trim(edit1.Text);
       

    end;
  end;
  Inc(CurrentIndex);
end;


QuickRep1->BeforePrint olayında index'i 0 yapıyoruz.Bu önemli ve beni bayağı uğraştırmıştı.Eğer CurrentIndex ,  QuickRep1BeforePrint sıfırlanmazsa sonsuz döngüye giriyor  Tongue :

:
procedure TfrmBarkod.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
   CurrentIndex:=0;
end;


ayarlari_al proseduru Ayarlar formunda ini dosyaya kaydeilen ayarları alır:

:
procedure TfrmBarkod.ayarlari_al();
var
   dosya: TIniFile;
begin
   dosya := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Settings.ini');
   BarkodGenislik:=StrToInt(dosya.ReadString('Options','Barkod_Genislik','0'));
   BarkodYukseklik:=StrToInt(dosya.ReadString('Options','Barkod_Yukseklik','0'));
   EtiketX:=StrToInt(dosya.ReadString('Options','EtiketX','0'));
   EtiketY:=StrToInt(dosya.ReadString('Options','EtiketY','0'));
   StokKoduX:=StrToInt(dosya.ReadString('Options','StokKoduX','0'));
   StokKoduY:=StrToInt(dosya.ReadString('Options','StokKoduY','0'));
   StokAdiX:=StrToInt(dosya.ReadString('Options','StokAdiX','0'));
   StokAdiY:=StrToInt(dosya.ReadString('Options','StokAdiY','0'));
   FiyatX:=StrToInt(dosya.ReadString('Options','FiyatX','0'));
   FiyatY:=StrToInt(dosya.ReadString('Options','FiyatY','0'));
   BarkodX:=StrToInt(dosya.ReadString('Options','BarkodX','0'));
   BarkodY:=StrToInt(dosya.ReadString('Options','BarkodY','0'));
   MesajX:=StrToInt(dosya.ReadString('Options','MesajX','0'));
   MesajY:=StrToInt(dosya.ReadString('Options','MesajY','0'));
   dosya.Free;

   kolonsayisi:=spinedit1.Value;
   adet:= spinedit2.Value;

end;

şimdi , 4 kolon 2 sıra ve Barkod,Ürün Kodu,Ürün Adı,Fiyat,Özel Mesaj yazdırma işlemini yapalım:

program:



ayarlar:



yazdırma:



programın veritabanından stokları alıp yazdırma işlemini yapma fırsatım olmadı.ilk projede product tablosunda tanımlı ürün adları var.2.projeyi sql server'de tablodan barkodları okuma işlemini yapacaktım......... Roll Eyes

her iki proje kodlarıyla birlikte burda.barqr5 komponenti içinde:

http://rapidshare.tc/27486742

Ynt: Barkod Yazdırma Gönderen: FetihlerFatihi Tarih: 16 April 2007 18:25:59
Resimleri sunucuya atmaya yetişemiyorum  Te&#351;ekk&#252;r
Rapiddeki örnekte bulunan ekran görüntülerini slip, sunucuya atarsam sorun olur  mu


Ynt: Barkod Yazdırma Gönderen: haydarxxx Tarih: 23 July 2007 21:08:54
hocam link i kontrol edermisin  Tongue
Ynt: Barkod Yazdırma Gönderen: dynamo Tarih: 24 July 2007 11:32:05
rapid linkleri belli bir süre sonra siliniyor.  Sad

barqr5 komponentini delphiye yüklediÄ?inizde QReport tabında QRBarcode gözükecektir.

örnek uygulamalar ekte gönderiyorum.
Ynt: Barkod Yazdırma Gönderen: haydarxxx Tarih: 02 August 2007 00:58:35
rapid linkleri 45 gün içerisinde indirilmiyorsa link kalkıyor biliyorum Smiley
dynamo teÅ?ekkür ediyorum yanlız barkod komponenti klosöründe vermiÅ? olduÄ?unuz

barqr5.~pas
barqr5.dcu
barqr5.pas

dosyalarını nasıl yükleyeceÄ?iz ? kısa bir tarif de verirseniz iyi olur.TeÅ?ekkürler