📄 demo2client.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 + -