hilpers


  hilpers > microsoft.* > microsoft.vb

 #1  
22.02.2010, 21:53
Lothar Geyer
Ich möchte einer Klasse, die in einer DLL liegt, den aktuellen Printer
verwenden. Eine Anweisung wie

Printer.CurrentX = eStartX * 56.7

bringt aber eine Fehlermeldung "Ungültige Verwendung einer Eigenschaft".

Was mache ich falsch bzw. wie macht man das richtig?

Lothar Geyer
 #2  
23.02.2010, 07:06
Peter Götz
Hallo Lothar,

> Ich möchte einer Klasse, die in einer DLL liegt, den aktuellen Printer
> verwenden. Eine Anweisung wie
>
> Printer.CurrentX = eStartX * 56.7
>
> bringt aber eine Fehlermeldung "Ungültige Verwendung einer Eigenschaft".
>
> Was mache ich falsch bzw. wie macht man das richtig?


Ohne genauere Infos zu Deinem konkreten Code kann
da nur spekulieren.

Hier mal ein Beispiel, das vielleicht einen Denkanstoss
bringt:

' Klassenmodul 'Class1'
Option Explicit

Private mPrinterObj As Printer

Public Property Get PrinterObj() As Printer
Set PrinterObj = mPrinterObj
End Property

Public Property Set PrinterObj(Value As Printer)
Set mPrinterObj = Value
End Property
' Ende Class1_____________________________

' Formmodul 'Form1'
Option Explicit

Public mC1 As Class1

Private Sub Form_Load()
Set mC1 = New Class1
Set mC1.PrinterObj = Printer
End Sub

Private Sub Form_Click()

mC1.PrinterObj.CurrentX = 20
mC1.PrinterObj.CurrentY = 25

Dim Msg As String

With Printer
Msg = .DeviceName & vbCrLf
Msg = Msg & "CurrentX: " & CStr(.CurrentX)
Msg = Msg & vbCrLf
Msg = Msg & "CurrentY: " & CStr(.CurrentY)
End With
MsgBox Msg, vbInformation

End Sub
' Ende Form1_____________________________


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
 #3  
23.02.2010, 08:00
Lothar Geyer
Hallo Peter,

so ähnlich habe ich das auch probiert, habe aber eine Fehlermeldung
bekommen von wegen "Öffentliche Klassen können nicht als private Objekt
oder Typen verwendet werden" oder so ähnlich. Ich werde das nochmal
unter Verwendung Deines Beispiels ändern - und falls ich den Fehler
wieder bekomme, kann ich den genauen Wortlaut posten.

Lothar Geyer

Am 23.02.2010 09:06, schrieb Peter Götz:
[..]
 #4  
23.02.2010, 09:54
Helmut Meukel
Hallo Lothar, hallo Peter,

ich habe jahrelang das Printer-Objekt aus einer Klasse in einer DLL
aufgerufen ohne das Printer-Objekt an die DLL zu übergeben.
Das funktionierte in den Programmen immer problemlos.
2 mögliche Unterschiede zu Lothars Szenario:
1) Es wurde immer der Standarddrucker verwendet, also im Programm
nicht ein bestimmter Drucker ausgewählt. Wenn der Benutzer statt
Partienkarten mal Listen ausdrucken wollte, musste er das Papier wechseln.
(nicht meine, sondern die Entscheidung des Kunden).
2) die DLL war eine Utility-DLL, ihrer Klassen als 6 = Global Multiuse
deklariert.

mfg.

Helmut.

"Lothar Geyer" <Lothar.Geyer> schrieb im Newsbeitrag
news:7tu1
[..]
 #5  
23.02.2010, 10:03
Schmidt
"Lothar Geyer" <Lothar.Geyer> schrieb im Newsbeitrag
news:7tu1

> so ähnlich habe ich das auch probiert, habe aber
> eine Fehlermeldung bekommen von wegen "Öffentliche
> Klassen können nicht als private Objekt
> oder Typen verwendet werden" oder so ähnlich.


Falls Du den Printer in einer externen Dll-Klasse
benutzen möchtest, dann funktioniert das mit dem
"Weiterreichen" über "externe Class-Methoden"
IMO nur "As Object", gefolgt von einem internen Cast:

Public Sub DllClassUsePrinter(CurPrinter As Object)
Set Printer = CurPrinter
... 'jetzt wie gewohnt das Printer-Objekt direkt benutzen

Olaf
 #6  
03.03.2010, 06:13
Lothar Geyer
Nachdem ich die Arbeit an diesem Problem unterbrechen musste, habe ich
jetzt weiter getestet. Hier der Code (beide Klassen sind in einer DLL):

In einer Form:

With myEtikettenTraeger
.positioniere inReihe, inSpalte
.druckeEtikett myPartner
End With

In clsEtikettenTraeger:

Public Sub druckeEtikett(Partner As clsPartner)

If myEtikett Is Nothing Then
Set myEtikett = New clsEtikett
myEtikett.setDruckBereich eAbLeft, eAbTop, eAbWidth, eAbHeight
End If

myEtikett.drucken Partner

Exit Sub

End Sub

In Klasse clsEtikett:

Private ePrinter As Printer

Public Sub drucken(Partner As clsPartner)
Dim DLine() As String

ReDim DLine(10)
Partner.AdresseBrief DLine, True, False, ""

Printer.CurrentX = eStartX
Printer.CurrentY = eStartY
For ii = 1 To UBound(DLine)
Printer.CurrentX = eStartX * 56.7
Printer.Print DLine(ii)
Next ii

Exit Sub

End Sub

Die Klassen sind alle MultiUse (5).

Fehlermeldung:
Ungültige Verwendung einer Eigenschaft.

Wenn ich den Drucker in clsEtikettenTraeger übergebe, funktionierts:

in clsEtikettentraeger:

Private ePrinter As Printer

Public Sub druckeEtikett(Partner As clsPartner)

If myEtikett Is Nothing Then
Set myEtikett = New clsEtikett
Set myEtikett.Printer = Printer
myEtikett.setDruckBereich eAbLeft, eAbTop, eAbWidth, eAbHeight
End If

myEtikett.drucken Partner

Exit Sub

End Sub

Und die zusätzliche Property in clsEtikett:

Friend Property Set Printer(pPrinter As Printer)
Set ePrinter = pPrinter
End Property

Das funktioniert zwar, aber warum?

Lothar Geyer

Am 22.02.2010 23:53, schrieb Lothar Geyer:
[..]
Ähnliche Themen
Zeilenumbruch beim Printer-Objekt

Hallo zusammen, ich benutze das Printer Objekt in VBA mit Hilfe einer DLL. Mein Code zum Drucken des Inhaltes einer Textbox sieht wie folgt aus: With...

Printer-Objekt

Hallo, ich möchte den Inhalt einer Textbox ausdrucken. Mein Printer-Objekt kennt jedoch die Methode ".print" nicht. Woran liegt das? Kann mir da jemand weiterhelfen? Ich...

Printer-Objekt in VBA nutzbar?

Hallo zusammen, ich möchte die Objekte Printers und Printer in _VBA_ nutzen. Geht das (z.B. durch einen Verweis), oder muss ich doch VB verwenden? Danke im Voraus...

Drucken mit dem Printer-Objekt

Hallo, in meiner Anwendung benutze ich Printer-Objekt für Drucken der Graphik-Informationen. Aber das Ausdrucken passiert erst dann, wenn ich die Anwendung beendet wird....


Alle Zeitangaben in WEZ. Es ist jetzt 18:54 Uhr. | Privacy Policy