2013-02-09 2 views
0

Не уверен, что я делаю неправильно здесьПеречисление в целое и наоборот (с использованием COMBOBOX ItemIndex)

//update controls from main form Tshape 
form2.cbxShape.ItemIndex:= ord(Shape1.Shape); 
form2.cbxColor.Selected:= Shape1.Brush.Color; 
form2.cbxStyle.ItemIndex:= Ord(Shape1.Brush.Style); 
if form2.ShowModal = mrOK then 
begin 
    //update main form Tshape from controls 
    Shape1.Shape:= TShapeType(form2.cbxShape.ItemIndex); 
    Shape1.Brush.Color:= form2.cbxColor.Selected; 
    Shape1.Brush.Style:= TBrushStyle(form2.cbxStyle.ItemIndex); 
end; 

Я не получаю правильные формы или кисти стили (цвет отлично работает)

ListBox элементы заключаются в следующем:

Circle 
Ellipse 
Rectangle 
RoundRect 
RoundSquare 
Square 

и

BDiagonal 
Clear 
Cross 
DiagCross 
FDiagonal 
Horizontal 
Solid 

ответ

5

Посмотрите на декларации TShapeType и TBrushStyle:

TShapeType = (stRectangle, stSquare, stRoundRect, stRoundSquare, stEllipse, stCircle);

TBrushStyle = (bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross);

Элементы в ваших списках должны быть в том же порядке, что и те же соответствующие перечисления.

+0

Ааа, я принял значение непосредственно из свойств TShape падения вниз, кажется, что они сортируются в алфавитном порядке. Спасибо за толкание в правильном направлении – JakeSays

1

Ответы на вопросы предоставлены LU RD.
Другой способ, independed из любой сортировки, для достижения цели может быть

implementation 
uses TypInfo; 
{$R *.dfm} 

procedure TForm1.ComboBox1CloseUp(Sender: TObject); 
begin 
    SetPropValue(Shape1,'Shape','st' + Combobox1.Text); 
    Caption := StringReplace(GetPropValue(Shape1,'Shape',true),'st','',[]); 
end; 
Смежные вопросы