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.

Bulduğum barqr5 komponenti de programı çalıştırdığında hata veriyordu.kaynak kodlarını inceleyerk hatalı olan satırları iptal ettim

:
//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

:
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.........

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

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

Ynt: Barkod Yazdırma Gönderen: dynamo Tarih: 24 July 2007 11:32:05
rapid linkleri belli bir süre sonra siliniyor.

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

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