| auteur : Geronimo | Le composant TListBox est simple d'utilisation et pourtant très pratique. Quelques fonctions suffisent à l'utiliser. Placez un composant TListBox sur votre fiche. Pour lui ajouter un élément (ligne), il suffit d'utiliser le code suivant :
AnsiString Texte;
ListBox1- > Items- > Add (Texte);
|
En fait, la classe TListBox contient une instance de la classe TStringList qui représente les lignes : Items. Donc pour ajouter des éléments, nous utilisons les méthodes de Items. Pour ajouter un élément, on utilise la méthode Add de cette liste Items, ce qui donne ListBox1->Items->Add(Texte). Ensuite, l'utilisation la plus classique est de regarder quel élément a été cliqué si l'utilisateur double-clique dans la liste. Voici donc la fonction-gestionnaire d'évènements OnDblClick :
void __fastcall TForm1:: ListBox1Click (TObject * Sender)
{
if (ListBox1- > ItemIndex ! = - 1 )
{
if (ListBox1- > Items- > Strings[ListBox1- > ItemIndex].LowerCase () = = " auteur " )
{
}
}
}
|
Tout d'abord, nous vérifions qu'un élement est bien sélectionné, grâce à ItemIndex qui est positionné à -1 si aucun élément n'est sélectionné, sinon, une erreur de violation d'accès serait déclenchée car l'élément d'indice -1 n'existe pas. Ensuite, pour accéder à un élément, nous utilisons toujours le membre Items, avec son membre Strings qui est le tableau contenant les chaînes.
|
| auteurs : Geronimo, Alacazam |
Utilisez la méthode IndexOf de la liste Items des éléments de TComboBox.
Mettons que la liste contienne :
Comment vas-tu, Wie geht's, How are you, Como estas ...
Pour sélectionner le second élément, Wie geht's, utilisez le code suivant :
ComboBox1- > ItemIndex = ComboBox1- > Items- > IndexOf (" Wie geht's " );
|
IndexOf retourne l'indice d'un élément et ItemIndex contient l'indice de l'élément sélectionné.
N.B. Si votre ComboBox autorise la saisie (Style = csSimple ou
csDropDown), l'affectation à sa propriété Text d'une chaîne de la
liste aura le même effet. La méthode exposée ci-dessus prend tout son
intérêt dans le cas csDropDoxnList et les deux cas csOwner... .
|
lien : Comment empêcher la saisie dans un composant TComboBox ?
|
| auteur : Alacazam | Lorsque vous souhaitez seulement permettre le choix dans un composant TComboBox et non la saisie, modifiez sa propriété Style.
ComboBox1- > Style = csDropDownList;
|
N.B. La valeur initiale de ce composant ne pouvant plus être initialisée par sa propriété Text, utilisez alors la méthode décrite dans le lien ci-dessous
|
lien : Comment sélectionner un élément par défaut dans un TComboBox ?
|
| auteurs : Sunchaser, Pascal Jankowski |
Pour définir la largeur de la liste déroulante d'un TComboBox, il faut intercepter l'évènement OnEnter de ce composant, et utiliser le message CB_SETDROPPEDWIDTH.
Le code suivant montre comment envoyer ce message au TComboBox:
|
void __fastcall TForm1:: ComboBox1Enter (TObject * Sender)
{
ComboBox1- > Perform (CB_SETDROPPEDWIDTH, 200 , 0 );
}
|
Dans C++ Builder, dans le Menu : Aide | SDK Windows, on peut retrouver la définition de CB_SETDROPPEDWIDTH ainsi que les messages s'appliquant au TComboBox - tels que CB_GETDROPPEDWIDTH ou CB_SHOWDROPDOWN par exemple - de manière à bien voir les paramètres attendus et les valeurs renvoyées.
|
lien : Comment fixer automatiquement la largeur de la liste déroulante d'un ComboBox en fonction de l'item le plus grand ?
|
| auteur : Sunchaser |
Pour que la liste déroulante d'un TComboBox se redimensionne automatiquement en fonction de son plus grand élément, il faut réaliser un certain nombre d'opérations sur ce composant.
En premier lieu, il faut fixer sa propriété Style à csOwnerDrawVariable.
Puis il faut implémenter l'évènement OnDrawItem de façon à réaliser le dessin des éléments de cette liste :
void __fastcall TForm1:: ComboBox1DrawItem (TWinControl * Control, int Index, TRect & Rect, TOwnerDrawState State)
{
TCanvas * pC = ComboBox1- > Canvas;
pC- > FillRect (Rect);
pC- > TextOutA (Rect.Left + 2 , Rect.Top, ComboBox1- > Items- > Strings[Index]);
}
|
Enfin, il faut implémenter l'évènement OnEnter afin de calculer la longueur des éléments et de positionner la largeur de la liste déroulante :
void __fastcall TForm1:: ComboBox1Enter (TObject * Sender)
{
TCanvas * pC = ComboBox1- > Canvas;
int Base = 0 , Final;
for (int i = 0 ; i < ComboBox1- > Items- > Count; i + + )
{
if (pC- > TextExtent (ComboBox1- > Items- > Strings[i]).cx > Base)
{
Base = pC- > TextExtent (ComboBox1- > Items- > Strings[i]).cx;
}
}
Final = Base + 7 ;
ComboBox1- > Perform (CB_SETDROPPEDWIDTH, Final, 0 );
}
|
|
lien : Comment définir, modifier la largeur de la liste déroulante d'un ComboBox ?
|
| auteur : Geronimo |
Nous allons voir comment utiliser le composant ListView, composant tel celui qui affiche la liste de vos fichiers dans l'explorateur Windows.
Placez sur votre fiche un composant TListView, deux TEdit et un TButton. Lorsqu'on cliquera sur le bouton, une nouvelle ligne sera ajoutée au ListView, avec dans la première colonne, le contenu d'Edit1 et dans la seconde colonne, le contenu d'Edit2. Placez tout d'abord la propriété ViewStyle du composant ListView1 à vsReport. Cliquez sur celui-ci avec le bouton droit, puis sur Editeur de colonnes. Dans la boîte de dialogue qui s'affiche, cliquez deux fois sur Ajouter un nouveau. Cela fait, notre TListView a deux colonnes.
Ecrivons maintenant le gestionnaire d'évènements OnClick du bouton Button1.
void __fastcall TForm1:: Button1Click (TObject * Sender)
{
TListItem * Item = ListView1- > Items- > Add ();
Item- > Caption = Edit1- > Text;
Item- > SubItems- > Add (Edit2- > Text);
}
|
On déclare un pointeur sur un TListItem. Un TListItem représente un élément de TListView. La méthode Add crée ce nouveau TListItem et l'ajoute à ListView1. Ensuite, on attribue le contenu de Edit1 à la propriété Caption du nouvel élément. Ensuite, on ajoute le contenu de Edit2 aux sous-éléments de Item.
|
| auteurs : Greybird, CGi |
Il est possible de personnaliser facilement les couleurs d'un composant TListBox. Il suffit de passer sa propriété Style à lbOwnerDrawFixed, et d'implémenter le gestionnaire d'évènement OnDrawItem, qui sera chargé d'effectuer le dessin sur le contrôle.
En voici un exemple :
TListBox * pListBox = ((TListBox * )Control);
TCanvas * pCanvas = pListBox- > Canvas;
if ((Index % 2 )= = 0 )
{
pCanvas- > Brush- > Color = clYellow;
}
if (State.Contains (odSelected))
{
pCanvas- > Brush- > Color = clRed;
pCanvas- > Font- > Color = clYellow;
}
pCanvas- > FillRect (Rect);
AnsiString Data = pListBox- > Items- > Strings[Index];
Rect.left + = 2 ;
pCanvas- > TextOut (Rect.Left,Rect.Top,Data);
|
Vous remarquerez que les deux premières lignes vous permettent d'utiliser le même gestionnaire d'évènement pour autant de TListBox que vous le souhaitez. Il vous suffit de positionner leur propriété Style, et de relier leur évènement OnDrawItem à cette fonction.
Enfin, si vous désirez fixer la taille des lignes, qui par défaut sera différente de la taille classique d'un TListBox qui gère son propre dessin, il vous faudra agir sur la propriété ItemHeight.
|
| auteur : blondelle |
Voici un code qui permet d'afficher dans un " DirectoryListBox " uniquement les disques valides, c'est une solution parmi d'autres.
Fichier .cpp : |
# include <vcl.h>
# pragma hdrstop
# include "Unit1.h"
# pragma package ( smart_init )
# pragma resource " * . dfm "
TForm1 * Form1;
int NoDrive0 = 0 ;
__fastcall TForm1:: TForm1 (TComponent* Owner)
: TForm (Owner)
{
}
void __fastcall TForm1:: DirectoryListBox1MouseDown (TObject * Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Label1- > Caption = DirectoryListBox1- > Directory;
}
void __fastcall TForm1:: Button2Click (TObject * Sender)
{
UINT oldErrorMode = SetErrorMode (SEM_FAILCRITICALERRORS);
int a = DriveComboBox1- > Items- > Count;
for (a; a >= 0 ;a- - )
{
if (DiskSize (a) > - 1 )
{
if (NoDrive0 = = 0 )
{
DriveComboBox1- > Items- > Delete (a);
}
}
}
SetErrorMode (oldErrorMode);
NoDrive0 = 1 ;
}
|
Fichier .h : |
# ifndef Unit1H
# define Unit1H
# include <Classes.hpp>
# include <Controls.hpp>
# include <StdCtrls.hpp>
# include <Forms.hpp>
# include <Dialogs.hpp>
# include <FileCtrl.hpp>
class TForm1 : public TForm
{
__published :
TDirectoryListBox * DirectoryListBox1;
TDriveComboBox * DriveComboBox1;
TLabel * Label1;
TButton * Button2;
void __fastcall DirectoryListBox1MouseDown (TObject * Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall Button2Click (TObject * Sender);
private :
public :
__fastcall TForm1 (TComponent* Owner);
} ;
extern PACKAGE TForm1 * Form1;
# endif
|
|
Consultez les autres F.A.Q.
|
|