我写了一个控件,部分代码形式如下:
TMyControl=class(TWinControl)
  private
    FFreshhotkey: string;
  published
    property Freshhotkey string read FFreshhotkey write FFreshhotkey;
end;
  我在create方法中写了一句话:FFreshhotkey:='F5'。
  我写好控件后,建了一个工程,使用这个控件,Freshhotkey的值一开始是'F5',有一次我把值擦空,出现了一个我意想不到的结果,我运行程序,Freshhotkey的值是'F5',而不是空(我希望是空)。我保存工程,下次打开时,Freshhotkey的值也是'F5'。
  我开始不知道怎么回事,后来知道,原来delphi在dfm窗体文件中不保存空值的属性。我把在属性的定义后加了一个default 'F5',delphi编译通不过,default不支持string类型。
  请问各位高手如何解决这个问题?

解决方案 »

  1.   

    你在formcreate中指定 Freshhotkey := '';不就行了?
      

  2.   

    要寫在這里面吧
    constructor create(aowner:Tcomponent);override;
      

  3.   

    我现在是在'constructor create(aowner:Tcomponent);override;'中写的。但是不符合我的要求,有问题。
      

  4.   

    你原来的写法就是F5呀,在property Freshhotkey string read FFreshhotkey write FFreshhotkey; 后面加上Stored False;这样窗体文件就不保存了
    property Freshhotkey string read FFreshhotkey write FFreshhotkey stored False;
      

  5.   

    我希望缺省值是'F5'。我运行程序,Freshhotkey的值是'F5',而不是空(我希望是空)。你到底希望是空还是F5啊?真是矛盾。
      

  6.   

    TO:free007(一滴蜜糖) ,阁下还没有明白我的意思,我定义这个属性是希望存储的,问题是delphi对于空字符串不存储,又返回到初始值了。
    我的意思是给用户一个初始值,用户不改,属性值是初始值;
    用户把它改为'F6',属性值是'F6';
    用户把它改为空,属性值是空。
    谢谢回复。
      

  7.   

    TO:c1000(行者) ,
      这个控件有一个缺省值,是‘F5’。使用控件的人,不需要这个值,而是要求为空,所以在delphi IDE环境下设计时把‘F5’擦掉,但是运行程序这个属性又变成'F5'了。
      我开始担心大家不明白,所以我写的很详细,想不到还是没有写好。抱歉抱歉。
      

  8.   

    我现在明白你的意思了,你既然可能存在需要为空的问题,我觉得你在constructor中的FFreshhotkey:='F5';去掉不就可以了?这样只是你需要赋值的时候加上值,下次打开的时候也不会改变,你不需要的时候就什么也不写;
    如果你不把它定义成string类型,我想这个问题是可以解决的,另外你这是个快捷键用string好像不太合适吧?
      

  9.   

    property Freshhotkey string read FFreshhotkey write SetFreshHotKey
    函数试试
      

  10.   

    TMyControl=class(TWinControl)
      private
        FFreshhotkey: string;
      published
        property Freshhotkey string read FFreshhotkey write FFreshhotkey default 'F5';
    end;
      

  11.   

    刚才错了,不好意思。
    你还是在构建函数里写吧。
    要不就定义一个热键集合,就像 dxBar 中定义热键那样做。
      

  12.   

    TO:overtime(空间在线) ,
    使用SetFreshHotKey,我没有试出来,你是如何实现的?