dark-man
دوشنبه 30 آذر 1388, 11:19 صبح
سلام و خسته نباشید خدمت اساتید .
من DLLی رو نوشتم که از چند تا کلاس ارث بری می کنه . DLL رو با دلفی نوشتم و از Class برای ساختنش استفاده کردم . در هنگام رجیستر کردن به من خطا میده . می خوام این DLL مثل OCXها و DLLهای معمولی که می تونن در دلفی ADD بشن استفاده بشه . نمونه کد DLL رو میذارم تا دوستان کمکم کنند . پیشاپیش از لطفتون سپاسگذارم .
library MHKPhone_TLB;
uses
ShareMem,
Windows,
SysUtils,
Classes,
Controls,
UnitKDCommon,
UnitKDPhone;
type
TLine = Record
ID: Integer;
Name: WideString;
end;
TLines=array of TLine;
TMHKPhone = class(KDPhone)
protected
ECallState : Integer;
FLine : TLine;
procedure ActiveLine(Line: TLine);
procedure Deactive(Line: TLine);
procedure MHKPhoneCallState(Sender: TObject; CallState: TCallState; Param1, Param2, CallHandle: Integer);
public
//-------------------------------------------------------------------------------------------------------
FCallTime : TTime;
//-------------------------------------------------------------------------------------------------------
procedure Answer; overload;
procedure Dial(Line:TLine;TelNumber:String); overload;
procedure HangupCall;
function GetLines: TLines;
constructor Create(AOwner : TComponent); override;
property CallTime : TTime read FCallTime;
end;
{implementation of TMHKPhone}
procedure TMHKPhone.ActiveLine(Line: TLine);
begin
Self.LineActive(Line.ID, True);
end;
procedure TMHKPhone.Answer;
begin
Self.PickUp(0);
Self.Answer(0);
end;
procedure TMHKPhone.Deactive(Line: TLine);
begin
Self.LineActive(Line.ID, False);
end;
function TMHKPhone.GetLines: TLines;
var
i : Word;
modemName : WideString;
begin
SetLength(Result,Self.NumberOfLines);
for i := 0 to Self.NumberOfLines - 1 do
begin
Self.GetLineName(i, modemName);
Result[i].ID := i;
Result[i].Name := modemName;
end;
end;
constructor TMHKPhone.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
with Self do
begin
AddressID := 0;
AutoDisconnect := True;
ExtDevAux.MicGain := 10;
ExtDevAux.SpeakerVolume := 10;
ExtDevHandSet.MicGain := 10;
ExtDevHandSet.SpeakerVolume := 10;
InitialRingNumber := 1;
LinePrivilege := lpOwner;
ModemSpeaker.Volume := svDefault;
ModemSpeaker.Mode := smDefault;
ShowModemIcon := False;
Tag := 0;
TimeOut := 10000;
WaitForDialTone := True;
OnCallState := MHKPhoneCallState;
end;
end;
procedure TMHKPhone.MHKPhoneCallState(Sender: TObject; CallState: TCallState; Param1, Param2, CallHandle: Integer);
begin
case CallState of
csOffering : begin
ECallState := 6;
Self.Answer(0);
end;
csConnected : begin
ECallState := 1;
FCallTime := Time;
end;
csDisconnected : begin
ECallState := 0;
FCallTime := Time - FCallTime;
end;
end;
end;
{$R *.res}
procedure TMHKPhone.Dial(Line:TLine;TelNumber: String);
begin
FLine:=Line;
ActiveLine(Line);
DialNumber(TelNumber, 0);
end;
procedure TMHKPhone.HangupCall;
begin
Self.Hangup;
Deactive(FLine);
end;
end.
من DLLی رو نوشتم که از چند تا کلاس ارث بری می کنه . DLL رو با دلفی نوشتم و از Class برای ساختنش استفاده کردم . در هنگام رجیستر کردن به من خطا میده . می خوام این DLL مثل OCXها و DLLهای معمولی که می تونن در دلفی ADD بشن استفاده بشه . نمونه کد DLL رو میذارم تا دوستان کمکم کنند . پیشاپیش از لطفتون سپاسگذارم .
library MHKPhone_TLB;
uses
ShareMem,
Windows,
SysUtils,
Classes,
Controls,
UnitKDCommon,
UnitKDPhone;
type
TLine = Record
ID: Integer;
Name: WideString;
end;
TLines=array of TLine;
TMHKPhone = class(KDPhone)
protected
ECallState : Integer;
FLine : TLine;
procedure ActiveLine(Line: TLine);
procedure Deactive(Line: TLine);
procedure MHKPhoneCallState(Sender: TObject; CallState: TCallState; Param1, Param2, CallHandle: Integer);
public
//-------------------------------------------------------------------------------------------------------
FCallTime : TTime;
//-------------------------------------------------------------------------------------------------------
procedure Answer; overload;
procedure Dial(Line:TLine;TelNumber:String); overload;
procedure HangupCall;
function GetLines: TLines;
constructor Create(AOwner : TComponent); override;
property CallTime : TTime read FCallTime;
end;
{implementation of TMHKPhone}
procedure TMHKPhone.ActiveLine(Line: TLine);
begin
Self.LineActive(Line.ID, True);
end;
procedure TMHKPhone.Answer;
begin
Self.PickUp(0);
Self.Answer(0);
end;
procedure TMHKPhone.Deactive(Line: TLine);
begin
Self.LineActive(Line.ID, False);
end;
function TMHKPhone.GetLines: TLines;
var
i : Word;
modemName : WideString;
begin
SetLength(Result,Self.NumberOfLines);
for i := 0 to Self.NumberOfLines - 1 do
begin
Self.GetLineName(i, modemName);
Result[i].ID := i;
Result[i].Name := modemName;
end;
end;
constructor TMHKPhone.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
with Self do
begin
AddressID := 0;
AutoDisconnect := True;
ExtDevAux.MicGain := 10;
ExtDevAux.SpeakerVolume := 10;
ExtDevHandSet.MicGain := 10;
ExtDevHandSet.SpeakerVolume := 10;
InitialRingNumber := 1;
LinePrivilege := lpOwner;
ModemSpeaker.Volume := svDefault;
ModemSpeaker.Mode := smDefault;
ShowModemIcon := False;
Tag := 0;
TimeOut := 10000;
WaitForDialTone := True;
OnCallState := MHKPhoneCallState;
end;
end;
procedure TMHKPhone.MHKPhoneCallState(Sender: TObject; CallState: TCallState; Param1, Param2, CallHandle: Integer);
begin
case CallState of
csOffering : begin
ECallState := 6;
Self.Answer(0);
end;
csConnected : begin
ECallState := 1;
FCallTime := Time;
end;
csDisconnected : begin
ECallState := 0;
FCallTime := Time - FCallTime;
end;
end;
end;
{$R *.res}
procedure TMHKPhone.Dial(Line:TLine;TelNumber: String);
begin
FLine:=Line;
ActiveLine(Line);
DialNumber(TelNumber, 0);
end;
procedure TMHKPhone.HangupCall;
begin
Self.Hangup;
Deactive(FLine);
end;
end.