Texte dans une ListBox

Résolu
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 - 13 juil. 2006 à 15:01
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 - 18 juil. 2006 à 16:50
Bonjour,

J'ai mis ce titre simpliste pour qu'un maximum de persone vienne le voir.

J'aimerais savoir s'il était possible de mettre dans une listbox, un texte normal, et de rajouter un autre texte sur la même ligne mais tout à fait à droite.

Par exemple ceci :
_____________________
|                                        |
| Texte          texte à droite |
|____________________|

Voilà, donc un texte normalement écrit à gauche, et à sa droite un autre texte normal, mais collé tout à fait à droite.

Est-ce possible ?

@+

6 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
13 juil. 2006 à 19:00
Salut,

Voici un exemple de procedure DrawItem pour reprendre la 2° méthode de Mauricio (à propos : Salut Mauricio !) : 

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;  Rect: TRect; State: TOwnerDrawState);
var
  s,s2: string;
begin
   s:= 'Texte à gauche';
   s2:= 'Texte à droite';
   with ListBox1 do
   begin
     Canvas.Font.Assign(Font);
     if odSelected in State then   //item sélectionné
     begin
       Canvas.Brush.Color:= clNavy;
       Canvas.Font.Color:= clWhite;
     end
     else
       Canvas.Brush.Color:= Color;
     Canvas.FillRect(Rect);
     DrawText(Canvas.Handle, PChar(s),  -1, Rect, DT_SINGLELINE or DT_VCENTER or      DT_LEFT);
     DrawText(Canvas.Handle, PChar(s2),  -1, Rect, DT_SINGLELINE or DT_VCENTER or DT_RIGHT);
   end;
end;

Evidemment à toi de gérer la longueur des chaines pour qu'il n'y ait pas chevauchement. Tu peux aussi changer les valeurs de Rect : DrawText n'écrit que dans le Rect qu'on lui donne. 
 
A +
Thierry
3
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
18 juil. 2006 à 09:55
N'as-tu pas oublié de mettre la propriété style de ton ListBox à lbOwnerdrawFixed ?
Pcq, avec style = lbStandard, l'événement OnDrawItem n'est pas appelé.

A +
Thierry
3
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
13 juil. 2006 à 16:58
Salut,
il existe plusieurs façons de faire cela.
La plus simple est de contourner le problème utilisant une police dont tous les caractères occupent le même nombre de pixels sur la ligne comme par exemple la police courrier new utilisée dans l' éditeur de code de Delphi. Il suffit de compléter avec des espaces afin de créer l' impression de colonnes.

Une autre méthode serait d' utiliser l' événement OnDrawItem de ta ListBox/ComboBox.
Pour cela tu dois changer la propriété style en csOwnerdrawFixed...
Comme c' est toi qui contrôle la façon dont les items sont montrés, tu peux dessiner les colonnes que tu désires ...

Des compos qui permettent de gérer plusieurs colonnes sont aussi trouvables sur le net.
Je pense que tu devrais trouver sur ce site des sources qui t' aideront ...

A+
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
17 juil. 2006 à 09:18
Merci prou vos réponses !

Donc si j'ai bien compris, le but etant de créer comme des rectangles, ou des sortes de colonnes invisbles prédéfinis dans la ListBox.

Merci encore, je rend ta source et la testerais chez moi ce soir !

Merci encore !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
18 juil. 2006 à 09:08
J'ai donc essayé ce que tu m'as dit  ThWilliam.

Mais voilà problème, cela ne me fait rien...

Sachant que je n'aime pas du tout "dessiner" sous Delphi, j'ai du mal à tout comprendre, mais n'en reste pas moins que j'ai tout taper comme il fallait, à certe j'ai pas d'erreurs, mais j'ai beau lancer le programe et faire ce que je veux avec il ne m'affiche jamais le "texte à gauche" et le "texte à droite"...

Donc quoi faire pour qu'il m'affiche ce que THWilliam à programmé ci-dessus ?
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
18 juil. 2006 à 16:50
Ah voui forcément ca fonctionne mieux

merci beaucoup !

Tout fonctionne !
0
Rejoignez-nous