Delphi之三彙模擬語音卡(SHT-8B/PCI/FAX)可複用源碼

Delphi之三彙模擬語音卡(SHT-8B/PCI/FAX)可複用源碼

作者:成曉旭

設計簡介:

1、 設計思路請參考本站Blog的另一篇文章:“Delphi之東進模擬語音卡(D160A)可複用源碼”;鏈接http://blog.csdn.net/CXXSoft/archive/2006/08/23/1108211.aspx

2、 其實,仔細對比,你會發現這兩種卡的代碼類方法簽名幾乎99%是一樣的,也就是說,這兩都之間,還需要更進一步的抽象,以解決“重複代碼”或者“相似代碼”的問題。

3、 更高層次的抽象,請參考我的設計文檔。

4、 類圖(以後補上):

5、 卡類源碼:

王朝网络
//------------------------------------------------------------------------------

王朝网络
//

王朝网络
// 産品名稱: 成曉旭的個人軟件Delphi源碼庫

王朝网络
// 産品版本: CXXSoft delphi code source lib 2.0

王朝网络
// 模塊名稱: Delphi之三彙模擬語音卡類

王朝网络
// 模塊描述:

王朝网络
// 單元文件: unSHCard8B.pas

王朝网络
// 開發作者: 成曉旭

王朝网络
// 備注: 任何人使用此文件時,請保留此段自述文件,謝謝!

王朝网络
// 開發時間: 2003-12-03

王朝网络
// 修改曆史:

王朝网络
// 修改描述:

王朝网络
//------------------------------------------------------------------------------

王朝网络
unit unSHCard8B;

王朝网络

王朝网络
interface

王朝网络
uses

王朝网络
Windows,

王朝网络
//unDJTC08a32,unDJNewSig,

王朝网络
unBaseDefine,

王朝网络
//unDJ160ADefine,unDJChanne160A,

王朝网络
unShpa3api,unSHChanne18B,unSH8BDefine;

王朝网络
type

王朝网络
TCXXCommCard8B = class(TObject)

王朝网络
private

王朝网络

王朝网络
ChannelNumber:Word;

王朝网络
channelObject:array of TCXXSHChannel8B;

王朝网络
OnCardChannelState:TTrunkStatusEvent;

王朝网络

王朝网络
procedure ReleaseCommDevice();

王朝网络
function GetChannelObjectOrder(const aChannelID:Word):Word;

王朝网络
function InitChannel():boolean;

王朝网络
public

王朝网络

王朝网络
constructor Create(const trunkEvent:TTrunkStatusEvent);

王朝网络
destructor Destroy(); override;

王朝网络

王朝网络
function LoadCommDevice(const loadAll:boolean=false):boolean;

王朝网络
function Startup():boolean;

王朝网络
function GetAFreeChannel():Word;

王朝网络
function GetChannelNumber():Word;

王朝网络
function DialPhone(const aChannelID:Word;const DialPhoneNumber:PChar):boolean;

王朝网络
function HangUp(const aChannelID:Word):boolean;

王朝网络

王朝网络
end;

王朝网络

王朝网络

王朝网络
implementation

王朝网络

王朝网络
const

王朝网络
SH_ConfigFile = 'C:ShCtiShConfig.ini';

王朝网络
SH_IndexFile = 'C:ShCtiShIndex.ini';

王朝网络

王朝网络
王朝网络
...{ TCXXCommCard8B }

王朝网络
constructor TCXXCommCard8B.Create(const trunkEvent:TTrunkStatusEvent);

王朝网络
begin

王朝网络
ChannelNumber := 0;

王朝网络
Self.OnCardChannelState := trunkEvent;

王朝网络
end;

王朝网络

王朝网络
destructor TCXXCommCard8B.Destroy;

王朝网络
var

王朝网络
Loop:Word;

王朝网络
begin

王朝网络
if (Length(channelObject) > 0) and (channelNumber > 0) then

王朝网络
begin

王朝网络
for Loop := 0 to ChannelNumber - 1 do

王朝网络
begin

王朝网络
if Assigned(channelObject[Loop]) then

王朝网络
begin

王朝网络
channelObject[Loop].Free();

王朝网络
channelObject[Loop] := nil;

王朝网络
end;

王朝网络
end;

王朝网络
end;

王朝网络
ReleaseCommDevice();

王朝网络
end;

王朝网络

王朝网络
function TCXXCommCard8B.DialPhone(const aChannelID: Word;

王朝网络
const DialPhoneNumber: PChar): boolean;

王朝网络
var

王朝网络
K:Word;

王朝网络
begin

王朝网络
Result := false;

王朝网络
K := GetChannelObjectOrder(aChannelID);

王朝网络
if (K <> ErrorTrunkNumber) and (Assigned(channelObject[K])) then

王朝网络
begin

王朝网络
Result := channelObject[K].DialPhone(DialPhoneNumber);

王朝网络
end;

王朝网络
end;

王朝网络

王朝网络
procedure TCXXCommCard8B.ReleaseCommDevice();

王朝网络
begin

王朝网络
SsmCloseCti() ;

王朝网络
end;

王朝网络

王朝网络
function TCXXCommCard8B.GetAFreeChannel(): Word;

王朝网络
var

王朝网络
Loop:Word;

王朝网络
begin

王朝网络
Result := ErrorTrunkNumber;

王朝网络
for Loop := Low(channelObject) to High(channelObject) do

王朝网络
begin

王朝网络
if NOT channelObject[Loop].CheckDialOutEnabled() then continue;

王朝网络
if (channelObject[Loop].GetChannelStatus() = atsFree) then

王朝网络
begin

王朝网络
Result := channelObject[Loop].GetChannelID();

王朝网络

break;

王朝网络
end;

王朝网络
end;

王朝网络
end;

王朝网络

王朝网络
function TCXXCommCard8B.GetChannelNumber(): Word;

王朝网络
begin

王朝网络
Result := channelNumber;

王朝网络
end;

王朝网络

王朝网络
function TCXXCommCard8B.GetChannelObjectOrder(

王朝网络
const aChannelID: Word): Word;

王朝网络
var

王朝网络
Loop:Word;

王朝网络
begin

王朝网络
Result := ErrorTrunkNumber;

王朝网络
for Loop := Low(channelObject) to High(channelObject) do

王朝网络
begin

王朝网络
if (channelObject[Loop].GetChannelID = aChannelID) then

王朝网络
begin

王朝网络
Result := Loop;

王朝网络

break;

王朝网络
end;

王朝网络
end;

王朝网络
end;

王朝网络

王朝网络
function TCXXCommCard8B.HangUp(const aChannelID: Word): boolean;

王朝网络
var

王朝网络
K:Word;

王朝网络
begin

王朝网络
Result := false;

王朝网络
K := GetChannelObjectOrder(aChannelID);

王朝网络
if (K <> ErrorTrunkNumber) and (Assigned(channelObject[K])) then

王朝网络
begin

王朝网络
channelObject[K].ChannelHangUp();

王朝网络
Result := true;

王朝网络
end;

王朝网络
end;

王朝网络

王朝网络
function TCXXCommCard8B.LoadCommDevice(const loadAll:boolean): boolean;

王朝网络
const

王朝网络
loadEmpty = true;

王朝网络
begin

王朝网络
Result := false;

王朝网络
if SsmStartCti(SH_ConfigFile,SH_IndexFile) <> 0 then

王朝网络
begin

王朝网络
TCXXSHChannel8B.InformInvodeError();

王朝网络
Exit;

王朝网络
end;

王朝网络
if(SsmGetMaxUsableBoard() <> SsmGetMaxCfgBoard()) then

王朝网络
begin //部分板卡初始化失敗,取出失敗原因

王朝网络
TCXXSHChannel8B.InformInvodeError();

王朝网络
Exit;

王朝网络
end;

王朝网络
Result := InitChannel();

王朝网络
end;

王朝网络

王朝网络
function TCXXCommCard8B.Startup(): boolean;

王朝网络
var

王朝网络
Loop:integer;

王朝网络
begin

王朝网络
for Loop := 0 to channelNumber - 1 do

王朝网络
begin

王朝网络
channelObject[Loop].Startup();

王朝网络
end;

王朝网络
Result := true;

王朝网络
end;

王朝网络

王朝网络
function TCXXCommCard8B.InitChannel():boolean;

王朝网络
var

王朝网络
number,Loop:integer;

王朝网络
begin

王朝网络
Result := false;

王朝网络
number := SsmGetMaxCh();

王朝网络
if (number < 0) then Exit;

王朝网络
ChannelNumber := number;

王朝网络
SetLength(channelObject,channelNumber);

王朝网络
for Loop := 0 to channelNumber - 1 do

王朝网络
begin

王朝网络
channelObject[Loop] := TCXXSHChannel8B.Create(OnCardChannelState);

王朝网络
channelObject[Loop].CreateCommChannel(Loop);

王朝网络
end;

王朝网络
Result := true;

王朝网络
end;

王朝网络

王朝网络
end.

王朝网络

6、 通道類源碼:

王朝网络
//------------------------------------------------------------------------------

王朝网络
//

王朝网络
// 産品名稱: 成曉旭的個人軟件Delphi源碼庫

王朝网络
// 産品版本: CXXSoft delphi code source lib 2.0

王朝网络
// 模塊名稱: Delphi之三彙模擬語音卡通道類

王朝网络
// 模塊描述:

王朝网络
// 單元文件: unSHChanne18B.pas

王朝网络
// 開發作者: 成曉旭

王朝网络
// 備注: 任何人使用此文件時,請保留此段自述文件,謝謝!

王朝网络
// 開發時間: 2003-12-01

王朝网络
// 修改曆史:

王朝网络
// 修改描述:

王朝网络
//------------------------------------------------------------------------------

王朝网络
unit unSHChanne18B;

王朝网络

王朝网络
王朝网络
...{$DEFINE ThreadChannel}

王朝网络

王朝网络
interface

王朝网络

王朝网络
uses

王朝网络
Windows,Classes,SysUtils,

王朝网络

王朝网络
unBaseDefine,unShpa3api,unSH8BDefine,

王朝网络
//unDJ160ADefine,

王朝网络
unDJTC08a32,unDJNewSig;

王朝网络

王朝网络
Type

王朝网络

王朝网络

王朝网络
王朝网络
...{$IFDEF ThreadChannel}

王朝网络
TCXXSHChannel8B = class(TThread)

王朝网络
王朝网络
...{$ELSE}

王朝网络
TCXXSHChannel8B = class(TObject)

王朝网络
王朝网络
...{$ENDIF}

王朝网络
private

王朝网络
channelType:TChannelType;

王朝网络
oldChannelState,channelState:TTrunkState;

王朝网络
channelID:Word;

王朝网络
phoneNumber:string;

王朝网络
dtmfString:string;

王朝网络
aCallerId:PAnsiChar;

王朝网络

王朝网络
isConntectd:boolean;

王朝网络

王朝网络
isDialOut:boolean;

王朝网络
aTrunkState:TTrunkStatus;

王朝网络

王朝网络
procedure ChannelProcessor();

王朝网络
procedure InformTrunkStatus(const aMsgFlag: TLVOperateFlag);

王朝网络

王朝网络
procedure ClearTrunkStatus();

王朝网络
procedure ClearChannelBuffer();

王朝网络
function CheckSigHangup():boolean;

王朝网络
function CheckCallIn():boolean;

王朝网络
function SwitchOnCallIn():boolean;

王朝网络

王朝网络
procedure ProcessCallInSuccess();

王朝网络
procedure ProcessDialSuccess();

王朝网络

王朝网络
procedure ProcessCheckDialSend();

王朝网络
procedure ProcessDialOut();

王朝网络

王朝网络
procedure Stop();

王朝网络

王朝网络
//三彙卡專用方法

王朝网络
function GetTrunkStateBySsm(const ssmState: integer): TTrunkState;

王朝网络
protected

王朝网络
王朝网络
...{$IFDEF ThreadChannel}

王朝网络
procedure Execute(); override;

王朝网络
王朝网络
...{$ENDIF}

王朝网络
public

王朝网络
strMessage:string;

王朝网络
OnChannelState:TTrunkStatusEvent;

王朝网络

王朝网络
constructor Create(const trunkEvent:TTrunkStatusEvent);

王朝网络
destructor Destroy();override;

王朝网络

王朝网络
procedure CreateCommChannel(const aChennelID: Word);

王朝网络
procedure Startup();

王朝网络

王朝网络
function GetChannelID():Word;

王朝网络
function GetChannelStatus():TTrunkState;

王朝网络
function GetChannelType():TChannelType;

王朝网络
function DialPhone(const DialPhoneNumber:PChar):boolean;overload;

王朝网络
function DialPhone(const DialPhoneNumber:PChar;const PreDialNumber:PChar):boolean;overload;

王朝网络
procedure ChannelHangUp();

王朝网络

王朝网络
function GetDialOut():boolean;

王朝网络

王朝网络
//三彙卡特性方法

王朝网络
function CheckDialOutEnabled():boolean;

王朝网络
class procedure InformInvodeError();

王朝网络
end;

王朝网络
implementation

王朝网络

王朝网络
王朝网络
...{ TCXXSHChannel8B }

王朝网络

王朝网络
procedure TCXXSHChannel8B.ChannelHangUp();

王朝网络
begin

王朝网络
isDialOut := false;

王朝网络
SsmHangUp(channelID);

王朝网络
ClearChannelBuffer();

王朝网络
ClearTrunkStatus();

王朝网络
InformTrunkStatus(lvofUpdate);

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.ChannelProcessor();

王朝网络
var

王朝网络
ssmState:integer;

王朝网络
begin

王朝网络
// ssmState := SsmGetChState(channelID);

王朝网络
// channelState := GetTrunkStateBySsm(ssmState);

王朝网络
CheckCallIn();

王朝网络
case channelState of

王朝网络
atsFree:

王朝网络
begin

王朝网络
//

王朝网络
end;

王朝网络
atsCallIning:

王朝网络
begin

王朝网络
SwitchOnCallIn();

王朝网络
end;

王朝网络
atsCallInSuccess:

王朝网络
begin

王朝网络
if CheckSigHangup() then Exit;

王朝网络
ProcessCallInSuccess();

王朝网络
end;

王朝网络
atsCheckSendDial:

王朝网络
begin

王朝网络
ProcessCheckDialSend();

王朝网络
end;

王朝网络
atsDialing:

王朝网络
begin

王朝网络
ProcessDialOut();

王朝网络
end;

王朝网络
atsDialSuccess:

王朝网络
begin

王朝网络
if CheckSigHangup() then Exit;

王朝网络
ProcessDialSuccess();

王朝网络
strMessage := '撥號成功';

王朝网络
end;

王朝网络
atsHangOff:

王朝网络
begin

王朝网络
ChannelHangUp();

王朝网络
end;

王朝网络
end;

王朝网络
if (oldChannelState <> channelState) then

王朝网络
begin

王朝网络
oldChannelState := channelState;

王朝网络
InformTrunkStatus(lvofUpdate);

王朝网络
end;

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.CheckCallIn(): boolean;

王朝网络
begin

王朝网络
Result := false;

王朝网络
if(SsmGetChState(channelID)=2) then //檢測到振鈴信號

王朝网络
begin

王朝网络
SsmGetCallerId(channelID, aCallerId); //取出CALLERID信息

王朝网络
channelState := atsCallIning;

王朝网络
Result := true;

王朝网络
end;

王朝网络
王朝网络
...{

王朝网络
Result := RingDetect(channelID);

王朝网络
if Result then

王朝网络
begin

王朝网络
OffHook(channelID);

王朝网络
if isDialOut then

王朝网络
channelState := atsDialSuccess

王朝网络
else

王朝网络
channelState := atsCallIning;

王朝网络
end;

王朝网络
}

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.CheckSigHangup(): boolean;

王朝网络
begin

王朝网络
Result := false;

王朝网络
if (SsmGetChState(channelID) = S_CALL_PENDING) then

王朝网络
begin

王朝网络
strMessage := '對方已挂機';

王朝网络
InformTrunkStatus(lvofUpdate);

王朝网络
SsmStopPlay(channelID);

王朝网络
channelState := atsHangOff;

王朝网络
Result := true;

王朝网络
end;

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.ClearTrunkStatus();

王朝网络
begin

王朝网络
channelState := atsFree;

王朝网络
oldChannelState := channelState;

王朝网络
phoneNumber := '';

王朝网络
dtmfString := '';

王朝网络
strMessage := '';

王朝网络
isConntectd := false;

王朝网络
end;

王朝网络

王朝网络
constructor TCXXSHChannel8B.Create(const trunkEvent:TTrunkStatusEvent);

王朝网络
begin

王朝网络
GetMem(aCallerId,50);

王朝网络
Self.OnChannelState := trunkEvent;

王朝网络
王朝网络
...{$IFDEF ThreadChannel}

王朝网络
Self.FreeOnTerminate := true;

王朝网络
inherited Create(true);

王朝网络
王朝网络
...{$ENDIF}

王朝网络
end;

王朝网络

王朝网络

王朝网络
destructor TCXXSHChannel8B.Destroy;

王朝网络
begin

王朝网络
ChannelHangUp();

王朝网络
Stop();

王朝网络
王朝网络
...{$IFNDEF ThreadChannel}

王朝网络
inherited Destroy();

王朝网络
王朝网络
...{$ENDIF}

王朝网络
InformTrunkStatus(lvofDelete);

王朝网络
FreeMem(aCallerId);

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.DialPhone(const DialPhoneNumber:PChar;

王朝网络
const PreDialNumber:PChar): boolean;

王朝网络
begin

王朝网络
Result := false;

王朝网络
if (channelState <> atsFree) then Exit;

王朝网络
phoneNumber := DialPhoneNumber;

王朝网络
Result := (SsmPickup(channelID) = 0);

王朝网络
if NOT Result then Exit;

王朝网络
Result := (SsmAutoDial(channelID,DialPhoneNumber)=0);

王朝网络
if Result then

王朝网络
begin

王朝网络
isDialOut := true;

王朝网络
channelState := atsCheckSendDial;

王朝网络
end;

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.DialPhone(

王朝网络
const DialPhoneNumber: PChar): boolean;

王朝网络
begin

王朝网络
Result := DialPhone(DialPhoneNumber,'');

王朝网络
end;

王朝网络

王朝网络
王朝网络
...{$IFDEF ThreadChannel}

王朝网络
procedure TCXXSHChannel8B.Execute;

王朝网络
begin

王朝网络
while NOT Terminated do

王朝网络
begin

王朝网络
Synchronize(ChannelProcessor);

王朝网络
Sleep(10);

王朝网络
end;

王朝网络
end;

王朝网络
王朝网络
...{$ENDIF}

王朝网络

王朝网络
function TCXXSHChannel8B.GetChannelID(): Word;

王朝网络
begin

王朝网络
Result := channelID;

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.GetChannelStatus(): TTrunkState;

王朝网络
begin

王朝网络
Result := channelState;

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.InformTrunkStatus(const aMsgFlag: TLVOperateFlag);

王朝网络
begin

王朝网络
if NOT Assigned(OnChannelState) then Exit;

王朝网络
aTrunkState.lvFlag := aMsgFlag;

王朝网络
aTrunkState.TrunkID := IntToStr(channelID);

王朝网络
aTrunkState.TrunkType := Ord(channelType);

王朝网络
aTrunkState.TrunkTypeStr := ChannelTypeString[channelType];

王朝网络
aTrunkState.TrunkStep := Ord(channelState);

王朝网络
aTrunkState.TrunkStepStr := TrunkStateString[channelState];

王朝网络
aTrunkState.TrunkPhone := phoneNumber;

王朝网络
aTrunkState.TrunkData := dtmfString;

王朝网络
OnChannelState(aTrunkState);

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.ProcessCallInSuccess();

王朝网络
begin

王朝网络

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.SwitchOnCallIn(): boolean;

王朝网络
begin

王朝网络
SsmPickup(channelID); //摘機

王朝网络
ClearChannelBuffer();

王朝网络
channelState := atsCallInSuccess;

王朝网络
Result := true;

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.ProcessDialSuccess();

王朝网络
begin

王朝网络

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.CreateCommChannel(const aChennelID: Word);

王朝网络
var

王朝网络
ct:integer;

王朝网络
begin

王朝网络
channelID := aChennelID;

王朝网络
ct := SsmGetChType(channelID);

王朝网络
if (ct < 0) then Exit;

王朝网络
channelType := TChannelType(ct);

王朝网络
ClearTrunkStatus();

王朝网络
InformTrunkStatus(lvofAdd);

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.GetChannelType(): TChannelType;

王朝网络
begin

王朝网络
Result := channelType;

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.GetDialOut(): boolean;

王朝网络
begin

王朝网络
Result := isDialOut;

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.ProcessCheckDialSend();

王朝网络
begin

王朝网络
//三彙卡直接轉換狀態

王朝网络
channelState := atsDialing;

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.Startup();

王朝网络
begin

王朝网络
王朝网络
...{$IFDEF ThreadChannel}

王朝网络
Resume();

王朝网络
王朝网络
...{$ENDIF}

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.Stop();

王朝网络
begin

王朝网络
王朝网络
...{$IFDEF ThreadChannel}

王朝网络
Suspend();

王朝网络
Terminate();

王朝网络
王朝网络
...{$ENDIF}

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.CheckDialOutEnabled(): boolean;

王朝网络
begin

王朝网络
//內線通道、坐席通道、磁石通道和錄音通道不支持本SsmPicuup操作

王朝网络
Result := NOT((channelType = ct1) or

王朝网络
(channelType = ct2) or

王朝网络
(channelType = ct3) or

王朝网络
(channelType = ct10));

王朝网络
end;

王朝网络

王朝网络
class procedure TCXXSHChannel8B.InformInvodeError;

王朝网络
var

王朝网络
msgBuffer:PAnsiChar;

王朝网络
begin

王朝网络
GetMem(msgBuffer,255);

王朝网络
try

王朝网络
SsmGetLastErrMsg(msgBuffer);

王朝网络
//記錄異常日志,或者通知用戶

王朝网络
//Showmessage(msgBuffer);

王朝网络
finally

王朝网络
FreeMem(msgBuffer);

王朝网络
end;

王朝网络
end;

王朝网络

王朝网络
function TCXXSHChannel8B.GetTrunkStateBySsm(

王朝网络
const ssmState: integer): TTrunkState;

王朝网络
begin

王朝网络
Result := atsFree;

王朝网络
case ssmState of

王朝网络
0: Result := atsFree;

王朝网络
4,5,6,9: Result := atsCallIning;

王朝网络
7: Result := atsHangOff;

王朝网络
//8:“斷線”狀態。只有錄音通道才會進入本狀態。暫時不處理

王朝网络
//8: Result := atsHangOff;

王朝网络
//3: Result := atsCallInSuccess;

王朝网络
end;

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.ProcessDialOut();

王朝网络
var

王朝网络
dState:integer;

王朝网络
begin

王朝网络
dState := SsmChkAutoDial(channelID);

王朝网络
case dState of

王朝网络
DIAL_VOICE,

王朝网络
DIAL_VOICEF1,

王朝网络
DIAL_VOICEF2:

王朝网络
begin

王朝网络
channelState := atsDialSuccess;

王朝网络
isConntectd := true;

王朝网络
end;

王朝网络
DIAL_STANDBY,

王朝网络
DIAL_NO_DIALTONE,

王朝网络
DIAL_ECHO_NOVOICE,

王朝网络
DIAL_NOVOICE,

王朝网络
DIAL_NOANSWER,

王朝网络
DIAL_FAILURE,

王朝网络
DIAL_INVALID_PHONUM:

王朝网络
begin

王朝网络
channelState := atsHangOff;

王朝网络
end;

王朝网络
end;

王朝网络
strMessage := '撥號中...';

王朝网络
end;

王朝网络

王朝网络
procedure TCXXSHChannel8B.ClearChannelBuffer();

王朝网络
begin

王朝网络
SsmClearRxDTMFBuf(channelID); //清空驅動程序內部的DTMF按鍵號碼接收緩沖區

王朝网络
SsmClearRxBuf(channelID); //清除指定通道ch上MODEM模塊的接收緩沖區中的所有數據

王朝网络
//“搶撥” 開關是指當在放音過程中收到對方的DTMF按鍵字符時,由驅動程序程序立即停止正在進行的放音操作。

王朝网络
//SsmSetDtmfStopPlay(channelID,true); //打開搶撥開關

王朝网络
end;

王朝网络

王朝网络
end.

王朝网络

Delphi之東進模擬語音卡(D160A)可複用源碼
Delphi之東進模擬語音卡(D160A)可複用源碼網友急需,先開源吧,文檔過幾天慢慢補。作者:成曉旭設計簡介:1、 將卡、通道分別單獨進行設計與封裝。2、 所有的外部操作接口都封裝在卡類這一類。3、 在我的項目中...查看完整版>>Delphi之東進模擬語音卡(D160A)可複用源碼
 
客戶端源碼分析之三: StorageWrapper 類
客戶端源碼分析之三: StorageWrapper 類 作者:小馬哥 日期:2004-6-30 StorageWrapper 的作用:把文件片斷進一步切割爲子片斷,並且爲這些子片斷發送 request消息。在獲得子片斷後,將數據寫入磁盤。 請結合 S...查看完整版>>客戶端源碼分析之三: StorageWrapper 類
 
DelphiCodeToDoc--像JavaDoc一樣的Delphi源碼文檔生成工具
DelphiCodeToDoc像JavaDoc一樣的文檔自動生成工具 翻譯:原作: 一、 它是什麽DelphiCodeToDoc 是一個免費的Delphi文檔系統。它使用文件中的代碼符號和格式化的注釋信息來爲你的應用程序和組件生成准確的文檔...查看完整版>>DelphiCodeToDoc--像JavaDoc一樣的Delphi源碼文檔生成工具
 
DELPHI 6 搶先研究-- BizSnap/SOAP/WebService 之三 -- 用 SOAP 實現三層數據庫應用
DELPHI 6 搶先研究-- BizSnap/SOAP/WebService 之三 -- 用 SOAP 實現三層數據庫應用 在前面的例子(見 )中我們看到了 SOAP 的強大功能,特別是第二個例子。如上一個例子所示,我們只要利用 Midas/DataSnap 的 P...查看完整版>>DELPHI 6 搶先研究-- BizSnap/SOAP/WebService 之三 -- 用 SOAP 實現三層數據庫應用
 
MIDP終端模擬之三:MIDP 的自定義字體
MIDP終端模擬之三:MIDP 的自定義字體
  下載 項目源代碼 在本系列的第 1 部分中,我們通過構建了一個終端模擬器來探討了 MIDP 對于網絡化應用程序的潛力。第 2 部分重點介紹了構建一個好的用戶界面來使 MIDTerm 成爲一個良好交互的應用程序。在第 3 部...查看完整版>>MIDP終端模擬之三:MIDP 的自定義字體
 
MIDP終端模擬之三:MIDP 的自定義字體
MIDP終端模擬之三:MIDP 的自定義字體
  下載 項目源代碼 在本系列的第 1 部分中,我們通過構建了一個終端模擬器來探討了 MIDP 對于網絡化應用程序的潛力。第 2 部分重點介紹了構建一個好的用戶界面來使 MIDTerm 成爲一個良好交互的應用程序。在第 3 部...查看完整版>>MIDP終端模擬之三:MIDP 的自定義字體
 
用DELPHI爲WINDOWS做一個帶聲音的模擬鬧鍾
摘要:用DELPHI爲WINDOWS做一個帶聲音的模擬鬧鍾 嗨,大家好。我是夢尋,這是我的第一次發帖子,請大家多多鼓勵、多多支持,畢竟嘛,予人方便予己方便。OK,轉入正題,現在就來講如何做一個帶響聲的表盤式的 CLOCK。...查看完整版>>用DELPHI爲WINDOWS做一個帶聲音的模擬鬧鍾
 
用 DELPHI 爲 WINDOWS 做一個帶聲音的模擬鬧鍾
嗨,大家好。我是夢尋,這是我的第一次發帖子,請大家多多鼓勵、多多支持,畢竟嘛,予人方便予己方便。OK,轉入正題,現在就來講如何做一個帶響聲的表盤式的 CLOCK。 首先我們應選擇新建一個程序,並在窗體中加入以...查看完整版>>用 DELPHI 爲 WINDOWS 做一個帶聲音的模擬鬧鍾
 
NHibernate源碼分析之三(續):數據持久化
本文已轉至如下地址:http://www.narchitecture.net/Article/ArticleDetails.aspx?id=a6npll...查看完整版>>NHibernate源碼分析之三(續):數據持久化
 
 
回到王朝網路首頁