Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  DLL wird geladen, Ribbon aber nicht geändert

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  DLL wird geladen, Ribbon aber nicht geändert (3097 mal gelesen)
kaifreeman
Mitglied
Projektleiter


Sehen Sie sich das Profil von kaifreeman an!   Senden Sie eine Private Message an kaifreeman  Schreiben Sie einen Gästebucheintrag für kaifreeman

Beiträge: 45
Registriert: 29.08.2006

Pentium 4 2*3,2 GHz 2,5 GB RAM NVIDIA Quadro FX1400 Grafikkarte.
ProE 2001 und WF2 M191

erstellt am: 20. Nov. 2011 16:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Abend,

Ich habe in VB.net mit Object ARX ein kleines Programm gebastelt das mittlerweile auch gut funktioniert, nun bin ich gerade am verzweifeln weil ich es einfach nicht schaffe das Programm beim Start von AutoCAD korrekt geladen zu bekommen.

Das Programm fügt derzeit auf der Ribbon Leiste einen zusätzlichen Reiter und einen Button ein welcher ein Formular aufruft.

Lade ich das Programm mit netload manuell dann wird im Ribbon der Reiter erzeugt und mein Button ebenfalls (er funktioniert auch), nun habe ich in die Registry

Zitat:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R18.2\ACAD-A005:407\Applications\Test]
"DESCRIPTION"="Test_Zeichnungsersteller"
"LOADCTRLS"=dword:00000002
"MANAGED"=dword:00000001
"LOADER"="C:\\Test\\Test_Konfigurator_ACAD.dll"


eingetragen. Die DLL wird anscheinend auch geladen (eine Versuchsweise eingebaute MSGBOX im Initialise Ereignis zeigt er an aber das Ribbon wird nicht angezeigt.

Das ist mein Code zum Laden

Code:

        Implements Autodesk.AutoCAD.Runtime.IExtensionApplication

        ''' <summary>
        ''' Initialisiert den 300H Configurator
        ''' Written by Ing. Stephan Papst
        ''' 26.10.2011
        ''' V001
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub Initialize() Implements Autodesk.AutoCAD.Runtime.IExtensionApplication.Initialize

            'Module für ACAD erzeugen

            Dim KConfig_Module As System.Reflection.Module = System.Reflection.Assembly.GetExecutingAssembly().GetModules()(0)
            Dim KConfig_ModulePath As String = KConfig_Module.FullyQualifiedName
            Dim v_img As New Images
            Try
                KConfig_ModulePath = KConfig_ModulePath.Substring(0, KConfig_ModulePath.LastIndexOf("\"))
                KConfig_ModulePath = KConfig_ModulePath.Substring(0, KConfig_ModulePath.LastIndexOf("\"))
            Catch
                MsgBox("Fehler beim Erstellen der Module" & vbCrLf & "Wenden Sie sich an ihren Administrator", MsgBoxStyle.Critical, "Schwerer Ausnahmefehler")
                Exit Sub
            End Try
            'Erstellen der Ribbonleiste für den Konfigurator
            'Ribbon Controll initialisieren
            Dim m_rib_con As Autodesk.Windows.RibbonControl = Autodesk.Windows.ComponentManager.Ribbon


            'Ribbonleiste:
            Dim m_rib_tab As New Autodesk.Windows.RibbonTab
            With m_rib_tab
                .Title = "Test"
                .Id = "meintab_tab_id"
            End With
            Try
                m_rib_con.Tabs.Add(m_rib_tab)
            Catch ex As Autodesk.AutoCAD.Runtime.Exception
                MsgBox("Fehler beim Erstellen der Ribbon Leiste" & vbCrLf & ex.Message.ToString)
            End Try


            'Ribbon Panel erzeugen
            'Quelle
            Dim m_rib_pan_source As New Autodesk.Windows.RibbonPanelSource
            Try
                With m_rib_pan_source
                    .Title = "Konfigurator"
                End With
                'Ein Panel
                Dim m_rib_pan As New Autodesk.Windows.RibbonPanel
                With m_rib_pan
                    .Source = m_rib_pan_source
                End With
                m_rib_tab.Panels.Add(m_rib_pan)

                'Startbutton hinzufügen
                Dim m_rib_button As New Autodesk.Windows.RibbonButton
                With m_rib_button
                    .Text = "Starten"
                    .Image = Images.getPicture(My.Resources.logo_kl2)
                    .LargeImage = Images.getPicture(My.Resources.logo_kl2)
                    .Size = Autodesk.Windows.RibbonItemSize.Large
                    .ShowText = True
                    .ShowImage = True
                    .Orientation = System.Windows.Controls.Orientation.Vertical
                    .CommandHandler = New myformladen()
                End With

                'Wizzard Button hinzufügen

                m_rib_pan_source.Items.Add(m_rib_button)
                m_rib_tab.IsActive = True
            Catch ex As Autodesk.AutoCAD.Runtime.Exception
                MsgBox("Fehler beim Laden des Konfigurators" & vbCrLf & ex.Message.ToString)
            End Try

        End Sub


Kann mir jemand einen Tipp geben was ich falsch mache?

Danke!

------------------
mfG.
Stephan Papst

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 20. Nov. 2011 20:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kaifreeman 10 Unities + Antwort hilfreich

Hallo Stephan,

die Ribbons werden anscheinend erst initialisiert(geladen?), wenn die erste Zeichnung vollständig geöffnet ist.
Da es mir schon mal ähnlich wie dir ging, habe ich es am Ende über einen Reactor erledigt, der anspringt, wenn das Document erzeugt ist und dann eben das Manipulieren der Ribbons vornimmt. Nicht ideal, aber es funktioniert. Ärgerlich ist dabei nur, dass mir aufgefallen ist, dass der DocumentCreated-Reactor nicht in allen AutoCAD-Versionen auch beim ersten Document (Zeichnung1.dwg) anspringt. Ich glaube, dass war in der 2009 oder 2010er so.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kaifreeman
Mitglied
Projektleiter


Sehen Sie sich das Profil von kaifreeman an!   Senden Sie eine Private Message an kaifreeman  Schreiben Sie einen Gästebucheintrag für kaifreeman

Beiträge: 45
Registriert: 29.08.2006

Pentium 4 2*3,2 GHz 2,5 GB RAM NVIDIA Quadro FX1400 Grafikkarte.
ProE 2001 und WF2 M191

erstellt am: 21. Nov. 2011 08:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Holger

Danke für deine Antwort, ich habe sowas in der Art schon befürchtet und versucht über acaddoc.lsp die DLL immer wieder zu laden leider ohne Erfolg.

Ich habe leider keinerlei Erfahrung mit einem DocumentCreated Reactor wie könnte so etwas aussehen kannst du mir da einen Tipp geben?

Danke

------------------
mfG.
Stephan Papst

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 22. Nov. 2011 12:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kaifreeman 10 Unities + Antwort hilfreich

Hallo,

ich habe es so gelöst (C#.Net):
im Initialize:

Code:

DocumentCollection docColl = AcadApp.Application.DocumentManager;
                docColl.DocumentCreated += new DocumentCollectionEventHandler(AdskRibbonDocumentActivated);
// und dann eben die Eventroutine:
void AdskRibbonDocumentActivated(object sender, DocumentCollectionEventArgs e)
{
  Object _ribbon = 0;
  try { _ribbon = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("RIBBONSTATE"); }
  catch { }
  if (Convert.ToInt16(_ribbon) == 1)
  {
    // Hinzufügen der RibbonCommands usw ...
  }
}

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kaifreeman
Mitglied
Projektleiter


Sehen Sie sich das Profil von kaifreeman an!   Senden Sie eine Private Message an kaifreeman  Schreiben Sie einen Gästebucheintrag für kaifreeman

Beiträge: 45
Registriert: 29.08.2006

Pentium 4 2*3,2 GHz 2,5 GB RAM NVIDIA Quadro FX1400 Grafikkarte.
ProE 2001 und WF2 M191

erstellt am: 23. Nov. 2011 19:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Holger

Danke für deine Tipps ich habe nun auf Basis deiner Idee den Code in vb.net adaptiert:

Code:
            AddHandler Application.DocumentManager.DocumentActivated, AddressOf acad_ribdocactive

und dann als Routinge:

Code:

      Private Sub acad_ribdocactive(ByVal sender As Object, ByVal e As DocumentCollectionEventArgs)
            Dim rib As [Object] = 0
            Try
                rib = Autodesk.AutoCAD.ApplicationServices.Application.GetSystemVariable("RIBBONSTATE")
            Catch ex As System.Exception
                MsgBox("Systemvariable konnte nicht gelesen werden!", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "Fehler")
            End Try
            If Convert.ToInt16(rib) = 1 Then
'Code zum adden des Ribbons
                Catch ex As Autodesk.AutoCAD.Runtime.Exception

                End Try
            End If
        End Sub


Die Anforderungen nun auch in die Reg gepackt und er lädt aber es ist genau das eingetreten was du schon beschrieben hast der Reactor springt nicht bei der ersten Zeichnung an. Gilt also somit auch für ACAD 2012 Mechanical.

Im Dev Guide gibt es keine ICHBINFERTIGMITSTARTEN Variable zumindest konnte ich nichts rausfinden.

Habe auch versucht eine Datei über den Documentmanager zu erzeugen den Focus zu setzen und dann zu "zerstören" aber das schafft er im INITIALIZE auch nicht.

Ich glaube ich werd mal Subscription bemühen müssen 

Danke für deine Hilfe.

------------------
mfG.
Stephan Papst

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



Sehen Sie sich das Profil von CAD-Huebner an!   Senden Sie eine Private Message an CAD-Huebner  Schreiben Sie einen Gästebucheintrag für CAD-Huebner

Beiträge: 9732
Registriert: 01.12.2003

AutoCAD 20xx, Civil 3D 201x, Inventor Prof 201x usw.

erstellt am: 23. Nov. 2011 21:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kaifreeman 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von kaifreeman:
... Ich glaube ich werd mal Subscription bemühen müssen  
...

Ich denke, dass die Subscription sich nicht auf Fragen zur Progrmmierung ersteckt. Programmierunterstützung würdest du beim (kostenpflichtigen) ADN - Autodesk Developer Network - bekommen. www.autodesk.com/adn


------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 24. Nov. 2011 06:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kaifreeman 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von kaifreeman:
... aber es ist genau das eingetreten was du schon beschrieben hast der Reactor springt nicht bei der ersten Zeichnung an. Gilt also somit auch für ACAD 2012 Mechanical. ...

Naja, es gibt noch eine Möglichkeit, die du vielleicht antesten kannst. Du kannst einen Reactor basteln, der anspringt, wenn sich der Document-Status ändert. Das passiert beim AutoCAD-Start sehr häufig, du musst dann eben nur abfangen, wenn sich der DocStatus das letzte mal ändert .. also die Zeichnung zur endgültigen Bearbeitung frei gegeben ist. Woran man das erkennt ... keine Ahnung, das wäre deine Aufgabe ;D . oder man geht via try/catch ran .. dann ist's egal.
Am Ende sollte sich der Reactor dann aber selber löschen .. damit dieser nicht ständig anspringt.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

kaifreeman
Mitglied
Projektleiter


Sehen Sie sich das Profil von kaifreeman an!   Senden Sie eine Private Message an kaifreeman  Schreiben Sie einen Gästebucheintrag für kaifreeman

Beiträge: 45
Registriert: 29.08.2006

Pentium 4 2*3,2 GHz 2,5 GB RAM NVIDIA Quadro FX1400 Grafikkarte.
ProE 2001 und WF2 M191

erstellt am: 29. Mai. 2012 19:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

So nach langer Pause habe ich es jetzt relativ pragmatisch gelöst auf die Knöpfe verzichtet und die Teile einfach per CUI Datei eingebunden Shame on me ^^

Danke für eure Hilfe!

------------------
mfG.
Stephan Papst

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

d.balogh
Mitglied



Sehen Sie sich das Profil von d.balogh an!   Senden Sie eine Private Message an d.balogh  Schreiben Sie einen Gästebucheintrag für d.balogh

Beiträge: 21
Registriert: 13.05.2008

erstellt am: 21. Nov. 2013 17:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kaifreeman 10 Unities + Antwort hilfreich

Hallo,

ist zwar ein älteres Topic, aber vielleicht dennoch hilfreich.
Bei Ribbon-Sachen ist es meiner Erfahrung nach am Besten, den Application.idle Event abzufangen (dieser kommt, wenn acad voll geladen ist)

Code:
sub initialize()
addhandler application.idle, addressof Callback_Appidle
end sub

sub Callback_Appidle (sender as object, e as system.eventargs)
'RibbonStuff
Removehandler application.idle, addressof Callback_appidle
end sub



Oder so ähnlich...
LG,
Daniel


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

mychefkoch
Mitglied


Sehen Sie sich das Profil von mychefkoch an!   Senden Sie eine Private Message an mychefkoch  Schreiben Sie einen Gästebucheintrag für mychefkoch

Beiträge: 3
Registriert: 19.01.2014

Acad 2012, VS 2010, C#

erstellt am: 19. Jan. 2014 12:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für kaifreeman 10 Unities + Antwort hilfreich

Ist zwar schon älter der Beitrag aber diese Lösung funktioniert einwandfrei:

.net c#
myplugin.cs

Code:
// (C) Copyright 2013 by 
//
using System;
using Autodesk.AutoCAD.Runtime;
using Engineering.Ribbon;
using acadApp = Autodesk.AutoCAD.ApplicationServices;

// This line is not mandatory, but improves loading performances
[assembly: ExtensionApplication(typeof(Engineering.MyPlugin))]

namespace Engineering
{

    // This class is instantiated by AutoCAD once and kept alive for the
    // duration of the session. If you don't do any one time initialization
    // then you should remove this class.
    public class MyPlugin : IExtensionApplication
    {

        void IExtensionApplication.Initialize()
        {
            // Add one time initialization here
            // One common scenario is to setup a callback function here that
            // unmanaged code can call.
            // To do this:
            // 1. Export a function from unmanaged code that takes a function
            //    pointer and stores the passed in value in a global variable.
            // 2. Call this exported function in this function passing delegate.
            // 3. When unmanaged code needs the services of this managed module
            //    you simply call acrxLoadApp() and by the time acrxLoadApp
            //    returns  global function pointer is initialized to point to
            //    the C# delegate.
            // For more info see:
            // http://msdn2.microsoft.com/en-US/library/5zwkzwf4(VS.80).aspx
            // http://msdn2.microsoft.com/en-us/library/44ey4b32(VS.80).aspx
            // http://msdn2.microsoft.com/en-US/library/7esfatk4.aspx
            // as well as some of the existing AutoCAD managed apps.

            // Initialize your plug-in application here
            acadApp.Application.Idle += new EventHandler(Application_OnIdle);
        }

        void IExtensionApplication.Terminate()
        {
            // Do plug-in application clean up here
            acadApp.Application.Idle -= new EventHandler(Application_OnIdle);
        }

        void Application_OnIdle(object sender, EventArgs e)
        {
            // Remove the event when it is fired
            acadApp.Application.Idle -= new EventHandler(Application_OnIdle);

            AddRibbonItem();
        }

        private void AddRibbonItem()
        {
            RibbonEngineering ribbon = new RibbonEngineering();
            ribbon.show();
        }
    }
}


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz