Comment faire pour avoir toutes les propriétés de la listbox dans un Activex ?

Mew27 Messages postés 44 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 23 février 2008 - 21 janv. 2007 à 07:33
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 21 janv. 2007 à 14:08
Voilà, j'ai trouvé sur le net comment sous-classer une listbox, mais pour faire ça simple dans mes projets je voudrais en faire un ocx. Mais quand j'ai voulu faire les propriétés standard de la listbox, vb se plaint que par exemple la propriété Sorted est read-only, MultiSelect et bien d'autres, comment je peux faire pour rendre ses propriétés disponible dans ce cas-ci ?

Ce que je voudrais c'est avoir par défaut dans la fenêtre des propriétés toutes les propriétés de base de la listbox mais vb retourne toujours l'erreur que la propriété est read-only.

Est-ce qu'il n'y aurait pas un moyen rapide d'hériter des propriétés par défaut ?

Sinon j'ai essayé aussi de faire ma propre listbox, pour les items j'utilise un label, mais c'est long à charger quand on ajoute admettons 2000 items d'un seul coup. Je les aurais bien ajouté avec DrawText mais avec un label c'est plus simple gérer la sélection des items.

7 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 janv. 2007 à 08:52
Tu as écrit :


"Mais quand j'ai voulu faire les propriétés standard de la listbox, vb se plaint que par exemple la propriété Sorted est read-only, MultiSelect et bien d'autres, comment je peux faire pour rendre ses propriétés disponible dans ce cas-ci ?"


Cette seule indication ne suffit pas, s'agissant d'un ocx .

Il est important de préciser si tu veux procéder à la modification des propriétés de la listbox au stade développement (design Time) ou au stade exécution (runTime) du projet sur lequel tu places cet OCX.



Il est également important de préciser si la listbox traitée est incluse dans ton OCX ou si ton OCX est au contraire destiné à gérer une listbox qui ne lui appartient pas ...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 janv. 2007 à 09:35
Apreès relecture attentive, j'en suis arrivé à la conclusion selon laquelle tu as placé une listbox à l'intérieur de ton OCX et que tu rencontres un problème de modification de  propriétés alors que tu codes le dit OCX.

Si tel est le cas, tu n'y pourras rien car c'est l'IDE de VB qui gère à ce niveau-là  ...
0
Mew27 Messages postés 44 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 23 février 2008
21 janv. 2007 à 09:35
Bonjour, merci pour la réponse rapide :)

La listbox est incluse dans le ocx et pour la modification des propriétés, tout ce que je veux faire c'est d'y avoir accès par la fenêtre des propriétés comme pour une listbox, alors seulement au design pour certaines, comme le style et le multiselect par exemple et d'autres à l'exécution comme le listindex, itemdata, etc.

Mais si je prends par exemple le multiselect, j'ai fait un let et un get pour pouvoir le modifier à travers la fenêtre de propriétés, mais vb dit que cette propriété est read-only, j'ai lu sur le site de microsoft que cette propriété est modifiable seulement à la création, le problème quand on le place sur un usercontrol, c'est qu'il est déjà créé, donc, je peux modifier la propriété sans problème au design sur mon usercontrol, mais pas à travers l'ocx. Mais il y a sûrement un moyen ..
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 janv. 2007 à 09:54
Le seul moyen que je vois, en ce qui me concerne, est de ne pas mettre la listbox à l'intérieur de ton ocx, dont le seul rôle devrait être, au design time d'un projet sur lequel tu mets ton ocx, de modifier les propriétés d'une listbox également placée dans ton projet (pas le projet de l'ocx, mais celui de l'appli où tu insères ton ocx).
Si tu choisis ce chemin-là, il te faudra une interface pour "passer" à ton ocx le nom de la listbox concernée...
Le tout me paraissant assez acrobatique...
0

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

Posez votre question
Mew27 Messages postés 44 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 23 février 2008
21 janv. 2007 à 10:00
Ok, mais je voulais faire ça surtout pour avoir une listbox personnalisé, ici je me sert seulement du subclassing pour changer la couleur des items, alors au lieu de faire a chaque fois appel du genre OldProcWindows = ....machin, newProcWin d'autant plus que je vais en avoir besoin d'une procédure pour chaque listbox que je veux en couleur, je voulais mettre ça dans un ocx. Mais les contrôles listbox en couleur comme MBlistex comment ils s'y sont pris ? Je ne veux pas utiliser celle-là, elle bug un peu, les couleurs clignotent quand on click dessus et moi je veux garder la couleur de l'item par dessus la sélection quand on click sur un item.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
21 janv. 2007 à 11:07
Bon...
Tu veux des idées de cinglé (le cinglé, c'est bibi) en vrac ?
On y va (mais elles sont toutes coûteuses) :

Idée 1 :
 mettre dans ton ocx autant de listboxes que celles pouvant correspondre à des propriétés "Read Only" et, en fonction de propriétés correspondantes construites pour ton ocx, afficher la listbox correspondante

Idée 2 : un peu comme ci-dessus, mais en affichant que 2 possibilités (normale et multisélection) et en gérant le tri séparément puis en injectant le résultat dans la listbox affichée

Idée 3 :
utiliser une picturebox (dans ton ocx) et y ajouter dynamiquement (au run time) autant de checkboxes indexées que nécessaire.
Checkboxes et pas optionbuttons car les checkboxes permettront le multiselect. Ces chexkboxes devront avoir la propriété Style = Graphical.
Inconvénients :
- si ta listbox doit contenir un nombre élévé d'articles, il y aura un nombre élevé de checkboxes créées dynamiquement !
- il sera difficile de trier, sauf à inclure dans ton ocx une listbox "tremplin" qui ferait cette tâche et réorganiserait tes checkboxes en conséquence.
avec cette optioçn, ton ocx devra être doté de propriétés "trier" et "multiselection" (true ou False, chacune)

Idée 4 : utiliser une picturebox et y écrire directement tes articles, dans le style de ton choix pour chacun d'entre eux.
inconvénients :
- Il te faudra pour celà passer par quelques fonctions de l'Api de Windows.
- Il te faudra gérer de nombreux calculs sur les dimensions graphiques du texte de chacun de tes articles, notamment pour savoir sur lequel tu cliques, lequel est affiché en tête, etc...
- ces calculs devront prendre en considération la multisélection éventuellement choisie, etc...
cette piucturebox devra être contenue dans un cadre et pouvoir y être déroulée.
Si un tri est nécessaire, il devra être géré avant affichage, soit par un module de tri, soit par le biais d'une listbox ad hoc (avec tri) invisible

Voilà, ami... Le cinglé en a 3000 autrees, d'idées de ce genre...
Bien que parmi les 4 ici suggérées, il choisirait (par plaiisir personnel) les difficultés de la 4ème, ... il ne t'en conseille aucune car c'est beaucoup travailler, d'une part, et beaucoup alourdir, d'autre part, pour bien peu (juste des "bébelles" !...)

Amitiés
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 janv. 2007 à 14:08
salut,
l'idée 1 est la plus simple à mettre en place, le plus propre est de faire une dll et non un ocx, ce que te proposait également jmfmarques quand il disait d'attacher une listbox externe.
qui plus est ton code s'en verra allégé (cls par rapport ctl)

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Rejoignez-nous