Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

Vous n'avez pas encore de compte Developpez.com ? L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Developpez.com

C++

Choisissez la catégorie, puis la rubrique :

logo
Sommaire > Interface > Composants > Divers
        Comment donner le focus à un composant?
        Quelle est la différence entre un TTabControl et un TPageControl ?
        Comment faire pour avoir des barres d'outils qui peuvent devenir flottantes ?
        Comment créer des curseurs personnalisés ?
        Comment avoir une barre de progression continue ?
        Comment afficher un TPopupMenu sur un noeud d'un TTreeView?
        Comment mettre une ligne de TTreeView (TNode) en gras ?
        Comment parcourir tous les composants d'une fiche ?
        Comment trouver un composant en connaissant son nom ?
        Comment connaître le composant à l'origine d'un évènement ?
        Comment réaliser une barre d'outils grâce au composant TToolBar ?



Comment donner le focus à un composant?
Créé le 01/09/2004[haut]
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 :

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.

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.


Quelle est la différence entre un TTabControl et un TPageControl ?
Créé le 01/09/2004[haut]
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.


Comment faire pour avoir des barres d'outils qui peuvent devenir flottantes ?
Créé le 01/09/2004[haut]
auteur : Geronimo
Utilisez le composant TToolBar et changez ses propriétés DragKind et DragMode.

DragKind = dkDock;
DragMode = dmAutomatic;

Comment créer des curseurs personnalisés ?
Créé le 01/09/2004[haut]
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 : fr la création de curseurs personnalisés.

Comment avoir une barre de progression continue ?
Créé le 01/09/2004[haut]
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.


Comment afficher un TPopupMenu sur un noeud d'un TTreeView?
Créé le 25/04/2005[haut]
auteurs : Neo41, Neilos
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:

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);
   }
}

Comment mettre une ligne de TTreeView (TNode) en gras ?
Créé le 22/11/2010[haut]
auteurs : dj_benz, pottiez
Pour modifier un noeud TNode, il faut utiliser la structure TTVItem :

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);
lien : fr TVITEM Structure

Comment parcourir tous les composants d'une fiche ?
Créé le 21/06/2006[haut]
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 : faq Quelle est la différence entre un 'Parent' et un 'Owner' ?

Comment trouver un composant en connaissant son nom ?
Créé le 21/06/2006[haut]
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 : faq Quelle est la différence entre un 'Parent' et un 'Owner' ?

Comment connaître le composant à l'origine d'un évènement ?
Créé le 21/06/2006[haut]
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 : faq Que représente le TObject *Sender dans les méthodes de la VCL ?

Comment réaliser une barre d'outils grâce au composant TToolBar ?
Créé le 10/12/2007[haut]
auteurs : Tenguryu, dvsoft, pottiez

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.

Vous pouvez trouvez des icônes gratuites pour barres d'outils sur ce site : http://www.glyfx.com/free.html



Consultez les autres F.A.Q.


Valid XHTML 1.0 TransitionalValid CSS!

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 © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni 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.

Contacter le responsable de la rubrique C++

Partenaire : Hébergement Web