Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
FlxControls - Teil 2 (Die FlxControls)
zurück: FlxControls - Teil 3 (Das Projekt) weiter: FlxControls - Teil 1 (Viele Controls - ein Ereignis) 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:46
Rufname: Thomas
Wohnort: Celle


FlxControls - Teil 2 (Die FlxControls) - FlxControls - Teil 2 (Die FlxControls)

Nach oben
       Version: (keine Angabe möglich)

Teil 2 – Die FlxControls

Ein bisschen Zeit investiert, und voilá – es sind die FlxControls mit dynamischen, sprich austauschbaren EventHandlern entstanden.

Hier die wichtigsten Eigenschaften in Kürze:
  • alle MSForms.Controls können zur Laufzeit beliebig den FlxControls und einer UserForm, Frame oder MultiPage hinzugefügt oder entfernt werden
  • vorhandene MSForms.Controls können in die FlxControls übernommen werden
  • mehrere FlxControls können den gleichen Namen haben
  • jedem MSForms.Control (FlxControl) können für jedes unterstützte Ereignis ein oder auch mehrere EventHandler (FlxEvents) zugewiesen werden
  • jedem FlxEvent kann ein eigenes FlxEventArgs-Objekt zugewiesen werden
  • jedem EventHandler werden das auslösende MSForms.Control, alle Argumente des Standard-Ereignisses sowie die eigenen FlxEventArgs übergeben
  • alle FlxEvents und FlxEventArgs sind zur Laufzeit beliebig ersetzbar
  • auf einzelne FlxEventArgs-Member kann jederzeit beliebig zugegriffen werden


Zur Veranschaulichung hier zuerst ein einfaches TicTacToe-Demo mit FlxControls.
Es besteht aus einem „nackten“ UserForm und folgendem Code:

Code UserForm1
Code:
Option Explicit

Private ufFlx As FlxControl

Private Sub UserForm_Initialize()
    ' UserForm einrichten
    With UserForm1
        .Caption = "FlxControl-Demo"
        .Height = 280
        .Width = 280
    End With
    ' Überschrift
    Set ufFlx = New FlxControl
    ufFlx.AddFlxControl("", UserForm1) = Label
    With ufFlx.Control
        .Caption = "Ein einfaches TicTacToe als FlxControl-Demo"
        .Move 0, 20, 280, 18
        .Font.Bold = True
        .TextAlign = fmTextAlignCenter
    End With
    ufFlx.AddFlxControl("", UserForm1) = Label
    With ufFlx.Control
        .Caption = "with FlxControls by KeepCoolMan (office-loesung.de)"
        .Move 0, 240, 280, 18
        .Font.Italic = True
        .TextAlign = fmTextAlignCenter
    End With    ' Spielfeld-Rahmen
    Set ufFlx = New FlxControl
    ufFlx.AddFlxControl("Spielfeld", UserForm1) = Frame
    ufFlx.Control.Move 40, 40, 200, 200
    ' Spielfeld-Buttons
    Dim x As Integer, y As Integer
    For x = 1 To 3: For y = 1 To 3 'jeder Button erhält binär-codierten Positions-Suffix
        Set ufFlx = New FlxControl
        With ufFlx
            .AddFlxControl("Button" & 2 ^ ((x - 1) * 3 + (y - 1)), _
                           FlxControl("Spielfeld")) = CommandButton
            .AddFlxEvent Click, AddressOf ButtonClick
            .Control.Move x * 40, y * 40, 40, 40
            .Control.BackColor = wdColorWhite
        End With
    Next y: Next x
End Sub


Modul TheGame
Code:
Option Explicit

Private Const PLAYER1COL = wdColorGreen
Private Const PLAYER2COL = wdColorRed
Private lastPlayer As WdColor
Private remis As Integer
Private player1 As Integer
Private player2 As Integer

Public Sub ButtonClick(ByVal sender As Object, ByVal e As Object, _
                       ByVal flxSender As Object, ByVal f As Object)
    lastPlayer = IIf(lastPlayer = PLAYER1COL, PLAYER2COL, PLAYER1COL)
    sender.BackColor = lastPlayer
    flxSender.EventHandler(Click) = 0&
    remis = remis + 1
    Dim playAgain
    If remis = 9 Then
        playAgain = wonMessage("Unentschieden!")
    ElseIf lastPlayer = PLAYER1COL Then
        If won(sender, player1) Then playAgain = wonMessage("Spieler 1 hat gewonnen!")
    ElseIf won(sender, player2) Then playAgain = wonMessage("Spieler 2 hat gewonnen!")
    End If
    If Not IsEmpty(playAgain) Then If playAgain <> vbYes Then Unload UserForm1
End Sub

Private Function won(btn As CommandButton, ByRef player As Integer) As Boolean
    Dim n As Integer ' die binäre Position ermitteln und dem Spieler aufaddieren
    n = Right(btn.Name, Len(btn.Name) - 6)
    player = player + n
    Dim gewinn, chk As Integer
    gewinn = Array(7, 56, 73, 84, 146, 273, 292, 448)
    For chk = 0 To 7 ' prüfen, ob einer der 8 Gewinnmöglichkeiten erreicht wurde
        If (player And gewinn(chk)) = gewinn(chk) Then won = True
    Next
End Function

Private Function wonMessage(txt As String) As Integer
    wonMessage = MsgBox(txt & vbCrLf & "Nochmal?", vbYesNo Or vbQuestion)
    remis = 0
    player1 = 0
    player2 = 0
    lastPlayer = PLAYER2COL ' Spieler 1 fängt immer an
    Dim btn As CommandButton
    For Each btn In FlxControl("Spielfeld").Controls
        btn.BackColor = wdColorWhite
        FlxControlByControl(btn).EventHandler(Click) = GetAddressOf(AddressOf ButtonClick)
    Next
End Function


Dieses TicTacToe hat keinerlei KI und benötigt 2 Spieler, denn es ist ja nur als Demo für die FlxControls gedacht…
(Im Word-Dokument [siehe Anhang am Ende des letzten Teils] kann hier das Spiel über einen Button gestartet werden)


2.a. Erstellen von FlxControls

Hinweis: Im Verlauf der Dokumentation ist als Parameter EventHandler immer die Adresse der Prozedur oder Funktion gemeint, die beim Auslösen eines Ereignisses aufgerufen wird.

Der Einfachheit halber sollte im UserForm-Modul im Deklarations-Abschnitt eine Objekt-Variable als FlxControl deklariert werden.
Code:
Private ufFlxControls As FlxControl


Für jedes zu erstellende FlxControl muss ein eigenes FlxControl-Objekt instanziiert werden. Es wird automatisch in die FlxControls-Auflistung übernommen.
Code:
Set ufFlxControls = New FlxControl


Zitat:
FlxControlType-Enumeration

Die möglichen MSForms.Controls werden in der FlxControlType-Enumeration bereitgestellt:
Code:
    UserForm
    CheckBox
    ComboBox
    CommandButton
    Frame
    Image
    Label
    ListBox
    MultiPage
    OptionButton
    ScrollBar
    SpinButton
    TabStrip
    TextBox
    ToggleButton


Zitat:
FlxIndex-Enumeration

Für Index-Operationen steht folgende FlxIndex-Enumeration zur Verfügung, die für die angegebenen Werte statt eines Integers verwendet werden kann:
Code:
    First = 1
    Last = -99
    All = -1
    AddNew = 0



Zitat:
AddFlxControl

Übernahme vorhandener MSForms.Controls in die FlxControls, um ihnen z.B. FlxEvents zuweisen zu können.

FlxControl.AddFlxControl("ControlName" | Control, ParentControl) = FlxControlType

Parameter:
    wahlweise
  • ControlName: der Name des vorhandenen MSForms.Control als String
    oder
  • Control: das vorhandene MSForms.Control

  • ParentControl: das MSForms.Control, in dem sich das zu übernehmende MSForms.Control befindet

  • FlxControlType: der Typ des MSForms-Control; eine Konstante der FlxControlType-Enumeration

Beispiel: eine vorhandene Textbox mit dem Namen TextBox1 in der UserForm UserForm1 wird in die FlxControls übernommen:
Code:
Set ufFlxControl = New FlxControl
ufFlxControl.AddFlxControl(TextBox1, UserForm1) = [FlxControlType.]TextBox



Erstellen eines neuen MSForms.Control in den FlxControls.

FlxControl.AddFlxControl("ControlName", ParentControl) = FlxControlType

Parameter:
  • ControlName: der Name des neuen MSForms.Control als String

  • ParentControl: das MSForms.Control, in dem das neue MSForms.Control erstellt werden soll

  • FlxControlType: der Typ des MSForms-Control; eine Konstante der FlxControlType-Enumeration

Beispiel: ein neues Frame mit dem Namen Frame1 wird in der UserForm UserForm1 erstellt:
Code:
Set ufFlxControl = New FlxControl
ufFlxControl.AddFlxControl("Frame1", UserForm1) = Frame



Zitat:
Control

Ermitteln des MSForms.Control oder der UserForm aus einem FlxControl

FlxControl.Control

Rückgabe:
  • Object: das MSForms.Control oder die UserForm, welches über das FlxControl erstellt oder registriert wurde

Diese Eigenschaft ist schreibgeschützt.

Beispiel: ein mit FlxControl erstelltes MSForms.Control (z.B. ein CommandButton) wird an X/Y-Position 10, 20 im übergeordnetem MSForms.Control platziert sowie die Breite auf 80 und die Höhe auf 30 eingestellt:
Code:
ufFlxControls.Control.Move 10, 20, 80, 30



Zitat:
Parent

Ermitteln des übergeordneten MSForms.Control oder UserForm aus einem FlxControl

FlxControl.Parent

Rückgabe:
  • Object: das MSForms.Control oder die UserForm, in dem das MSForms.Control über das FlxControl erstellt wurde

Diese Eigenschaft ist schreibgeschützt.

Beispiel: der Name des übergeordneten MSForms.Control, in dem die mit FlxControl erstellte MSForms.TextBox TextBox1 erstellt wurde, wird ausgegeben:
Code:
MsgBox FlxControl("TextBox1").Parent.Name



Zitat:
Name

Name eines MSForms.Control oder UserForm aus einem FlxControl ermitteln oder ändern

FlxControl.Name = "ControlName"

Parameter:
  • ControlName: der neue Name des MSForms.Control oder der UserForm

Rückgabe:
  • String: der vergebene Name des MSForms.Control oder der UserForm

Diese Eigenschaft hat Schreib- und Lesezugriff.

Beispiel: der Name des in der Variablen ufFlxControl erstellten MSForms.Control (z.B. die mit FlxControl erstellte MSForms.TextBox TextBox1), wird geändert:
Code:
ufFlxControl.Name = "NeuerName"

Da der Name des MSForms.Controls geändert wird, stellt diese Eigenschaft nur eine Vereinfachung des Zugriffs dar. Die Änderung des Namens wäre auch über den FlxControl-Indexer wie folgt möglich:
Code:
FlxControl("TextBox1").Name = "NeuerName"
FlxControl(ufFlxControl).Name = "NeuerName"



Zitat:
Events

Ereignisse eines FlxControl abfragen

FlxControl.Events

Rückgabe:
  • FlxEvent-Collection: eine Auflistung aller für das FlxControl registrierten FlxEvents

Diese Eigenschaft ist schreibgeschützt.

Beispiel: die registrierten Ereignisse eines FlxControl werden in einer Schleife abgefragt:
Code:
Dim ev As FlxEvent
For Each ev In ufFlxControl.Events
' ...
Next

Jedes FlxEvent-Objekt enthält folgende Eigenschaften:
  • EventType: der Typ des Ereignisses; schreibgeschützt; eine Konstante der FlxEventType-Enumeration
  • EventHandler: die Adresse der EventHandler-Funktion/-Prozedur; schreibgeschützt; Long
  • EventArgs: das Object, welches dem EventHandler bei Ereignisauslösung übergeben wird; Schreib-/Lesezugriff



Die folgenden Methoden sind FlxControl-Objektunabhängig und daher in ein eigenes Modul ausgelagert.

Zitat:
FlxControl

Rückgabe von MSForms.Controls aus den FlxControls („FlxControl-Indexer“), um z.B. auf die Eigenschaften zugreifen zu können oder einem mit FlxControl erzeugtem Containerelement (Frame oder MultiPage) weitere MSForms.Controls hinzuzufügen.

FlxControl("ControlName" | FlxControl[, [FlxIndex][, FlxEventType]])

Parameter:
    wahlweise
  • ControlName: der Name des vorhandenen MSForms.Control als String
    oder
  • FlxControl: das vorhandene FlxControl

  • FlxIndex: optional – wenn mehrere MSForms.Controls mit dem gleichen Namen registriert wurden, wird eine Auflistung der MSForms.Controls erstellt und es kann festgelegt werden, ob die gesamte Auflistung oder welches MSForms.Control zurückgegeben werden soll; Integer oder eine Konstante der FlxIndex-Enumeration; Default: 1 (FlxIndex.First)

  • FlxEventType: optional – hiermit kann die Rückgabe eingeschränkt werden auf MSForms.Controls, für die bereits ein bestimmtes FlxEvent registriert wurde oder für die noch kein FlxEvent registriert wurde oder unabhängig vom registrierten FlxEvent; eine Konstante der FlxEventType-Enumeration; Default: FlxEventType.AllEvents

Rückgabe:
    entweder
  • MSForms.Control: ein MSForms.Control, wenn ein spezifischer Index angegeben wurde
    oder
  • Collection: eine Auflistung von MSForms.Controls, wenn FlxIndex.All angegeben wurde; auch wenn hierbei nur ein MSForms.Control ermittelt wurde, wird eine Collection zurückgegeben und es muss über Index auf das MSForms.Control zugegriffen werden
    oder
  • Nothing: wenn kein MSForms.Control ermittelt werden konnte oder FlxIndex.AddNew (ist hier ungültig!)angegeben wurde


Beispiel 1: der UserForm UserForm1 wird ein neuer Titel zugewiesen:
Code:
FlxControl("UserForm1").Caption = "Flexible Controls"

Beispiel 2: es werden alle MSForms.CommandButtons mit dem Namen „Button“, denen bereits ein Click-Ereignis zugewiesen wurde, ermittelt. Dem 2. der gefundenen MSForms.CommandButtons wird eine neue Hintergrundfarbe zugewiesen:
Code:
FlxControl("Button", FlxIndex.All, Click)(2).BackColor = RGB(15, 200, 85)

Beispiel 3: in dem mit FlxControl erstelltem MSForms.Frame Frame1 wird ein MSForms.CommandButton mit dem Namen „Button“ erstellt:
Code:
Set ufFlxControl = New FlxControl
ufFlxControl.AddFlxControl("Button", FlxControl("Frame1")) = CommandButton



Zitat:
FlxControlByControl

Rückgabe eines FlxControl von einem MSForms.Controls, um z.B. auf die FlxEvents zugreifen zu können.

FlxControlByControl(Control)

Parameter:
  • Control: das vorhandenen MSForms.Control

Rückgabe:
  • FlxControl: das FlxControl, wenn das MSForms.Control als FlxControl registriert war
    oder
  • Nothing: wenn kein FlxControl mit dem MSForms.Control ermittelt werden konnte


Beispiel: in einem Frame mit MSForms.CommandButtons wird für jeden als FlxControl registrierten Button das FlxEvent gelöscht:
Code:
Dim btn As CommandButton
For Each btn In FlxControl("Frame1").Controls
      FlxControlByControl(btn).EventHandler(Click) = 0&
Next



Zitat:
RemoveFlxControl

Löschen eines mit FlxControl erstellten MSForms.Control aus dem übergeordnetem MSForms.Control und Entfernen des FlxControl

RemoveFlxControl(Control)

Parameter:
  • Control: das MSForms.Control, das entfernt und dessen FlxControl aus der FlxControls-Auflistung entfernt werden soll


Beispiel: das mit FlxControl erstellte MSForms.Control TextBox1 wird entfernt:
Code:
RemoveFlxControl FlxControl("TextBox1")


Aus Sicherheitsgründen wurde darauf verzichtet, ganze Auflistungen löschen zu können. In solchen Fällen muss diese Prozedur in einer Schleife ausgeführt werden.

Diese Prozedur kann ausschließlich auf mit FlxControl erzeugte MSForms.Controls angewendet werden!



2.b. Erstellen von und Arbeiten mit FlxEvents

Zitat:
FlxEventType-Enumeration
Die möglichen Ereignisse werden in der FlxEventType-Enumeration bereitgestellt:
Code:
    None
    AllEvents
    AddControl
    BeforeDragOver
    BeforeDropOrPaste
    Change
    Click
    DblClick
    DropButtonClick
    Error_
    KeyDown
    KeyUp
    KeyPress
    Layout
    MouseDown
    MouseUp
    MouseMove
    RemoveControl
    Scroll
    SpinDown
    SpinUp
    Zoom


Die Ereignisse BeforeUpdate, AfterUpdate, Enter und Exit können nicht mit FlxControls verarbeitet werden, da bei diesen Ereignissen nicht das MSForms.Control selbst als Ereignisquelle auftritt, sondern die Control-Schnittstelle. Daher lassen sich die Ereignisse nicht mit WithEvents abfangen.

Jedem Ereignis können beliebig viele FlxEvents zugewiesen werden. Die enthaltenen EventHandler werden bei Auslösen des Ereignisses in der zugewiesenen Reihenfolge aufgerufen.



Zitat:
GetAddressOf

Alle EventHandler, d. h. alle Prozeduren oder Funktionen, die aufgrund eines Ereignisses ausgeführt werden, müssen als Adress-Zeiger übergeben werden. Dafür dient normalerweise der AddressOf-Operator, der allerdings nur als Argument in einem Prozedur-/Funktionsaufruf und nicht als Ausdruck verwendet werden kann.
Deshalb wird die Funktion GetAddressOf bereitgestellt, um die Adresse auch als Zuweisungswert verwenden zu können.

GetAddressOf(EventHandler)

Parameter:
  • EventHandler: die Adresse einer Funktion oder Prozedur, die mit dem AddressOf-Operator ermittelt wurde

Rückgabe:
  • Long: die Adresse der Funktion oder Prozedur als Wert


Beispiel: Zuweisung der Adresse der Prozedur myProc an die Long-Variable adr
Code:
adr = GetAddressOf(AddressOf myProc)



Zitat:
AddFlxEvent

Zuweisen eines neuen oder weiteren FlxEvents an ein FlxControl

FlxControl.AddFlxEvent FlxEventType, EventHandler[, EventArgs]

Parameter:
  • FlxEventType: das Ereignis des MSForms.Controls, dem eine eigene Prozedur oder Funktion zugewiesen werden soll; eine Konstante der FlxEventType-Enumeration

  • EventHandler: die Adresse der Funktion oder Prozedur, die mit dem AddressOf-Operator ermittelt wurde

  • EventArgs: optional – ein beliebiges Objekt, das dem EventHandler als Argument übergeben wird


Beispiel: dem FlxControl ufFlxControl wird für das Change-Ereignis die Prozedur myChange und ein neues DemoEventArgs-Objekt zugewiesen
Code:
ufFlxControl.AddFlxEvent Change, AddressOf myChange, New DemoEventArgs



Zitat:
EventHandler

Ändern eines bestehenden oder Zuweisen eines neuen oder weiteren FlxEvents an ein FlxControl

FlxControl.EventHandler(FlxEventType[, [EventArgs][, FlxIndex]]) = EventHandler

Parameter:
  • FlxEventType: das Ereignis des MSForms.Controls, dessen EventHandler geändert oder hinzugefügt werden soll; eine Konstante der FlxEventType-Enumeration

  • EventArgs: optional – ein beliebiges Objekt, das dem EventHandler als Argument übergeben wird; wird kein neuer EventHandler hinzugefügt, sondern ein bestehender EventHandler geändert und es wird kein neues EventArgs-Objekt übergeben, dann wird das bisherige EventArgs-Objekt übernommen

  • FlxIndex: optional – wenn mehrere EventHandler für das gleiche Ereignis registriert wurden, kann über diesen Index festgelegt werden, welcher EventHandler geändert werden soll; wird 0 (AddNew) übergeben, wird ein weiterer EventHandler hinzugefügt; Integer oder eine Konstante der FlxIndex-Enumeration; Default: 1 (FlxIndex.First)

  • EventHandler: die Adresse der Funktion oder Prozedur, die mit dem AddressOf-Operator ermittelt wurde; wird als Adresse 0& übergeben, wird der EventHandler nicht mehr aufgerufen.

Diese Eigenschaft hat Nur-Schreib-Zugriff. Die Event-Parameter können über ein FlxEvent-Objekt ermittelt werden (siehe FlxControl.Events).

Beispiel: als EventHandler des FlxControl ufFlxControl wird für das letzte Change-Ereignis die Prozedur myChange und ein neues DemoEventArgs-Objekt zugewiesen
Code:
ufFlxControl.EventHandler(Change, New DemoEventArgs, FlxIndex.Last) = GetAddressOf(AddressOf myChange)


Diese Eigenschaft kann zwar auch genutzt werden, um neue EventHandler zuzuweisen, aber durch die umständlichere Übergabe des EventHandlers ist die AddFlxEvent-Prozedur in der Regel besser geeignet. Die EventHandler-Eigenschaft ist in erster Linie für Änderungen bestehender EventHandler gedacht.



Zitat:
EventArgs

Ändern, Zuweisen oder Auslesen eines EventArgs–Objektes eines FlxControl

FlxControl.EventArgs(FlxEventType[, FlxIndex]) = EventArgs

Parameter:
  • FlxEventType: das bereits registrierte Ereignis des FlxControl, dessen EventArgs geändert, zugewiesen oder zurückgegeben werden soll; eine Konstante der FlxEventType-Enumeration; dürfen nicht die Konstanten AllEvents oder None sein, in diesen Fällen wird die Zuweisung ignoriert

  • FlxIndex: optional – wenn mehrere EventHandler für das gleiche Ereignis registriert wurden, kann über diesen Index festgelegt werden, für welchen EventHandler die EventArgs geändert werden soll; wird -1 (All) übergeben, wird jedem EventHandler dieses Ereignisses das neue EventArgs-Objekt zugewiesen; Integer oder eine Konstante der FlxIndex-Enumeration; Default: 1 (FlxIndex.First)

  • EventArgs: ein beliebiges Object, das dem EventHandler als Argument übergeben wird; dieses Objekt wird zusätzlich zum Standard-EventArgs-Objekt, welches aus den Parametern des Standard-Ereignisses erzeugt wird, übergeben.

Diese Eigenschaft hat Lese-/-Schreib-Zugriff.

Beispiel 1: dem Member Para3 eines EventArgs-Objektes des FlxControl ufFlxControl wird für das Change-Ereignis ein neuer Wert zugewiesen
Code:
ufFlxControl.EventArgs(Change).Para3 = "Neuer Wert"


Beispiel 2: dem Member Para3 eines EventArgs-Objektes des FlxControl ufFlxControl wird für das letzte Change-Ereignis ein neuer Wert zugewiesen
Code:
ufFlxControl.EventArgs(Change, FlxIndex.Last).Para3 = "Neuer Wert"



2.c. Die EventHandler

Um den Ereignissen verschiedene und auch mehrere Routinen zuweisen zu können, wird die Technik der Delegates verwendet. Da dies seitens VBA nicht unterstützt wird, wurde dafür das in meinem Tutorial [url=http://www.office-loesung.de/ftopic509235_0_0_asc.php„Delegates in VBA[/url] beschriebene Workaround benutzt. Die verwendete API-Funktion CallWindowProc übergibt dabei immer 4 Argumente als Long-Adressen (oder auch LongPtr), die hier auch alle für die EventHandler benutzt werden, auch wenn sie ggf. nicht gebraucht werden. Das sind im Einzelnen:

  • hwnd -> sender: beinhaltet das auslösende MSForms.Control als Object

  • msg -> e: beinhaltet ein Standard-EventArgs-Objekt, in dem die Standard-Argumente des jeweiligen Ereignisses (z.B. Cancel) enthalten sind

  • wParam -> flxSender: beinhaltet das gesamte FlxControl, dessen MSForms.Control das Ereignis ausgelöst hat

  • lParam -> f: beinhaltet das eigene EventArgs-Objekt, in dem weitere benutzerdefinierte Argumente zusätzlich zu den Standard-EventArgs an den EventHandler übergeben werden können


Signatur

Da alle Parameter benutzt werden, sollten auch alle als EventHandler verwendeten Funktionen oder Prozeduren diese Pointer vom Stack holen, sonst könnte es zu „Automatisierungsfehlern“ kommen.

Jeder eigene EventHandler sollte somit folgende Signatur haben:

Code:
Sub meineProc(ByVal sender As Object, ByVal e As Object, ByVal flxSender As Object, ByVal f As Object)


Über diese Parameter können dann auch alle Member verwertet oder manipuliert werden, z.B.
Code:
MsgBox sender.Caption   'Ausgabe des Titels einer UserForm

Code:
e.cancel = true      'Doppelklick auf einen ToggleButton nicht auswerten

Code:
flxSender.EventHandler(Change) = GetAddressOf(AddressOf newChangeEventHandler)   'Ändern des EventHandlers

Code:
f.memberVar = 1000   'Ändern eines Members des benutzereigenen EventArgs-Objektes



Position

Alle Funktionen und Prozeduren, die als EventHandler genutzt werden sollen, müssen in Modulen definiert werden und dürfen sich nicht in Word-Objekt-Modulen (ThisDocument), Formular-Modulen oder Klassen-Modulen befinden!

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: 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 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 Tipps & Tricks: FlxControls - Teil 3 (Das Projekt) 0 KeepCoolMan 1134 25. Feb 2012, 16:45
KeepCoolMan FlxControls - Teil 3 (Das Projekt)
Keine neuen Beiträge Word Gestaltungselemente: Ergebnis bzw. Teil einer Formel doppelt unterstreichen 5 PgUp 9654 06. Feb 2012, 03:43
EPsi1 Ergebnis bzw. Teil einer Formel doppelt unterstreichen
Keine neuen Beiträge Word Hilfe: Einen Teil der Fußzeile schützen 0 kulahua 269 26. Apr 2011, 14:20
kulahua Einen Teil der Fußzeile schützen
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 Gestaltungselemente: Referenz auf einen Teil einer Bildbeschriftung 1 _Micha_ 1281 01. Okt 2010, 17:07
Gast Referenz auf einen Teil einer Bildbeschriftung
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 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): 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 Gestaltungselemente: Word 2007 - Teil einer Grafik ausschneiden - geht das? 3 MBMBMB 16466 08. Dez 2008, 14:05
Nix Ahnung Word 2007 - Teil einer Grafik ausschneiden - geht das?
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Word Serienbriefe