2009-08-21 5 views
2

Édition: mise à jour en bas.TComboBoxEx Les éléments ne sont pas mis en retrait lorsqu'ils sont remplis au moment de l'exécution

J'espère que quelqu'un peut aider ici car il me fait tourner dans le virage!

Delphi 2009

J'ai une forme avec deux composants TComboxBoxEx sur elle

One I POPULATE à l'exécution avec le code suivant

procedure TForm1.btn1Click(Sender: TObject); 
var 
    N: Integer; 
begin 
    cb1.ItemsEx.Add.Caption := 'Test'; 
    for N := 0 to 5 do 
    with cb1.ItemsEx.Add do 
    begin 
     Caption := 'Item ' + IntToStr(N); 
     Indent := 1; 
    end; 
end; 

l'autre, je POPULATE au moment de la conception en utilisant la même données et définissant les mêmes propriétés.

Les éléments de ce que je remplis lors de l'exécution ne sont pas du tout indentés, alors que ceux de l'heure de conception sont très nets.

Des idées? L'aide indique que ident est le nombre de pixels à indenter mais que ceux de conception sont indentés de plus d'un pixel même si l'indentation est définie sur 1.

La mise en retrait de 10, par exemple, dans le code ci-dessus a aucun effet.

Voici la section du DFM pour le moment de la conception comobo

object cb2: TComboBoxEx 
Left = 184 
Top = 8 
Width = 145 
Height = 22 
ItemsEx = < 
    item 
    Caption = 'Test' 
    end 
    item 
    Caption = 'Item 0' 
    Indent = 1 
    end 
    item 
    Caption = 'Item 1' 
    Indent = 1 
    end 
    item 
    Caption = 'Item 2' 
    Indent = 1 
    end 
    item 
    Caption = 'Item 3' 
    Indent = 1 
    end 
    item 
    Caption = 'Item 4' 
    Indent = 1 
    end 
    item 
    Caption = 'Item 5' 
    Indent = 1 
    end> 
ItemHeight = 16 
TabOrder = 2 
Text = 'cb1' 
end 

Mise à jour

Définition de la propriété des données de l'élément combo après la légende et tiret semble faire fonctionner.

procedure TForm1.btn1Click(Sender: TObject); 
var 
    N: Integer; 
begin 
    cb1.ItemsEx.Add.Caption := 'Test'; 
    for N := 0 to 5 do 
    with cb1.ItemsEx.Add do 
    begin 
     Caption := 'Item ' + IntToStr(N); 
     Indent := 1; 
     Data := Pointer(N); // New Line 
    end; 
end; 

Un peu bizarre.

+0

Je signalerais cela à QC si j'étais vous. –

+0

Ouais je pense que je vais – Jamie

Répondre

1

Pas tout à fait sûr pourquoi votre code ne fonctionne pas, mais voici certains qui fait:

for N := 0 to 5 do 
    cb1.ItemsEx.AddItem(intToStr(N), 0, 0, 0, DESIRED_INDENT_LEVEL, nil); 
+0

Merci, cela a fonctionné. voir aussi ma mise à jour – Jamie

0

Essayez de définir la propriété avant Indentation paramètre Légende. Semble être un "bug connu" dans TComboBoxEx.

Questions connexes