Newsgroup: it.comp.appl.notes-domino
Titolo: Oggetto Printer in LS (Tentativo)

Ciao a tutti.
Mi farebbe comodo poter disporre nella mia applicazione Notes (in
LotusScript), di un oggetto Printer simile a quello di Visual Basic
(ovviamente molto più semplificato). Sto cercando di costruire una classe
LotusScript che faccia questo.
Purtroppo sono un principiante nella programmazione ad oggetti e nell'uso
delle API di Windows e non riesco a far funzionare correttamente la mia
classe.
Qualcuno potrebbe darmi qualche dritta, per favore?
Posto qui di seguito il mio codice.
Ciao a tutti
'DECLARATIONS
Const CCDEVICENAME = 32
Const CCFORMNAME = 32
Public Type DEVMODE
     dmDeviceName As String * CCDEVICENAME
     dmSpecVersion As Integer
     dmDriverVersion As Integer
     dmSize As Integer
     dmDriverExtra As Integer
     dmFields As Long
     dmOrientation As Integer
     dmPaperSize As Integer
     dmPaperLength As Integer
     dmPaperWidth As Integer
     dmScale As Integer
     dmCopies As Integer
     dmDefaultSource As Integer
     dmPrintQuality As Integer
     dmColor As Integer
     dmDuplex As Integer
     dmYResolution As Integer
     dmTTOption As Integer
     dmCollate As Integer
     dmFormName As String * CCFORMNAME
     dmUnusedPadding As Integer
     dmBitsPerPel As Integer
     dmPelsWidth As Long
     dmPelsHeight As Long
     dmDisplayFlags As Long
     dmDisplayFrequency As Long
End Type
Public Type DOCINFO
     cbSize As Integer
     lpszDocname As Long
     lpszOutPut As Long
End Type
'Dichiaro le API Windows
Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA"
(Byval lpAppName As String, Byval lpKeyName As String, Byval lpDefault As
String, Byval lpReturnedString As String, Byval nSize As Long) As Long
Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (Byval lpDriverName
As String, Byval lpDeviceName As String, Byval lpOutput As String,
lpInitData As DEVMODE) As Long
Declare Function DeleteDC Lib "gdi32" (Byval hdc As Long) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As
String, Byval lpString2 As String) As Long
Declare Function StartDoc Lib "gdi32" Alias "StartDocA" (Byval hdc As Long,
lpdi As DOCINFO) As Long
Declare Function StartPage Lib "gdi32" (Byval hdc As Long) As Long
Declare Function EndPage Lib "gdi32" (Byval hdc As Long) As Long
Declare Function EndDoc Lib "gdi32" (Byval hdc As Long) As Long
Declare Function TextOut Lib "gdi32" Alias "TextOutA" (Byval hdc As Long,
Byval x As Long, Byval y As Long, Byval lpString As String, Byval nCount As
Long) As Long
Declare Function GetDC Lib "user32" (Byval hWnd As Long) As Long
'Creo la classe Printer
Class Printer
     Public IsError As Variant
     Private Devicename As String
     Private Port As String
     Private Driver As String
     Private StrDev As DEVMODE
     Private HDC As Long
     Private MyDoc As DOCINFO
 'Costruttore
    Sub New()
          Dim Stampante As String
          Dim MyDocumentName As String
          Stampante = Space$(128)
 'Becco la stampante di sistema
         nPrinter = GetProfileString("windows", "device", ",,,", Stampante,
Len(Stampante))
          If nprinter < 1 Then
               Me.IsError=True
               Exit Sub
          End If
          nDevice = Instr(Stampante$, ",")
          nDriver = Instr(nDevice + 2, Stampante$, ",")
          Me.Devicename = Mid$(Stampante$, 1, nDevice - 1)
          Me.Driver = Mid$(Stampante$, nDevice + 1, nDriver -  nDevice - 1)
          Me.Port =  Mid$(Stampante$, nDriver + 1)
 'Inizializzo il Device context
         Me.HDC = CreateDC(Me.Driver, Me.DeviceName, Me.Port, Me.StrDev)
          MyDocumentName = "Doc"
          Me.MyDoc.cbSize = Len(Me.MyDoc)
          Me.MyDoc.lpszDocname = lstrcpy(MyDocumentname, MyDocumentname)
          Me.MyDoc.lpszOutPut = 0&
          x% = StartDoc(Me.HDC, Me.MyDoc)
          x% = StartPage(Me.HDC)
     End Sub
 'Distruttore
    Sub Delete()
          Me.HDC = DeleteDC(Me.HDC)
     End Sub
 'Metodo di stampa
    Sub Print(Arg As String)
          x% = TextOut(Me.HDC, 0, 0, Arg, Len(Arg))
     End Sub
     Sub EndDoc()
          x% = EndDoc(Me.HDC)
     End Sub
     Sub EndPage()
          x% = EndPage(Me.HDC)
     End Sub
'Funzioni che restituiscono i riferimenti alla stampante selezionata
     Function GetPort() As String
          GetPort = Me.Port
     End Function
     Function GetDeviceName() As String
          GetDeviceName = Me.DeviceName
     End Function
     Function GetDriverName() As String
          GetDriverName = Me.Driver
     End Function
End Class
-- 
Posted from  [212.210.32.2] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Molto interessante.
Vedo di trovare il tempo di darci un occhio.
Ma che problemi esperisci?

 Ma che problemi esperisci?
Ciao Juda,
rispondo solo oggi per ragioni lavorative.
Allora: quando chiamo la classe tutto viene regolarmente inizializzato, punto
alla stampante corretta, inizializzo il Device Context, ma quando chiamo il
metodo Print ed il relativo EndDoc non succede assolutamente nulla....
Ovviamente eseguendo da Visual Basic
printer.print("Ciao")
printer.enddoc
tutto va a meraviglia... mi fa una rabbia...  :-)))))))
Adesso forse riuscirò a ritagliare qualche ora per continuare a studiarci sopra
se trovo una soluzione la posterò volentieri.
Ovviamente qualsiasi contributo in merito è assolutamente gradito... :-)
Ciao


Ma hai usato la GetProfileString invece della EnumPrinters per questioni di
casting dei parametri?
Altra domanda, visto che non ho capito: perché c'è bisogno di dare un alias
ad alcune chiamate?
PS Come detto precedentemente... hai pensato a Java?