25. oktober 2002 - 13:34Der er
20 kommentarer og 1 løsning
Printer meddelse
Hej
Jeg har lavet en formular der henter data fra en anden database. Hvis der er oprettet en nypost skal der udskrives en rapport automatisk. For ikke brugeren skal forstyrres af meddelsen om at der udprintes har jeg forsøgt denne kode.
DoCmd.Echo false DoCmd.OpenReport "repLabel", acViewNormal DoCmd.Echo True Men meddelsen kommer stadig omend ganske kort.
Ja lidt for den køre hele tiden dvs. hveranden minut udskrives der hvilket medføre at skærmen blinker mens de arbejder. Men hvis ikke det kan lade sig gøre så er den jo ikke længer.
Er det windows eller Access der sender den besked, mit gæt efter at jeg har tænkt lidt over det er, window.
Sounds strange that you have to print a report every couple of minutes without someone haveing to pick them up and look at them. You could send them via a mail fro printing later!
(Q) How can I hide the "Printing" dialog that comes up when a report is sent of to a printer?
(A) The Printing dialog is an internal Access dialog, and as such, cannot be hidden directly from code.
However, using a form's Timer event, we can minimize the dialog window moments after it comes up. This way, the window cannot be restored and it automatically destroys itself once the print job is completed.
Note that the dialog might be visible for the amount of time specified in the form's TimerInterval property, and the time it takes Access to run this code.
The use of Timer event is crucial here since this is the only normal means of running any code when a modal window is displayed in Access.
Create a form (that you can open in Hidden mode) and set it's Timer property to 300. The OnTimer event will read as
Private Sub Form_Timer() Call sWatchAccess(Application.hWndAccessApp) End SubNow, from the form which has the Print Report button, put code similar to this
Private Sub Command0_Click() On Error Resume Next DoCmd.OpenForm "Form2" DoEvents: DoEvents: DoEvents DoCmd.OpenReport "Sales by Category", acViewNormal DoCmd.Close acForm, "Form2" End Subwhere Form2 is the hidden form with the Timer event.
'************* Code Start ************* Private Declare Function apiGetClassName Lib "user32" _ Alias "GetClassNameA" _ (ByVal hWnd As Long, _ ByVal lpClassname As String, _ ByVal nMaxCount As Long) _ As Long
Private Declare Function apiGetWindowText Lib "user32" _ Alias "GetWindowTextA" _ (ByVal hWnd As Long, _ ByVal lpString As String, _ ByVal aint As Long) _ As Long
Private Declare Function apiGetLastActivePopup Lib "user32" _ Alias "GetLastActivePopup" _ (ByVal hWndOwnder As Long) _ As Long
Private Declare Function apiShowWindow Lib "user32" _ Alias "ShowWindow" _ (ByVal hWnd As Long, _ ByVal nCmdShow As Long) _ As Long
Sub sWatchAccess(ByVal hWndApp As Long) 'Required: hWndAccessApp (Application handle) ' On Error GoTo Err_Handler Dim lnghWndChild As Long Dim strCaption As String Dim strClass As String Dim lngRet As Long
'Get the last active popup in hWndApp instance lnghWndChild = apiGetLastActivePopup(hWndApp) strClass = fGetClassName(lnghWndChild) strCaption = fGetCaption(lnghWndChild) 'is this the modal window? If strClass = "#32770" And Trim(strCaption) = "Printing" Then lngRet = apiShowWindow(lnghWndChild, SW_SHOWMINNOACTIVE) End If
Exit_Here: Exit Sub Err_Handler: MsgBox "Error #: " & Err.Number & vbCrLf & Err.Description, _ vbCritical + vbOKOnly, "sWatchAccess-Runtime Error" Resume Exit_Here End Sub
Private Function fGetClassName(ByVal hWnd As Long) As String Dim strBuffer As String Dim lngRet As Long strBuffer = String$(32, 0) lngRet = apiGetClassName(hWnd, strBuffer, Len(strBuffer)) If lngRet > 0 Then fGetClassName = Left$(strBuffer, lngRet) End If End Function
Private Function fGetCaption(ByVal hWnd As Long) As String Dim strBuffer As String Dim lngRet As Long strBuffer = String$(MAX_LEN, 0) lngRet = apiGetWindowText(hWnd, strBuffer, Len(strBuffer)) If lngRet > 0 Then fGetCaption = Left$(strBuffer, lngRet) End If End Function '************ Code End ***************
Det drejer sig om en brovægt hvor der køre en heldel lastbiler af og på. rapporten der skal udskrives er er labels der sættes på de prøver der udtages fra lasten, når lasten er indvejet indtastes der data manuelt ind.
det er IKKE windows der viser "printing" dialogen, det er Access eller en dårlig printer driver. Men da printeren må være indkøbt til de mange udskrifter er det nok ikke en dårlig driver.
Lav dit eget objekt som kan skrive til printeren og sørge for formateringen. det er ikke så svært!
kenneth... You are right in saying that it is access but it is NOT a bad printer driver! Good suggestion you make, in making your own object, perhaps you can make an example as it isnt so difficult?
terry... Mht. til printer driveren findes der drivere, der insisterer på, at komme med en info-dialog når de udskriver, så det kan godt være en printer driver der forårsager det. Men det kan man se på dialogen (som jeg ikke kan se).
phnielsen... Du kan lave et objekt i VB6, der modtager et recordset som det så udskriver en rapport fra. I VB6 kan du lave rapporter nogenlunde som i Access (desværre ikke så let/avanceret som i Access). Denne rapport kan så udskrives direkte. Det er dog en lang vej at gå, for at få skærmen til at holde op med at flimre, og da jeg ikke kender dit udskrifts format, ved jeg ikke om det overhovedet kan lade sig gøre. Så jeg synes du skal leve med det (eller få brugerne til det).
This IS standard message and as one of my answers says, can NOT be hidden only minimized. Pitty you cant get it to work though. You should be able to share the points between us.
Thanks
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.