Sign in Join
Wiki copytemporary

TComboBox/fr

Deutsch · English · Español · Français · Suomi · 日本語

Un TComboBox est la combinaison d'un champ de saisie et d'une liste (déroulante) permettant de choisir une des options proposées.

Emploi

Pour utiliser un TComboBox sur une fiche, vous pouvez simplement le sélectionner dans l*'onglet Standard* de la palette de composant et le placer en cliquant sur la fiche.

Dans le ComboBox, les chaînes sont enregistrées dans la propriété Items, de type TStrings. Ainsi, vous pouvez affecter ou supprimer des chaînes dans le ComboBox comme dans un TStringList ou son parent TStrings (NdT: cette dernière affirmation est partiellement vrai car TStrings est une classe abstraite).

Voici quelques petits exemple pour utiliser un ComboBox ComboBox1 sur une fiche Form1 :

Remplissage du ComboBox

par l'inspecteur d'objet

Par le code quand vous créez la fiche

pascal
procedure TForm1.FormCreate(Sender: TObject);  
begin
  ComboBox1.Items.Clear;             //Delete all existing choices
  ComboBox1.Items.Add('Red');        //Add an choice
  ComboBox1.Items.Add('Green');
  ComboBox1.Items.Add('Blue');
  ComboBox1.Items.Add('Random Color');  
end;

Faire que quelque chose arrive après la sélection

Comme tous les composants, même le TComboBox fournit divers events, qui sont appelés quand l'utilsiateur agut sur le ComboBox. Pour répondre à une changement de sélection dans le ComboBox, vous pouvez utiliser l'événement OnChange :

pascal
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  case ComboBox1.ItemIndex of  //what entry (which item) has currently been chosen
    0: Color:=clRed;
    1: Color:=clGreen;
    2: Color:=clBlue;
    3: Color:=Random($1000000);
  end;
end;

ComboxBox dessiné par le propriétaire

En général, il est préférable de laisser le ComboBox suivre le thème défini par l'utilisateur. Dans certains cas (par exemple to programmer un jeu avec une surface toute colorée), vous pouvez vous détourner de ce standard et dessiner le contrôle selon votre propre choix.

Note: Paramètres of ComboBoxDrawItem:

Control:
Si plusieurs contrôles (p.ex. de multiples ComboBox) ont accès à ce gestionnaire, vous savez lequel a déclenché l'événement. Vous pouvez dans votre exemple au lieu de ComboBox1.Canvas.FillRect(ARect) écrire aussi TComboBox(Control).Canvas.FillRect(ARect). Néa,moins, vous devrez vérifier s'il s'agit d'un TComboBox :

pascal
if Control is TComboBox then
  TComboBox(Control).Canvas.FillRect(ARect);

Index:
Spécifie l'emplacement de l'article, vous avez ainsi accès à la chaîne <ComboBox>.Items[Index].
ARect:
Décrit le rectangle, ce qui est nécessaire pour le dessin du fond.
State:
Etat de l'article, soit normal, mis en évidence (focus), sélectionné etc;

Dessiner une rectangle rempli

pascal
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TOwnerDrawState);
var
  ltRect: TRect;

  procedure FillColorfulRect(aCanvas: TCanvas; myRect: TRect);              //paint random color
  // Fills the rectangle with random colours
  var
    y: Integer;
  begin
    for y:=myRect.Top to myRect.Bottom - 1 do begin
      aCanvas.Pen.Color:=Random($1000000);
      aCanvas.Line(myRect.Left, y, myRect.Right, y);
    end;
  end;

begin
  ComboBox1.Canvas.FillRect(ARect);                                         //first paint normal background
  ComboBox1.Canvas.TextRect(ARect, 22, ARect.Top, ComboBox1.Items[Index]);  //paint item text 

  ltRect.Left   := ARect.Left   + 2;                                        //rectangle for color
  ltRect.Right  := ARect.Left   + 20;
  ltRect.Top    := ARect.Top    + 1;
  ltRect.Bottom := ARect.Bottom - 1;

  ComboBox1.Canvas.Pen.Color:=clBlack;
  ComboBox1.Canvas.Rectangle(ltRect);                                       //draw a border 

  if InflateRect(ltRect, -1, -1) then                                       //resize rectangle by one pixel
    if Index = 3 then
      FillColorfulRect(ComboBox1.Canvas, ltRect)                            //paint random color
    else begin
      case Index of
        0: ComboBox1.Canvas.Brush.Color := clRed;
        1: ComboBox1.Canvas.Brush.Color := clGreen;
        2: ComboBox1.Canvas.Brush.Color := clBlue;
      end;
      ComboBox1.Canvas.FillRect(ltRect);                                    //paint colors according to selection
    end;
end;

->

Mettre une image en marge

Dans cet exemple, nous chargeons quelques images dans une TImageList et les dessinons devant les articles dans le ComboBox. C'est un exemple simple qui montre ce l'on peut faire. Je ne donne pas les détails tels que vérifier si les images correspondantes existent etc. dans cet exemple. Ceci devrait être fait selon vos besoins.

pascal
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TOwnerDrawState);
begin
  ComboBox1.Canvas.FillRect(ARect);                                         //first paint normal background
  ComboBox1.Canvas.TextRect(ARect, 20, ARect.Top, ComboBox1.Items[Index]);  //paint item text 
  ImageList1.Draw(ComboBox1.Canvas, ARect.Left + 1, ARect.Top + 1, Index);  //draw image according to index on canvas
end;

->

Voir aussi


From the Free Pascal wiki, page "TComboBox/fr", as it stood on 2020-02-29 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Edited on wiki.freepascal.org by 2 people, 2017–2020

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
E-ricCreated page
E-ricEmploi
E-ricRemplissage du ComboBox
E-ricFaire que quelque chose arrive après la sélection
E-ricComboxBox dessiné par le propriétaire
E-ricComboxBox dessiné par le propriétaire
E-ricDessiner une rectangle rempli
E-ricEmploi (minor)
E-ricComboxBox dessiné par le propriétaire (minor)
E-ricvoir aussi (minor)
E-ricDessiner une rectangle rempli
E-ricImage en marge
TrevFixed syntax highlighting (minor)

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.