刘继才

导航

 

1、声明

     type
  PtrInt=Integer;

2、

function CreateAlarmObject(AppHandle:THandle;WinW,WinH:Integer):PtrInt;
begin
  if Application.Handle=0 then
  begin
    Application.Initialize;
    Application.CreateHandle;
    Application.CreateForm(TFm_DM,Fm_DM);
    Application.ShowMainForm:=False;
    ShowWindow(Application.Handle, SW_HIDE);
  end;

   Result:=PtrInt(Pointer(TFm_WaringInfo.Create(nil)));
   TFm_WaringInfo(Pointer(Result)).Width:=WinW;
   TFm_WaringInfo(Pointer(Result)).Height:=WinH;
   TFm_WaringInfo(Pointer(Result)).FormStyle:=fsStayOnTop;
end;

function DeleteAlarmObject(Handle:PtrInt):Integer;
begin
  if (Handle<>0) then
    TObject(Pointer(Handle)).Free;
  Result:=0;
end;

function ExecuteAlarmObject(Handle:PtrInt;TrainId:Pchar;Oper:Pchar;ALeft,ATop:Integer):integer;
var
  TrainInfo:TTrainInfo;

begin
  TrainInfo:=TTrainInfo.Create;
  TrainInfo.TrainID:=TrainId;
  TrainInfo.TrainNum:=Oper;
  TFm_WaringInfo(Pointer(Handle)).TrainInfo:=TrainInfo;
  TFm_WaringInfo(Pointer(Handle)).Top:=ATop;
  TFm_WaringInfo(Pointer(Handle)).Left:=ALeft;
  TFm_WaringInfo(Pointer(Handle)).Show;


  Result:=0;
end;

function HideAlarmObject(Handle:PtrInt):integer;
begin
  TFm_WaringInfo(Pointer(Handle)).Hide;
  Result:=0;
end;

exports
  CreateAlarmObject,
  ExecuteAlarmobject,
  DeleteAlarmObject,
  HideAlarmObject;
end.

 

3、第三步:在测试程序中

{
跟踪调用方式
}
unit TrackAlarm;

interface

uses classes,sysutils,forms;

const
  VIDEOPLUGIN='Alarm.plg';//动态库名称

type
  PtrInt=integer;
 
  TTrackAlarm=class
  private
    FHandle:PtrInt;
  public
    constructor Create(WinW,WinH:Integer);
    destructor Destroy;override;
    function Execute(const TrainId,Oper:string;ATop,ALeft:Integer):integer;
    function Hide:integer;
    class function Track(const TrainId,Oper:string;ATop,ALeft:Integer):integer;
  end;


function CreateAlarmObject(Handle:THandle;WinW,WinH:Integer):PtrInt;external VIDEOPLUGIN;
function DeleteAlarmObject(Handle:PtrInt):Integer;external VIDEOPLUGIN;
function HideAlarmObject(Handle:PtrInt):Integer;external VIDEOPLUGIN;
function ExecuteAlarmObject(Handle:PtrInt;TrainId:Pchar;Oper:Pchar;ATop,ALeft:Integer):integer;external VIDEOPLUGIN;

implementation
var
  _TrackAlarm:TTrackAlarm;
{ TTrackVideo }

constructor TTrackAlarm.Create(WinW,WinH:Integer);
begin
  FHandle:=CreateAlarmObject(Application.Handle,WinW,WinH);
end;

destructor TTrackAlarm.Destroy;
begin
  DeleteAlarmObject(FHandle);
  inherited;
end;

function TTrackAlarm.Execute(const TrainId, Oper: string;ATop,ALeft:Integer): integer;
begin
  Result:=ExecuteAlarmObject(FHandle,Pchar(TrainId),Pchar(Oper),ATop,ALeft);
end;

function TTrackAlarm.Hide: integer;
begin
  Result:=HideAlarmObject(FHandle);
end;

class function TTrackAlarm.Track(const TrainId, Oper: string;ATop,ALeft:Integer): integer;
begin
  if not Assigned(_TrackAlarm) then
    _TrackAlarm:=TTrackAlarm.Create(800,480);

  Result:=_TrackAlarm.Execute(TrainId,Oper,ATop,ALeft);
end;

end.

 

4、测试窗体

    private
    { Private declarations }
    TrackAlarm:TTrackAlarm;

 


procedure TForm3.btn1Click(Sender: TObject);
begin
   if not Assigned(TrackAlarm) then
   TrackAlarm:=TTrackAlarm.Create(800,480);
   TrackAlarm.Execute(edt1.Text,edt2.Text,300,400);
end;

posted on 2015-07-29 09:35  刘继才  阅读(210)  评论(0编辑  收藏  举报