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

C++Builder Discussion :

Comment mettre une ComboBox dans une cellule d'un TStringGrid ?


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut Comment mettre une ComboBox dans une cellule d'un TStringGrid ?
    Bonjour à tous,

    je sais qu'il y a eu des Posts similaires au mien mais voila des jours que je les parcours, ainsi que la Faqs ... mais je n'y arrive toujours pas.

    Mon problème est que j'ai sur ma Form un StringGrid avec la première ligne fixe et qu'à partir de la deuxième ligne, je souhaiterai mettre une ComboBox dans chaque cellule de la colonne 4.

    Merci pour votre aide, à bientôt !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    je suis allé voir sur ces posts :
    http://www.developpez.net/forums/d19...grer-combobox/
    http://www.developpez.net/forums/d85...le-stringgrid/

    je vous post 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
    17
    18
    19
    20
    21
    22
    23
     
     
    void __fastcall TFormJournal::StringGridAlertesDrawCell(TObject *Sender,
    	  int ACol, int ARow, TRect &Rect, TGridDrawState State)
    {
           TComboBox * Combo = new TComboBox(this);
    	if (ARow > 0 && ACol == 4) 
    	{	
    		if ( StringGridAlertes->Focused())
    		{		
     
    			Combo->Parent = StringGridAlertes;
    			Combo->Visible = true;
    			Combo->Height = R.Bottom - R.Top;
    			Combo->Width  = R.Right  - R.Left;
    			Combo->Left   = R.Left;
    			Combo->Top    = R.Top;
     
     
     
    		}
    	}
    	delete (Combo);
    Je n'arrive toujours pas à insérer ma ComboBox à l'endroit voulu !

    Merci d'avance pour votre aide.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Combo->Left = R.Left;
    Combo->Top = R.Top;
    Schématiquement, j'aurais utilisé des combobox flottants (à tester) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Combo->Left   = ((TStringGrid*)Sender)->Left + R.Left;
    Combo->Top    = ((TStringGrid*)Sender)->Top + R.Top;
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void __fastcal...
    {
    TStringGrid *SG = (TStringGrid*)Sender;
    //...
    Combo->Parent = this; // la fiche et non plus SG
    Combo->Left    = SG->Left + R.Left;
    Combo->Top    = SG->Top + R.Top;
    Combo->BringToFront();
    }
    Mais ... à tester !!!

    A plus !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Merci henderson pour ton aide,

    alors avec quelques modifs, ta solution fonctionne mais le soucis est que lorsque ma Form apparait j'ai ma ComboBox qui est affichée sur ma deuxième ligne colonne 4 (COOL !) et sur mes autres lignes à la colonne 4 il faut que je clic dessus la cellule pour qu'elle s'affiche !!!

    Comment puis je les afficher directement ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    j'ai réussi à faire ce que je voulais mais un problème persiste :

    j'ai une autre ComboBox sur ma Form et lorsque je change d'item de celle-ci, ça me change mon StrinGrid (donc il peut y avoir plus de lignes pour un item que pour un autre) et là mes ComboBox à l'intérieur de mon StringGrid n'apparaissent que si je clic sur ma cellule !!!

    Voici le code du changement d'item de ma ComboBox présente en permanence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void __fastcall TFormJournal::ComboBoxNumSerieSelect(TObject *Sender)
    {
     
    	FormJournal->Close();
            ComposantsJournal.Delete_ComposantsJournal();
    	FormJournal->Show();
     
    }
    Le code de l'apparition de ma Form :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    void __fastcall TFormJournal::FormShow(TObject *Sender)
    {
     
    	FormJournal->StringGridAlertes->Cells[0][0] = " Etat";
    	FormJournal->StringGridAlertes->Cells[1][0] = " Date";
    	FormJournal->StringGridAlertes->Cells[2][0] = " Heure";
    	FormJournal->StringGridAlertes->Cells[3][0] = " Seuils Définis";
    	FormJournal->StringGridAlertes->Cells[4][0] = " Dépassements";
    	FormJournal->StringGridAlertes->Cells[5][0] = " Alerte Lue";
     
    	struct tm *Time;
     
    	RepertoireApplication = ExtractFilePath(Application->ExeName);
    	NumSerie = FormJournal->ComboBoxNumSerie->Items->Strings[FormJournal->ComboBoxNumSerie->ItemIndex];
    	Journal = RepertoireApplication+"\\Alertes\\" + NumSerie + ".al";
     
    	IconeValider = RepertoireApplication + "IconeValider.bmp";
    	IconeAlerte = RepertoireApplication + "IconeAlerte.bmp";
    	IconeChecked = RepertoireApplication + "checked.bmp";
    	IconeUnchecked = RepertoireApplication + "unchecked.bmp";
     
    	FichierJournal = new TIniFile(Journal);
    	ListeJournal = new TStringList();
    	ListeClesValeurs = new TStringList();
     
    	FichierJournal->ReadSections(ListeJournal);
     
    	for (long int i = 0; i < ListeJournal->Count; i++)
    	{
    		// Modifs
     
     
    		FichierJournal->ReadSectionValues(ListeJournal->Strings[i], ListeClesValeurs);
     
    		//Lecture date et heure
    		time_t DataHeure = StrToInt(FichierJournal->ReadString(ListeJournal->Strings[i] ,"DateHeure",NULL));
    		Time = localtime(&DataHeure);
    		AnsiString Heure;
     
    		//Affichage dans le StringGrid
    		FormJournal->StringGridAlertes->Cells[1][i+1] = Heure.sprintf("%02d/%02d/%02d", Time->tm_mday, (Time->tm_mon+1) ,(Time->tm_year+1900));
    		FormJournal->StringGridAlertes->Cells[2][i+1] = Heure.sprintf("%02d:%02d:%02d", Time->tm_hour, Time->tm_min, Time->tm_sec);
     
     
    		AnsiString Seuils = "";
    		AnsiString Depassements = "";
     
     
    		for (int k = 2; k < ListeClesValeurs->Count; k = k+2)
    		{
     
    			if (k > 2)
    			{
    				Seuils = Seuils + "\n";
    				Depassements = Depassements + "\n";
    			}
     
    			Seuils = Seuils + ListeClesValeurs->Strings[k];
     
     
    			//Depassements =  Depassements + ListeClesValeurs->Strings[k+1];
    			Depassements =  ListeClesValeurs->Strings[k+1];
     
     
    		}			
     
    		Seuils = AnsiReplaceText(Seuils, "Seuil ", "");
    		FormJournal->StringGridAlertes->Cells[3][i+1] = Seuils;
     
    		ComposantsJournal.PlacementComboBox(i+1);
    		Combo = (TComboBox *) ComposantsJournal.ListeComposantsAlertesDepassement->Items[i];
    		Combo->Parent = this;
     
    		FormJournal->StringGridAlertes->Cells[4][i+1] = Combo->Items->Add(i);
     
    		Combo->ItemIndex = 0;
     
    		//FormJournal->StringGridAlertes->Cells[4][i+1] = Depassements;
     
    		Result = FichierJournal->ReadBool(ListeJournal->Strings[i], "Alerte", 1);
    		FormJournal->StringGridAlertes->Objects[0][i+1] = (TObject *) Result;
    		FormJournal->StringGridAlertes->Objects[5][i+1] = (TObject *) Result;
     
    		FormJournal->StringGridAlertes->RowCount = ListeJournal->Count+1;
     
    	}
    	delete (ListeJournal);
    	delete (FichierJournal);
     
    }
    Merci pour votre aide !
    A bientôt !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour à tous,

    mon problème est réglé !!!

    J'ai juste supprimé la condition suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ( StringGridAlertes->Focused() { ...  }
    et voilà ça fonctionne !

    Merci beaucoup à tous et à bientôt !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire une recherche dans une combobox et une sélection automatique
    Par VictoriusDan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/12/2009, 16h17
  2. Mettre la valeur d'une combobox dans une feuille Excel
    Par biche1 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/10/2008, 13h56
  3. Comment afficher deux champs d'une table dans une comboBox
    Par lamia2007 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/04/2007, 08h17
  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