ListBox + OnChange event + WINAMP !!! [C++ Builder] - C++ - Programmation
Marsh Posté le 26-09-2002 à 15:11:56
Par ce que ça sert pas sur une list box. Qu'est ce que tu veux faire?
Marsh Posté le 26-09-2002 à 15:15:04
Il faut utiliser une listview connard
edit: grillaid par letoII
Marsh Posté le 26-09-2002 à 15:16:19
LetoII a écrit a écrit : Par ce que ça sert pas sur une list box. Qu'est ce que tu veux faire? |
En fait je voulais catcher le moment ou tu changes le contenu de la listbox.
Par exemple j'ai un bouton add et remove pour gerer les elements de la liste, et je voulais griser remove lorsque le contenu de la liste est vide.
Marsh Posté le 26-09-2002 à 15:18:57
Godbout a écrit a écrit : En fait je voulais catcher le moment ou tu changes le contenu de la listbox. Par exemple j'ai un bouton add et remove pour gerer les elements de la liste, et je voulais griser remove lorsque le contenu de la liste est vide. |
Ben faut gérer ça dans les méthode qui ajoute/supprime des éléments. T'as pas besoin de OnChange
Marsh Posté le 26-09-2002 à 15:22:42
LetoII a écrit a écrit : Ben faut gérer ça dans les méthode qui ajoute/supprime des éléments. T'as pas besoin de OnChange |
Euh ben ca me pose un pb quand meme
J'ai essaye de modifier mes fonctions de mise a jour de l'etat des boutons, mais le pb c'est que quand tu ajoutes un item a la listbox par ex, et que tu checkes juste apres si il existe un item, et bien la fonction te renvoie -1, tant que t'es pas sorti de l'event (dans le cas la c'etait onclick)
Dans visual tu pouvais gerer ca avec les messages windows (LVN_ITEMCHANGED).
Marsh Posté le 26-09-2002 à 15:25:51
Godbout a écrit a écrit : Euh ben ca me pose un pb quand meme J'ai essaye de modifier mes fonctions de mise a jour de l'etat des boutons, mais le pb c'est que quand tu ajoutes un item a la listbox par ex, et que tu checkes juste apres si il existe un item, et bien la fonction te renvoie -1, tant que t'es pas sorti de l'event (dans le cas la c'etait onclick) Dans visual tu pouvais gerer ca avec les messages windows (LVN_ITEMCHANGED). |
C pas pour être embétant, mais si tu ajoute un élément est-ce que ça veut pas dire, par hazard, que ta lsite n'est pas vide?
Marsh Posté le 26-09-2002 à 15:34:03
LetoII a écrit a écrit : C pas pour être embétant, mais si tu ajoute un élément est-ce que ça veut pas dire, par hazard, que ta lsite n'est pas vide? |
Si, mais alors ca me fait eclater mes fonctions pour mettre des petits bouts de code a droite a gauche, c'est pas que j'ai pas envie de le faire, c'est que je pense qu'il y a quand meme un moyen plus rapide. (en plus ca va pas aller pour quand je vais deleter le dernier element de la liste).
Enfin bon te derange pas, je vais voir ce que je peux faire avec une listview.
Marsh Posté le 26-09-2002 à 15:36:35
J'ai l'impression que tu te complique la vie pour rien.
Marsh Posté le 26-09-2002 à 15:45:11
je crois que ca a toujours ete mon cas effectivement
je cherche toujours a faire des trucs qui sont pas possible.
Marsh Posté le 26-09-2002 à 15:48:12
Ce que tu veux faire est possible, masi j'ai l'impressino que tu t'y prend pas de la façon la plus simple, stout
Marsh Posté le 26-09-2002 à 15:52:25
ouais mais j'ai l'impression que c'est la facon la plus propre
Et en fait niveau code apres ca me parait bcp plus propre et bcp plus simple. De toute facon j'experimente, je fais des conneries pour l'instant, histoire de voir comment tout ca fonctionne.
Merci du coup de main
Marsh Posté le 26-09-2002 à 16:45:46
pour la TListBox c'est on OnClick qui représente le changement de sélection
Et très étrangement un changement au clavier déclanche un OnClick, contrairement à celui des ListView/TreeView (bon ça se base sur les messages Windows donc je suppose que c'est à cause de ça)
Si tu veux un changement de contenu, bhen y a a pas
Marsh Posté le 26-09-2002 à 16:49:29
Godbout a écrit a écrit : J'ai essaye de modifier mes fonctions de mise a jour de l'etat des boutons, mais le pb c'est que quand tu ajoutes un item a la listbox par ex, et que tu checkes juste apres si il existe un item, et bien la fonction te renvoie -1, tant que t'es pas sorti de l'event (dans le cas la c'etait onclick) Dans visual tu pouvais gerer ca avec les messages windows (LVN_ITEMCHANGED). |
Application->ProcessMessages();
vu qu'il envoie un message à la listbox (je suppose) pour l'ajout d'item, le message est pas toujours traité instantanément.
Ici tu peux aussi gérer les messages, mais je sais pas comment on fait en C++Builder. En Delphi faut faire une procédure que l'on défini comme interceptrice d'un certain message, mais c'est en utilisant un mot-clé du Pascal ("message" ) donc je connais pas l'équivalent en Builder
Marsh Posté le 26-09-2002 à 16:51:46
antp a écrit a écrit : Application->ProcessMessages(); vu qu'il envoie un message à la listbox (je suppose) pour l'ajout d'item, le message est pas toujours traité instantanément. Ici tu peux aussi gérer les messages, mais je sais pas comment on fait en C++Builder. En Delphi faut faire une procédure que l'on défini comme interceptrice d'un certain message, mais c'est en utilisant un mot-clé du Pascal ("message" ) donc je connais pas l'équivalent en Builder |
Le plus simple c un clic droit sur la classe dans l'explorateur, nouvelle méthode, gestionnaire de message (la case à cocher). Et l'IDE te rajoute tout ce qu'il faut.
Marsh Posté le 26-09-2002 à 16:54:43
antp a écrit a écrit : Si tu veux un changement de contenu, bhen y a a pas |
ok
Marsh Posté le 26-09-2002 à 16:55:11
LetoII a écrit a écrit : Le plus simple c un clic droit sur la classe dans l'explorateur, nouvelle méthode, gestionnaire de message (la case à cocher). Et l'IDE te rajoute tout ce qu'il faut. |
ha bhen j'aurai découvert un truc
y a pas ce machin en Delphi
les gens qui programme en Pascal savent rajouter eux-même une interception de message
Marsh Posté le 26-09-2002 à 16:55:24
LetoII a écrit a écrit : Le plus simple c un clic droit sur la classe dans l'explorateur, nouvelle méthode, gestionnaire de message (la case à cocher). Et l'IDE te rajoute tout ce qu'il faut. |
ah ben voila !
J'vais aller y jeter un oeil. (enfin avant je termine de me battre avec ma listview, plus qu'a delete la selection et c'est bon )
Marsh Posté le 26-09-2002 à 16:57:25
antp a écrit a écrit : ha bhen j'aurai découvert un truc y a pas ce machin en Delphi les gens qui programme en Pascal savent rajouter eux-même une interception de message |
Je sais aussi le faire à la main
Marsh Posté le 26-09-2002 à 16:57:35
ouais enfin les interceptions de messages ça ne marche que dans la définition de la classe.
donc que ce soit en Builder ou en Delphi il faut dériver le TListBox il me semble...
Marsh Posté le 26-09-2002 à 17:02:19
antp a écrit a écrit : ouais enfin les interceptions de messages ça ne marche que dans la définition de la classe. donc que ce soit en Builder ou en Delphi il faut dériver le TListBox il me semble... |
Suffit de rajouter une méthode à la classe de la fenêtre qui contient la listbox
Edit: en c++ en tout cas
Marsh Posté le 26-09-2002 à 17:04:07
ha ? possible, j'ai jamais testé
les rares messages que j'ai rajoutés étaient relatifs à la fenêtre ou à l'application
Marsh Posté le 26-09-2002 à 17:06:57
antp a écrit a écrit : ha ? possible, j'ai jamais testé les rares messages que j'ai rajoutés étaient relatifs à la fenêtre ou à l'application |
ben en fait c l'appli qui reçoit tous les message et qui les dispach après vers chaque composant il me semble.
Marsh Posté le 26-09-2002 à 17:15:39
ouais c'est logique...
enfin je me disais que peut-être la fenêtre ne recevait que les messages relatifs à son handle...
Marsh Posté le 27-09-2002 à 11:28:48
J'me demandais pkoi j'avais pas de tooltip dans C++ Builder et en fait quand y winamp qui tourne en fond il arrive pas a les afficher
Marsh Posté le 26-09-2002 à 15:10:43
Il existe pas
Je fais comment alors ?
Message édité par godbout le 27-09-2002 à 11:28:13
---------------
Super.