Bonsoir,
J'ai un petit probl�me concernant l'insertion d'une tabulation entre deux colonnes d'un DBComboBox. Je n'arrive pas � le faire. L'id�e c'est d'aligner les lignes de la combo.
Merci.
Bonsoir,
J'ai un petit probl�me concernant l'insertion d'une tabulation entre deux colonnes d'un DBComboBox. Je n'arrive pas � le faire. L'id�e c'est d'aligner les lignes de la combo.
Merci.
Bonjour,
Normalement, une tabulation c'est le caract�re "\t".
Je ne sais pas si cela peut te servir...
Je ne connais pas le composant que tu utilises, d�sol�.
Merci pour ta r�ponse mais ca ne marche pas. j'ai d�j� essay�. ca donne un 9 entre les colonnes: 1 9 m�tre par exemples avant: 1 m�tre. Moi je veux inserer une tabulation entre 1 et m�tre.
Tu peux essayer de redessiner les �l�ments de la Combo, auquel cas du dessineras "1" et un peu plus loin "m�tre".
Si tu peux STP �tre un peu plus pr�cis.
Je veux aligner toutes les lignes de la combo:
et non pas
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4 1 mètre 10 mètre 200 mètre
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3 1 mètre 10 mètre 200 mètre
Voici un exemple :
PS : ne pas oublier de mettre Style � csOwnerDrawFixed
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 void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) { int PositionEspace; AnsiString LaPhrase,LePremierMot,LeSecondMot; ComboBox1->Canvas->FillRect(Rect); LaPhrase = ComboBox1->Items->Strings[Index]; PositionEspace = LaPhrase.Pos(" "); //On cherche ou mettre la 'tabulation' if (PositionEspace != 0) {//On découpe la phrase LePremierMot = LaPhrase.SubString(1,PositionEspace); LeSecondMot = LaPhrase.SubString(PositionEspace,LaPhrase.Length() - PositionEspace); } else LePremierMot = LaPhrase; DrawText(ComboBox1->Canvas->Handle,LePremierMot.c_str(),LePremierMot.Length(),(tagRECT *)&Rect,DT_VCENTER | DT_SINGLELINE | DT_LEFT); //On écrit le premier mot Rect.Left += 40; //On se décale un peu DrawText(ComboBox1->Canvas->Handle,LeSecondMot.c_str(),LeSecondMot.Length(),(tagRECT *)&Rect,DT_VCENTER | DT_SINGLELINE | DT_LEFT); //puis le second }
Merci bcp pour ton code, mais ca na pas r�gl� le probl�me, il y a toujours un d�calage quant il s'agit de 2 caract�res ou plus cad plus de 9:
Affich�:
Code nom
1 bouteille
10 vrac
200 carte
Souhait�:
Code nom
1 bouteille
10 vrac
200 carte
salut,
je ne voit pas bien la diff�rence entre ton affich� et souhait�, mais je pense avoir compris ton probl�me, en fait tu souhaites que les intitul� soient allign�s??
pour commencer utilise la police courier (m�me si elle n'est pas tr�s belle) car tous les caract�res ont la m�me taille (occupe la m�me place).
ensuite il faut que tu g�re le longueur de tes quantit�s, ie que tu doit savoir si il y a 1 chiffre, 2 ... et ensuite ajust� le nombre d'espace n�cessaire pour effectuer l'alignement de tes intitul�s
j'esp�re avoir �t� assez claire et avoir r�pondu � a question.
Dans mon exemple pr�c�dent, j'ai mis 40 au pif. Il suffit de d�terminer � l'avance la valeur � mettre en fonction des items de ta Combo.
Merci � vous tous. J'ai trouv� la solution en s'inspirant de vos codes et de vos suggestions.
Voici 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 AnsiString Phrase,Mot1,Mot2; DBComboBox1->Canvas->FillRect(Rect); Phrase = DBComboBox1->Items->Strings[Index]; Mot1 = Phrase.SubString(0,2); if (Phrase.SubString(3,1) == " ") { Mot2 = Phrase.SubString(4,Phrase.Length()); } else { Mot2 = Phrase.SubString(3,Phrase.Length()); } DrawText(DBComboBox1->Canvas->Handle,Mot1.c_str(),Mot1.Length(),(tagRECT *)&Rect,DT_VCENTER | DT_SINGLELINE | DT_LEFT); //On écrit le premier mot Rect.left += 40; DrawText(DBComboBox1->Canvas->Handle,Mot2.c_str(),Mot2.Length(),(tagRECT *)&Rect,DT_VCENTER | DT_SINGLELINE | DT_LEFT); //puis le second
Partager