|
|
||||||
|
#1
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
"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
|
|
|
|
|
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
|