Hi,
ich hab das Programm gefunden und den Foren Eintrag dazu.
Finde es spitze und brauch genau so was.
Kannst du mir vielleicht bitte ein wenig weiterhelfen?
Ich hab das jetzt alles so gemacht wie du, aber ich bekomme noch zwei Fehler gemeldet. (Solidworks 2008)
1. Imports SwConst
Ich hab die Dll eingebunden c:\Programme\SWX2008\SolidWorks.Interop.swconst.dll
Warnung 1 Der in Imports "SwConst" angegebene Namespace oder Typ enthält keine öffentlichen Member oder kann nicht gefunden werden. Stellen Sie sicher, dass der Namespace oder der Typ definiert ist und mindestens einen öffentlichen Member enthält und dass der importierte Elementname keine weiteren Aliase enthält. C:\SLD_Vorschau\Form1.vb 6 9 VB_Test
2. Dim swDoc11 As SwDocumentMgr.SwDMDocument11
Bei mir geht es nur bis 9 und leider auch nicht mit 11 weiter? C:\Programme\SWX2008\CircuitWorksFull\interop.swdocumentmgr.dll
Fehler 3 Der Typ "SwDocumentMgr.SwDMDocument11" ist nicht definiert. C:\SLD_Vorschau\Form1.vb 30 20 VB_Test
Wäre nett wenn mir da weiterhelfen könntest.
Weißt du was ich da falsch mache? Hab den Lizenzkey letzten Freitag beantrag, kanns also noch nicht testen.
Hier mal der Code, ein wenig umgebaut....weil da noch auch noch meine andere Preview eingebunden ist. Die aber bei weitem nicht so gut ist wie deine.
Gruß
Philipp
Option Strict Off
Option Explicit On
Imports System.Windows.Forms
Imports SwDocumentMgr.SwDmDocumentType
Imports SwDocumentMgr.SwDmDocumentOpenError
Imports SwConst
Imports System.Drawing
Public Class Form1
Inherits System.Windows.Forms.Form
Dim strZeichnungsnr As String
Dim strBezeichnung As String
Dim strFilename As String
Dim strIDENT As String
Const swDMLicenseKey = "55555555"
'Wahlweise Part oder Drawing aktivieren:
'Const sDocFileName As String = "c:\sw-work\PREVIEW.SLDPRT"
Dim sDocFileName As String
Dim nDocType As Integer
Dim swClassFact As SwDocumentMgr.SwDMClassFactory
Dim swDocMgr As SwDocumentMgr.SwDMApplication
'Dummerweise sind die benötigten Methoden für Drawing und Modell
'nicht im selben Objekttyp verfügbar, daher brauchen wir hier 2
'Objekte für das Dokument 
Dim swDoc As SwDocumentMgr.SwDMDocument
Dim swDoc11 As SwDocumentMgr.SwDMDocument11
Dim swCfgMgr As SwDocumentMgr.SwDMConfigurationMgr
Dim swCfg As SwDocumentMgr.SwDMConfiguration7
Dim iRetVal As Integer
Dim oMyAxHost As New MyAxHost("00AB5D8D-2B8F-416b-9761-92FACC8872BE") 'das ist die CLSID der
'swdocumentmgr.dll
Dim oPreview As Object
Dim oCfgNameArr As Object
Dim sCfgName As String
Dim oByteArray() As Byte
Dim oStream As New System.IO.MemoryStream
Private Sub lbConfigurations_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbConfigurations.SelectedIndexChanged
Dim sDummy As String
sDummy = lbConfigurations.SelectedItem
'If sDummy = "" Then Exit Sub
ShowConfigurationPreview(sDummy)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Extractor As SldWorks_ExtractBitmap.SldWorks_ExtractBitmap
Dim nErrors As Integer
Dim tmpfile As String
Dim a_strArgs() As String
Dim a_filename() As String
a_strArgs = Split(Command$, ",")
strFilename = a_strArgs(0)
strIDENT = a_strArgs(1)
strZeichnungsnr = a_strArgs(2)
strBezeichnung = a_strArgs(3)
sDocFileName = strFilename
tmpfile = strFilename
Zeichungsnr.Text = strZeichnungsnr
Bezeichnung.Text = strBezeichnung
Extractor = New SldWorks_ExtractBitmap.SldWorks_ExtractBitmap
a_filename = Split(tmpfile, ".")
'UPGRADE_WARNING: Die Standardeigenschaft des Objekts Extractor.ExtractBitmap konnte nicht aufgelöst werden. Klicken Sie hier für weitere Informationen: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
nErrors = Extractor.ExtractBitmap(tmpfile, "C:\temp\" & strIDENT & ".bmp", 500, 500)
PictureBox1.Image = System.Drawing.Image.FromFile("C:\temp\" & strIDENT & ".bmp")
PictureBox1.Width = VB6.TwipsToPixelsX(VB6.PixelsToTwipsX(Me.Width) - VB6.PixelsToTwipsX(PictureBox1.Left) - 200)
PictureBox1.Height = VB6.TwipsToPixelsY(VB6.PixelsToTwipsX(PictureBox1.Width) * PictureBox1.ClientRectangle.Height / PictureBox1.ClientRectangle.Width)
' Startwert im Label ausgeben
Timer1.Start()
' Festellen des Dokumententypes über die Dateiendung
If InStr(LCase(sDocFileName), "sldprt") > 0 Then
nDocType = swDmDocumentPart
ElseIf InStr(LCase(sDocFileName), "sldasm") > 0 Then
nDocType = swDmDocumentAssembly
ElseIf InStr(LCase(sDocFileName), "slddrw") > 0 Then
nDocType = swDmDocumentDrawing
Else
' Keine SolidWorks-Datei
nDocType = swDmDocumentUnknown
MsgBox("Keine Solidworksdatei...")
End
End If
lbConfigurations.Items.Clear()
swClassFact = CreateObject("SwDocumentMgr.SwDMClassFactory")
swDocMgr = swClassFact.GetApplication(swDMLicenseKey)
swDoc11 = swDocMgr.GetDocument(sDocFileName, nDocType, True, iRetVal)
swDoc = swDocMgr.GetDocument(sDocFileName, nDocType, True, iRetVal)
Debug.Print("File = " & swDoc.FullName)
If nDocType = swDmDocumentDrawing Then
'Wenn es sich um eine Zeichnung handelt, muss die Vorschau anders
'extrahiert werden, als bei Modellen, da es hier keine Konfigurationen gibt
'Leider gibt es da auch keine direkte Funktion GetPreview oder so
oByteArray = swDoc11.GetPreviewBitmapBytes(iRetVal)
oStream.Write(oByteArray, 0, oByteArray.Length)
pbPreview.Image = System.Drawing.Image.FromStream(oStream)
Else
'Bei Modellen die Listbox mit den Konfigurationsnamen füllen,
'die Vorschau wird dann bei Auswahl einer Konfig erzeugt.
swCfgMgr = swDoc.ConfigurationManager
oCfgNameArr = swCfgMgr.GetConfigurationNames
For Each Me.sCfgName In oCfgNameArr
swCfg = swCfgMgr.GetConfigurationByName(sCfgName)
lbConfigurations.Items.Add(sCfgName)
Next
End If
End Sub
Sub ShowConfigurationPreview(ByVal sConfig As String)
If nDocType = swDmDocumentDrawing Then Exit Sub
swCfg = swCfgMgr.GetConfigurationByName(sConfig)
oPreview = swCfg.GetPreviewBitmap(iRetVal)
pbPreview.Image = oMyAxHost.GetImage(oPreview)
Debug.Print("ShowConfigurationPreview(" & sConfig & ")")
End Sub
Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
swDoc.CloseDoc()
End
End Sub
Dim zaehler As Integer = 40 ' Startwert festlegen
Private Sub InitializeTimer()
' Timer-Intervall auf eine Sekunde festlegen
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Timer1.Tick
' Zählvariable um 1 verringern
zaehler -= 1
If zaehler = -1 Then
' Timer anhalten
Timer1.Stop()
' Meldung anzeigen
End
' Startwert neu setzen
zaehler = 60
End If
' Startwert im Label anzeigen
ProgressBar1.Value = CStr(zaehler)
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
End
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Stop()
End Sub
End Class
[Diese Nachricht wurde von Schraml am 27. Okt. 2008 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP