copyrightx
Messages postés59Date d'inscriptionlundi 8 novembre 2004StatutMembreDernière intervention14 janvier 2016
-
12 mars 2007 à 14:03
copyrightx
Messages postés59Date d'inscriptionlundi 8 novembre 2004StatutMembreDernière intervention14 janvier 2016
-
12 mars 2007 à 19:08
Bonjour à tous,
Comme d'habitude je ne fais que passé
Voilà en fait deux problèmes se posent dans la construction du projet Apparea et je crains ne pas être à la hauteur pour les résoudre seul. Les voici ...
1) Problème concernant l'organisation des propriétés des contrôles
Chaque contrôle dans le projet va maintenant commencé à être assez grand du point de vue des propriétés qu'il contient. J'essaie de donner à l'utilisateur les moyens de personnaliser au mieux son contrôle ActiveX et de trouver le style qui lui convient pour son application. Mais cela me pousse à créer beaucoup de propriétés. Par exemple, le contrôle Button_xp pourrait bien contenir plus de 500 propriétés ! du fait de son fonctionnement :
> Pour chaque mode, l'utilisateur a la possibilité de modifier l'image sur le bouton. J'ai créé une fonction PrintPicture qui a 24 paramêtres utiles pour l'utilisateur ; donc du coup ça fait déjà 12 x 24 = 288 propriétés.
> De plus, pour chaque mode, l'utilisateur a la possibilité de modifier le texte qui est écrit sur le bouton ainsi que son apparence. J'ai de même créé une fonction PrintText qui a 20 paramêtres utiles pour l'utilisateur dont le paramêtre de type de police qui n'est pas inclut dedant ; ce qui fait 12 x 21 (avec le type de police) = 252 propriétés en plus.
> On en est déjà à plus de 540 propriétés ! Et je vous passe le Fading sur la Caption et les autres options du bouton telles que la bordure, les styles, les angles arrondis, etc.
> Voici donc la question qui se pose : Comment organiser de telles propriétés dans une, ou plusieurs pages de propriétés ?
2) Problème concernant des propriétés particulières telles que CurrentX ou CurrentY
En fait ici il s'agit de "cacher" une propriété du contrôle à l'utilisateur. Il faut que je puisse y accéder (la lire et la modifier) à partir d'un module ou du code de mon contrôle ActiveX mais que l'utilisateur ne la voit pas. C'est le cas des propriétés CurrentX et CurrentY : j'ai besoin de les lire et de la modifier pour afficher du texte, mais l'utilisateur n'en a pas besoin dans le cadre de l'utilisation du contrôle. Voici donc ce que j'ai testé :
Private Property Get CurrentX() As Single
CurrentX = UserControl.CurrentX
End Property
Private Property Let CurrentX(ByVal new_CurrentX As Single)
UserControl.CurrentX() = new_CurrentX
End Property
> Voici le début de syntaxe de ma fonction PrintText placée dans un module ainsi que l'instruction pour modifier la propriété CurrentX :
Public Function PrintText(Control As Object, Message As String, ... , XPosition as Integer, ... )
'On Error Resume Next
(...)
Control.CurrentX = XPosition
(...)
End Sub
> Aahh !, elle n'apparaît plus dans les pages de propriétés du contrôle. Mais ...
> Si je suis dans mon contrôle ActiveX et que je fait un appel vers PrintText comme ceci :
PrintText Me, "Message sur le bouton", (...) , 10, (...)
> J'obtiend une Erreur 438 : "L'objet ne gère pas cette propriété ou cette méthode" ; ce qui est du fait de PRIVATE
> Voici donc la question qui se pose : Comment puis-je lire ou modifier une propriété du contrôle sans que celle-ci soit vu par l'utilisateur dans la page de propriété ?
3) N'oubliez pas de préciser sur quel sujet vous répondez SVP
Merci d'avance
Copyrightx
A voir également:
PROPERTIES ERROR : Comment gérer un grand nombre de propriétés ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 12 mars 2007 à 15:48
pour le point n°2, faut modifier les attributs de ta propriété.
Faisable depuis l'explorateur d'objet (F2)
tu pourras dire que cette propriété est masquée (mets la en Publique tout de même) ^^
pour le point 1, tu pourrais faire un "tableau" :
MonControl.Text([Type : Over]) = "Button1"
Set MonControl.Picture([Type : Over]) = LoadPicture(...), ----
By Renfield avec ce genre de déclaration :
Public Enum PropertiesConstants
[Type : Over]
[Type : Out]
...
End Enum
Private mxsText(21) As String
Public Property Get Text(ByVal veType As PropertiesConstants) As String
Text = mxsText(veType)
End Property<hr />
Public Property Let Text(ByVal veType As PropertiesConstants, ByRef Value As String)
mxsText(veType) = Value
End Property , ----
By Renfield
NB. Evites de poser plusieurs questions dans la même topic...
copyrightx
Messages postés59Date d'inscriptionlundi 8 novembre 2004StatutMembreDernière intervention14 janvier 2016 12 mars 2007 à 19:08
Salut Renfield,
Désolé pour les deux sujets dans le même topic mais en fait ça faisait partit du même sujet.
Pour ce qui est des tableaux j'y est réfléchis mais je pense que cette solution va être très longue à mettre en place. Une BDD peut-être serait adaptée mais pour un contrôle ActiveX "ça le fait pas trop".