UserControl : Propriété texte multiligne modifiable dans le design

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 20 janv. 2010 à 17:18
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 3 févr. 2010 à 10:38
Bonjour,

Je crée un UserControl qui (entre autre) doit pouvoir recevoir un texte multiligne. Tout fonctionne bien sauf que je voudrais pouvoir définir ce texte dans le design (comme pour le TextBox configuré en multiligne).
Explication en image :

Explication (si l'image venais à être suppr) :
Lorsque dans le design on défini le Text d'un TextBox configuré en multiligne une zone de saisie supplémentaire existe (on l'affiche en cliquant sur le bouton à droite). Je n'arrive pas à reproduire sa.

Merci d'avance

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
A voir également:

20 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 12:52
évite le pas a pas.
c'est pas conseillé quand on manipule certaines choses.

pour l'exemple, pernds plutot :

www.vbaccelerator.com/home/vb/Code/Controls/UserControl_OLE_Extensions/vbACOM/vbACOM.asp

et considère l'exemple :
vbACOM\Examples\IPerPropertyBrowsingVB\Example4 (File Browser)

ca te permettra d'avoir un bouton [...] en bout de ligne
et de lui faire lancer le code de ton choix (fenetre de saisie de code, par exemple) ou texte Unicode ^^

Perso, je l'ai dit, je vais exploiter ce filon.


Pour le principe, une fois le TLB lié a ton projet, on instancie un objet reconnu par Windows pour proposer certaines méthodes.
Quand VB affiche les propriétés, il fait normallement appel a un objet similaire.
Ici, on remplace ce "gestionnaire" par le notre. Ainsi, on a la main sur le comportement de la liste des propriétés.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
3
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 janv. 2010 à 15:29
Sa y est je commence à comprendre
(J'ai bien dit je commence pck là j'ai quand même des difficultés à tout comprendre, surtout dans les projets générant la DLL et le TBL)
Enfin voila ce que j'ai compris (pour les autres qui aurais encore + de difficulté que moi )
Étape 1:
Télécharger et installé le projet que Renfield à trouver (encore merci à lui ) :
Pour rappel : ici

Étape 2:
Dans le projet du UserControl (ou dans le projet tout cours comme on veux ^^)
Ajouté en Référence :
- vbACOM10.dll
- vbACOMTLB.tlb
(tout deux contenu dans le dossier "...\vbACOM\Binaries" du code télécharger (les ... sont évidemment à remplacé par le dossier dans le quel ce "truc" à été installé ;))

Étape 3:
Ajouter dans le code du contrôle :
- Dans l'entête (au même niveau que "option explicite") :
Implements IPerPropertyBrowsingVB
Implements IPropertyPageHookClient


- Dans la déclaration des variables du contrôle :
'L'objet gérant les pages de propriété
Private m_oCOMSupport As New COMSupport
'Une variable par propriété à gérer ;)
Private m_DispIP_Caption As Long
'La variable qui contiendras le N° de la propriété demandé
Private m_MappedPropertyDispID As Long 


- Dans l'évènement Initialise du contrôle (moi je ne gère que le caption il faut n fois le 2éme ligne pour n propriété) :
  m_oCOMSupport.Attach Me
  'Une ligne par propriété à gérer ;)
  m_DispIP_Caption =  cvbGetDispID(Me, "Caption") 
  'Emplemple :
  'm_DispIP_BackColor =  cvbGetDispID(Me, "BackColor") 


- Dans l'évènement Terminate du contrôle :
  m_oCOMSupport.Detach


- Dans les fonctions (ATTENTION IL FAUT TOUT METTRE SI NON SA BUG) :
Private Function IPropertyPageHookClient_Show(ByVal hWndParent As Long) As Boolean
'show custom property dialog for property

    'if "Caption" was clicked
    If m_MappedPropertyDispID  = m_DispIP_Caption Then
        'Action sur le clique du bouton de la propriété
        'Un form.show fonctionne par exemple 
        ' Moi j'appel en modale et ControlBox est à 
        ' false (pas de boutons min/max/close) un bouton
        ' "OK" met à jours une variable global contenu
        ' dans un module, puis je met à jours la variable
        ' de mon contrôle à partir ce cette dernière ;)
    End If
End Function

Private Function IPerPropertyBrowsingVB_GetDisplayString(ByVal DispID As Long, DisplayName As String) As Boolean
'return custom display string for specified property
    'if property is "Caption"
    If DispID = m_DispIP_Caption Then
        'return custom display string
        'Le texte qui sera affiché dans le design ;)
        DisplayName = "<Texte>"
        'return True to override default implementation
        IPerPropertyBrowsingVB_GetDisplayString = True
    End If
End Function

'Sauvegarde de l'ID du contrôle sélectionné
Private Function IPerPropertyBrowsingVB_MapPropertyToPage(ByVal DispID As Long, ClassID As String) As Boolean
'return ClassID of custom property page to use for specified property
    'if property is "Caption"
    If DispID = m_DispIP_Caption Then
        'store DispID so we know which dialog
        'to show in IPropertyPageHookClient.Show method
        m_MappedPropertyDispID = DispID
        'return ProgID of PropertyPageHook object
        ClassID = "vbACOM10.PropertyPageHook"
        'return True to override the default implementation
        IPerPropertyBrowsingVB_MapPropertyToPage =  True
    End If
End Function

Private Function IPerPropertyBrowsingVB_GetPredefinedStrings(ByVal DispID As Long, ByVal Properties As PropertyListItems) As Boolean 'vbACOM10.PropertyListItems

End Function

Private Function IPerPropertyBrowsingVB_GetPredefinedValue(ByVal DispID As Long, ByVal Cookie As Long, Value As Variant) As Boolean

End Function


Voila avec tout sa moi sa fonctionne

Heeeeee par contre quand je génère l'OCX sa ne fonctionne plus
(j'ai même ajouté la DLL et le TLB au projet utilisant l'OCX mais rien n'y fait).
Mais dans un groupe de projet je n'est aucun problème (ce qui me parais zarb j'ai ajouté la DLL et TBL dans le projet du usercontrol mm pas dans le second alors je ne comprend pas pk avec un OCX sa réagit pas pareil )

PS :
Pour finir c'est trop complexe pour moi tout sa (Franchement je dit sa alors que j'ai expliqué en détail et passé un temps fout à trouver comment faire ).
Mais rien que d'avoir à ajouté une DLL contenant du code que je ne comprend pas à 100% me déplais, donc je vais plutôt faire des pages de propriétés (pour le moment en tout cas, je commence à être presser par le temps là)
Je tenterais de faire un groupe de projet, ou ajouter mon contrôle au projet créant la DLL et en faire un OCX, ou autrement, je me re-plancherais la dessus quand j'en aurais le temps.

En tout cas merci des coup de main et bon courage à vous

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
3
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 janv. 2010 à 16:32
Oupsssssssss
Si sa ne fonctionnais pas dans l'OCX c'étais ma faute (mauvaise manipe au moment où j'ai ajouté la ligne "m_oCOMSupport.Detach" qui n'étais pas dans le bonne évènement, forcément que sa marchais pas )
Tout fonctionne bien sans avoir à ajouter les DLL et TBL dans le projet utilisant l'OCX

Bon bà je crois que le sujet est clos

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 janv. 2010 à 00:04
Salut Vincent
Ca, c'est une sacrée bonne question.
J'ai fait quelques essais, mais pas trouvé.
Je suis curieux de savoir ...
J'approfondirai si j'ai le temps demain.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 11:07
faut coder un Handler spécial.
même chose pour gérer les Enums persos, qui s'affichent joliment.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 11:21
j'ai retrouvé:

IPerPropertyBrowse

[www.vbaccelerator.com/home/VB/Code/Controls/UserControl_OLE_Extensions/IPerPropertyBrowse/article.asp www.vbaccelerator.com/home/VB/Code/Controls/UserControl_OLE_Extensions/IPerPropertyBrowse/article.asp
]

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 11:24
doc:

msdn.microsoft.com/en-us/library/ms678432(VS.85).aspx


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 11:25
je cherche pour le texte multiligne, je pense que c'est assez proche

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 janv. 2010 à 11:29
Bonjour, déjà merci pour ces réponses (mm si je n'est tj pas trouvé la solution)

Comment sa un Handle spécial ???
J'ai jamais fait de truc du genre moi ???
Et pourtant j'ai déjà défini des "Enum"s perso, puis utilisé ce "type" dans des propriétés et tout s'affiche bien (j'ai bien les noms des valeurs dans une ComboBox dans la définition des propriétés du design ??? Oula pas si symple cette phrase )
Soit par exemple :
Dans le UserControl
Public Enum E_Test
    toto = 0
    tata = 1
    tutu = 2
    tata_en_tutu = 3 '^^
End Enum
Public Property Get Test() As E_Test
End Property
Public Property Let Test(ByVal Value As E_Test)
End Property

Ce qui me donne (sans rien faire de plus) dans le design :


Je ne comprend pas ce que tu veut dire Renfield ?

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 11:34
oui, je sais que les Enums s'affichent bien comme cela...
mais ca t'affiche le nom des constantes.

regarde la propriété BorderStyle de ta Form, par exemple.

0 - None
1 - Fixed Single
2 - Sizable

alors que les constantes sont :

vbBSNone
vbFixedSingle
vbSizable

tu saisi la nuance ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 janv. 2010 à 11:36
Haaaaa oui oki je comprend ce que tu veut dire

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 11:43
dingue ce que ca permet de faire !
mes prochains controes en tireront avantage, c'est certain !

interesse toi a MapPropertyToPage de IPerPropertyBrowsing
te permettra d'afficher le belle form de saisie de texte, pas le truc nul des textbox multilignes

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 janv. 2010 à 12:16
Au risque d'avoir l'aire NUUUULLLLL bà j'arrive pas à comprendre comment sa fonctionne
J'ai trouvé un exemple (qui semble t'il fait + ou - ce que je veux) mais je comprend pas grand chose là
L'exemple que j'ai trouvé :
http://www.vbaccelerator.com/home/vb/Code/Controls/UserControl_OLE_Extensions/IPerPropertyBrowse/EX_Property_Browsing_in_VB.asp

En aurais tu un autre plus simple ou pourrais tu m'expliquer comment sa marche ?

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 janv. 2010 à 12:33
Le problème est que dé que je veut faire du pas à pas mon VB plante Par exemple, dans l'exemple 2 du lient ci dessus, quand je place un point d'arrêt dans la fonction "IPerPropertyBrowsing_GetDisplayString" mon VB plante quand je clique sur le control, et ce n'est pas le seul cas ou mon VB plante violemment. Dure dure de comprendre dans ces condition (tout du moins pour moi qui n'est jamais fait ce genre de truc)
Encore un piti coup de pouce svp

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 15:37
tu as bien extraies les choses, c'est une bonne chose.

j'ignore quels sont les modifications à apporter pour que cela tourne en OCX.

je pense que l'on peut s'abstenir de la dll en ajoutant les classes qui vont bien dans le projet de l'OCX (à voir.)

je me pencherais davantage lorsque j'aurais besoin de ces interfaces dans mes futurs OCX.

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 janv. 2010 à 15:59
Si tu veux bien nous tenir informé de tes avancements (ici de préférence, sa me perpétrais de suivre plus facilement ) sa serais super sympa
Et moi je serais super contant, peut être même que je vomirais partout (voir la cité de la peur)

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
21 janv. 2010 à 16:30
Ah ... voilà du forum comme on rêve d'en voir tous les jours, avec des gens motivés qui essayent de comprendre et de faire comprendre !
Merci les gars. Très instructif tout ça.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 janv. 2010 à 16:35
Jack, j'ai en fait pas mal fouiné sur le net, depuis des années, et j'arrive a me remémorer de ce que je vois.

en totale contradiction avec ce que je suis capable de faire en dehors de l'informatique (mémoire de poisson rouge)

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
21 janv. 2010 à 17:46
Je trouvais sa trop intéressant pour le gardé pour moi alors pour la 1ér fois je me suis décidé à posté un source
Ici http://www.vbfrance.com/codes/USERCONTROL-AVEC-PROPERTIES-PERSONALISABLE_51159.aspx
Notez moi (il est possible que des fautes d'orth s'y trouve je suis vraiment une quiche en orth )

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 févr. 2010 à 10:38
Enfin un peut de temps pour tester tout ça, et mauvaise nouvelle :
J'ai des problèmes sur certaine machine si le projet de "Paul R. Wilde" n'est pas installé.
Pourtant j'avais testé sur mon PC perso où ce projet n'avais pas été installé et mon exe fonctionnais (à moins que ce test n'est été fait alors que je n'avais pas encore ajouté ces "trucs")
Or aujourd'hui alors que des collègues test mon OCX sa ne fonctionne pas (et même l'exe que j'ai crée en utilisant mon OCX pose des problèmes) :
"System error &H8004011 (-2147221231). Class factorie ne peut pas fournir la classe demandée"

Affaire à suivre donc.

Et moi qui pensais avoir trouvé un truc génial

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Rejoignez-nous