現在要做一個連接pb程式的評價器。但是只有delphi的例子。。
pb代碼:(本人認為應該這樣寫)
other 事件里:
constant long wm_copydata = 74//cact評價器發送回來的評價訊息
if message.number = wm_copydata then
messagebox('','接收到啦')
end if
介面檔案里寫的訊息通道時wm_copydata 也就是訊息號74,這個代碼為什么我點評價按鈕的時候沒反應呢?
另外有沒有什么辦法查出這個評價器給系統的訊息機制到底是如何的?這個請回delphi的朋友看底下代碼:
delphi代碼:
CactInterface.dll與宿主程式之間的通訊采用Windows訊息機制,通過WM_CopyData方法傳送資料至宿主程式。具體用法是:
1、在宿主程式中定義WMCopyData程序,Delphi范例:
procedure WMCopyData(var Msg:TWMCopyData); message WM_CopyData;
2、撰寫WMCopyData程序的相應程式,Delphi范例:
procedure TFrmMain.WMCopyData(var Msg: TWMCopyData);
var
sMsg:string;
begin
sMsg:=StrPas(PChar(Msg.CopyDataStruct^.lpData)); //Cact評價器發送回來的評價資訊
memMessage.Lines.Insert(0,sMsg);
end;
//Cact評價器發送回來評價資訊的字串格式為:yyyy-mm-dd hh:mm:ss,aaa,bbb,Appri_ccc;
問題:請回delphi的朋友看看delphi代碼,說說具體評價機的訊息機制是什么原理。
uj5u.com熱心網友回復:
delphi的代碼不全,視窗加載的時候應該有注冊監聽該訊息的代碼;評價器是通過什么方式連接到pc的?
uj5u.com熱心網友回復:
為什么說是在other事件里接收呢?uj5u.com熱心網友回復:
評價器通過usb連接到pc,用的是com口
我把評價器給的例子的delphi代碼都貼出。您幫忙分析下。
unit uniMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TfrmMain = class(TForm)
Label1: TLabel;
btnAppr: TButton;
btnExit: TButton;
memMessage: TMemo;
Label2: TLabel;
edtComm: TEdit;
Label3: TLabel;
btnWelcome: TButton;
procedure FormShow(Sender: TObject);
procedure btnApprClick(Sender: TObject);
procedure btnExitClick(Sender: TObject);
procedure btnWelcomeClick(Sender: TObject);
private
{ Private declarations }
procedure WMCopyData(var Msg:TWMCopyData); message WM_CopyData;
//Cact評價器給宿主程式發送的評價資料,包含在Msg.CopyDataStruct^.lpData中。
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
implementation
{$R *.dfm}
function CactInit(hMainProc:THandle; ComPort:string):Boolean;stdcall;External 'CactInterface.dll';
//Cact評價器初始化函式,初始化成功回傳True,否則回傳False;
//hMainProc是宿主程式表單句柄,ComPort是Cact評價器所使用的串口。
function StartWelcome:Boolean;stdcall;External 'CactInterface.dll';
//控制Cact評價器提示歡迎光臨函式,成功回傳True,否則回傳False。
function StartAppraise:Boolean;stdcall;External 'CactInterface.dll';
//控制Cact評價器開始評價函式,成功回傳True,否則回傳False。
function CactQuit:Boolean;stdcall;External 'CactInterface.dll';
//Cact評價器介面Dll退出函式。
procedure TFrmMain.WMCopyData(var Msg: TWMCopyData);
var
sMsg:string;
begin
sMsg:=StrPas(PChar(Msg.CopyDataStruct^.lpData)); //Cact評價器發送回來的評價資訊
memMessage.Lines.Insert(0,sMsg);
//Cact評價器發送回來的評價資訊的格式為:yyyy-mm-dd hh:mm:ss,aaa,bbb,Appri_ccc;
//分別表示:評價時間(19位),員工座席卡號(3位),評價器設備號(3位),評價結果(大于等于7位);
//其中:Appri_Good代表評價器第一個按鍵,Appri_Gene代表評價器第二個按鍵,Appri_1代表評價器第三個按鍵,
//Appri_2代表評價器第四個按鍵,Appri_3代表評價器第五個按鍵,
//Appri_4代表評價器第六個按鍵,APPRI_NO代表顧客未按評價器按鍵;
//2006-11-22 21:19:52,017,019,Appri_1表示:
//2006年11月22日21時19分52秒,員工座席卡號為017的員工在設備號為019的評價器上,被顧客評為態度不好。
end;
procedure TfrmMain.FormShow(Sender: TObject);
begin
memMessage.Clear;
edtComm.Text:='COM2';
if CactInit(Handle,edtComm.Text) then //初始化Cact評價器
begin
btnWelcome.Enabled:=True;
btnAppr.Enabled:=True;
end
else
begin
memMessage.Lines.Insert(0,'串口設備'+edtComm.Text+'初始化失敗,軟體不能正常使用!');
btnWelcome.Enabled:=False;
btnAppr.Enabled:=False;
end;
end;
procedure TfrmMain.btnWelcomeClick(Sender: TObject);
begin
StartWelcome;//歡迎光臨
end;
procedure TfrmMain.btnApprClick(Sender: TObject);
begin
StartAppraise;//開始評價
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
CactQuit;//關閉評價器
Close;
end;
end.
uj5u.com熱心網友回復:
另外如何給分。。呵呵,初來論壇~uj5u.com熱心網友回復:
把這幾個函式宣告并呼叫起來就OK了!function CactInit(hMainProc:THandle; ComPort:string):Boolean;stdcall;External 'CactInterface.dll';
//Cact評價器初始化函式,初始化成功回傳True,否則回傳False;
//hMainProc是宿主程式表單句柄,ComPort是Cact評價器所使用的串口。
function StartWelcome:Boolean;stdcall;External 'CactInterface.dll';
//控制Cact評價器提示歡迎光臨函式,成功回傳True,否則回傳False。
function StartAppraise:Boolean;stdcall;External 'CactInterface.dll';
//控制Cact評價器開始評價函式,成功回傳True,否則回傳False。
function CactQuit:Boolean;stdcall;External 'CactInterface.dll';
//Cact評價器介面Dll退出函式。
uj5u.com熱心網友回復:
這幾個函式已經呼叫成功。
問題是接收不到評價機按鈕發送回來的資訊!!!
uj5u.com熱心網友回復:
procedure WMCopyData(var Msg:TWMCopyData);這個也要宣告吧?轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/82586.html
標籤:API 調用
下一篇:再一個小問題請教
