我想自定义一个控件,有一个属性,它的值类型是字符串,我如何将它变为可选的?
也就是说,这个控件做好之后,用户在“属性编辑器”里点击那个属性后会出现一个下拉框,就象DBGrid.Columns[0].FieldName一样在所有字段名选择,请问如果做出这样的属性?

解决方案 »

  1.   

    在控件中添加datafield属性,Borland\Delphi7\Source\Vcl下的dblookup.pas中有相关内容,正好在研究ing...
      

  2.   

    你在类定义中加一个published部分(与public、private具有相同的概念)。
    然后将你的属性定义在该部分里。例:
    ttestobj= class
    private
      fmypro: string;
    published
      property mypro: string read fmypro write fmypro;
      ...
    end;
    然后你安装了该组件之后,在属性编辑器中即可找到了。
      

  3.   

    自己编写属性编辑器,再在Register过程中注册就OK。
      

  4.   

    如果你是想可选的,而并不需要用户输入其他的值的话你可以这样做
    type
      txxx = (a,b,c,d);  tmycontrol = class(xxx)
      private
        fxxx : Txxx;
      published
        x :txxx read Fxxx write fXXX ;
      end;
      

  5.   

    这样下拉框中就有了a,b,c,d几项
      

  6.   

    供可选的将是枚举值,如果你仍然想要string类型的返回值,可能还要做一个映射
      

  7.   

    type 
     Tkkkk=class{a,b,c};^^^^^^^^^^ 
     var kk:Tkkkk;^^^^^^^^
     property aaa: Tkkkk read kk write kk;
      

  8.   

    type
    TPageSize=(A3,A4,A5,B4,B5,CSheet,Custom,Default,Executive,Letter);
      TPage=class(tpersistent)
      privatef
        fpagesize:TPageSize;
         published
         property PageSize:TPageSize read fpagesize write setpage;
    end;
    function strtopagesize(str:string):Tpagesize;
    begin
       if str='A3' then
       begin
         Result:=A3;
         exit;
       end;
       if str='A4' then
       begin
       Result:=A4;
         exit;
       end;
       if str='A5' then
       begin
        Result:=A5;
         exit;
       end;
       if str='B4' then
       begin
       Result:=B4;
         exit;
       end;
       if str='B5' then
       begin
         Result:=B5;
         exit;
       end;
       if str='CSheet' then
       begin
         Result:=CSheet;
         exit;
       end;
       if str='Custom' then
       begin
         Result:=Custom;
         exit;
       end;
       if str='default' then
       begin
         result:=default;
          exit;
       end;
       if str='Executive' then
       begin
         Result:=Executive;
         exit;
       end;
       if str='Letter' then Result:=Letter;
    end;
    function pagesizetostr(pagesize:tpagesize):string;
    begin
       if pagesize=A3 then
       begin
         Result:='A3';
         exit;
       end;
       if pagesize=A4 then
       begin
         Result:='A4';
         exit;
       end;
       if pagesize=A5 then
       begin
         Result:='A5';
         exit;
       end;
       if pagesize=B4 then
       begin
         Result:='B4';
         exit;
       end;
       if pagesize=B5 then
       begin
         Result:='B5';
         exit;
       end;
       if pagesize=CSheet then
       begin
         Result:='CSheet';
         exit;
       end;
       if pagesize=Custom then
       begin
         Result:='Custom';
         exit;
       end;
       if pagesize=default then
       begin
         result:='dedault';
         exit;
       end;
       if pagesize=Executive then
       begin
         Result:='Executive';
         exit;
       end;
       if pagesize=Letter then Result:='Letter';
    end;
      

  9.   

    如果属性定义成枚举类型的话delphi会自动下来的。