| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Systemdrucker Parameter in VBA verarbeiten (1226 mal gelesen)
|
TomiProg Mitglied Technischer Zeichner

 Beiträge: 51 Registriert: 29.04.2004 WinNT4.0(SP6) + AutoCAD 14.01, P3/400MHz(gääähn),256MB,Graphtec KD4620, ATI 3D Rage Pro(8MB)
|
erstellt am: 19. Nov. 2004 12:34 <-- editieren / zitieren --> Unities abgeben:         
Hallo Leute. Gibt es eine Möglichkeit, Parameter wie etwa Papierambessungen oder Ausrichtung des Systemdruckers in VBA einzulesen? Folgendes habe ich vor: Wir haben einen HP-Laserdrucker im DIN-A 3 Format. Ein selbstgeschriebenes Druckertool für AutoCAD14 (VBA) regelt unter anderem die PCP-Zuordnung für die Strichstärken von unterschiedlichen Gewerken (hier Heizung, Lüftung, Sanitär). Man kann ja über Druck-/Plotkonfiguration auch auf die Einstellungen des Systemdruckers zugreifen. Kann man über VBA auch auf diese Einstellungen zugreifen? Wenn ja, wie? Mir würde ja schon genügen, wenn ich die Einstellungen nur auslesen kann, damit ich meinem VBA-Programm mitteilen kann, welches Papierformat zum Beispiel im Systemdrucker eingestellt ist. Viele Grüße ins Forum Tomi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FraG Mitglied
 Beiträge: 2 Registriert: 25.08.2004
|
erstellt am: 22. Nov. 2004 11:13 <-- editieren / zitieren --> Unities abgeben:          Nur für TomiProg
Hallo Tomi, probier mal das nachfolgende Beispiel. ###################################################
Global MarginLowerleft As Variant Global MarginUpperright As Variant Global insFaktor As Double Global PaperHeight As Double Global PaperWidth As Double Global PlotHeight As Double Global PlotWidth As Double Global LayoutInspoint(0 To 2) As Double Sub exampleplotsize()
'paperspace aktive ? If ThisDrawing.ActiveSpace = acModelSpace Then MsgBox "Paperspace is not active" Exit Sub End If 'check the scale ( mm or inch ) If ThisDrawing.ActiveLayout.PaperUnits = acInches Then insFaktor = 1 / 25.4 Else insFaktor = 1 End If 'Papersetting in mm ThisDrawing.ActiveLayout.PaperUnits = acMillimeters ThisDrawing.ActiveLayout.StandardScale = ac1_1 'the following line gets the paper size ThisDrawing.ActiveLayout.GetPaperSize PaperWidth, PaperHeight 'plot rotation plot_Rotation = ThisDrawing.ActiveLayout.PlotRotation 'printable area ThisDrawing.ActiveLayout.GetPaperMargins MarginLowerleft, MarginUpperright ' PlotWidth = (PaperWidth - (MarginUpperright(0) + MarginLowerleft(0))) * insFaktor PlotHeight = (PaperHeight - (MarginUpperright(1) + MarginLowerleft(1))) * insFaktor MsgBox PlotWidth & vbCrLf & PlotHeight End Sub ################################################################# Gruß FraG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TomiProg Mitglied Technischer Zeichner

 Beiträge: 51 Registriert: 29.04.2004 WinNT4.0(SP6) + AutoCAD 14.01, P3/400MHz(gääähn),256MB,Graphtec KD4620, ATI 3D Rage Pro(8MB)
|
erstellt am: 22. Nov. 2004 13:03 <-- editieren / zitieren --> Unities abgeben:         
Leider ist es nicht das, was ich gemeint habe. Wie der Drucker bzw. der Plotter von AutoCAD angesteuert wird, ist mir bekannt. Vielmehr beschäftigt mich die Frage, ob die Parameter auch vom Windows-Systemdrucker auslesbar sind. Mit Systemdrucker meinte ich nicht den von AutoCAD, sondern den von Windows selbst. Trotzdem Danke. Es sind in deiner Ausführung ein paar interessante Zeilen, die mein Programm besser und übersichtlicher machen könnten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JoeG Mitglied Systemadmin NX und Autocad
 
 Beiträge: 122 Registriert: 18.10.2002 Autocad 2000 und Win2000
|
erstellt am: 23. Nov. 2004 07:31 <-- editieren / zitieren --> Unities abgeben:          Nur für TomiProg
|
TomiProg Mitglied Technischer Zeichner

 Beiträge: 51 Registriert: 29.04.2004 WinNT4.0(SP6) + AutoCAD 14.01, P3/400MHz(gääähn),256MB,Graphtec KD4620, ATI 3D Rage Pro(8MB)
|
erstellt am: 23. Nov. 2004 11:24 <-- editieren / zitieren --> Unities abgeben:         
Ja Super. Da ist ja genau das dabei, was ich brauche (Tip 0410). Doch jetzt hab ich das Problem, dass es in VBA logischer weise nicht funzt. Mit Declare-Anweisungen habe ich sowieso Probleme, weil, ganz Ehrlich gesagt, ich keine Ahnung habe, wie und wo und mit was man Declare-Anweisungen erstellt. Im Prinzip brauche ich nur die vom Windows-Systemdrucker eingestellte Papiergröße (A3 oder A4) in meinem VBA-Code. Hier der benötigte Teil aus dem obigen Tip (VB-Tip): Option Explicit Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc _ As Long, ByVal nIndex As Long) As Long Const HORZSIZE As Long = &H4& Const VERTSIZE As Long = &H6& Private Sub GetPrinterInfo() Dim x As Long, pDc As Long pDc = Printer.hdc Debug.Print "Width in mm =" & GetDeviceCaps(pDc, HORZSIZE) Debug.Print "Height in mm=" & GetDeviceCaps(pDc, VERTSIZE) End Sub VBA erkennt die PRINTER-Methode nicht und ich weis nicht, ob sich das über Verweis oder so in VBA einbinden läßt. Wenn doch, wäre ich für jede Unterstützung dankbar.
Grüße Tomi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 23. Nov. 2004 19:17 <-- editieren / zitieren --> Unities abgeben:          Nur für TomiProg
Hi Tomi, schlechte Karten soweit ich weiss, wird das Printer-Object von VBA nicht unterstützt, sondern ist nur dem grossen Bruder VB bekannt. Keine Ahnung ob und wie man das umschiffen könnte und wenn, ein Dreizeiler isses sicher nicht ;-) lg Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 23. Nov. 2004 19:45 <-- editieren / zitieren --> Unities abgeben:          Nur für TomiProg
|