Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
FlxControls - Teil 3 (Das Projekt)
zurück: Delegates in VBA? Delegates in VBA! weiter: FlxControls - Teil 2 (Die FlxControls) Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
KeepCoolMan
VBA-NonExpert ;) Office 2010


Verfasst am:
25. Feb 2012, 16:45
Rufname: Thomas
Wohnort: Celle


FlxControls - Teil 3 (Das Projekt) - FlxControls - Teil 3 (Das Projekt)

Nach oben
       Version: (keine Angabe möglich)

Teil 3 – Das Projekt FlxControl

Das gesamte Projekt teilt sich in 3 Klassenmodule und 1 Standardmodul auf, die ich nun kurz erläutern möchte.
Im Anhang findet ihr das gesamte Tutorial inkl. aller Makros zum Download.
Getestet habe ich es mit Office XP unter Windows XP und mit Office 2010 unter Windows 7.

3.a. Klassen-Modul FlxEvent
Diese Klasse enthält die für ein Ereignis erforderlichen Eigenschaften
  • EventType: der Typ des Ereignisses; eine Konstante der FlxEventType-Enumeration; schreibgeschützt

  • EventHandler: die Adresse der EventHandler-Funktion/-Prozedur; Long; schreibgeschützt

  • EventArgs: das Object, welches dem EventHandler bei Ereignisauslösung übergeben wird; Schreib-/Lesezugriff

sowie die Initialisierungs-Funktion AddFlxEvent, die die überwiegend schreibgeschützten Eigenschaften setzt und „sich selbst“ dann zurückgibt, um es im FlxControl zu speichern. Beim Auslösen eines Ereignisses werden diese Werte dann ausgelesen, der entsprechende EventHandler ausgeführt und das EventArgs-Objekt übergeben.
Code:
Option Explicit

' das Event
Private evntType As FlxEventType
' der zugehörige EventHandler
Private flxEventHandler As Long
' das zugehörige EventArgs-Objekt
Private flxEventArgs As Object

' Schreibgeschützte Eigenschaft: Rückgabe des EventHandler-Typs
Public Property Get EventType() As FlxEventType
    EventType = evntType
End Property
' Schreibgeschützte Eigenschaft: Rückgabe des EventHandlers
Public Property Get EventHandler() As Long
    EventHandler = flxEventHandler
End Property
' Schreib-/Lese-Eigenschaft: Setzen oder Auslesen der EventArgs dieses EventHandlers
Public Property Get EventArgs() As Object
    Set EventArgs = flxEventArgs
End Property
Public Property Set EventArgs(newEventArgs As Object)
    Set flxEventArgs = newEventArgs
End Property

' erstellt ein neues FlxEvent-Parameter-Objekt
Public Function AddFlxEvent(newEventType As FlxEventType, _
                            newEventHandler As Long, _
                            Optional newEventArgs As Object = Nothing) _
                As FlxEvent
    evntType = newEventType
    flxEventHandler = newEventHandler
    Set flxEventArgs = newEventArgs
    Set AddFlxEvent = Me
End Function



3.b. Klassenmodul FlxStdEventArgs

Beinhaltet alle Parameter, die von den VBA-Ereignissen geliefert werden können. So kann der eigene EventHandler auf diese Parameter zugreifen und sie ggf. manipulieren. Welche Werte tatsächlich gebraucht und benutzt werden, ist vom jeweiligen Ereignis abhängig und kann der VBA-Dokumentation entnommen werden.
Code:
Option Explicit

Public Index As Long
Public Cancel As MSForms.ReturnBoolean
Public Action As fmAction
Public Ctrl As Control
Public Data As DataObject
Public X As Single
Public Y As Single
Public DragState As fmDragState
Public Effect As MSForms.ReturnEffect
Public Shift As fmShiftState
Public Number As Integer
Public Description As MSForms.ReturnString
Public SCode As Long
Public Source As String
Public HelpFile As String
Public HelpContext As Long
Public CancelDisplay As MSForms.ReturnBoolean
Public KeyCode As MSForms.ReturnInteger
Public KeyANSI As MSForms.ReturnInteger
Public Button As fmButton
Public ActionX As fmScrollAction
Public ActionY As fmScrollAction
Public RequestDx As Single
Public RequestDy As Single
Public ActualDx As MSForms.ReturnSingle
Public ActualDy As MSForms.ReturnSingle
Public Percent As Integer



3.c. Klassenmodul FlxControl

Das Herzstück des Projektes. Hier sind sämtliche Funktionalitäten enthalten, die die Erstellung von dynamischen Controls und deren Ereignisse betreffen.

Zuerst gibt es einige
Enumerationen:

die möglichen Control-Typen, die mit FlxControl erstellt und verwaltet werden können,
Code:
Public Enum FlxControlType
    UserForm            'ufm
    CheckBox = 1        'chk
    ComboBox = 2        'cbx
    CommandButton = 4   'btn
    Frame = 8           'frm
    Image = 16          'img
    Label = 32          'lbl
    ListBox = 64        'lbx
    MultiPage = 128     'mpg
    OptionButton = 256  'opt
    ScrollBar = 512     'scb
    SpinButton = 1024   'spn
    TabStrip = 2048     'tbs
    TextBox = 4096      'tbx
    ToggleButton = 8192 'tgl
End Enum


die möglichen Ereignisse, die mit FlxControl verwaltet werden können,
Code:
Public Enum FlxEventType
    None
    AllEvents
    AddControl
    BeforeDragOver
    BeforeDropOrPaste
    Change
    Click
    DblClick
    DropButtonClick
    Error_
    KeyDown
    KeyUp
    KeyPress
    Layout
    MouseDown
    MouseUp
    MouseMove
    RemoveControl
    Scroll
    SpinDown
    SpinUp
    Zoom
End Enum


sowie ein paar Hilfs-Enumerationen für die Arbeit mit den FlxControls.
Code:
' die möglichen Positionen der Elemente
Public Enum FlxIndex
    First = 1
    Last = -99
    All = -1
    AddNew = 0
End Enum
' Enumerationen zur Auswertung der KeyUp-/KeyDown-StandardEventArgs
Public Enum fmShiftState
    fmShiftMask = 1
    fmCtrlMask = 2
    fmAltMask = 4
End Enum
' Enumerationen zur Auswertung der MouseUp-/MouseDown-StandardEventArgs
Public Enum fmButton
    fmButtonLeft = 1
    fmButtonRight = 2
    fmButtonMiddle = 4
End Enum


lokale Variablen
Dann folgen die Member, von denen der jeweils Passende das MSForms.Control erhält und der dann ein Ereignis auslösen kann
Code:
Private WithEvents flxChk As MSForms.CheckBox
Private WithEvents flxCbx As MSForms.ComboBox
Private WithEvents flxBtn As MSForms.CommandButton
Private WithEvents flxFrm As MSForms.Frame
Private WithEvents flxImg As MSForms.Image
Private WithEvents flxLbl As MSForms.Label
Private WithEvents flxLbx As MSForms.ListBox
Private WithEvents flxMpg As MSForms.MultiPage
Private WithEvents flxOpt As MSForms.OptionButton
Private WithEvents flxScb As MSForms.ScrollBar
Private WithEvents flxSpn As MSForms.SpinButton
Private WithEvents flxTbs As MSForms.TabStrip
Private WithEvents flxTbx As MSForms.TextBox
Private WithEvents flxTgl As MSForms.ToggleButton
Private WithEvents flxUfm As MSForms.UserForm


Eigenschaften
sowie die lokalen Variablen der Klasse
Code:
' das Element, in dem das neue Element erstellt werden soll;
' muss ein Element sein, welches Controls beinhalten kann ("Container-Element")
' (UserForm, Page, Frame)
Private flxParent As Object
' der Typ des neu zu erstellenden Elements
Private flxCtrlType As FlxControlType
' Parameter für die EventHandler aller zugeordneten Events
Private flxEvents As New Collection
' enthält das erzeugte Control, um es direkt auslesen zu können
Private flxCtrl As Object


und die zugehörigen Eigenschafts-Methoden
Code:
' Schreib-/Lese-Eigenschaft: setzt oder ermittelt den Namen des Controls
Public Property Let Name(newName As String)
    flxCtrl.Name = newName
End Property
Public Property Get Name() As String
    Name = flxCtrl.Name
End Property
' Schreibgeschützte Eigenschaft: gibt das Element zurück, in dem das Control erstellt wurde
Public Property Get Parent() As Object
    Set Parent = flxParent
End Property
' Schreibgeschützte Eigenschaft: gibt das Control aus diesem FlxControl zurück
Public Property Get Control() As Object
    Set Control = flxCtrl
End Property
' Schreibgeschützte Eigenschaft: gibt alle registrierten FlxEvents zurück
Public Property Get Events() As Collection
    Set Events = flxEvents
End Property


Um den hier dargestellten Quelltext nicht unnötig aufzublähen, habe ich im Weiteren einige Passagen ausgelassen, die sich nur für die einzelnen Controls unterscheiden, aber quasi identischen Code benutzen.

Zitat:
Eigenschaft AddFlxControl

Diese Nur-Schreiben-Eigenschaft erstellt ein neues FlxControl und das MSForms.Control im angegeben Parent oder nimmt ein bereits vorhandenes MSForms.Control in die FlxControls auf.
Code:
Public Property Let AddFlxControl(Name As Variant, _
                                  Parent As Object, _
                                  ControlType As FlxControlType)
    If TypeOf Parent Is MSForms.UserForm Or _
       TypeOf Parent Is MSForms.Page Or _
       TypeOf Parent Is MSForms.Frame Or _
       ControlType = UserForm Then
        ' neues Control erzeugen
        Set flxParent = Parent
        flxCtrlType = ControlType
        If ControlType <> UserForm Then
            If IsObject(Name) Then
                Set flxCtrl = Name
            Else
                Set flxCtrl = Parent.Controls.Add(getProgID(ControlType), Name)
            End If
        End If
        ' und registrieren
        Select Case flxCtrlType
        Case UserForm
            Set flxCtrl = flxParent
            Set flxUfm = flxParent     ' !!!
        Case CheckBox
            Set flxChk = flxCtrl
        Case ComboBox
            Set flxCbx = flxCtrl
'...
        End Select
        ' für späteren Zugriff, um Änderungen vornehmen zu können,
        ' in "Sammel-Collection" aufnehmen
        NewFlxControl Me
    End If
End Property


Die folgende Hilfsfunktion dient zum Ermitteln der für das Erstellen eines MSForms.Control erforderlichen ProgID.
Code:
Private Function getProgID(ControlType As FlxControlType) _
                 As String
    getProgID = Switch(ControlType = CheckBox, "Forms.CheckBox.1", _
                       ControlType = ComboBox, "Forms.ComboBox.1", _
                       ControlType = CommandButton, "Forms.CommandButton.1", _
                       ControlType = Frame, "Forms.Frame.1", _
                       ControlType = Image, "Forms.Image.1", _
                       ControlType = Label, "Forms.Label.1", _
                       ControlType = ListBox, "Forms.ListBox.1", _
                       ControlType = MultiPage, "Forms.MultiPage.1", _
                       ControlType = OptionButton, "Forms.OptionButton.1", _
                       ControlType = ScrollBar, "Forms.ScrollBar.1", _
                       ControlType = SpinButton, "Forms.SpinButton.1", _
                       ControlType = TabStrip, "Forms.TabStrip.1", _
                       ControlType = TextBox, "Forms.TextBox.1", _
                       ControlType = ToggleButton, "Forms.ToggleButton.1")
End Function


Zitat:
Prozedur AddFlxEvent

Diese Prozedur fügt dem FlxControl einen neuen EventHandler für ein Event hinzu. Es können einem Event auch mehrere EventHandler zugewiesen werden. Sie werden bei Auslösung des Ereignisses in der registrierten Reihenfolge aufgerufen.
Code:
Public Sub AddFlxEvent(newEventType As FlxEventType, _
                       newEventHandler As Long, _
                       Optional newEventArgs As Object = Nothing)
    If newEventType <> AllEvents And newEventType <> None Then
        Dim f As New FlxEvent
        flxEvents.Add f.AddFlxEvent(newEventType, _
                                    newEventHandler, _
                                    newEventArgs)
    End If
End Sub


Zitat:
Eigenschaft EventHandler

Diese Nur-Schreiben-Eigenschaft weist dem FlxControl für ein Event einen neuen oder weiteren EventHandler zu. Wurden für das Event mehrere EventHandler registriert, dann kann über einen Index das gewünschte Event ausgewählt werden. Wird als Index 0 (FlxIndex.AddNew) angegeben, dann wird der EventHandler als weiterer EventHandler dem Event hinzugefügt. Wird für das Event kein neues EventArgs-Objekt übergeben, dann wird bei einem existierenden Event das bisherige EventArgs-Objekt übernommen, sonst ist es Nothing. EventHandler können gelöscht werden, in dem als flxEvent-Adresse 0& übergeben wird - ein EventHandler mit Adresse 0& wird nicht aufgerufen.
Code:
Public Property Let EventHandler(newEventType As FlxEventType, _
                                 Optional flxEventArgs As Object = Nothing, _
                                 Optional idx As Integer = FlxIndex.First, _
                                 flxEventHandler As Long)
    If newEventType <> AllEvents And newEventType <> None Then
        Dim newPara As New FlxEvent
        Dim found As Boolean
        Dim collIdx As Integer
        If idx <> FlxIndex.AddNew Then
            Dim para As FlxEvent
            Dim evIdx As Integer
            For Each para In Events
                collIdx = collIdx + 1
                If para.EventType = newEventType And para.EventHandler <> 0 Then
                    evIdx = evIdx + 1
                    If evIdx = idx Then
                        found = True
                        flxEvents.Add newPara.AddFlxEvent(newEventType, _
                                                          flxEventHandler, _
                                                          IIf(flxEventArgs Is Nothing, _
                                                              para.EventArgs, _
                                                              flxEventArgs))
                        Exit For
                    End If
                End If
            Next
        End If
        If Not found Then
            flxEvents.Add newPara.AddFlxEvent(newEventType, _
                                              flxEventHandler, _
                                              flxEventArgs)
        Else
            flxEvents.Remove collIdx
        End If
    End If
End Property


Zitat:
Eigenschaft EventArgs

Diese Schreib-/Lese-Eigenschaft weist einem vorhandenen Event ein neues EventArgs-Objekt zu oder gibt ein vorhandenes zurück. Wurden für ein Event mehrere EventHandler registriert, dann kann das gewünschte Event über einen Index gewählt werden (Default: das erste Event, FlxIndex.First). Wird bei der Zuweisung eines neuen EventArgs-Objektes als Index -1 (FlxIndex.All) übergeben, dann wird dieses EventArgs-Objekt jedem EventHandler übergeben. Dieses FlxEventArgs-Objekt wird zusätzlich zum Standard-EventArgs-Objekt an einen EventHandler übergeben.
Code:
Public Property Get EventArgs(evntType As FlxEventType, _
                              Optional idx As Integer = FlxIndex.First) _
                As Object
    If evntType <> AllEvents And evntType <> None And idx <> FlxIndex.AddNew Then
        idx = IIf(idx = FlxIndex.Last, getLastEventIndex(evntType), idx)
        Dim para As FlxEvent
        Dim evIdx As Integer
        For Each para In flxEvents
            If para.EventType = evntType Then
                evIdx = evIdx + 1
                If evIdx = idx Then
                    Set EventArgs = para.EventArgs
                End If
            End If
        Next
    End If
End Property

Code:
Public Property Set EventArgs(evntType As FlxEventType, _
                              Optional idx As Integer = FlxIndex.First, _
                              flxEventArgs As Object)
    If evntType <> AllEvents And evntType <> None And idx <> FlxIndex.AddNew Then
        idx = IIf(idx = FlxIndex.Last, getLastEventIndex(evntType), idx)
        Dim para As FlxEvent
        Dim evIdx As Integer
        For Each para In flxEvents
            If para.EventType = evntType Then
                evIdx = evIdx + 1
                If idx = FlxIndex.All Or evIdx = idx Then
                    Set para.EventArgs = flxEventArgs
                End If
            End If
        Next
    End If
End Property


Code:
' Hilfsfunktion für EventArgs-Property zum Ermitteln des höchsten Index
Private Function getLastEventIndex(evntType As FlxEventType) _
                 As Integer
    Dim para As FlxEvent
    For Each para In flxEvents
        If para.EventType = evntType Then _
            getLastEventIndex = getLastEventIndex + 1
    Next
End Function


Zitat:
Prozedur OnEvent

Diese Prozedur ist der eigentliche „Starter“ der FlxEvents. Sie wird von jedem Standard-Ereignis aufgerufen, welches vom o.a. flx-Member (z.B. flxBtn) ausgelöst wurde, holt sich dann die zu diesem Objekt gehörenden eigenen EventHandler mit den EventArgs und führt sie aus. Die vom auslösenden Control übergebenen EventArgs werden im jeweiligen Ereignis in einem FlxStdEventArgs-Objekt gesammelt und ebenfalls an den EventHandler weitergegeben. Das auslösende MSForms.Control ist selbst im flx-Member enthalten und wird natürlich auch mit an den EventHandler übergeben.
Code:
Private Sub OnEvent(evntType As FlxEventType, Ctrl As Object, Optional ctrlEventArgs As Object)
    Dim fe As FlxEvent
    '   alle EventHandler, die zum Event registriert wurden, ausführen...
    For Each fe In flxEvents
        If fe.EventType = evntType And fe.EventHandler <> 0 Then
            DoFlxEvent fe.EventHandler, ObjPtr(Ctrl), ObjPtr(ctrlEventArgs), ObjPtr(Me), ObjPtr(fe.EventArgs)
        End If
    Next
End Sub



Zitat:
Standard-Ereignisse

Den größten Teil dieser Klasse nehmen die Standard-Ereignisprozeduren ein, denn für alle MSForms.Controls müssen die möglichen Ereignisse abgefangen, die EventArgs zusammengestellt und an den eigenen „Event-Starter“ OnEvent weitergeleitet werden.

Deshalb hier nur exemplarisch einige Beispiele:

Ein Button-Click ist sehr einfach, da nur der Ereignistyp und das auslösende Control übergeben werden brauchen, denn es gibt keine Parameter, die entgegengenommen werden können.
Code:
Private Sub flxBtn_Click()
    OnEvent Click, flxBtn
End Sub


Bei einem ToggleButton ist bei einem DoppelKlick das Cancel-Argument nicht unwichtig, denn es ermöglicht es, das Ereignis abzubrechen, sonst würde der zweite Klick des Doppelklicks das Umschalten rückgängig machen. Im eigenen EventHandler kann also bei Bedarf Cancel auf True gesetzt werden (dieser Wert wird nach dem eigenen EventHandler wieder zurückgelesen) und das Control-eigene Ereignis wird nach dem flxEvent nicht weiter ausgeführt.
Code:
Private Sub flxTgl_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim e As New FlxStdEventArgs
    Set e.Cancel = Cancel
    OnEvent DblClick, flxTgl, e
    Set Cancel = e.Cancel
End Sub


Und als Letztes noch ein MouseMove-Ereignis in einem MultiPage. Es wird ausgelöst, wenn die Maus über einer Page des MultiPage bewegt wird und gibt dabei einige Informationen an, wie z.B. die X/Y-Koordinaten oder den Index der aktiven Page. Auch hier werden alle Werte an das eigene FlxEvent weitergegeben und können dort ausgewertet werden.
Code:
Private Sub flxMpg_MouseMove(ByVal Index As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim e As New FlxStdEventArgs
    e.Index = Index
    e.Button = Button
    e.Shift = Shift
    e.X = X
    e.Y = Y
    OnEvent MouseMove, flxMpg, e
End Sub



3.d. Modul FlxControlTools

Was jetzt noch fehlt, sind die FlxControl-Objektunabhängigen Funktionen, die in einem separaten Modul untergebracht sind.

Zitat:
Im Deklarations-Abschnitt befinden sich nur die API-Funktion, die die eigenen EventHandler (Delegates) startet sowie die (nicht-öffentliche!) Auflistung der gesamten FlxControls.
Code:
Public Declare Function DoFlxEvent _
                         Lib "user32.dll" Alias "CallWindowProcA" ( _
                         ByVal lpPrevWndFunc As Long, _
                         Optional ByVal hwnd As Long, _
                         Optional ByVal msg As Long, _
                         Optional ByVal wParam As Long, _
                         Optional ByVal lParam As Long) As Long

Code:
Private FlxControls As New Collection


Zitat:
Funktion GetAddressOf

Die erste Funktion gibt nur die Adresse eines AddressOf-Operators zurück, der selbst nicht als Ausdruck und somit als Wertzuweisung genutzt werden kann.
Code:
Public Function GetAddressOf(newEventHandler As Long) _
                As Long
    GetAddressOf = newEventHandler
End Function


Zitat:
Prozeduren NewFlxControl und RemoveFlxControl

Dann brauchen wir natürlich eine Prozedur, die der FlxControls-Collection neue FlxControls hinzufügt, denn sie ist ja Private, man soll ja nicht unkontrolliert etwas daran ändern können…
Code:
Public Sub NewFlxControl(flxCtrl As FlxControl)
    FlxControls.Add flxCtrl
End Sub


…insbesondere nicht einfach Elemente löschen, denn dann müssen natürlich auch die zugehörigen MSForms.Controls entfernt werden. Und Beides erledigt die Prozedur RemoveFlxControl.
Code:
Public Sub RemoveFlxControl(Ctrl As MSForms.Control)
    If TypeOf Ctrl.Parent Is MSForms.Frame Or _
       TypeOf Ctrl.Parent Is MSForms.Page Or _
       TypeOf Ctrl.Parent Is MSForms.UserForm Then

        ' aus FlxControls-Auflistung entfernen
        Dim idx As Integer
        For idx = 1 To FlxControls.Count
            If FlxControls(idx).Control Is Ctrl Then
                FlxControls.Remove idx
                Exit For
            End If
        Next

        ' aus Parent-Control entfernen
        Dim c As Control
        For Each c In Ctrl.Parent.Controls
            If c Is Ctrl Then
                Ctrl.Parent.Remove c.Name
                Exit For
            End If
        Next

    End If
End Sub


Zitat:
Die FlxControl-Indexer

Funktion FlxControlByControl

Dann eine Funktion, die von einem MSForms.Control das zugehörige FlxControl zurückliefert, wenn es denn existiert. Das wird z.B. benötigt, um in einer Schleife die FlxEvents für ein MSForms.Control zu ändern.
Code:
Public Function FlxControlByControl(ctrl As MSForms.Control) As FlxControl
    Dim flx As FlxControl
    For Each flx In FlxControls
        If flx.Control Is ctrl Then
            Set FlxControlByControl = flx
            Exit For
        End If
    Next
End Function


Funktion FlxControl

Und zum Schluss noch der FlxControl-Indexer, der den direkten Zugriff auf ein MSForms.Control in einem FlxControl ermöglicht, indem nur der Name des Controls und ggf. der Index und die Einschränkung auf ein Event angegeben werden.
Code:
Public Function FlxControl(flx As Variant, _
                           Optional idx As Integer = FlxIndex.First, _
                           Optional evntType As FlxEventType = AllEvents) _
                As Object
    Dim flxC As Collection
    Set flxC = getFlxControls(flx:=flx, _
                              evntType:=evntType)
    If flxC.Count = 0 Or idx = FlxIndex.AddNew Then
        Set FlxControl = Nothing
    Else
        Select Case idx
        Case FlxIndex.First
            Set FlxControl = flxC(1)
        Case FlxIndex.Last
            Set FlxControl = flxC(flxC.Count)
        Case FlxIndex.All
            Set FlxControl = flxC
        Case Else
            Set FlxControl = flxC(idx)
        End Select
    End If
End Function


Code:
' ausgelagerte Hilfsfunktion für den Indexer zur Ermittlung der Controls
Private Function getFlxControls(flx As Variant, _
                                evntType As FlxEventType) _
                 As Collection
    Set getFlxControls = New Collection
    Dim found As Boolean ', isObj As Boolean,
    Dim flxCtrl As FlxControl
    For Each flxCtrl In FlxControls
        found = False
        If IsObject(flx) Then
            If flxCtrl Is flx Then found = True
        Else
            If flxCtrl.Name = flx Then found = True
        End If
        If found Then
            ' EventHandler erforderlich?
            If evntType = AllEvents Then
                getFlxControls.Add flxCtrl.Control
            Else
                Dim fe As New FlxEvent
                ' mit Events
                If evntType <> None Then
                    For Each fe In flxCtrl.Events
                        If fe.EventType = evntType Then
                            getFlxControls.Add flxCtrl.Control
                        End If
                    Next
                ' ohne Events
                ElseIf flxCtrl.Events.Count = 0 Then
                    getFlxControls.Add flxCtrl.Control
                End If
            End If
        End If
    Next
End Function



Epilog

Seit dem ich diese FlxControls habe, benutze ich sie für eigene Projekte fast nur noch. Sie sind für mich eine echte Hilfe. Ich hoffe, der ein oder andere sieht das ähnlich und ich konnte mit diesem Projekt auch andere Projekte „bereichern“. Für entsprechende Rückmeldungen wäre ich natürlich sehr dankbar. Vielleicht hat ja auch jemand noch Vorschläge oder sogar Lösungen für Erweiterungen dieses Projektes? Dann immer raus damit!
Und wenn jemand Fehler aller Art entdeckt oder Verbesserungsvorschläge hat, dann bin ich natürlich auch für diese Hinweise sehr dankbar!
Und nun viel Spaß mit FlxControls

wünscht
KeepCoolMan


_________________
Gruß Thomas

Ich freue mich über Feedback, Kritik und Verbesserungsvorschläge...
Wer will, findet Möglichkeiten; wer nicht will, findet Gründe! :: Unt wär Rächdshraibfela fint, daaf sie behaltn!



FlxControls Turorial und Demo.zip
 Beschreibung:
Das gesamte Tutorial inkl. aller Makros und Mini-TicTacToe; getetstet mit OfficeXP/WinXP und Office2010/Win7

Download
 Dateiname:  FlxControls Turorial und Demo.zip
 Dateigröße:  410.5 KB
 Heruntergeladen:  53 mal

Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Word Gestaltungselemente: Gleiche Spaltenbreite nur für Teil der Tabelle machbar? 6 Regina_Docht 23883 03. März 2014, 18:46
EPsi1 Gleiche Spaltenbreite nur für Teil der Tabelle machbar?
Keine neuen Beiträge Word Gestaltungselemente: Kopfzeile verschwindet zum Teil mitten im Kapitel 11 Patience 316 01. Mai 2013, 17:33
Patience Kopfzeile verschwindet zum Teil mitten im Kapitel
Keine neuen Beiträge Word Hilfe: Grafik in Word (Verknüpfung) wird zum Teil nicht gedruckt 0 rufi 181 14. Jan 2013, 16:14
rufi Grafik in Word (Verknüpfung) wird zum Teil nicht gedruckt
Keine neuen Beiträge Word VBA Programmierung (Makros): Word VBA: Projekt kann nicht angezeigt werden 1 _TryOut_ 1291 07. Nov 2012, 17:46
mumpel Word VBA: Projekt kann nicht angezeigt werden
Keine neuen Beiträge Word Hilfe: Excel-Tabelle o Teil davon als Grafik in Word einfügen /2007 37 revicon 4654 09. Mai 2012, 15:34
Prenzlberg Excel-Tabelle o Teil davon als Grafik in Word einfügen /2007
Keine neuen Beiträge Word VBA Programmierung (Makros): Einen Teil der Fußzeile schützen 0 kulahua 506 18. Apr 2011, 13:37
kulahua Einen Teil der Fußzeile schützen
Keine neuen Beiträge Word VBA Programmierung (Makros): Teil eines String in blau markieren 0 Peter11111 511 03. Aug 2010, 08:28
Peter11111 Teil eines String in blau markieren
Keine neuen Beiträge Word Formate: Excel- bzw. VBA Projekt mit 65 MB zippen 3 mobytoby 789 15. Jun 2010, 19:10
mobytoby Excel- bzw. VBA Projekt mit 65 MB zippen
Keine neuen Beiträge Word Serienbriefe: MERGEFIELD in ELSE Teil der IfThenElse FKT im Serienbrief 2 ohjeeminee 2866 18. Feb 2010, 12:15
ohjeeminee MERGEFIELD in ELSE Teil der IfThenElse FKT im Serienbrief
Keine neuen Beiträge Word VBA Programmierung (Makros): Makro/Projekt/Bibliothek nicht gefunden 8 Gast 2442 13. Okt 2009, 23:52
Office-Freak Makro/Projekt/Bibliothek nicht gefunden
Keine neuen Beiträge Word VBA Programmierung (Makros): Wie einen Teil eines Textes auf einer Seite zusammenhalten? 4 Wedge Antilles 507 17. März 2009, 10:23
Gast Wie einen Teil eines Textes auf einer Seite zusammenhalten?
Keine neuen Beiträge Word Formate: In einer Zeile den letzten Teil rechtsbündig plazieren??? 2 jet-ti 1299 01. Dez 2008, 17:19
Gast In einer Zeile den letzten Teil rechtsbündig plazieren???
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Excel Tipps