Texte dans une ListBox [Résolu]

Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention - 13 juil. 2006 à 15:01 - Dernière réponse : Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention
- 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 ?

@+
Afficher la suite 

6 réponses

Répondre au sujet
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 13 juil. 2006 à 19:00
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ThWilliam
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 18 juil. 2006 à 09:55
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ThWilliam
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 13 juil. 2006 à 16:58
0
Utile
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+
Commenter la réponse de cs_MAURICIO
Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention - 17 juil. 2006 à 09:18
0
Utile
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 !
Commenter la réponse de Also know as
Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention - 18 juil. 2006 à 09:08
0
Utile
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 ?
Commenter la réponse de Also know as
Also know as 269 Messages postés samedi 13 décembre 2003Date d'inscription 22 novembre 2010 Dernière intervention - 18 juil. 2006 à 16:50
0
Utile
Ah voui forcément ca fonctionne mieux

merci beaucoup !

Tout fonctionne !
Commenter la réponse de Also know as

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.