美文网首页
通过delphi(IDE为delphiXE10)封装ocx,实现

通过delphi(IDE为delphiXE10)封装ocx,实现

作者: 翟书东 | 来源:发表于2019-04-18 08:43 被阅读0次

ocx代码,下面代码为整个ocx实现体,其中CallInt函数为本文真正实现

unit MyActiveForm;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  ActiveX, AxCtrls, MyYBActiveX_TLB,IniFiles, ShellAPI, StdVcl;

type

  TMyActiveX = class(TActiveForm, IMyActiveX)

  private

    iniFile: TIniFile;

    { Private declarations }

    FEvents: IMyActiveXEvents;

    procedure ActivateEvent(Sender: TObject);

    procedure ClickEvent(Sender: TObject);

    procedure CreateEvent(Sender: TObject);

    procedure DblClickEvent(Sender: TObject);

    procedure DeactivateEvent(Sender: TObject);

    procedure DestroyEvent(Sender: TObject);

    procedure KeyPressEvent(Sender: TObject; var Key: Char);

    procedure MouseEnterEvent(Sender: TObject);

    procedure MouseLeaveEvent(Sender: TObject);

    procedure PaintEvent(Sender: TObject);

  protected

    { Protected declarations }

    procedure DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage); override;

    procedure EventSinkChanged(const EventSink: IUnknown); override;

    function Get_Active: WordBool; safecall;

    function Get_AlignDisabled: WordBool; safecall;

    function Get_AlignWithMargins: WordBool; safecall;

    function Get_AutoScroll: WordBool; safecall;

    function Get_AutoSize: WordBool; safecall;

    function Get_AxBorderStyle: TxActiveFormBorderStyle; safecall;

    function Get_Caption: WideString; safecall;

    function Get_Color: OLE_COLOR; safecall;

    function Get_DockSite: WordBool; safecall;

    function Get_DoubleBuffered: WordBool; safecall;

    function Get_DropTarget: WordBool; safecall;

    function Get_Enabled: WordBool; safecall;

    function Get_ExplicitHeight: Integer; safecall;

    function Get_ExplicitLeft: Integer; safecall;

    function Get_ExplicitTop: Integer; safecall;

    function Get_ExplicitWidth: Integer; safecall;

    function Get_Font: IFontDisp; safecall;

    function Get_HelpFile: WideString; safecall;

    function Get_KeyPreview: WordBool; safecall;

    function Get_MouseInClient: WordBool; safecall;

    function Get_ParentCustomHint: WordBool; safecall;

    function Get_ParentDoubleBuffered: WordBool; safecall;

    function Get_PixelsPerInch: Integer; safecall;

    function Get_PopupMode: TxPopupMode; safecall;

    function Get_PrintScale: TxPrintScale; safecall;

    function Get_Scaled: WordBool; safecall;

    function Get_ScreenSnap: WordBool; safecall;

    function Get_SnapBuffer: Integer; safecall;

    function Get_UseDockManager: WordBool; safecall;

    function Get_Visible: WordBool; safecall;

    function Get_VisibleDockClientCount: Integer; safecall;

    procedure _Set_Font(var Value: IFontDisp); safecall;

    procedure Set_AlignWithMargins(Value: WordBool); safecall;

    procedure Set_AutoScroll(Value: WordBool); safecall;

    procedure Set_AutoSize(Value: WordBool); safecall;

    procedure Set_AxBorderStyle(Value: TxActiveFormBorderStyle); safecall;

    procedure Set_Caption(const Value: WideString); safecall;

    procedure Set_Color(Value: OLE_COLOR); safecall;

    procedure Set_DockSite(Value: WordBool); safecall;

    procedure Set_DoubleBuffered(Value: WordBool); safecall;

    procedure Set_DropTarget(Value: WordBool); safecall;

    procedure Set_Enabled(Value: WordBool); safecall;

    procedure Set_Font(const Value: IFontDisp); safecall;

    procedure Set_HelpFile(const Value: WideString); safecall;

    procedure Set_KeyPreview(Value: WordBool); safecall;

    procedure Set_ParentCustomHint(Value: WordBool); safecall;

    procedure Set_ParentDoubleBuffered(Value: WordBool); safecall;

    procedure Set_PixelsPerInch(Value: Integer); safecall;

    procedure Set_PopupMode(Value: TxPopupMode); safecall;

    procedure Set_PrintScale(Value: TxPrintScale); safecall;

    procedure Set_Scaled(Value: WordBool); safecall;

    procedure Set_ScreenSnap(Value: WordBool); safecall;

    procedure Set_SnapBuffer(Value: Integer); safecall;

    procedure Set_UseDockManager(Value: WordBool); safecall;

    procedure Set_Visible(Value: WordBool); safecall;

    function CallInt(const Param, Param2: WideString): WideString; safecall;

  public

    { Public declarations }

    procedure Initialize; override;

  end;

implementation

uses ComObj, ComServ;

{$R *.DFM}

{ TMyActiveX }

procedure TMyActiveX.DefinePropertyPages(DefinePropertyPage: TDefinePropertyPage);

begin

  { Define property pages here.  Property pages are defined by calling

    DefinePropertyPage with the class id of the page.  For example,

      DefinePropertyPage(Class_MyActiveXPage); }

end;

procedure TMyActiveX.EventSinkChanged(const EventSink: IUnknown);

begin

  FEvents := EventSink as IMyActiveXEvents;

  inherited EventSinkChanged(EventSink);

end;

procedure TMyActiveX.Initialize;

begin

  inherited Initialize;

  OnActivate := ActivateEvent;

  OnClick := ClickEvent;

  OnCreate := CreateEvent;

  OnDblClick := DblClickEvent;

  OnDeactivate := DeactivateEvent;

  OnDestroy := DestroyEvent;

  OnKeyPress := KeyPressEvent;

  OnMouseEnter := MouseEnterEvent;

  OnMouseLeave := MouseLeaveEvent;

  OnPaint := PaintEvent;

end;

function TMyActiveX.Get_Active: WordBool;

begin

  Result := Active;

end;

function TMyActiveX.Get_AlignDisabled: WordBool;

begin

  Result := AlignDisabled;

end;

function TMyActiveX.Get_AlignWithMargins: WordBool;

begin

  Result := AlignWithMargins;

end;

function TMyActiveX.Get_AutoScroll: WordBool;

begin

  Result := AutoScroll;

end;

function TMyActiveX.Get_AutoSize: WordBool;

begin

  Result := AutoSize;

end;

function TMyActiveX.Get_AxBorderStyle: TxActiveFormBorderStyle;

begin

  Result := Ord(AxBorderStyle);

end;

function TMyActiveX.Get_Caption: WideString;

begin

  Result := WideString(Caption);

end;

function TMyActiveX.Get_Color: OLE_COLOR;

begin

  Result := OLE_COLOR(Color);

end;

function TMyActiveX.Get_DockSite: WordBool;

begin

  Result := DockSite;

end;

function TMyActiveX.Get_DoubleBuffered: WordBool;

begin

  Result := DoubleBuffered;

end;

function TMyActiveX.Get_DropTarget: WordBool;

begin

  Result := DropTarget;

end;

function TMyActiveX.Get_Enabled: WordBool;

begin

  Result := Enabled;

end;

function TMyActiveX.Get_ExplicitHeight: Integer;

begin

  Result := ExplicitHeight;

end;

function TMyActiveX.Get_ExplicitLeft: Integer;

begin

  Result := ExplicitLeft;

end;

function TMyActiveX.Get_ExplicitTop: Integer;

begin

  Result := ExplicitTop;

end;

function TMyActiveX.Get_ExplicitWidth: Integer;

begin

  Result := ExplicitWidth;

end;

function TMyActiveX.Get_Font: IFontDisp;

begin

  GetOleFont(Font, Result);

end;

function TMyActiveX.Get_HelpFile: WideString;

begin

  Result := WideString(HelpFile);

end;

function TMyActiveX.Get_KeyPreview: WordBool;

begin

  Result := KeyPreview;

end;

function TMyActiveX.Get_MouseInClient: WordBool;

begin

  Result := MouseInClient;

end;

function TMyActiveX.Get_ParentCustomHint: WordBool;

begin

  Result := ParentCustomHint;

end;

function TMyActiveX.Get_ParentDoubleBuffered: WordBool;

begin

  Result := ParentDoubleBuffered;

end;

function TMyActiveX.Get_PixelsPerInch: Integer;

begin

  Result := PixelsPerInch;

end;

function TMyActiveX.Get_PopupMode: TxPopupMode;

begin

  Result := Ord(PopupMode);

end;

function TMyActiveX.Get_PrintScale: TxPrintScale;

begin

  Result := Ord(PrintScale);

end;

function TMyActiveX.Get_Scaled: WordBool;

begin

  Result := Scaled;

end;

function TMyActiveX.Get_ScreenSnap: WordBool;

begin

  Result := ScreenSnap;

end;

function TMyActiveX.Get_SnapBuffer: Integer;

begin

  Result := SnapBuffer;

end;

function TMyActiveX.Get_UseDockManager: WordBool;

begin

  Result := UseDockManager;

end;

function TMyActiveX.Get_Visible: WordBool;

begin

  Result := Visible;

end;

function TMyActiveX.Get_VisibleDockClientCount: Integer;

begin

  Result := VisibleDockClientCount;

end;

procedure TMyActiveX._Set_Font(var Value: IFontDisp);

begin

  SetOleFont(Font, Value);

end;

procedure TMyActiveX.ActivateEvent(Sender: TObject);

begin

  if FEvents <> nil then FEvents.OnActivate;

end;

procedure TMyActiveX.ClickEvent(Sender: TObject);

begin

  if FEvents <> nil then FEvents.OnClick;

end;

procedure TMyActiveX.CreateEvent(Sender: TObject);

begin

  if FEvents <> nil then FEvents.OnCreate;

end;

procedure TMyActiveX.DblClickEvent(Sender: TObject);

begin

  if FEvents <> nil then FEvents.OnDblClick;

end;

procedure TMyActiveX.DeactivateEvent(Sender: TObject);

begin

  if FEvents <> nil then FEvents.OnDeactivate;

end;

procedure TMyActiveX.DestroyEvent(Sender: TObject);

begin

  if FEvents <> nil then FEvents.OnDestroy;

end;

procedure TMyActiveX.KeyPressEvent(Sender: TObject; var Key: Char);

var

  TempKey: Smallint;

begin

  TempKey := Smallint(Key);

  if FEvents <> nil then FEvents.OnKeyPress(TempKey);

  Key := Char(TempKey);

end;

procedure TMyActiveX.MouseEnterEvent(Sender: TObject);

begin

  if FEvents <> nil then FEvents.OnMouseEnter;

end;

procedure TMyActiveX.MouseLeaveEvent(Sender: TObject);

begin

  if FEvents <> nil then FEvents.OnMouseLeave;

end;

procedure TMyActiveX.PaintEvent(Sender: TObject);

begin

  if FEvents <> nil then FEvents.OnPaint;

end;

procedure TMyActiveX.Set_AlignWithMargins(Value: WordBool);

begin

  AlignWithMargins := Value;

end;

procedure TMyActiveX.Set_AutoScroll(Value: WordBool);

begin

  AutoScroll := Value;

end;

procedure TMyActiveX.Set_AutoSize(Value: WordBool);

begin

  AutoSize := Value;

end;

procedure TMyActiveX.Set_AxBorderStyle(Value: TxActiveFormBorderStyle);

begin

  AxBorderStyle := TActiveFormBorderStyle(Value);

end;

procedure TMyActiveX.Set_Caption(const Value: WideString);

begin

  Caption := TCaption(Value);

end;

procedure TMyActiveX.Set_Color(Value: OLE_COLOR);

begin

  Color := TColor(Value);

end;

procedure TMyActiveX.Set_DockSite(Value: WordBool);

begin

  DockSite := Value;

end;

procedure TMyActiveX.Set_DoubleBuffered(Value: WordBool);

begin

  DoubleBuffered := Value;

end;

procedure TMyActiveX.Set_DropTarget(Value: WordBool);

begin

  DropTarget := Value;

end;

procedure TMyActiveX.Set_Enabled(Value: WordBool);

begin

  Enabled := Value;

end;

procedure TMyActiveX.Set_Font(const Value: IFontDisp);

begin

  SetOleFont(Font, Value);

end;

procedure TMyActiveX.Set_HelpFile(const Value: WideString);

begin

  HelpFile := string(Value);

end;

procedure TMyActiveX.Set_KeyPreview(Value: WordBool);

begin

  KeyPreview := Value;

end;

procedure TMyActiveX.Set_ParentCustomHint(Value: WordBool);

begin

  ParentCustomHint := Value;

end;

procedure TMyActiveX.Set_ParentDoubleBuffered(Value: WordBool);

begin

  ParentDoubleBuffered := Value;

end;

procedure TMyActiveX.Set_PixelsPerInch(Value: Integer);

begin

  PixelsPerInch := Value;

end;

procedure TMyActiveX.Set_PopupMode(Value: TxPopupMode);

begin

  PopupMode := TPopupMode(Value);

end;

procedure TMyActiveX.Set_PrintScale(Value: TxPrintScale);

begin

  PrintScale := TPrintScale(Value);

end;

procedure TMyActiveX.Set_Scaled(Value: WordBool);

begin

  Scaled := Value;

end;

procedure TMyActiveX.Set_ScreenSnap(Value: WordBool);

begin

  ScreenSnap := Value;

end;

procedure TMyActiveX.Set_SnapBuffer(Value: Integer);

begin

  SnapBuffer := Value;

end;

procedure TMyActiveX.Set_UseDockManager(Value: WordBool);

begin

  UseDockManager := Value;

end;

procedure TMyActiveX.Set_Visible(Value: WordBool);

begin

  Visible := Value;

end;

function TMyActiveX.CallInt(const Param, Param2: WideString): WideString;

var

  FileIni:TIniFile;//定义一个ini文件

  JHadd:string;//用来存放ini文件地址

  JHExeAdd:string;//用来存放ini文件地址

  par,temp,fileName,xtjm,wjjm: WideString;

  strs:TStrings;

  i,j :Integer;

begin

  fileName:='D:/callIntinterface.ini';

  try

      if not FileExists(fileName) then

      begin

        Result := '-1|没有找到'+ fileName + '|';

        Exit;

      end;

      iniFile := TIniFile.Create(fileName);

      try

        wjjm:= iniFile.ReadString('wym','wymStr','-1');//文件加密

        JHadd:= iniFile.ReadString('JHadd','JHaddS','-1'); //取叫号地址

        JHExeAdd:= iniFile.ReadString('JHadd','JHExeAdd','-1'); //取叫号地址

        xtjm:=Param2;

      finally

        FileIni.free();

      end;

        //判断文件加密和系统加密  CompareStr(wjjm)

        if trim(wjjm) <> trim(xtjm) then

        begin

          Result :='-1|错误,请及时联系开发商!'+'|';

          Exit;

        end;

        if  JHadd = '-1' then

        begin

          Result :='-1|错误,请维护接口data.ini文件路径地址'+'|';

          Exit;

        end;

        //分解param参数

        strs := TStringList.Create;

        strs.Delimiter:='|';

        strs.DelimitedText:=Param;

        //获取data.ini的文件并进行操作

        try

          FileIni:=TIniFile.Create(JHadd);

          for i := 0 to strs.Count-1 do

          begin

            case i of

              0: FileIni.WriteString('Send','Name',Strs[i]);//姓名。

              1: FileIni.WriteString('Send','Money',Strs[i]); //金额;

              2: FileIni.WriteString('Sound','Coding',Strs[i]); //呼叫类别;

            end;

          end;

        finally

          FileIni.free();

        end;

        ShellExecute(handle, nil, pchar(JHExeAdd), nil, nil, SW_SHOWNORMAL);

        FileIni:=TIniFile.Create(JHadd);

        try

          temp:= FileIni.ReadString('Return','Return','-1');//读取是否发送成功

        finally

        FileIni.free();

        end;

  except

      on E:Exception do

      begin

        Result := '-1|发生异常' + E.Message + '|';

        Exit;

      end;

  end;

  Result:=temp;

end;

initialization

  TActiveFormFactory.Create(

    ComServer,

    TActiveFormControl,

    TMyActiveX,

    Class_MyActiveX,

    1,

    '',

    OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,

    tmApartment);

end.

相关文章

  • 通过delphi(IDE为delphiXE10)封装ocx,实现

    ocx代码,下面代码为整个ocx实现体,其中CallInt函数为本文真正实现 unit MyActiveForm;...

  • 基于c#的海康萤石云视频应用DEMO

    基于csharp编写的海康萤石云视频应用的DEMO。封装了海康萤石云API为activex ocx控件,能在win...

  • Delphi 2010 IDE 配色

    打开[Tools] -> [Options],选择“Editor Options” > "Color" Eleme...

  • 第四天

    一、面向对象编程 1、特性 没有封装、继承、多态 封装通过方法实现 继承通过匿名字段实现 多态通过接口实现 2、继...

  • go 面向对象编程

    尽管GO语言没有封装,继承,多态这些概念,但同样通过别的方式实现这些特性封装:通过方法实现继承:通过匿名字段实现多...

  • Java 三大特征之封装、继承、多态

    封装特性 封装性产生的目:保护某些属性和方法不被外部所看见 封装性的实现:为属性和方法进行封装是通过关键字 pri...

  • 封装

    封装性 1.封装性的产生目的 保护某些属性和方法不被外部看见 2.封装的实现 为属性和方法进行封装是通过关键字pr...

  • ABAP如何调用OCX

    网上有很多的open OCX控件,down下来之后可以集成到ABAP后台,借助OCX实现很多强大的功能. 这是一个...

  • vue中使用ocx

    最近做了一个项目,需求是这样的:利用ocx实现指纹录入功能。其实对于前台来说只是方法的调用,ocx里的GetFin...

  • JavaScript模板方法模式

    在静态语言中,实现模板方法模式通过继承实现。通过抽象父类封装子类的算法框架——包括实现一些公共方法以及封装子类中所...

网友评论

      本文标题:通过delphi(IDE为delphiXE10)封装ocx,实现

      本文链接:https://www.haomeiwen.com/subject/qjnawqtx.html