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

📄 u_vcnettalk_main.pas

📁 Voice Commnucation Components for Delphi
💻 PAS
📖 第 1 页 / 共 2 页
字号:

(*
	----------------------------------------------

	  u_vcNetTalk_main.pas
	  Voice Communicator components version 2.5 Pro
	  VC NetTalk demo application - main form

	----------------------------------------------
	  This source code cannot be used without
	  proper license granted to you as a private
	  person or an entity by the Lake of Soft, Ltd

	  Visit http://lakeofsoft.com/ for more information.

	  Copyright (c) 2001, 2007 Lake of Soft, Ltd
		     All rights reserved
	----------------------------------------------

	  created by:
		Lake, 01 Jun 2002

	  modified by:
		Lake, Jun-Dec 2002
		Lake, Jan-May 2003

	----------------------------------------------
*)

{$I unaDef.inc}

unit u_vcNetTalk_main;

interface

uses
  Windows, unaTypes, Classes,
  Controls, StdCtrls, ComCtrls, ExtCtrls, Forms, ActnList, Dialogs, CheckLst,
  unaClasses, unavcIDE;

type
  Tc_form_vcNetTalkMain = class(TForm)
    c_statusBar_main: TStatusBar;
    c_timer_update: TTimer;
    waveIn_client: TunavclWaveInDevice;
    waveIn_server: TunavclWaveInDevice;
    c_actionList_main: TActionList;
    a_srvStart: TAction;
    a_srvStop: TAction;
    a_clientStart: TAction;
    a_clientStop: TAction;
    ipClient: TunavclIPOutStream;
    ipServer: TunavclIPInStream;
    waveOut_server: TunavclWaveOutDevice;
    waveOut_client: TunavclWaveOutDevice;
    codecIn_server: TunavclWaveCodecDevice;
    codecOut_client: TunavclWaveCodecDevice;
    codecOut_server: TunavclWaveCodecDevice;
    codecIn_client: TunavclWaveCodecDevice;
    mixer_server: TunavclWaveMixer;
    riff_server: TunavclWaveRiff;
    mixer_client: TunavclWaveMixer;
    riff_client: TunavclWaveRiff;
    c_panel_info: TPanel;
    c_openDialog_wave: TOpenDialog;
    resampler_client: TunavclWaveResampler;
    resampler_server: TunavclWaveResampler;
    c_pageControl_main: TPageControl;
    c_tabSheet_server: TTabSheet;
    c_tabSheet_client: TTabSheet;
    c_groupBox_server: TGroupBox;
    Label1: TLabel;
    Bevel1: TBevel;
    c_label_statusSrv: TLabel;
    c_edit_serverPort: TEdit;
    c_button_startServer: TButton;
    c_button_stopServer: TButton;
    c_checkListBox_server: TCheckListBox;
    c_edit_waveNameServer: TEdit;
    c_checkBox_mixWaveServer: TCheckBox;
    c_button_chooseWaveServer: TButton;
    c_groupBox_client: TGroupBox;
    Label2: TLabel;
    Label3: TLabel;
    Bevel2: TBevel;
    c_label_statusClient: TLabel;
    c_edit_clientSrvHost: TEdit;
    c_button_startClient: TButton;
    c_button_stopClient: TButton;
    c_edit_clientSrvPort: TEdit;
    c_checkListBox_client: TCheckListBox;
    c_checkBox_mixWaveClient: TCheckBox;
    c_edit_waveNameClient: TEdit;
    c_button_chooseWaveClient: TButton;
    Bevel3: TBevel;
    Bevel4: TBevel;
    c_checkBox_useWaveInClient: TCheckBox;
    c_checkBox_useWaveInServer: TCheckBox;
    c_button_formatChooseServer: TButton;
    c_static_formatInfoServer: TStaticText;
    c_static_formatInfoClient: TStaticText;
    c_button_formatChooseClient: TButton;
    Label4: TLabel;
    Label5: TLabel;
    c_staticText_deviceInfoClient: TStaticText;
    c_staticText_deviceInfoServer: TStaticText;
    c_checkBox_autoStartServer: TCheckBox;
    Label6: TLabel;
    c_comboBox_socketTypeServer: TComboBox;
    Label7: TLabel;
    c_comboBox_socketTypeClient: TComboBox;
    c_pb_volumeOutClient: TProgressBar;
    c_pb_volumeInClient: TProgressBar;
    c_pb_volumeOutServer: TProgressBar;
    c_pb_volumeInServer: TProgressBar;
    Bevel5: TBevel;
    Bevel6: TBevel;
    //
    procedure formCreate(sender: tObject);
    procedure formClose(sender: tObject; var action: tCloseAction);
    procedure formShow(sender: tObject);
    procedure formCloseQuery(sender: tObject; var canClose: boolean);
    //
    procedure c_timer_updateTimer(Sender: TObject);
    procedure c_panel_infoClick(Sender: TObject);
    procedure c_button_chooseWaveServerClick(Sender: TObject);
    procedure c_button_chooseWaveClientClick(Sender: TObject);
    procedure c_button_formatChooseServerClick(Sender: TObject);
    procedure c_button_formatChooseClientClick(Sender: TObject);
    procedure c_comboBox_socketTypeServerChange(Sender: TObject);
    procedure c_comboBox_socketTypeClientChange(Sender: TObject);
    //
    procedure ipClientClientDisconnect(sender: TObject; connectionId: Cardinal; connected: LongBool);
    //
    procedure a_srvStartExecute(Sender: TObject);
    procedure a_srvStopExecute(Sender: TObject);
    procedure a_clientStartExecute(Sender: TObject);
    procedure a_clientStopExecute(Sender: TObject);
  private
    { Private declarations }
    f_hintColorCount: unsigned;
    f_hintTextCount: unsigned;
    f_ini: unaIniFile;
    //
    procedure reEnable(server: bool = true);
    procedure serverAction(doOpen: bool = true);
    procedure clientAction(doOpen: bool = true);
    procedure chooseFile(cb: tCheckBox; edit: tEdit);
    procedure updateFormat(isServer: bool = true);
    procedure updateFormatInfo(isServer: bool = true);
  public
    { Public declarations }
  end;

var
  c_form_vcNetTalkMain: Tc_form_vcNetTalkMain;


implementation


{$R *.dfm}

uses
  unaUtils, unaVCLUtils, MMSystem, unaMsAcmAPI, unaWave, unaMsAcmClasses,
  shellAPI, Graphics, u_common_audioConfig;

const
  hintStrings: array[0..18] of string = (
    '',
    'Voice Communicator components 2.5 Pro',
    '',
    'Set of native Borland Delphi classes and VCL components',
    '',
    'Direct recording and playback functions',
    'PCM resampler, volume control and software PCM mixer',
    'Supports WAV files reading and writing',
    'Easy use of Microsoft ACM codecs',
    'Compatible with external MP3 and Ogg/Vorbis encoders',
    'Efficient and powerful streaming protocol',
    'Powerfull DSP library',
    'Best solution for building voice over IP applications',
    'Compatible with Borland C++ Builder',
    '',
    'http://lakeofsoft.com/vc/',
    '',
    'Click here for more information.',
    ''
  );
  hintColors : array[0..7] of tColor = (clBlack, clTeal, clNavy, clNavy, clOlive, clPurple, clTeal, clNavy);

// --  --
procedure Tc_form_vcNetTalkMain.formCreate(sender: tObject);
begin
  c_panel_info.color := tColor($F0FBFF);
  //
  f_ini := unaIniFile.create();
  // server
  f_ini.section := 'server';
  c_comboBox_socketTypeServer.itemIndex := f_ini.get('socketTypeIndex', unsigned(0));
  c_edit_serverPort.text := f_ini.get('port', '17810');
  c_checkBox_mixWaveServer.Checked := f_ini.get('mixWave', false);
  c_edit_waveNameServer.Text := f_ini.get('waveName', '');
  c_checkBox_useWaveInServer.Checked := f_ini.get('useWaveIn', true);
  c_checkBox_autoStartServer.Checked := f_ini.get('autoStart', true);
  //
  // client
  f_ini.section := 'client';
  c_comboBox_socketTypeClient.itemIndex := f_ini.get('socketTypeIndex', unsigned(0));
  c_edit_clientSrvHost.text := f_ini.get('serverHost', '192.168.1.1');
  c_edit_clientSrvPort.text := f_ini.get('serverPort', '17810');
  c_checkBox_mixWaveClient.checked := f_ini.get('mixWave', false);
  c_edit_waveNameClient.text := f_ini.get('waveName', '');
  c_checkBox_useWaveInClient.checked := f_ini.get('useWaveIn', true);
  //
  c_comboBox_socketTypeServerChange(nil);
  c_comboBox_socketTypeClientChange(nil);
end;

// --  --
procedure Tc_form_vcNetTalkMain.formClose(sender: tObject; var action: tCloseAction);
begin
  clientAction(false);
  serverAction(false);
  //
  // server
  f_ini.section := 'server';
  f_ini.setValue('port', c_edit_serverPort.Text);
  f_ini.setValue('socketTypeIndex', c_comboBox_socketTypeServer.ItemIndex);
  f_ini.setValue('mixWave', c_checkBox_mixWaveServer.Checked);
  f_ini.setValue('waveName', c_edit_waveNameServer.Text);
  f_ini.setValue('useWaveIn', c_checkBox_useWaveInServer.Checked);
  f_ini.setValue('autoStart', c_checkBox_autoStartServer.Checked);
  // client
  f_ini.section := 'client';
  f_ini.setValue('serverHost', c_edit_clientSrvHost.Text);
  f_ini.setValue('serverPort', c_edit_clientSrvPort.Text);
  f_ini.setValue('socketTypeIndex', c_comboBox_socketTypeClient.ItemIndex);
  f_ini.setValue('mixWave', c_checkBox_mixWaveClient.Checked);
  f_ini.setValue('waveName', c_edit_waveNameClient.Text);
  f_ini.setValue('useWaveIn', c_checkBox_useWaveInClient.Checked);
end;

// --  --
procedure Tc_form_vcNetTalkMain.formShow(sender: tObject);
begin
  loadControlPosition(self, f_ini);
  //
  c_form_common_audioConfig.setupUI(true);
  // server
  c_form_common_audioConfig.doLoadConfig(waveIn_server, waveOut_server, codecIn_server, nil, f_ini, 'wave.format.server');
  updateFormat();
  // client
  c_form_common_audioConfig.doLoadConfig(waveIn_client, waveOut_client, codecIn_client, nil, f_ini, 'wave.format.client');
  updateFormat(false);
  //
  if (c_checkBox_autoStartServer.Checked) then
    serverAction(true);
  //
  c_timer_update.enabled := true;
end;

// --  --
procedure Tc_form_vcNetTalkMain.formCloseQuery(sender: tObject; var canClose: boolean);
begin
  c_timer_update.enabled := false;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -