Tek tek yazdırma ama nasıl?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Tek tek yazdırma ama nasıl?
Selamlar,
QuickReport ile çalışıyorum.
Bir veritabanından kayıtları tek tek yazdırmak istiyorum.
Tek tekten kastettiğim şu:
kayıt gönderiliyor, yazma işlemi tamamlandıktan (yazıcıdan kağıt çıktıktan) sonra ikinci kayıt gönderilecek.
Böylece her kayıdın yazıldığından emin olabileceğim ve o kayıt üzerinde bazı editler yapıp sıradakine geçeceğim.
AfterPrint olayında boolean bir değişkeni kullanarak olmuyor. Sırayla tüm kayıtları yazıcı kuyruğuna gönderiyor. Ben yazıldığından emin olmalıyım. Malum elektrik kesilir ve yazılmaz ise kayıtlarda yazıldığına dair düzenlemeler yapıldığından yazıcı kuyruğu da silinirse bir daha o kayıtlara erişip yazdırmak mümkün olmayacak. Denize karışan dere hesabı. Karıştı iş bitti.
QuickReport topu sisteme atıp yazdırdım diye geliyor. bu çözüm değil.
Umarım anlatabilmişimdir.
QuickReport ile çalışıyorum.
Bir veritabanından kayıtları tek tek yazdırmak istiyorum.
Tek tekten kastettiğim şu:
kayıt gönderiliyor, yazma işlemi tamamlandıktan (yazıcıdan kağıt çıktıktan) sonra ikinci kayıt gönderilecek.
Böylece her kayıdın yazıldığından emin olabileceğim ve o kayıt üzerinde bazı editler yapıp sıradakine geçeceğim.
AfterPrint olayında boolean bir değişkeni kullanarak olmuyor. Sırayla tüm kayıtları yazıcı kuyruğuna gönderiyor. Ben yazıldığından emin olmalıyım. Malum elektrik kesilir ve yazılmaz ise kayıtlarda yazıldığına dair düzenlemeler yapıldığından yazıcı kuyruğu da silinirse bir daha o kayıtlara erişip yazdırmak mümkün olmayacak. Denize karışan dere hesabı. Karıştı iş bitti.
QuickReport topu sisteme atıp yazdırdım diye geliyor. bu çözüm değil.
Umarım anlatabilmişimdir.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
Selamlar,
İki yöntem önerebilirim,
1. Yöntem, Windows'un Printer Settinglerinde (Spool'u kaldırıp, Print Directly To The Printer) seçeneğine çevirmen, Böylelikle Windows Spool etmeden doğrudan printer'a yönlendirecektir. Ancak Printer alır kağıt sıkışır veya tam basım anında elektrik giderse ne olur denemek lazım.
2. Yöntem ise, Her gönderilen dokumana bir Unique ID verilip daha sonra printer API'lerinden yararlanılarak Spool'dan yazıcıya gidip gitmediğine dair sorgulama ile izlenip ona göre printe devam edilebilir.
Kolay Gelsin.
İki yöntem önerebilirim,
1. Yöntem, Windows'un Printer Settinglerinde (Spool'u kaldırıp, Print Directly To The Printer) seçeneğine çevirmen, Böylelikle Windows Spool etmeden doğrudan printer'a yönlendirecektir. Ancak Printer alır kağıt sıkışır veya tam basım anında elektrik giderse ne olur denemek lazım.
2. Yöntem ise, Her gönderilen dokumana bir Unique ID verilip daha sonra printer API'lerinden yararlanılarak Spool'dan yazıcıya gidip gitmediğine dair sorgulama ile izlenip ona göre printe devam edilebilir.
Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
S.A.
Farklı bir yöntem olarak şöle bişi yapılabilirmi (why not?)
çıktısını alacağın kayıtlar için bir döngü kurarsın.
1.kayıt için quickrepi hazırlarsın. preview yerine print dersin.
daha sonra çıktı alındımı gibisinden kullanıcıya birsoru.
eğer çıktı tamamsa 1.kaydın çıktısı tamam diye işaret koyarsın.
bir sonraki kayda geç.
döngünün başına git.
işlem tamam.
bu yöntemin tek bir dezavantajı varç oda kullanıcıya her kayıt için soru sorması.
kolay gelsin.
Farklı bir yöntem olarak şöle bişi yapılabilirmi (why not?)
çıktısını alacağın kayıtlar için bir döngü kurarsın.
1.kayıt için quickrepi hazırlarsın. preview yerine print dersin.
daha sonra çıktı alındımı gibisinden kullanıcıya birsoru.
eğer çıktı tamamsa 1.kaydın çıktısı tamam diye işaret koyarsın.
bir sonraki kayda geç.
döngünün başına git.
işlem tamam.
bu yöntemin tek bir dezavantajı varç oda kullanıcıya her kayıt için soru sorması.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
ilginiz için teşekkürler.
QuickReport un derinlerinde bir yerlerde böyle bir şey varmıdır diye düşünmüştüm ama yok galiba.
Kullanıcıya tek tek onaylatmak binlerce kayıt için pek kullanışlı olmaz kanaatindeyim.
tekrar teşekkürler ama bu aşılması gereken ve her programcıya gerekli bir problemdi.
QuickReport un derinlerinde bir yerlerde böyle bir şey varmıdır diye düşünmüştüm ama yok galiba.
Kullanıcıya tek tek onaylatmak binlerce kayıt için pek kullanışlı olmaz kanaatindeyim.
tekrar teşekkürler ama bu aşılması gereken ve her programcıya gerekli bir problemdi.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
aşağıdaki vb kodu işinize yarayabilir.
eğer program win98 de çalışacaksa http://www.swissdelphicenter.ch/torry/s ... php?id=263 burda örnek delphi kodu var.
kolay gelsin.
Deleting,Error,Offline,Out of paper,Paused,Printed,Printing,Spooling
eğer program win98 de çalışacaksa http://www.swissdelphicenter.ch/torry/s ... php?id=263 burda örnek delphi kodu var.
kolay gelsin.
Deleting,Error,Offline,Out of paper,Paused,Printed,Printing,Spooling
Kod: Tümünü seç
detect printer status "out of paper"
hello everyone,
attached you can find coding from my project. from this coding, how do i detect the status "out of paper" and programmed it to call the number that i've choosen.hope someone can help me as this is very urgent to me. i really need a help.
Option Explicit
Const FORM_TITLE = "Printer Queue"
Private strPrinterName As String
Private Sub LoadPrintersList()
Dim prn As Printer
cboPrinters.Clear
For Each prn In Printers
cboPrinters.AddItem prn.DeviceName
Next
End Sub
Private Sub ShowStatus(strText As String)
StatusBar.SimpleText = " " & strText
End Sub
Private Function CheckStatus(ByVal strStatus As String, intStatus As Long, _
intStatusFlag As Long, strStatusString As String) As String
If intStatus And intStatusFlag Then
If Trim$(strStatus) <> "" Then strStatus = strStatus & " - "
strStatus = strStatus & strStatusString
End If
CheckStatus = strStatus
End Function
Private Sub RefreshPrinterQueue()
Dim hPrinter As Long
Dim lngJobsFirstJob As Long, lngJobsEnumJob As Long, lngJobsLevel As Long
Dim lngJobsNeeded As Long, lngJobsReturned As Long
Dim byteJobsBuffer() As Byte, udtJobInfo1() As JOB_INFO_1
Dim lngJobsCount As Long
Dim lngResult As Long
Dim byteBuffer(64) As Byte
Dim strDocument As String, strStatus As String, strOwnerName As String
Dim itmX As ListItem
ShowStatus "Refreshing ..."
lvPrintQueue.ListItems.Clear
Me.Caption = FORM_TITLE & " - " & strPrinterName
' Disable timer
Timer.Enabled = False
lngResult = OpenPrinter(strPrinterName, hPrinter, ByVal vbNullString)
lngJobsFirstJob = 0 ' zero-based position within the print queue of the first print job to enumerate
lngJobsEnumJob = 99 ' total number of print jobs to enumerate
lngJobsLevel = 1 ' Specifies whether the function should use JOB_INFO_1
' or JOB_INFO_2 structures to store data for the enumerated jobs
lngResult = EnumJobs(hPrinter, lngJobsFirstJob, lngJobsEnumJob, _
lngJobsLevel, ByVal vbNullString, 0, _
lngJobsNeeded, lngJobsReturned)
' Check out the number of jobs hypothetically will be returned
If lngJobsNeeded > 0 Then
ReDim byteJobsBuffer(lngJobsNeeded - 1)
ReDim udtJobInfo1(lngJobsNeeded - 1)
lngResult = EnumJobs(hPrinter, lngJobsFirstJob, lngJobsEnumJob, _
lngJobsLevel, byteJobsBuffer(0), lngJobsNeeded, _
lngJobsNeeded, lngJobsReturned)
' Check out the number of jobs returned
If lngJobsReturned > 0 Then
MoveMemory udtJobInfo1(0), byteJobsBuffer(0), Len(udtJobInfo1(0)) * lngJobsReturned
For lngJobsCount = 0 To lngJobsReturned - 1
With udtJobInfo1(lngJobsCount)
' Get the document name
lngResult = lstrcpy(byteBuffer(0), ByVal .pDocument)
strDocument = StrConv(byteBuffer(), vbUnicode)
' Document name has been returned as null terminated-string
strDocument = Left$(strDocument, InStr(strDocument, vbNullChar) - 1)
' Get the document's owner name
lngResult = lstrcpy(byteBuffer(0), ByVal .pUserName)
strOwnerName = StrConv(byteBuffer(), vbUnicode)
' Document's owner name has been returned as null-terminated string
strOwnerName = Left$(strOwnerName, InStr(strOwnerName, vbNullChar) - 1)
' Translate status
strStatus = ""
strStatus = CheckStatus(strStatus, .Status, JOB_STATUS_DELETING, "Deleting")
strStatus = CheckStatus(strStatus, .Status, JOB_STATUS_ERROR, "Error")
strStatus = CheckStatus(strStatus, .Status, JOB_STATUS_OFFLINE, "Offline")
strStatus = CheckStatus(strStatus, .Status, JOB_STATUS_PAPEROUT, "Out of paper")
strStatus = CheckStatus(strStatus, .Status, JOB_STATUS_PAUSED, "Paused")
strStatus = CheckStatus(strStatus, .Status, JOB_STATUS_PRINTED, "Printed")
strStatus = CheckStatus(strStatus, .Status, JOB_STATUS_PRINTING, "Printing")
strStatus = CheckStatus(strStatus, .Status, JOB_STATUS_SPOOLING, "Spooling")
' Show it in listview
Set itmX = lvPrintQueue.ListItems.Add(, "JOB_ID_" & .JobId, strDocument)
itmX.SubItems(1) = strStatus
itmX.SubItems(2) = strOwnerName
itmX.SubItems(3) = .PagesPrinted & " of " & (.TotalPages + .PagesPrinted)
itmX.SubItems(4) = ""
End With
Next lngJobsCount
Else
' number of jobs returned = 0 (no jobs)
lngJobsCount = 0
End If
Else
' number of jobs = 0 (no jobs)
lngJobsCount = 0
End If
lngResult = ClosePrinter(hPrinter)
' Enable timer
Timer.Enabled = True
ShowStatus lngJobsCount & " documents"
End Sub
Private Sub cboPrinters_Click()
strPrinterName = cboPrinters.Text
End Sub
Private Sub cmdRefresh_Click()
RefreshPrinterQueue
End Sub
Private Sub Form_Load()
' Initialize timer
Call txtInterval_Change
LoadPrintersList
Dim Index As Long
' Try to select default printer in the combobox
Index = GetComboTextIndex(cboPrinters, Printer.DeviceName)
If Index >= 0 Then SetComboIndex cboPrinters, Index
End Sub
Private Sub Form_Resize()
On Error Resume Next
If Me.WindowState <> vbMinimized Then
lvPrintQueue.Width = Me.ScaleWidth - lvPrintQueue.Left * 2
lvPrintQueue.Height = Me.ScaleHeight - lvPrintQueue.Top _
- lvPrintQueue.Left - StatusBar.Height
End If
End Sub
Private Sub Timer_Timer()
RefreshPrinterQueue
End Sub
Private Sub txtInterval_Change()
Dim lngInterval As Long
lngInterval = Val(txtInterval.Text)
If lngInterval > 50 Then
' Set timer interval value
Timer.Interval = lngInterval
Timer.Enabled = True
Else
' Disable timer
Timer.Interval = 0
Timer.Enabled = False
End If
End sub
http://www.devcity.net/forums/topic.asp?tid=63826
Delphi kadar VB ile de ilgilenmişliğim vardı geçmişte.
Zaten kullanılan API ler ilgilendiriyor beni. Tabi kullanım şekilleri, giden gelen değişkenler vs.
MSDN yi karıştırmıştım. tanıdık API isimleri var kodun içerisinde.
Çok teşekkür ederim. Düşündüğünden fazla işime yarayacak.
Zaten kullanılan API ler ilgilendiriyor beni. Tabi kullanım şekilleri, giden gelen değişkenler vs.
MSDN yi karıştırmıştım. tanıdık API isimleri var kodun içerisinde.
Çok teşekkür ederim. Düşündüğünden fazla işime yarayacak.
... Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!
Mustafa Kemal Atatürk...
Mustafa Kemal Atatürk...
- sadettinpolat
- Moderator
- Mesajlar: 2131
- Kayıt: 07 Ara 2003 02:51
- Konum: Ankara
- İletişim:
rica ederim
http://www.devcity.net/forums/topic.asp?tid=68285
sitede dolaşırken gözüme çarptı
işinize yarayabilir.
http://www.devcity.net/forums/topic.asp?tid=68285
sitede dolaşırken gözüme çarptı
işinize yarayabilir.