📄 frmmain.~pas
字号:
unit frmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, WinSkinData, ComCtrls, Buttons, StdCtrls, IdUDPClient,
IdBaseComponent, IdComponent, IdUDPBase,
IdUDPServer, CnClasses, CnTrayIcon,IdSocketHandle,MMSystem, Menus,ShellAPI, unaVCIDE, ExtCtrls;
const
//BUFF
CST_MAXBUFF=10240;
type
TfrmSmartPhone = class(TForm)
skndt1: TSkinData;
statMain: TStatusBar;
idpsrvrWord: TIdUDPServer;
idpclntWord: TIdUDPClient;
tiMain: TCnTrayIcon;
idpclntLst: TIdUDPClient;
idpsrvrLst: TIdUDPServer;
WaveIn1: TunavclWaveInDevice;
WaveCodeR1: TunavclWaveCodecDevice;
WaveOutStream1: TunavclIPOutStream;
WaveInStream1: TunavclIPInStream;
tmrCount: TTimer;
pm1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
pgc1: TPageControl;
ts1: TTabSheet;
ts2: TTabSheet;
grp1: TGroupBox;
lbl1: TLabel;
btnNum1: TSpeedButton;
btnNum2: TSpeedButton;
btnNum3: TSpeedButton;
btnNum4: TSpeedButton;
btnNum5: TSpeedButton;
btnNum6: TSpeedButton;
btnNum7: TSpeedButton;
btnNum8: TSpeedButton;
btnNum9: TSpeedButton;
btnNum0: TSpeedButton;
btnNumX: TSpeedButton;
btnNumJ: TSpeedButton;
btnDial: TSpeedButton;
btnDisCon: TSpeedButton;
btnRedail: TSpeedButton;
btnExit: TSpeedButton;
edtPhone: TEdit;
grp2: TGroupBox;
lblTime: TLabel;
lbl4: TLabel;
cbbRC1: TComboBox;
lbl5: TLabel;
cbbPB1: TComboBox;
grp3: TGroupBox;
lbl2: TLabel;
lbl3: TLabel;
trckbrSpeak: TTrackBar;
trckbrMic: TTrackBar;
grp4: TGroupBox;
lbl6: TLabel;
edtUser: TEdit;
lbl7: TLabel;
edtPassWord: TEdit;
chkAutoLogin: TCheckBox;
btnLogin: TButton;
grp5: TGroupBox;
lbl8: TLabel;
lbl9: TLabel;
edtLocalPort: TEdit;
edtRemotePort: TEdit;
lbl10: TLabel;
edtServerIP: TEdit;
WaveCodeP1: TunavclWaveCodecDevice;
WaveOut1: TunavclWaveOutDevice;
procedure btnExitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnDialClick(Sender: TObject);
procedure trckbrSpeakChange(Sender: TObject);
procedure trckbrMicChange(Sender: TObject);
procedure idpsrvrWordUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure btnDisConClick(Sender: TObject);
procedure btnNum1Click(Sender: TObject);
procedure btnNum2Click(Sender: TObject);
procedure btnNum3Click(Sender: TObject);
procedure btnNum4Click(Sender: TObject);
procedure btnNum5Click(Sender: TObject);
procedure btnNum6Click(Sender: TObject);
procedure btnNum7Click(Sender: TObject);
procedure btnNum8Click(Sender: TObject);
procedure btnNum9Click(Sender: TObject);
procedure btnNum0Click(Sender: TObject);
procedure btnNumXClick(Sender: TObject);
procedure btnNumJClick(Sender: TObject);
procedure btnRedailClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure tiMainDblClick(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure idpsrvrPhoneUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure tmrCountTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmSmartPhone: TfrmSmartPhone;
gs_LocalIP,gs_LocalPhonePort,gs_LocalWordPort,
gs_RemoteIP,gs_RemotePhonePort,gs_RemoteWordPort,
gs_RemoteUserPort,gs_LocalUserPort,gs_GUID,
gs_LastPhoneNum,gs_DefSpeakVol,gs_DefMicVol:String;
gsTransType,gsStreamType,gsRateType,gsCurrAccount,gsStreamModel:String;
iSec:Integer;
iMin:Integer;
iHor:Integer;
giPB,giRC:Integer;
gsRedirectHost,gsRedirectPort:String;
implementation
uses uCommon,unaUtils,unavcIdeUtils,unaVclUtils,unaWave;
{$R *.dfm}
procedure TfrmSmartPhone.btnExitClick(Sender: TObject);
begin
edtPhone.Text:='';
end;
procedure TfrmSmartPhone.FormCreate(Sender: TObject);
begin
WaveInStream1.Close;
WaveOutStream1.Close;
enumWaveDevices(cbbRC1,True,false);
enumWaveDevices(cbbPB1,False,False);
if FileExists(gcf_GetAppPath+ 'Kernel.dat') then
begin
gs_LocalIP:=gcf_GetINIValue('NETWORK','LOCALHOST');
gs_RemoteIP:=gcf_GetINIValue('NETWORK','REMOTEHOST');
edtServerIP.Text:=gs_RemoteIP;
gs_LocalPhonePort:=gcf_GetINIValue('NETWORK','LOCALPHONEPORT');
gs_RemotePhonePort:=gcf_GetINIValue('NETWORK','REMOTEPHONEPORT');
gs_LocalWordPort:=gcf_GetINIValue('NETWORK','LOCALWORDPORT');
edtLocalPort.Text:=gs_LocalWordPort;
gs_RemoteWordPort:=gcf_GetINIValue('NETWORK','REMOTEWORDPORT');
edtRemotePort.Text:=gs_RemoteWordPort;
gs_LocalUserPort:=gcf_GetINIValue('NETWORK','LOCALUSERPORT');
gs_RemoteUserPort:=gcf_GetINIValue('NETWORK','REMOTEUSERPORT');
gs_DefSpeakVol:=gcf_GetINIValue('SYSTEM','DEFAULTSPEAKVOL');
trckbrSpeak.Position:=StrToIntDef(gs_DefSpeakVol,0);
gs_DefMicVol:=gcf_GetINIValue('SYSTEM','DEFAULTMICVOL');
trckbrMic.Position:=StrToIntDef(gs_DefSpeakVol,0);
gs_LastPhoneNum:=gcf_GetINIValue('SYSTEM','LASTPHONENUM');
edtPhone.Text:=gs_LastPhoneNum;
giPB:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','PB'),-1);
cbbPB1.ItemIndex:=giPB;
giRC:=StrToIntDef(gcf_GetINIValue('SERVERSOUNDCARD','RC'),-1);
cbbRC1.ItemIndex:=giRC;
end else begin
//本地语音监听端口
gcf_SetINIValue('NETWORK','LOCALPHONEPORT','57216');
//远端语音监听端口
gcf_SetINIValue('NETWORK','REMOTEPHONEPORT','47216');
//本地文字监听端口
gcf_SetINIValue('NETWORK','LOCALWORDPORT','3333');
//远端文字监听端口
gcf_SetINIValue('NETWORK','REMOTEWORDPORT','2333');
//本地主机IP
gcf_SetINIValue('NETWORK','LOCALHOST','127.0.0.1');
//远端主机IP
gcf_SetINIValue('NETWORK','REMOTEHOST','223.223.80.184');
//本地主机IP
gcf_SetINIValue('NETWORK','LOCALUSERPORT','77216');
//远端主机IP
gcf_SetINIValue('NETWORK','REMOTEUSERPORT','67216');
//默认音量 最大
gcf_SetINIValue('SYSTEM','DEFAULTSPEAKVOL','0');
//默认麦克风音量 最大
gcf_SetINIValue('SYSTEM','DEFAULTMICVOL','0');
//默认麦克风音量 最大
gcf_SetINIValue('SYSTEM','LASTPHONENUM','13969832386');
//回放1
gcf_SetINIValue('SERVERSOUNDCARD','PB','-1');
//录音1
gcf_SetINIValue('SERVERSOUNDCARD','RC','-1');
end;
edtPhone.Text:=gs_LastPhoneNum;
tmrCount.Enabled:=False;
tmrCount.Interval:=1000;
gs_GUID:=gcf_GetGUIDString;
tiMain.Active:=True;
tiMain.BalloonHint('Smart Phone','欢迎您使用网络IP电话',btInfo,30);
end;
procedure TfrmSmartPhone.btnDialClick(Sender: TObject);
begin
try
WaveInStream1.socks.clear(true,true);
WaveOutStream1.socks.clear(True,true);
WaveIn1.flush;
WaveOut1.flush;
WaveCodeR1.flush;
WaveCodeP1.flush;
if Trim(edtPhone.Text)<>'' then
begin
//默认麦克风音量 最大
gcf_SetINIValue('SYSTEM','LASTPHONENUM',edtPhone.Text);
end;
//远程文字服务器IP
idpclntWord.Host:=gs_RemoteIP;
//远程文字服务器端口
idpclntWord.Port:=StrToIntDef(gs_RemoteWordPort,0);
//本地文字服务器端口
idpsrvrWord.DefaultPort:=StrToIntDef(gs_LocalWordPort,0);
//本地文字服务端口开
idpsrvrWord.Active:=True;
idpclntWord.Active:=False;
idpclntWord.Host:=gs_RemoteIP;
//远程文字服务器端口
idpclntWord.Port:=StrToIntDef(gs_RemoteWordPort,0);
idpclntWord.Active:=True;
idpclntWord.Send(DEF_BSEPCHAR + gComputerAddr +
DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
//回话编码
gs_GUID +
DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
gComputerName + DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
'客户' + DEF_ESEPCHAR + DEF_LINKCHAR + DEF_BSEPCHAR +
gs_LocalWordPort + DEF_ESEPCHAR);
btnDial.Enabled:=False;
btnDisCon.Enabled:=True;
except
end;
end;
procedure TfrmSmartPhone.trckbrSpeakChange(Sender: TObject);
begin
//设置音量
// waveOutSetVolume(0,trckbrSpeak.Position);
statMain.Panels[3].Text:='音量:' + IntToStr(trckbrSpeak.Position) + '值';
//默认音量
gcf_SetINIValue('SYSTEM','DEFAULTSPEAKVOL',IntToStr(trckbrSpeak.Position));
end;
procedure TfrmSmartPhone.trckbrMicChange(Sender: TObject);
function GetLineInHandle(AudioType : integer) : integer;
var
i:integer;
AudioCaps:TAuxCaps;
begin
result:=0;
for i:=0 to auxGetNumDevs-1 do begin
auxGetDevCaps(i, @AudioCaps,sizeof(AudioCaps));
if AudioCaps.wTechnology=AudioType then begin
Result:=i;
Break;
end;
end;
end;
begin
// AuxSetVolume(GetLineInHandle(AUXCAPS_CDAUDIO),trckbrMic.Position);
statMain.Panels[3].Text:='麦克风:' + IntToStr(trckbrMic.Position) + '值';
//默认麦克风音量
gcf_SetINIValue('SYSTEM','DEFAULTSPEAKVOL',IntToStr(trckbrMic.Position));
end;
procedure TfrmSmartPhone.idpsrvrWordUDPRead(Sender: TObject;
AData: TStream; ABinding: TIdSocketHandle);
var
mData:array[1..CST_MAXBUFF] of char;
iCount,jCount:Integer;
sInfo,sData:String;
begin
statMain.Panels.Items[3].Text:='有新消息到达...';
gsCurrAccount:='';
for iCount := 1 to CST_MAXBUFF do // Iterate
begin
mData[iCount]:=#0;
end; // for
AData.ReadBuffer(mData,AData.Size);
for iCount := 1 to CST_MAXBUFF do
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -