UserControl : Propriété texte multiligne modifiable dans le design [Résolu]

Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 20 janv. 2010 à 17:18 - Dernière réponse : Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention
- 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
Afficher la suite 

20 réponses

Répondre au sujet
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 janv. 2010 à 12:52
+3
Utile
é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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Renfield
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 21 janv. 2010 à 15:29
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Polack77
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 21 janv. 2010 à 16:32
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Polack77
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 21 janv. 2010 à 00:04
0
Utile
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)
Commenter la réponse de cs_Jack
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 janv. 2010 à 11:07
0
Utile
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
Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 janv. 2010 à 11:21
0
Utile
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
Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 janv. 2010 à 11:24
0
Utile
doc:

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


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 janv. 2010 à 11:25
0
Utile
je cherche pour le texte multiligne, je pense que c'est assez proche

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 21 janv. 2010 à 11:29
0
Utile
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
Commenter la réponse de Polack77
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 janv. 2010 à 11:34
0
Utile
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
Commenter la réponse de Renfield
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 21 janv. 2010 à 11:36
0
Utile
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
Commenter la réponse de Polack77
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 janv. 2010 à 11:43
0
Utile
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
Commenter la réponse de Renfield
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 21 janv. 2010 à 12:16
0
Utile
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
Commenter la réponse de Polack77
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 21 janv. 2010 à 12:33
0
Utile
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
Commenter la réponse de Polack77
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 janv. 2010 à 15:37
0
Utile
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
Commenter la réponse de Renfield
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 21 janv. 2010 à 15:59
0
Utile
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
Commenter la réponse de Polack77
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 21 janv. 2010 à 16:30
0
Utile
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.
Commenter la réponse de cs_Jack
Renfield 17307 Messages postés mercredi 2 janvier 2002Date d'inscription 18 janvier 2017 Dernière intervention - 21 janv. 2010 à 16:35
0
Utile
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
Commenter la réponse de Renfield
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 21 janv. 2010 à 17:46
0
Utile
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
Commenter la réponse de Polack77
Polack77 1100 Messages postés mercredi 22 mars 2006Date d'inscription 15 avril 2018 Dernière intervention - 3 févr. 2010 à 10:38
0
Utile
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
Commenter la réponse de Polack77

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.