小弟最近碰到的一个项目要反复使用一个只能输入数字的Edit,于是我就想像VC中那样写个类,省时省力.结果发现在Delphi里面这个过程方便的资料比较少.碰到了不少问题,特来请教.
1、对事件的处理
我看了有的例子是重载OnClick等函数,另外的一些却是直接写个
procedure OnClick(var Msg: TMessage);message WM_LBUTTONDOWN;
感觉前者好,面向对象。只用专注于需要增加的功能。但我发现要重载函数时,往往不知道这个函数的原型,不知大家是怎么处理的。VC是只要Ctrl+W,找到对应的消息,双击就行了。Delphi是不是也这么方便。现在我只能一个一个的去查,比较烦。
2、我想自己写的控件用我设计的图标。这样在Delphi的控件栏上挑起来也方便些。
可是照着见网上的方法:用Image Editor做一个与控件的源文件名相同的.dcr文件。在里面画一个32*32的图标。名字与控件的方相同。结果Install后出来的还是那个老的图标,这个怎么解决?

解决方案 »

  1.   

    在Delphi里同样也要消息处理的!
      

  2.   

    1 没办法一直找到基类吧2 把dcr文件加入工程从新编译
    保证图标名与类名相同而且要全部大写,会成功的上帝保佑你 啊门!
      

  3.   

    楼上已经回答了。不过只能输入数字的Edit网上很多的,没必要自己写一个,把代码拿来改一下更省事的
      

  4.   

    有个 "文件名".dcr的文件
    里面有个"图标名"的图标.
    我的类叫"T类名",保存在"类名".pas的文件中
    现在的问题
    其中到底哪些名字要一致?哪些要大写
      

  5.   

    dcr的文件名和pas文件名一致,图标名为"T" + 类名(大写)
      

  6.   

    DELPHI也可以用VC的开发模式,那就看你会用不会用了
      

  7.   

    只要有源码的BUG也不算太多的,我管他3房4房都可以用。
    3方的东西都是在日常应用中为了解决delphi自带控件的不足而产生的,自然有它产生的道理。有漏洞可以自己修改啊,为什么不用?
      

  8.   

    楼主的第一个问题:需要响应WM_Char消息
    先声明
    procedure WMChar(var Message: TWMChar); message WM_CHAR;然后在implement部分加入如下代码procedure TMyEdit.WMChar(var Message: TWMChar);
    var
      theRect:tRect;
      Key:Word;
      OldText:String;
      ShiftState:TShiftState;
    begin
      with Message do
      begin
        ShiftState := KeyDataToShiftState(KeyData);
        Key:=CharCode;
        if (Key<Ord('0')) OR (Key>Ord('9')) then
        begin
          CharCode:=0;
        end;
        Inherited;
      end;
    end;
    上面的代码只允许输入0到9这几个字符,其它的字符不能输入,楼住稍加修改即可使用