IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Comment mettre une TComboBox dans une TStringGrid ?


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut Comment mettre une TComboBox dans une TStringGrid ?
    Bonjour,

    Pour une question visuelle et donc de simplicité, je suis entrain de reprendre une application que j'ai développé et de la rendre plus simple d'utilisation.

    Ce que je souhaite faire, c'est de mettre dans une StringGrid une ComboBox qui imposera une liste de choix selon certains paramètres.

    Actuellement, j'arrive à mettre une ComboBox dans une cellule de StringGrid mais le rendu n'est pas terrible (ca ne remplit pas totalement la cellule).
    De plus, je n'arrive pas à faire dérouler ma ComboBox

    Je ne suis pas sur, mais je pense que j'avais vu un post qui ressemble à mon problème mais je n'arrive plus à mettre la main dessus. Je crois, de mémoire, que c'est Waskol qui avait fourni la solution au problème.

    Je vous mets le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MyCombobox:TComboBox;
      Cellule:TRect;
    begin
      MyCombobox:=TComboBox.Create(StringGrid1);
      MyCombobox.Parent:=StringGrid1;
      MyCombobox.Items.Add('toto');
      MyCombobox.Items.Add('tata');
      Cellule:=StringGrid1.CellRect(1,1);
      MyCombobox.Left:=Cellule.Left;
      MyCombobox.Top:=Cellule.Top;
      MyCombobox.Width:=Cellule.Right-Cellule.Left;
      MyCombobox.Height:=Cellule.Bottom-Cellule.Top;
    end;
    Est-ce que je procéde de la bonne façon ?
    Comment faire pour occupé l'espace totale d'une cellule avec une ComboBox ?
    Comment faire dérouler ma ComboBox ?

    Merci de votre aide
    Cordialement

  2. #2
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Salut
    Citation Envoyé par ero-sennin Voir le message
    Comment faire pour occupé l'espace totale d'une cellule avec une ComboBox ?
    Tu peux expliquer un peu mieux ces espaces vides? Par exemple, une capture d'écran.
    Citation Envoyé par ero-sennin Voir le message
    Comment faire dérouler ma ComboBox ?
    Il me semble (à vérifier) qu'il existe une méthode DropDown qui fait ça
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Merci Pedro pour cette réponse mais ça ne fonctionne pas.
    En faite, mes valeurs sont bien stockées dans la ComboBox mais si j'ai bien compris la source de mon soucis, c'est que la liste déroulante se fait dans la cellule, or, je ne peux pas voir celle ci, vu que ma ComboBox est taillée à la taille de la cellule. (Il suffit de se mettre dans la ComboBox et de jouer avec les flèches directionnelles pour voir mes infos défiler).

    Pour ce qui est des espaces vide, c'est que je souhaite que le bord de ma Combobox colle le bord de la cellule et celà pour tous les bords.

    EDIT :
    J'arrive à voir mes données en donnant à la hauteur de la combobox une taille de 150 pour voir les 2 items ...

    Voici une capture :
    Images attachées Images attachées  

  4. #4
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Y aurait pas une propriété AutoSize sur ta COmoBox
    A vérifer (désolé je n'ai pas Delphi sous la main )
    Sinon, mets une TComboBox normalement sur la fiche, configure-la de façon à réagir comme tu veux puis copie les propriétés sur ta ComboBox créée dynamiquement
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Bon, j'ai résolu partiellement mes soucis et j'ai compris le pourquoi du vide ...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    procedure TForm1.Button1Click(Sender: TObject);
    var
    MyCombobox:TComboBox;
    Cellule:TRect;
    begin
    MyCombobox:=TComboBox.Create(StringGrid1);
    MyCombobox.Parent:=StringGrid1;
    MyCombobox.Items.Add('toto');
    MyCombobox.Items.Add('tata');
    Cellule:=StringGrid1.CellRect(1,1);
    MyCombobox.Left:=Cellule.TopLeft.X-StringGrid1.GridLineWidth;
    MyCombobox.Top:=Cellule.TopLeft.Y-StringGrid1.GridLineWidth;
    MyCombobox.Width:=StringGrid1.ColWidths[1]+StringGrid1.GridLineWidth+1;
    //MyCombobox.Height:=StringGrid1.RowHeights[1]++StringGrid1.GridLineWidth+1;// Apparemment inutile !
    MyCombobox.Style:=csDropDown;
    end;
    Pour le soucis de l'espace vide, c'est qu'on ne peut pas redemensionner une ComboBox en hauteur. Elle se calque sur la taille de la police ...
    Donc, apparemment, je n'ai pas d'autre choix que :
    • Régler la taille de mes cellules à celle de la ComboBox
    • Mettre une police plus grande


    Aussi, il faudrait que celà fonctionne sur tous les thèmes Windows etc etc alors je ne sais pas si toucher à la police de caractère est une bonne solution ...

    EDIT :

    J'ai trouvé la solution

    Il faut mettre csOwnerDrawVariable à la propriété Style de la ComboBox et ensuite jouer avec la valeur ItemHeight pour adapter la hauteur à nos besoins

    Merci Pedro de m'avoir mis sur la piste de l'AutoSize ...
    Cepandant j'ai encore mon soucis de liste déroulante ... sauf si je change le repère lors de la création et que je lui indique la Form et non la StringGrid ...

  6. #6
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Dernière petite question :

    Afin que ma ComboBox fonctionne correctement, j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyCombobox:=TComboBox.Create(StringGrid1);
    MyCombobox.Parent:=Form1;
    De cette façon, ma ComboBox me propose une liste déroulante.
    Cependant, j'aurai voulu savoir si ce n'était pas grave de définir un parent autre que celui utilisé lors du Create.
    Si je ne me trompe pas, avec ce code, si je détruis ma StringGrid, ma ComboBox sera elle aussi détruite ...

    Y a-t-il des soucis que je peux rencontré en créant ma ComboBox de cette façon ? (parent différent du create ...)

    Merci d'avance

  7. #7
    Membre Expert
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Par défaut
    j'ai fait un TPropertyGrid derrivé de TStringGrid pour reproduire un equivalent de l'inpecteur d'objet de DElphi.

    En fait je suis passé par la surcharge de la methode CreateEditor il me semble qui genere le TInplaceEdit qui permet la saisie d'information.

    LE TInplaceEdit possede une option qui permet de chosir entre un bouton parcourir, une combobox ou un simple edit.

    Apres faut bidouiller un peu des fonctions

Discussions similaires

  1. bash: comment mettre le résultat d'une commande dans une variable
    Par helpcomm dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 03/10/2012, 23h26
  2. mettre un swf dans une iframe dans une page html
    Par petitevero dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/04/2011, 02h58
  3. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  4. Comment mettre un lien dans une page vers une autre partie de la même page?
    Par Longway dans le forum Dépannage et Assistance
    Réponses: 4
    Dernier message: 12/10/2006, 18h58
  5. Réponses: 7
    Dernier message: 02/05/2006, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo