Bentley Communities
Bentley Communities
  • Site
  • User
  • Site
  • Search
  • User
MicroStation
  • Product Communities
MicroStation
MicroStation Wiki (Deutsch) Zoom gleichzeitig auf 2 Fenster anwenden mit VBA Eventhandler
    • Sign In

    • MicroStation - Wiki (Deutsch)
    • +AECOsim Building Designer
    • +Bentley LEARN
    • +Bentley LumenRT
    • +Bentley Navigator
    • +Bentley View
    • +CONNECTION Client
    • +ContextCapture
    • +Drucken
    • -MicroStation
      • +Animation - MicroStation
      • +Anpassung der Benutzeroberfläche - MicroStation
      • +Ansicht - MicroStation
      • +Archivieren/Sichern - MicroStation
      • +Austausch - MicroStation
      • +Auswahl - MicroStation
      • +Basisgeometrie - MicroStation
      • Behobene Probleme in MicroStation CONNECT Edition Update 13, 10.13.00.48
      • +Bemaßungen - MicroStation
      • +Bemusterung - MicroStation
      • +Benutzerdefinierte Stricharten - MicroStation
      • +Blattaufbau - MicroStation
      • +Dateizugriff - MicroStation
      • +Datenbank
      • +Detailsymbole - MicroStation
      • +DGN - MicroStation
      • +Dokumentation und Hilfe - MicroStation
      • +Drucken - MicroStation
      • +DWG - MicroStation
      • +Ebenen - MicroStation
      • +Eigenschaften - MicroStation
      • +Einheiten - MicroStation
      • +Exception - MicroStation
      • +FAQ - MicroStation
      • +Feature-basierte Volumenelement-Modellierung - MicroStation
      • +Grafikanzeige - MicroStation
      • +Graphics Display - MicroStation
      • +Gruppen - MicroStation
      • +GUI - MicroStation
      • +Hardware/Eingabegeräte - MicroStation
      • +i.Models - MicroStation
      • +Installation - MicroStation
      • +Interferenz - MicroStation
      • +Konfiguration - MicroStation
      • +Koordinatensysteme - MicroStation
      • +Kurven - MicroStation
      • Levels - MicroStation
      • +Manipulation - MicroStation
      • +Messen - MicroStation
      • +Modelle - MicroStation
      • +OLE - MicroStation
      • Other - MicroStation
      • +Parametrics - MicroStation
      • Printing - MicroStation
      • +Programmierung - MicroStation
      • Programming - MicroStation
      • +Projektnavigation - MicroStation
      • Pseudozellen mit Texten, Font ändern
      • +Punktwolke - MicroStation
      • +Raster - MicroStation
      • +Referenz - MicroStation
      • +Sicherheit - MicroStation
      • +Sonstiges - MicroStation
      • +Standards - MicroStation
      • +Stapelverarbeitung - MicroStation
      • +Tabellen - MicroStation
      • +Text - MicroStation
      • +Visualisierung - MicroStation
      • +Volumenelemente
      • +Volumenelemente - MicroStation
      • +Zeichenhilfen - MicroStation
      • +Zellen - MicroStation
      • Zellen mit Sachdaten auflösen und Sachdaten erhalten
      • Zoom gleichzeitig auf 2 Fenster anwenden mit VBA Eventhandler
      • +Änderungsverfolgung - MicroStation
    • +MicroStation PowerDraft

     
     Questions about this article, topic, or product? Click here. 

    Zoom gleichzeitig auf 2 Fenster anwenden mit VBA Eventhandler

      Produkt(e): MicroStation
      Version(en): 08.11.09.829
      Umgebung: Windows 2000,Windows 8
      Produktbereich: N/A
      Produktunterbereich: N\A

     

    Hintergrundinformation

    VBA unterstützt verschiedene Eventhandler. Ich möchte hier ein Beispiel für  IViewUpdateEvents aufzeigen, der zwei Ereignisse abfangen kann, und zwar das Ereignis direkt vor bzw. direkt nach dem Neuzeichnen einer Ansicht.

    Um dies an einem VBA Beispiel zu zeigen, soll die Funktionalität darin bestehen, das Regenerieren einer Ansicht festzustellen, und darauf zu reagieren, konkret hier im Beispiel so, dass dieselbe Zoomtiefe und Zoomzentrum auf eine weitere Ansicht angewendet wird.
    Konkret also, wenn ich in einer Ansicht zoome, wird automatisch ein anderes Fenster ebenso gezoomt

    Erforderliche Schritte

     Um diese Funktionalität zu erreichen, benötige ich I'm VBA neben einem Funktionsmodul noch ein Klassenmodul, das den Namen clsEventHandlers haben muss, weil der Name in der Subroutine festgelegt ist. Man kann auch andere Namen wählen, nur muss dies I'm Module entsprechend angepasst werden.

    Hier zunächst das VBA Beispiel:

    Zunächst das Funktionsmodul:

    Public oVw1 As View
    Public oVw2 As View
    Public bDo As Boolean
    
    Private oEventHandlers As clsEventHandlers
    
    Sub viewtest()
        Dim oMsg As CadInputMessage
        CommandState.StartDefaultCommand
        RemoveHandlers
        bDo = True
        ShowPrompt "Bitte erste Ansicht wählen"
        Set oMsg = CadInputQueue.GetInput(msdCadInputTypeDataPoint, msdCadInputTypeReset)
        If oMsg.InputType = msdCadInputTypeReset Then
            ShowPrompt ""
            Exit Sub
        End If
        Set oVw1 = oMsg.View
        ShowPrompt "Bitte zweite Ansicht wählen"
        Set oMsg = CadInputQueue.GetInput(msdCadInputTypeDataPoint, msdCadInputTypeReset)
        If oMsg.InputType = msdCadInputTypeReset Then
            ShowPrompt ""
            Exit Sub
        End If
        Set oVw2 = oMsg.View
        ShowPrompt ""
        Set oEventHandlers = New clsEventHandlers
        AddViewUpdateEventsHandler oEventHandlers
    End Sub
    
    
    Sub RemoveHandlers()
        If Not oEventHandlers Is Nothing Then
            RemoveViewUpdateEventsHandler oEventHandlers
        End If
        Set oEventHandlers = Nothing
    End Sub
    
    

    Und hier das Klassenmodul:

    Implements IViewUpdateEvents
    
    '
    '  Methods for the IViewUpdateEvents
    '
    Private Sub IViewUpdateEvents_AfterRedraw(TheViews() As View, TheModels() As ModelReference, ByVal DrawMode As MsdDrawingMode)
        If UBound(TheModels) < 0 Then
              If bDo Then
                If TheViews(0).Index = oVw1.Index Then
                    oVw2.Extents = oVw1.Extents
                    oVw2.Center = oVw1.Center
                    oVw2.Redraw
                End If
                If TheViews(0).Index = oVw2.Index Then
                    oVw1.Extents = oVw2.Extents
                    oVw1.Center = oVw2.Center
                    oVw1.Redraw
                End If
               End If
        
        End If
    End Sub
    
    Private Sub IViewUpdateEvents_BeforeRedraw(TheViews() As View, TheModels() As ModelReference, ByVal DrawMode As MsdDrawingMode)
    bDo = Not bDo
    End Sub
    

    Wenn nun die Subroutine "viewtest" gestartet wird, muss zunächst einmal festgelegt warden, welche beiden Ansichten miteinander synchronisiert warden sollen.
    Dies geschieht durch 2 Klicks in 2 verschiedenen Ansichten.
    Nach einem Zoom in einem der Fenster wird der Mechanismus aktiviert, d.h. ab dem 2. Zoom wird ein Zoom in einem der beiden Fenster auf das andere Fenster angewendet.

    Die hier vorgestellte VBA Routine stellt nur einen Ansatz dar und soll als Beispiel dienen, um die Möglichkeiten von Eventhandlern aufzuzeigen und kann als Grundlage für eigene Beispiele dienen.

    Viel Spaß beim testen und anpassen.

    Um die Erstellung des Klassenmoduls zu vereinfachen, hier das Beispielprojekt zum Download:

    6888.views.zip

      Ursprünglicher Autor: Artur Goldsweer
    • Windows 8
    • MicroStation
    • 08.11.09.829Windows 2000
    • SELECTsupport
    • de
    • Share
    • History
    • More
    • Cancel
    • Artur Goldsweer Created by Bentley Colleague Artur Goldsweer
    • When: Thu, Jan 26 2017 4:52 AM
    • Artur Goldsweer Last revision by Bentley Colleague Artur Goldsweer
    • When: Thu, Jan 26 2017 12:02 PM
    • Revisions: 3
    • Comments: 0
    Recommended
    Related
    Communities
    • Home
    • Getting Started
    • Community Central
    • Products
    • Support
    • Secure File Upload
    • Feedback
    Support and Services
    • Home
    • Product Support
    • Downloads
    • Subscription Services Portal
    Training and Learning
    • Home
    • About Bentley Institute
    • My Learning History
    • Reference Books
    Social Media
    •    LinkedIn
    •    Facebook
    •    Twitter
    •    YouTube
    •    RSS Feed
    •    Email

    © 2023 Bentley Systems, Incorporated  |  Contact Us  |  Privacy |  Terms of Use  |  Cookies