Comment faire apparaitre les ascenseurs sur un listbox où on a écrit avec la mét

Résolu
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014 - 11 mars 2008 à 15:22
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014 - 14 mars 2008 à 21:07
Bonjour,


Je souhaiterai savoir comment faire apparaitre les ascenseurs verticaux sur un listbox quand on affiche des données à l'interieur via la méhode canvas (ce n'est donc pas considéré comme des items).
le probleme que j'ai donc c'est que je ne vois pas les informations du bas quand le nombre d'informations à afficher est superieur à la hauteur de mon listbox (puisque que je n'ai pas les asenceurs).


J'espere que j'ai étais clair. Merci par avance de votre aide.

5 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
12 mars 2008 à 12:55
Type
  
TForm1 = Class (TForm)
    ListBox1: TListBox;
    button1: TButton;
    Procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    Procedure button1Click(Sender: TObject);
    Procedure FormCreate(Sender: TObject);
  Private
     { Private declarations }
  Public
    { Public declarations }
  End;

Var
  Form1: TForm1;

Implementation

{$R *.dfm}

Procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
Begin
  With TListBox(Control) Do Begin
    {On efface le fond}
    Canvas.FillRect(Rect);
    {Si Item est numérique alors on l'écrit
     en Rouge (Rouge pâle si sélectionné) + Gras + Barré
     Sinon en Bleu (Blanc si sélectionné) + Gras + Italique}
    With Canvas.Font Do
    If StrToIntDef(Items[Index], -1) = -1Then
      Begin
      If odSelected In State Then
        Color := clWhite
      Else
        Color := clBlue;
        Style := [fsBold, fsItalic];
      End
      Else
      Begin
      If odSelected In State Then
        Color : = $00C1C1FF
      Else
        Color := clRed;
        Style := [fsBold, fsStrikeOut];
       End ;
     {Et on dessine le texte}
    DrawText(Canvas.Handle, PChar(Items[Index]), -1 , Rect, DT_VCENTER Or DT_SINGLELINE Or DT_LEFT);
  End;
End;

{Fonction qui crée une Chaine Numérique aléatoirement}
Function BuildNumStr:String;
Var J : Integer;
Begin
  SetLength(Result, 8);
  For J : = 1  To  8 Do
    Result[J] := Chr(Random(10) + 48);
End ;

{Fonction qui crée une Chaine de caractères aléatoirement}
Function BuildStr:String;
Var J : Integer;
Begin
  SetLength(Result, 8);
  For J : = 1  To  8 Do
    Result[J] := Chr(Random(25) + 97);
End ;

Procedure TForm1.button1Click(Sender: TObject);
Var I : Integer;
    TmpStr : String;
Begin
  With ListBox1.Items Do Try
     {On efface tout}
    Clear;
    BeginUpdate;
    {Crée 30 Items aléatoirement}
    For I : = 1  To  30 Do Begin
        If I Mod  3 = 2 Then
           {Tous les 3 Items créer une chaine de caractères numérique}
          TmpStr : = BuildNumStr
        Else
          {Autrement créer une chaine de caractères normale}
          TmpStr := BuildStr;
       {Et on l'ajoute à la liste d'Items}
      Add(TmpStr);
     End ;
  Finally
    EndUpdate;
  End;
End;

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  Randomize;
End;

End.

 
@+
Cirec

<hr siz ="" />
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
14 mars 2008 à 20:48
La moindre des choses c'est de prendre le temps de répondre
à ceux qui ont fait l'effort de te donner ce que tu demandes ...
d'autant plus que cette réponse est complète il n'y a plus rien à faire que recopier, compiler le code pour voir le résultat.

sinon la prochaine fois tu risques d'attendre longtemps avant d'avoir une réponse à tes questions.

 
@+
Cirec

<hr siz="" />
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
11 mars 2008 à 23:46
Salut,

la méthode que tu utilises n'est pas la bonne.

Le fait de personnaliser l'affichage de la ListBox "avec la méthode Canvas" ne te dispense pas de rentrer les données correctement ... avec la méthode Items.Add (par Exemple)

si tu respectes cela la ScrollBar s'affichera toute seule.

 
@+
Cirec

<hr siz="" />
0
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
12 mars 2008 à 09:51
Merci de cette réponse mais concretement comment je dois faire, est-ce que quelqu'un aurait une ligne de code à me donner comme exemple.

Merci.
0

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

Posez votre question
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
14 mars 2008 à 21:07
Pardon d'avoir mis du temps à répondre mais j'ai mis du temps à venir consulter.

Merci encore,
0
Rejoignez-nous