Search code examples
delphiactivex

Wrapping a Delphi TFrame descendant as an ActiveX control


I am trying to wrap up a TFrame descendant as an ActiveX control, but don't seem to be able to get the control to show up in the ActiveX Control wizard. Is this approach possible, and if so, are there any working examples that I can be pointed at.

I have tried to follow the instructions here, but as I said the control show in the list of available controls.

Thanks in advance.


Solution

  • @Mmarquee, the easy way to do this is use an Activeform , this is an ActiveX control that encapsulates a Delphi form, you can use the @Francois suggestion or the next aproach wich makes easy deploy any standard form as an activex control.

    First you need to create a new activex control

    alt text

    then you add new activeform

    alt text

    Now , you need to create a new standard form and put your component here.

    Add the uses of your standard form to the unit where is located the TActiveForm and declare an variable of your standard form in this way

    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ActiveX, AxCtrls, Project75_TLB, StdVcl,
      Form1; //your unit with the standard form
    
    type
      TActiveFormX = class(TActiveForm, IActiveFormX)
       private
    
       ...
       public
       MyForm :  TForm1;
    

    finally in the oncreate event of the ActiveForm you put the code to call the standard form and embeded inside of the activeform.

    procedure TActiveFormX.ActiveFormCreate(Sender: TObject);
    begin
      MyForm := TForm1.Create(Self); //set the owner 
      MyForm.Parent := Self;//embed the form
      MyForm.Align := alClient;
      MyForm.BorderStyle := bsNone; //hide the border of the form
      MyForm.Visible := True;//makes the form visible
    end;
    

    for more info check theses links