我要写一类似TEDIT功能的控件 要求至少可以显示输入的文本、响应Backspace键删除最后一个字符但只能从TCustomControl继承 思路应该是什么样的 显示输入的文本是得用画出来吗?我看TCustomControl里只有一些canvas函数

解决方案 »

  1.   

    procedure TCustomEdit.CreateParams(var Params: TCreateParams);
    const
      Passwords: array[Boolean] of DWORD = (0, ES_PASSWORD);
      ReadOnlys: array[Boolean] of DWORD = (0, ES_READONLY);
      CharCases: array[TEditCharCase] of DWORD = (0, ES_UPPERCASE, ES_LOWERCASE);
      HideSelections: array[Boolean] of DWORD = (ES_NOHIDESEL, 0);
      OEMConverts: array[Boolean] of DWORD = (0, ES_OEMCONVERT);
    begin
      inherited CreateParams(Params);
      CreateSubClass(Params, 'EDIT');
      with Params do
      begin
        Style := Style or (ES_AUTOHSCROLL or ES_AUTOVSCROLL) or
          BorderStyles[FBorderStyle] or Passwords[FPasswordChar <> #0] or
          ReadOnlys[FReadOnly] or CharCases[FCharCase] or
          HideSelections[FHideSelection] or OEMConverts[FOEMConvert];
        if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then
        begin
          Style := Style and not WS_BORDER;
          ExStyle := ExStyle or WS_EX_CLIENTEDGE;
        end;
      end;
    end;
    TCustomEdit是父类是TWinControl.
    从TWinControl变为TcustomEdit是这样改变的.TCustomContro的父类也是TWinControl.你找源代码"copy"就行了.