| auteur : Geronimo | Il y a plusieurs solutions pour faire cela. Si vous savez à quel composant vous souhaitez donner le focus, utilisez la méthode SetFocus du composant : L'autre méthode permet de donner le focus à un contrôle dont vous ne connaissez pas le nom. Pour cela, utilisez la fonction FocusControl membre de la fiche.
FocusControl (FindNextControl (ActiveControl, true , true , true ));
|
Dans ce code, nous donnons le focus au contrôle renvoyé par la fonction FindNextControl. Cette fonction prend comme référence le contrôle passé en premier argument, et le second argument permet de définir le sens de parcours par rapport à l'ordre de tabulation (true pour le sens croissant, false pour le sens décroissant). Regardez l'aide de C++Builder sur FindNextControl pour obtenir la description des arguments suivants.
|
| auteur : Geronimo | Deux composants qui paraissent semblables sont disponibles dans la palette de l'IDE : le TTabControl et le TPageControl. La différence réside dans le fait que lorsque vous cliquez sur les onglets d'un TTabControl, les composants placés sur celui-ci ne changent pas : seul l'onglet actif change. Il faut gérer les modifications dans l'évènement OnChange. Pour un TPageControl, une page est liée à chaque onglet. Donc quand l'onglet change, tout le contenu du TPageControl change. Celui que vous voyez le plus souvent, dans les boîtes de dialogue d'options par exemple (voir les options d'un projet C++Builder) est le TPageControl. Le TTabControl est utilisé dans les logiciels MDI (Multiple Documents Interface) qui utilisent les onglets pour changer de documents : le contenu du TabControl n'a pas besoin de changer, cela doit rester une zone d'édition, mais dans l'évènement OnChange, on change le contenu de ce fichier.
|
| auteur : Geronimo | Utilisez le composant TToolBar et changez ses propriétés DragKind et DragMode.
DragKind = dkDock;
DragMode = dmAutomatic;
|
|
| auteur : Geronimo | En plus des curseurs par défaut disponibles avec C++Builder, il est possible de créer ses curseurs souris personnalisés. Cela peut être fait rapidement en suivant le tutoriel de Gilles Louise dont le lien figure ci-dessous.
|
lien : la création de curseurs personnalisés.
|
| auteur : Geronimo | Par défaut, la barre de progression TProgressBar se divise en petites sections. Si vous souhaitez avoir une bande continue, positionnez la propriété Smooth de cette barre de progression à true.
|
| auteurs : dj_benz, pottiez | Pour modifier un noeud TNode, il faut utiliser la structure TTVItem :
TTVItem* tvi = new TTVItem ();
tvi- > hItem = node- > ItemId;
tvi- > mask = TVIF_STATE;
tvi- > stateMask = TVIS_BOLD;
tvi- > state = TVIS_BOLD;
TreeView_SetItem (node- > Handle, tvi);
|
|
lien : TVITEM Structure
|
| auteur : Ricky81 |
Pour parcourir l'ensemble des composants d'une fiche, vous pouvez utiliser la propriété Components.
void __fastcall TForm1:: Button1Click (TObject * Sender)
{
for (int i= 0 ; i < Form1- > ComponentCount ; i+ + )
{
ShowMessage (Form1- > Components[i]- > Name);
}
}
|
Remarque : seuls les composants qui auront la fiche pour Owner seront concernés. Pour parcourir de façon récursive, voici un exemple de code :
void __fastcall TForm1:: ShowComponents (TComponent * Component)
{
for (int i= 0 ; i< Component- > ComponentCount ; i+ + )
{
ShowMessage (Component- > Components[i]- > Name);
ShowComponents (Component- > Components[i]);
}
}
void __fastcall TForm1:: Button1Click (TObject * Sender)
{
ShowComponents (Form1);
}
|
Attention, si vous comptez supprimer des composants pendant le parcours, il faut impérativement effectuer la boucle dans le sens descendant. Dans le cas contraire, vous serez victimes de la mise à jour de la propriété Components et des composants seront omis dans le parcours.
|
lien : Quelle est la différence entre un 'Parent' et un 'Owner' ?
|
| auteur : Ricky81 |
Pour rechercher la référence d'un composant en ne connaissant que son nom et son propriétaire, il faut utiliser la méthode FindComponent du propriétaire. Le résultat de cette méthode est toujours de type TComponent, il est donc utile d'en transtyper le résultat en fonction du type de composant attendu.
void __fastcall TForm1:: Button1Click (TObject * Sender)
{
TEdit * edit = dynamic_cast < TEdit* > (Form1- > FindComponent (" Edit1 " ));
if (edit ! = NULL )
{
edit- > Text = " Texte modifié " ;
}
}
|
Cette méthode est très utile pour modifier les propriétés d'une série de composants dont les noms peuvent être calculés en boucle. Par exemple pour effacer le contenu de Edit1 à Edit10 :
void __fastcall TForm1:: Button1Click (TObject * Sender)
{
TEdit * edit = NULL ;
for (int i= 1 ; i<= 10 ; i+ + )
{
edit = dynamic_cast < TEdit * > (Form1- > FindComponent (" Edit " + IntToStr (i)));
if (edit ! = NULL )
{
edit- > Text = " Texte modifié " ;
}
}
}
|
|
lien : Quelle est la différence entre un 'Parent' et un 'Owner' ?
|
| auteurs : Ricky81, Nono40 |
Dans le cas ou plusieurs composants utilisent le même gestionnaire d'évènement il peut être nécessaire de connaître quel composant est à l'origine de l'évènement. C'est le rôle du paramètre Sender contenu dans toutes les signatures des méthodes associées à un évènement.
Par exemple, pour connaître le nom du bouton cliqué, même si Button1Click est également associé à Button2, Button3 etc...
void __fastcall TForm1:: Button1Click (TObject * Sender)
{
TButton * Button = dynamic_cast < TButton * > (Sender);
if (Button ! = NULL )
{
Button- > Caption = " Appuyé " ;
}
}
|
|
lien : Que représente le TObject *Sender dans les méthodes de la VCL ?
|
Consultez les autres F.A.Q.
|
|