FAQ C++ BuilderConsultez toutes les FAQ

Nombre d'auteurs : 60, nombre de questions : 670, dernière mise à jour : 21 novembre 2010  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum C++ Builder de developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, contactez pottiez

Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions. Nous vous souhaitons une bonne lecture.

L'équipe C++ Builder de Developpez.

Commentez cette FAQ : Commentez


SommaireInterface bisComposantsComposants Divers (11)
précédent sommaire suivant
 

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 :

Code c++ : Sélectionner tout
Edit1->SetFocus();
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.

Code c++ : Sélectionner tout
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.

Mis à jour le 1er septembre 2004 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.

Mis à jour le 1er septembre 2004 Geronimo

Utilisez le composant TToolBar et changez ses propriétés DragKind et DragMode.

Code c++ : Sélectionner tout
1
2
DragKind = dkDock; 
DragMode = dmAutomatic;

Mis à jour le 1er septembre 2004 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.

Mis à jour le 1er septembre 2004 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.

Mis à jour le 1er septembre 2004 Geronimo

Le composant TTreeView offre la possiblité de lui affecter un composant TPopupMenu en renseignant la propriété PopupMenu. Cependant le menu associé sera valable pour tous les éléments et les noeuds du TreeView. Si vous voulez affecter des menus différents selon le niveau de noeud sélectionné, alors vous devez en faire la gestion vous même.

Voici un exemple permettant d'afficher un menu sur le click droit de la souris mais uniquement pour les noeuds de niveau 1. Pour le tester n'oubliez pas de laisser vide la propriété PopupMenu de votre TreeView.

Exemple:

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::TreeView1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) 
{ 
   TTreeNode *tNode; 
  
   tNode = TreeView1->GetNodeAt(X, Y); 
   if(tNode == NULL) 
   { 
      return; 
   } 
  
   if(tNode->Level == 1 && Button == mbRight) 
   { 
      TreeView1->Selected = tNode; 
      PopupMenu1->Popup(X+this->Left+TreeView1->Left, Y+this->Top+TreeView1->Top+45); 
   } 
}

Mis à jour le 25 avril 2005 Neilos Neo41

Pour modifier un noeud TNode, il faut utiliser la structure TTVItem :

Code c++ : Sélectionner tout
1
2
3
4
5
6
TTVItem* tvi = new TTVItem(); 
tvi->hItem = node->ItemId;//node est le TNode à mettre en gras 
tvi->mask = TVIF_STATE; 
tvi->stateMask = TVIS_BOLD; 
tvi->state = TVIS_BOLD; 
TreeView_SetItem(node->Handle, tvi);

Mis à jour le 21 novembre 2010 dj_benz pottiez

Pour parcourir l'ensemble des composants d'une fiche, vous pouvez utiliser la propriété Components.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
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 :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
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.

Mis à jour le 21 juin 2006 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.

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
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 :

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
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é"; 
      } 
   } 
}

Mis à jour le 21 juin 2006 Ricky81

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...

Code c++ : Sélectionner tout
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button1Click(TObject *Sender) 
{ 
   TButton *Button = dynamic_cast <TButton *> (Sender); 
   if (Button != NULL) 
   { 
      Button->Caption = "Appuyé"; 
   } 
}

Mis à jour le 21 juin 2006 Nono40 Ricky81

Pour réaliser facilement une barre d'outils, il vous faut insérer une série d'images dans un composant TImageList que vous allez associer à votre composant TToolBar (propriété Images du composant).
Vous pouvez également charger un seul fichier image dans votre TImageList, il suffit pour cela que votre image dépasse la taille standard d'un fichier icône, le composant vous demandera alors si il faut redimensionner l'image ou si il faut le couper en plusieurs icônes.

Mis à jour le 10 décembre 2007 dvsoft pottiez Tenguryu

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2020 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.