Delphide Printer Server
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Delphide Printer Server
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.
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.
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.
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.
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
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
- 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.
- 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.
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
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
yanlız yukardaki kodlara göre
ş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
Kod: Tümünü seç
var
printer:TPrinter;
index:integer;
begin
printer:= TPrinter.Create;
printer.Printers;
ListBox1.Items:=printer.Printers;
index:=printer.PrinterIndex;
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ı
ş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
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
Hocam farklı bir dil mi konuşuyorum duygusuna kapılıyorum.



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

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



- 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
- 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
- Ş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.
- 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;
- 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;