Delphide Printer Server

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
kayipgemi
Üye
Mesajlar: 88
Kayıt: 14 Kas 2005 03:07

Delphide Printer Server

Mesaj gönderen kayipgemi »

Selamünaleyküm arkadaşlar, kolay gelsin

Yardımlarınıza ihtiyacım var yardımcı olabilirseniz cok makbüle gececek..

Delphi7, Firebird 1.5 Veri Tabanı
2 adet com lardan calisan (barkod yazıcı gibi) küçük yazıcılar
yazcılar windowsda tanimli depo1 ve depo2 diye

Yapmak istedigim sudur arkadaslar,
yazıcıların biri depo1 de diğeride depo2 de.. depo1 de koltuk takımları depo2 de yatak takımları var, yaptıgım progamda müşteriye ait siparişleri giriyorum..

gurup açıklama fiyat

koltuk prestige xxxxx
koltuk selana xxxxx
yatak ortepedik xxxxx

dbgird de de bu şekilde listeleniyor, yazdır tusuna bastıgımda depo1 deki yazıcıdan 2 adet cıktı depo1 deki yazıcıdanda 1 adet cıktı almam gerekiyor,

bunu nasıl yapıcam, örnek bir kod nasıl yazılır bir örneğiniz varmı yardımcı olabilirseniz gerçekten cok makbüle gececek, ilgi ve alakanıza şimdiden cok teşekkür ederim.
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

merhaba arkadaşım...

Kod olarak değilde yöntem olarak fikir vereyim..

öncelikle raporlama için hangi komponenti kullanıyorsun?

dediğin işlemi fastreport veya reportbuilder ndehatta quickreportta da yapabilirsin.Öncelikle yazdırılacak Depo çıkış fişinin dizaynını yap.Raporları dizayn ederken default yazıcı diye bişey sorar(fastreport ve reportbuilder'de var)istersen default yazıcıyı programına parametreler diye bölüm koyup ordan kullanıcıya ayarlatırsın.aynıfiş dizaynını iki tane yap birincisinin copy sayısına 2 diğerininkine 1yaz.2 yaptığının default yazıcısını depo-1 ,1 yaptığının default yazıcısınıda depo-2 yap.yazdır butonuna bastığında dediğin işlem olacaktır.ben fastreport kullandığım için kabaca orada yapılabileceğini anlatmaya çalıştım.kullandığın rapor komponentini yazarsan ayrıntılı bilgi veririz.
kayipgemi
Üye
Mesajlar: 88
Kayıt: 14 Kas 2005 03:07

Mesaj gönderen kayipgemi »

Fast Report kullanıyorum serkan kardeşim ama yazdıgın cevapta aklıma bir şey takıldı çıktının kopya sayısını birinin 2 diğerini 1 yap demişin ama mesela her müşteri 2 tane koltuk taımı almıyor mesela bazen 4 tane bazen bir tane o zaman depo1 e 4 tane çıktı gitmesi gerekiyor

bide ben bazı programlarda gördüm printserver diye bir exe yapmıslar bilgisayarında baslangıcına atmıslar bilgisayar acılınca kendi otomatik calisiyo yazdır deyince hangi yazıcıya kac tane cıktı gidecekse gidiyo

bende böle bir şey yapmak istiyorum.. kodu örneği artık nasıl yapabilirsem, yardımlarınızı bekliyorum , ilgin için teşekkürler kardeşim
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Bu her iki birimdeki yazıcı da paylaştırılmış ve de sisteminizde de tanımlı değil mi ? Sorun nerede o zaman.. ?

- Uses'a Printers eklersiniz.

- Printer.Printers ile tanımlı yazıcı listesini alabiliyorsunuz.

- Printers.Printer.PrinterIndex ile varsayılan yazıcıyı da alabiliyorsunuz.

- Yazdırmadan önce bu listedeki PrinderIndex değerini belirleyip o anki aktif yazıcıyı belirlemiş olursunuz. Dilediğiniz formu istediğiniz sayıda bastıktan sorna, diğer Index seçilip diğer formu istediğiniz sayıda bastırırsınız. Bu da bir tür programa özel Local PrintServer'dir.
Resim
Resim ....Resim
kayipgemi
Üye
Mesajlar: 88
Kayıt: 14 Kas 2005 03:07

Mesaj gönderen kayipgemi »

cevaplarınız için teşekkür ederim... deneyeceğim inşallah olumlu bir sonuç alabilirim..

peki bu işi yapan bir bileşen varmıdır acaba ..? :oops:
kayipgemi
Üye
Mesajlar: 88
Kayıt: 14 Kas 2005 03:07

Mesaj gönderen kayipgemi »

Arkadaşlar tam kendimden umudu kesmiş idim ama şu bilgilere ulastım

mustafa hocanın göndermiş oldugu kod

fastreport ile ilgili

///////////////////////////////////////////////////////////////////////

uses printers,....
....
....
....
var
printer:TPrinter;
index:integer;
begin
printer:= TPrinter.Create;
printer.Printers;
//ListBox1.Items:=printer.Printers;//if it is necessary possible to take list a printer
index:=printer.PrinterIndex;//take current printer
frReport1.ShowPrintDialog:=false;
//we print 1-ouch report on 2 printer
frReport1.LoadFromFile('rep1.frf');
frReport1.ChangePrinter(index,2);//change printer with the current index on printer with index 2.
frReport1.PrepareReport;
frReport1.PrintPreparedReportDlg;
//frReport1.PrintPreparedReport();//possible in the same way use this function
//we print 2-ouch report on 3-m printer
index:=printer.PrinterIndex;//take current printer
frReport1.LoadFromFile('rep2.frf');
frReport1.ChangePrinter(index,3);//change printer with the current index on printer with index 3.
frReport1.PrepareReport;
frReport1.PrintPreparedReportDlg;
end;

/////////////////////////////////////////////////////////////////

diğer bir örnek

microcip arkadaşımız göndermiş

/////////////////////////////////////////////////////////////////

uses
Printers, Shellapi;

procedure TForm1.Button1Click(Sender: TObject);
var
Device: array[0..255] of Char;
Driver: array[0..255] of Char;
Port: array[0..255] of Char;
S: string;
hDeviceMode: THandle;
documentname: string;
begin
Printer.PrinterIndex := -1; // select a printer, in this case default
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
S := Format('"%s" "%s" "%s"', [Device, Driver, Port]);
documentname := 'c:\anydocument.doc';
ShellExecute(Handle, 'printto', PChar(documentname), PChar(S), nil, SW_HIDE);
end;


Printer.PrinterIndex := -1; olursa default a gönderir başka durumlarda ilgili yazıcıya

////////////////////////////////////////////////////////////

olay budur ... (saat 01.30) emeğinize yüreginize sağlık .. teşekkürler
beni buyuk bir sıkıntıdan kurtardınız
bilgileri burda topladım
umarım diğer arkadaşlara faydalı bir bilgi olur...

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

Mesaj gönderen mrmarman »

Tebrikler...

- Farklı bir örnek bulmuşsun :lol: :lol: :lol:
Resim
Resim ....Resim
kayipgemi
Üye
Mesajlar: 88
Kayıt: 14 Kas 2005 03:07

Mesaj gönderen kayipgemi »

yanlız yukardaki kodlara göre

Kod: Tümünü seç

var
printer:TPrinter;
index:integer;
begin
printer:= TPrinter.Create;
printer.Printers;
ListBox1.Items:=printer.Printers;
index:=printer.PrinterIndex;
şeklinde listboxa gonderdi ama listboxtaki seçtiğim yazıcının index numarasını aldıramıyorum örneğin edit1 e yada showmessage olarak aldıramadım
kayipgemi
Üye
Mesajlar: 88
Kayıt: 14 Kas 2005 03:07

Mesaj gönderen kayipgemi »

arkadaşlar belki faydası olur size ben şöyle bir yöntem buldum

listboxtaki listenen yazıcılar da ilk satırda olanın numarsaı (listbox satır numarası) 0 sonra 1 2 3 diye devam ediyor

printer index numarasını

Kod: Tümünü seç

var
pirno:integer;

begin
pirno:=ListBox1.ItemIndex;
showmessage (inttostr(pirno));
Printer.PrinterIndex :=pirno;


şeklinde yaptim

sonra form1.print; dedim baktım ki listboxtaki listelenen yazıcı sırasına gore gonderiyor

bu şekilde bir çözüm buldum gerçi biraz yavan bir kod oldu ama (içime sinmedi) çalışıyor.

daha farklı bir çözüm olabilecek fikirlerinizi yinede bekliyorum arkadaşlar

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

Mesaj gönderen mrmarman »

Hocam farklı bir dil mi konuşuyorum duygusuna kapılıyorum. :lol: :lol: :lol:
@mrmarman yazdı:- Printer.Printers ile tanımlı yazıcı listesini alabiliyorsunuz.

- Printers.Printer.PrinterIndex ile varsayılan yazıcıyı da alabiliyorsunuz.

- Yazdırmadan önce bu listedeki PrinderIndex değerini belirleyip o anki aktif yazıcıyı belirlemiş olursunuz. Dilediğiniz formu istediğiniz sayıda bastıktan sorna, diğer Index seçilip diğer formu istediğiniz sayıda bastırırsınız. Bu da bir tür programa özel Local PrintServer'dir.
Resim
Resim ....Resim
kayipgemi
Üye
Mesajlar: 88
Kayıt: 14 Kas 2005 03:07

Mesaj gönderen kayipgemi »

hocam belki ben istediğimi tam olarak anlatamadım

olayım şu programda koltuk yatak sehba gibi guruplarım var ben örneğin koltuk gurubunun yanina bir field daha açıp (pirno) gibi daha sonra kullanıcıya listboxta listelediğim yazıcılardan birini seçtirdiğimde pirno fieldine seçilen yazıcının index numarasını kaydettirecem sonra yazdırırken

if siparisGURUP.Assitring = 'koltuk' then
printer.index := siparisPIRNO.Asinteger;
print;

diyecem hepsi bu yaff

yapmak istedigim bu işte burda ben listboxtaki listelenen yazıcının index numarasını nasıl bulacam

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

Mesaj gönderen mrmarman »

- Hocam en baştan beri sana tarif ettiğim şeyi sanki hiç anlatmamışım gibi yeniden keşfediyorsun. Bunadır tepkim.

- Uses'a Printers eklemen kafi, herhangi br printer nesnesi tanıtmana lüzum yok.

Printer Listeleme ve Aktif ol Hangisi ise Seçili Konuma Getirme

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Şimdi Liste ListBox'a aktarılacak
  ListBox1.Items     := printer.Printers;
  // Şimdi aktif yazıcı ListBox'ta seçili olacak
  ListBox1.ItemIndex := printer.PrinterIndex;
end;
- Bu yukardaki button1'e bastığında olacak olan, printer listen ListBox1'e listelenecek ve hangisi default yazıcın ise seçili hal alacak.

- Sen bundan sonra dilediğin yazıcıyı mouse ile seç ve aşağıdaki button2'ye bas.

Printer ayarını, Seçilmiş ListBox1 item nosu ile değiştirme, yani yeni yazıcı seçimi yaptırma

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
begin
  // Şimdi aktif yazıcı ListBox'ta yeni seçtiğinle değişecek
  printer.PrinterIndex := ListBox1.ItemIndex;
end;
- Şu andan itibaren hangi yazıcı seçili iken button2'ye basarsan o yazıcı aktifleşecek ve yazıcıya gönderme işlemin o yazıcıya olacak.
Resim
Resim ....Resim
kayipgemi
Üye
Mesajlar: 88
Kayıt: 14 Kas 2005 03:07

Mesaj gönderen kayipgemi »

kardeş seni de yorum ama sağolasın, Allah razı olsun sağol .. emeğine yüreğine sağlık teşekkür ederim.
Cevapla