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

📄 demo2client.pas

📁 在Internet传播声音的源程序
💻 PAS
字号:
unit Demo2Client;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ScktComp, ACMConvertor, ACMOut, Spin;

type
  TfmMain = class(TForm)
    Label1: TLabel;
    edAddress: TEdit;
    btnConnect: TButton;
    btnDisconnect: TButton;
    CSocket: TClientSocket;
    lblStatus: TLabel;
    ACMO: TACMOut;
    ACMC: TACMConvertor;
    Label2: TLabel;
    seDelay: TSpinEdit;
    procedure btnConnectClick(Sender: TObject);
    procedure btnDisconnectClick(Sender: TObject);
    procedure CSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure CSocketConnecting(Sender: TObject; Socket: TCustomWinSocket);
    procedure CSocketDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure CSocketLookup(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormCreate(Sender: TObject);
    procedure CSocketRead(Sender: TObject; Socket: TCustomWinSocket);
  private
    { Private declarations }
    procedure Status(aMessage : String);
    procedure UpdateButtons;
  public
    { Public declarations }
  end;

var
  fmMain: TfmMain;

implementation

{$R *.DFM}

procedure TfmMain.btnConnectClick(Sender: TObject);
begin
  CSocket.Address := edAddress.Text;
  CSocket.Open;
end;

procedure TfmMain.btnDisconnectClick(Sender: TObject);
begin
  CSocket.Close;
  ACMO.Close;
end;

procedure TfmMain.CSocketConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Status('Connected');
  UpdateButtons;
end;

procedure TfmMain.CSocketConnecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Status('Connecting...');
end;

procedure TfmMain.CSocketDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Status('Disconnected');
  UpdateButtons;
end;

procedure TfmMain.CSocketLookup(Sender: TObject; Socket: TCustomWinSocket);
begin
  Status('Finding host');
end;

procedure TfmMain.Status(aMessage: String);
begin
  lblStatus.Caption := 'Status : ' + aMessage;
end;

procedure TfmMain.FormCreate(Sender: TObject);
begin
  Status('Ready');
end;

procedure TfmMain.CSocketRead(Sender: TObject; Socket: TCustomWinSocket);
var
  NewData                     : Pointer;
  NewDataSize                 : Integer;
begin
  Status('Received ' + IntToStr(Socket.ReceiveLength) + ' bytes');
  with Socket do begin
    NewDataSize := ReceiveLength;
    GetMem(NewData, NewDataSize);
    try
      ReceiveBuf(NewData^, NewDataSize);
      if not ACMO.Active then begin
        ACMO.NumBuffers := seDelay.Value;
        ACMO.Open(ACMC.FormatIn);
      end;
      ACMO.Play(NewData^, NewDataSize);
    finally
      Freemem(NewData);
    end;
  end;
end;

procedure TfmMain.UpdateButtons;
begin
  btnConnect.Enabled := not CSocket.Active;
  btnDisconnect.Enabled := CSocket.Active;
  seDelay.Enabled := not CSocket.Active;
end;

end.

⌨️ 快捷键说明

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