Traitement des événements
Cet exemple montre comment vous pouvez capturer et répondre à des événements dans vos programmes Basic. Le code du programme et les objets FlexPro requis se trouvent dans la base de données appelée Events.fpd. Le chemin vers la Base de données du projet est généralement C:\Utilisateurs\Public\Documents\Weisang\FlexPro\2021\Examples\VBA\Events\Events.fpd or C:>Users>Public>Public Documents>Weisang>FlexPro>2021>Examples>VBA>Events>Events.fpd.Cette base de données contient un graphique avec deux axes X. Les valeurs X de la courbe sont mises à l'échelle au-dessus de l'axe inférieur. Dans l'exemple, la courbe représente un itinéraire mesuré en km. Le deuxième axe, qui figure en haut du diagramme, attribue des noms à certains endroits le long de cette route. Dans l'exemple, il s'agit de noms de villes que l'on peut trouver sur l'itinéraire. Deux séries de données ont été créées pour mettre à l'échelle cet axe. La série de données Cities contient les noms des villes, et la série de données Positions contient leurs emplacements le long de l'itinéraire. Pour étiqueter l'axe avec ces données, le type d'axe Linéaire, division par ensemble de données a été sélectionné dans l'onglet Mise à l'échelle de l'axe et la série de données Positions a été saisie comme ensemble de données. Cela détermine les points où les divisions d'axe doivent apparaître. Dans l'onglet Étiquetage des divisions, l'option Étiquetage des divisions à l'aide d'une série de données, d'un signal ou d'une fonction a été activée et Cities a été saisi comme ensemble de données. Depuis FlexPro 7, vous pouvez facilement synchroniser les valeurs de fin d'axe de ce deuxième axe X avec le premier sur l' échelle des axes en sélectionnant l'option Identique à l'axe précédent. Cet axe ne peut pas être mis à l'échelle automatiquement car aucune courbe ne sera affichée au-dessus de lui.
L'exemple suivant, qui a été développé à l'origine pour FlexPro 6, illustre comment les valeurs finales du deuxième axe peuvent être synchronisées avec le premier en utilisant le traitement des événements. Il en résulte les exigences suivantes :
•Le traitement des événements doit être activé à l'ouverture de la base de données et remis dans son état antérieur à la fermeture de la base.
•Lors de l'ouverture du diagramme, le deuxième axe doit être réglé sur une échelle fixe et les valeurs finales actuelles du premier axe doivent être adoptées.
•Lorsque vous effectuez un zoom avant ou arrière à l'aide du curseur, les nouvelles valeurs finales du premier axe X doivent être adoptées par le second.
Activation du traitement des événements
Cette tâche peut être exécutée en mettant en œuvre les deux macros AutoOpen et AutoClose. Le module AutoMacros contient le code suivant :
Private bEnableEvents As Boolean
Sous AutoOpen()
bEnableEvents = Application.EnableEvents
Application.EnableEvents = True
End Sub
Sub AutoClose()
Application.EnableEvents = bEnableEvents
End Sub
AutoOpen enregistre l'état actuel de la propriété EnableEvents de l'objet d'application, puis le traitement des événements est activé.
L'état précédent est rétabli dans AutoClose.
Initialisation de la mise à l'échelle de l'axe
Cette tâche est exécutée par une procédure d'événement qui gère l'événement BeforeOpenObject, qui est envoyé par chaque objet FlexPro avant son ouverture. Dans le projet Vba de Events.fpd, il existe un objet correspondant appelé AnyFpObject qui représente tous les objets FlexPro de la base de données et reçoit donc tous les événements communs à tous les objets FlexPro. Le code suivant est affecté à cet objet de classe :
Private Sub FpObjectClass_BeforeOpenObject(ByVal Object As Object)
Dim oDiag As Diagram2D
Si Object.FullName = "\Route.2D" Alors
Set oDiag = Objet
oDiag.XAxes(2).Scaling.ModeStartValue = fpAxisScalingModeFixed
oDiag.XAxes(2).Scaling.ModeEndValue = fpAxisScalingModeFixed
oDiag.XAxes(2).Scaling.StartValue = oDiag.XAxes(1).Scaling.CurrentStartValue
oDiag.XAxes(2).Scaling.EndValue = oDiag.XAxes(1).Scaling.CurrentEndValue
End If
End Sub
Le test If vérifie si le diagramme 2D correct a été sélectionné. Le nom, le chemin de la base de données et l'extension du nom de fichier des diagrammes 2D doivent correspondre. La procédure d'événement reçoit cet événement lorsqu'un objet de la base de données, par exemple un autre diagramme 2D ou un ensemble de données, est ouvert. Dans le test If, il est clair que nous avons affaire à un diagramme en 2D. L'objet indéfini peut donc être assigné à une variable de type Diagram2D. Les étapes suivantes sont faciles à comprendre. Dans un premier temps, la valeur de départ et la valeur finale sont réglées sur une échelle fixe. Ensuite, les valeurs actuelles de début et de fin du premier axe sont adoptées. Les propriétés CurrentStartValue et CurrentEndValue fournissent les valeurs résultant de la mise à l'échelle automatique et non celles qui ont été saisies dans l'onglet Axis Scaling de l'axe, qui sont inactives dans ce cas.
Adoption des valeurs de fin d'axe après les opérations de zoom
Ici, une multitude d'événements doivent être traités, car plusieurs opérations affectent les valeurs de fin d'axe. Vous pouvez zoomer entre les curseurs, zoomer sur une zone rectangulaire ou faire défiler l'axe. Tous ces événements ne s'appliquent qu'aux objets curseurs, c'est-à-dire aux objets qui peuvent contenir des curseurs, à savoir les diagrammes, les feuilles de calcul et les documents. L'objet de classe AnyCursorObject, qui reçoit tous les événements de curseur, représente tous les objets de curseur. Il contient le code suivant :
Private Sub AdaptScaling(Object As CursorObject)
Dim oDiag As Diagram2D
Si Object.FullName = "\Route.2D" Alors
Set oDiag = Objet
oDiag.XAxes(2).Scaling.StartValue = oDiag.XAxes(1).Scaling.CurrentStartValue
oDiag.XAxes(2).Scaling.EndValue = oDiag.XAxes(1).Scaling.CurrentEndValue
End If
End Sub
Private Sub CursorObjectClass_AxisScaled (ByVal CursorObject As Object)
AdaptScaling CursorObject
End Sub
Sub privée CursorObjectClass_AxisScrolled(ByVal CursorObject As Object)
AdaptScaling CursorObject
End Sub
Private Sub CursorObjectClass_RectangleZoomed(ByVal CursorObject As Object)
AdaptScaling CursorObject
End Sub
Private Sub CursorObjectClass_ZoomedBetweenCursors(ByVal CursorObject As Object)
AdaptScaling CursorObject
End Sub
Private Sub CursorObjectClass_ZoomReset(ByVal CursorObject As Object)
AdaptScaling CursorObject
End Sub
Private Sub CursorObjectClass_ZoomUndone(ByVal CursorObject As Object)
AdaptScaling CursorObject
End Sub
AdaptScaling est une procédure auxiliaire appelée par les différentes procédures d'événements. Là encore, la procédure vérifie d'abord que l'objet à traiter existe bien. Les nouvelles valeurs de fin d'axe sont ensuite copiées. Toutes les procédures relatives aux événements ayant un impact sur la mise à l'échelle des axes ont été mises en œuvre. Et tous les événements qui sont envoyés après l'opération correspondante ont été sélectionnés de manière à ce que les valeurs de fin d'axe du premier axe X comportent déjà les nouvelles valeurs.