[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

[WIN32OLE]: Using Events

Steve Tuckner

7/7/2003 10:16:00 PM

Hello all,

I am trying to use Win32OLE to control a windows printer driver that
will be used to capture the printer output from applications to create
TIFF files. Below is my long winded explanation of what I am trying to
do. Any ideas at all would be welcome.

Thanks,

Steve Tuckner


Using the nifty Simple OLE browser from the WIN32OLE web page, I was
able to learn that this driver has three "interfaces" to play with.

They are:

BiPrnDrv
Abort
AboutBox
EndDoc
--------------------------- (what EndDoc output looks like)
Class BiPrnDrv
GUID : {E5B71FF3-4946-4DCC-863E-F16B8F864A66}
PROGID : BIPRNDRV.BiPrnDrvCtrl.1
DESCRIPTION : Black Ice Message Capture Control

Event FUNC VOID EndDoc
Dispatch ID : 3
DESCRIPTION :
arg1 - BSTR GroupFileName []

Event Interface : _DBiPrnDrvEvents
-----------------------------
InitCapture
StarDoc
StartPage
_DBiPrnDrv
AboutBox
GetIDsOfNames
GetTypeInfo
GetTypeInfoCount
InitCapture
Invoke
PrinterName
----------------------------- (What PrinterName entry looks like)
Dispatch _DBiPrnDrv
GUID : {8FE2BEA5-0F7F-4758-B6A4-68F86C74AA2D}
PROGID :
DESCRIPTION : Dispatch interface for BiPrnDrv Control


DISPATCH BSTR PrinterName
-----------------------------
UseCopyData
_DBiPrnDrvEvents
Abort
EndDoc
----------------------------- (What EndDoc looks like)
Dispatch _DBiPrnDrvEvents
GUID : {68E14ECB-14D9-4C9D-9470-C05348FED4CC}
PROGID :
DESCRIPTION : Event interface for BiPrnDrv Control

FUNC VOID EndDoc
Dispatch ID : 3
DESCRIPTION :
arg1 - BSTR GroupFileName []
-----------------------------
EndPage
GetIDsOfNames
GetTypeInfo
GetTypeInfoCount
Invoke
StartDoc
StartPage


Below is my code to try and get the printing events to be noticed by me.
They have very little doc (the vendor I got it from on the interface,
but do have sample code in VB and Delphi. Even so I have not be able to
get it to work. I can get the AboutBox to come up so that much works.
Below is my Ruby code and below that is the example VB code. I don't
know much about OLE but I have done some scripting of Outlook. I am
completely new to OLE events. Any ideas at all would be welcome on where
I should go from here (aside from talking to the vendor I acquired this
driver from who has probably never heard of Ruby before). I also tried
setting the printer name but that seemed to have no effect. I don't
understand the difference between the first two interfaces or how it was
even possible to set the PrinterName against the first interface when it
is part of the second.

-----------------------------------------------------------------------
(My ruby code)
require "win32ole"

printer = WIN32OLE.new("BIPRNDRV.BiPrnDrvCtrl.1")

ev = WIN32OLE_EVENT.new(printer, "_DBiPrnDrvEvents")
ev.on_event {|*args| print "default handler\n"}
ev.on_event("StartDoc") { print "in start doc\n"}
ev.on_event("StartPage") {|page_num| print "printing page
#{page_num}\n"}
ev.on_event("EndDoc") { print "in end doc\n"}
ev.on_event("EndPage") { print "in end page\n"}

while true
WIN32OLE_EVENT.message_loop
end


-----------------------------------------------------------------------
(VB sample code)

VERSION 5.00
Object = "{6ADA10EC-D372-4FE7-863C-BA84E3B89F76}#1.0#0"; "BIPRNDRV.OCX"
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
Begin VB.Form Form1
BorderStyle = 3 'Fixed Dialog
Caption = "Message capture sample"
ClientHeight = 3195
ClientLeft = 45
ClientTop = 330
ClientWidth = 4680
Icon = "BiCapture.frx":0000
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 3195
ScaleWidth = 4680
ShowInTaskbar = 0 'False
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Exit
Cancel = -1 'True
Caption = "E&xit"
Height = 375
Left = 1320
TabIndex = 5
Top = 2640
Width = 1815
End
Begin VB.ListBox List1
Height = 1425
ItemData = "BiCapture.frx":030A
Left = 120
List = "BiCapture.frx":030C
TabIndex = 4
Top = 960
Width = 4455
End
Begin MSComDlg.CommonDialog CommonDialog1
Left = 120
Top = 2640
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin VB.Frame Frame1
Caption = "Current Printer"
Height = 735
Left = 120
TabIndex = 1
Top = 120
Width = 4455
Begin VB.CommandButton ChangePrinter
Caption = "Change Printer"
Height = 375
Left = 3000
TabIndex = 2
Top = 240
Width = 1215
End
Begin VB.Label CurrentPrinter
Height = 255
Left = 240
TabIndex = 3
Top = 360
Width = 2535
End
End
Begin BIPRNDRVLib.BiPrnDrv BiPrnDrv1
Height = 615
Left = 3960
TabIndex = 0
Top = 2520
Width = 615
_Version = 65536
_ExtentX = 1085
_ExtentY = 1085
_StockProps = 0
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False

Private Sub BiPrnDrv1_EndDoc(ByVal GroupFileName As String)
List1.AddItem "EndDoc message was received."
List1.AddItem "The Group File is: " & GroupFileName
List1.TopIndex = List1.ListCount - 1
End Sub

Private Sub BiPrnDrv1_EndPage(ByVal ImageFileName As String)
List1.AddItem "EndPage message was received."
List1.AddItem "The Image File is:" & ImageFileName
List1.TopIndex = List1.ListCount - 1
End Sub

Private Sub BiPrnDrv1_StarDoc(ByVal GroupFileName As String)
List1.AddItem "StartDoc message was received."
List1.AddItem "The Group File is: " & GroupFileName
List1.TopIndex = List1.ListCount - 1
End Sub

Private Sub BiPrnDrv1_StartPage(ByVal PageNumber As Long)
List1.AddItem "StartPage message was received."
List1.AddItem "The current page number is: " & Str(PageNumber)
List1.TopIndex = List1.ListCount - 1
End Sub

Private Sub ChangePrinter_Click()
CommonDialog1.ShowPrinter
BiPrnDrv1.PrinterName = Printer.DeviceName
CurrentPrinter.Caption = Printer.DeviceName
List1.AddItem "Please print with the " & BiPrnDrv1.PrinterName & "
printer."
End Sub

Private Sub Exit_Click()
Unload Form1
End Sub

Private Sub Form_Load()
BiPrnDrv1.PrinterName = "Black Ice Color"
CurrentPrinter.Caption = "Black Ice Color"
List1.AddItem "Please print with the " & BiPrnDrv1.PrinterName & "
printer."
End Sub