我在学习用delphi7开发ActiveX控件,了解了一下基本步骤:1.把需要的功能写成一个VCL;2.把VCL转成ActiveX;
===========================================================
type
  TCarrier = class(TWinControl)
  private
  public
    function SelectFile(var FileName: string): Boolean;
  end;procedure Register;implementationprocedure Register;
begin
  RegisterComponents('Carrier', [TCarrier]);
end;{ TCarrier }function TCarrier.SelectFile(var FileName: string): Boolean;
var
  OpenDialog: TOpenDialog;
begin
  OpenDialog:= TOpenDialog.Create(nil);
  try
    if OpenDialog.Execute then
    begin
      FileName:= OpenDialog.FileName;
      Result:= True;
    end
    else
      Result:= False;
  finally
    FreeAndNil(OpenDialog);
  end;
end;
=====================================================================所以简单写了一个测试的东西,把这个东西安装在控件面板上,没有问题。但是用ActiveX Control转成ActiveX的时候,在VCL ClassName 那一项里,看不到我写的这个东西,所以没办法转换。经过尝试,如果我这个控件派生自TEdit,TButton什么的,就可以看到,可以正常转换(就是把TCarrier = class(TWinControl)换成TCarrier = class(TButton))。我就很奇怪,书上不是说,是从TWinCtrol派生出来的就可以么?为什么会有这种情况。。我用的是delphi7,希望高手可以动手44,然后给我指点一下,谢谢!

解决方案 »

  1.   

    TWinControl只是窗口控件的基类,并没有能让你"可以看到"的手段,TCarrier派生于TWinControl,必须自己展示点什么(如TButton就有个按钮形状),才能看到啊!
      

  2.   

    还有ControlStyle,必要的消息响应方法等,都必须自己设置
      

  3.   

    楼上的同志误会了。。我说的“看到”。。是在转换ActiveX控件的时候,使用ActiveX Control向导,有一个VCL ClassName,这个是一个列表。这个列表是只能选不能填的如果我从TButton派生,这个列表内就会列出我写的TCarrier,如果从TWinCtrol类派生呢。。这个列表里就显示不出来。而书上写的是,只要从TWinCtrol类派生,就应该可以看到。我问的是这个问题,不是问 把Carrier放在一个form上,为什么看不到,了解?