⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmmain.~pas

📁 采用ACM与Skype4Com并且采用分布式UDP来进行语音的拨号、分传。
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
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 + -