怎样将一个字符串赋值给集合类型
比如
type TTextureMode = (tmTiled, tmStretched, tmCenter, tmNormal)
var textmode:TTextureMode;
    a:string;
 a:='tmTiled';
怎样将a赋值给textmode   因为我的a值是从数据库中读出来的

解决方案 »

  1.   

    //自己建立一个函数喽function Str2TextureMode(const value: string): Integer;
    const
      TStrTextureMode: array[0..3] of string[15] = ('tmTiled', 'tmStretched', 'tmCenter', 'tmNormal');
    var
      i: Integer;
    begin
      Result := 0;
      for i := 0 to 3 do
        if uppercase(value)= uppercase(TStrTextureMode[i]) then
        begin
          Result := i;
          Break;
        end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    type
      TTextureMode = (tmTiled, tmStretched, tmCenter, tmNormal);
    var
      textmode: TTextureMode;
      a: string;
    begin
      a := 'tmStretched';
      textmode := TTextureMode(Str2TextureMode(a));
      Edit1.Text := IntToStr(Ord(textmode));
    end;
      

  2.   

    那要是集合类型呢
    type TTextureModes=set of TTextureModea:=[tmTiled, tmStretched, tmCenter, tmNormal]
    因为a有16种组合可能性如果再那样一个个检查的话会十分麻烦
      

  3.   

    谢谢各位 我自己弄了一个给集合赋值的函数
    var
      StylesNumber:Integer;
    begin
      StylesNumber:=0;
      if (AnsiContainsText(Styles,'fsBold')) then
       StylesNumber:=StylesNumber+1;
      if (AnsiContainsText(Styles,'fsItalic')) then
       StylesNumber:=StylesNumber+2;
      if (AnsiContainsText(Styles,'fsUnderline')) then
       StylesNumber:=StylesNumber+4;
      if (AnsiContainsText(Styles,'fsStrikeOut')) then
       StylesNumber:=StylesNumber+8;
      case StylesNumber of
        0: Result:=[];
        1: Result:=[fsBold];
        2: Result:=[fsItalic];
        3: Result:=[fsBold,fsItalic];
        4: Result:=[fsUnderline];
        5: Result:=[fsBold,fsUnderline];
        6: Result:=[fsItalic,fsUnderline];
        7: Result:=[fsBold,fsItalic,fsUnderline];
        8: Result:=[fsStrikeOut];
        9: Result:=[fsBold,fsStrikeOut];
        10: Result:=[fsItalic,fsStrikeOut];
        11: Result:=[fsBold,fsItalic,fsStrikeOut];
        12: Result:=[fsUnderline,fsStrikeOut];
        13: Result:=[fsBold,fsUnderline,fsStrikeOut];
        14: Result:=[fsItalic,fsUnderline,fsStrikeOut];
        15: Result:=[fsBold,fsItalic,fsUnderline,fsStrikeOut];
      end;