Diese Seite wurde zuletzt aktualisiert am 10.09.1999
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für VB, VBA und OfficeVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Zurück...


Anzeige

Teil 2

Das Grundprinzip des VBEWindowControl-AddIns beruht darauf, dass die Ereignisse ItemAdded der VBProjectEvents und der VBComponentEvents ausgewertet werden. Wird ein neues Projekt angelegt oder wird einem Projekt ein Modul hinzugefügt, wird geprüft, ob dieses noch jungfräulich ist. In diesem Sinne jungfräulich ist ein Projekt oder ein Modul, wenn es noch nicht unter einem eigenen Dateinamen gespeichert worden ist. Alle übrigen Projekte und Module, also sowohl Ihre Arbeitsprojekte und -module als auch die, die Sie in Ihrem Templates-Ordner abgelegt haben, werden ignoriert. Bei letzteren gehe ich davon aus, dass die Größen und Positionen der betreffenden Module bereits bewusst festgelegt worden sind und nicht einfach auf Einheitsgrößen zurück gesetzt werden sollen. Bei den Modulen der Arbeitsprojekte wäre es dagegen mehr als nur ein schlechter Scherz, wenn dies bei jedem Öffnen eines Projektes geschehen würde.

Wird ein neues Projekt angelegt, werden alle möglicherweise darin enthaltenen Module überwacht. Ich wüsste allerdings derzeit kein leeres Vorgabe-Projekt, mit dem mehr als nur ein einziges Modul geladen wird. Aber das kann sich schließlich irgend wann einmal ändern.

Zunächst wird im OnConnection-Ereignis des AddInDesigners das übergebene Application-Objekt in der modulweit gültigen Variablen mVBE zur späteren weiteren Verwendung festgehalten. Die übrigen Parameter ignorieren wir, da sie für dieses AddIn keine Bedeutung haben. Anschließend wird die als Ereignisempfänger (mit WithEvents) deklarierte Variable eProjectEvents gesetzt.

Private mVBE As VBE
Private WithEvents eProjectEvents As VBProjectsEvents

Private Sub AddinInstance_OnConnection(ByVal Application _
 As Object, ByVal ConnectMode As _
 AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst _
 As Object, custom() As Variant)
  
  Set mVBE = Application
  With mVBE
    Set eProjectEvents = .Events.VBProjectsEvents
    '...
  End With
End Sub

Als nächstes werden die Einträge in die Kontextmenüs eingefügt, doch dazu später mehr.

Nach dem Laden wartet das AddIn nun darauf, dass im Ereignis eProjectEvents_ItemAdded das Öffnen oder Anlegen eines neuen Projekts gemeldet wird. Da dieses Projekt auf jeden Fall das aktive Projekt sein wird, wird zunächst der Ereignisempfänger eVBComponentsEvents installiert.

Private Sub eProjectEvents_ItemAdded(ByVal VBProject _
 As VBIDE.VBProject)
  Dim nVBComponent As VBComponent
  Dim nDesignerWindow As Window
  Dim nCodeWindow As Window
  Dim nFirst As Boolean
  Dim nPosSize As clsPosSize
  Dim nID As String
    
  Set eVBComponentsEvents = _
   mVBE.Events.VBComponentsEvents(VBProject)
  If Len(VBProject.FileName) = 0 Then
    For Each nVBComponent In VBProject.VBComponents
      With nVBComponent
        Set nDesignerWindow = .DesignerWindow

Ist die Länge des Dateinamens des Projekts gleich 0 (d.h. das Projekt ist jungfräulich), werden in einer Schleife die Modul-Komponenten des Projekts untersucht. Wie bereits erwähnt, dürfte derzeit nur ein einziges Modul anfallen. Ergibt die Zuweisung des Funktionsaufrufs nVBComponent.DesignerWindow, dass die Komponente ein Designer-Fenster enthält, wird eine eindeutige Typen-ID ermittelt.

Diese ergibt sich jedoch noch nicht allein aus der Kennzahl des Komponenten-Typs. Diese kennzeichnet nur der VBIDE bereits bekannte Komponenten-Typen. Unbekannte Designer sind vom Typ vbext_ct_ActiveXDesigner - darunter fallen alle derzeit noch nicht bekannten oder von Dritten angebotenen Designer. Um auch diese eindeutig unterscheiden zu können, wird der String-Wert der Eigenschaft DesignerID hinzu gezogen. Aus beidem zusammen ergibt sich immer eine eindeutige ID.

        If Not (nDesignerWindow Is Nothing) Then
          nID = "D" & CStr(.Type) & .DesignerID

Fensterplätze - Teil 1 Teil 1    Teil 3 Fensterplätze - Teil 3


AddIn-Übersicht

Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer