通过delphi(IDE为delphiXE10)封装ocx,实现火狐js调用本地文件(.ini)数据交互

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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容