📄 clientfrmmainunit.pas
字号:
unit ClientFrmMainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, StdCtrls,
GlobalUnit, ExtCtrls,jpeg;
type
TClientFrmMain = class(TForm)
CBClientActive: TCheckBox;
IncomingMessages: TMemo;
Label1: TLabel;
Client: TIdTCPClient;
Label3: TLabel;
EditMessage: TEdit;
ButtonSend: TButton;
Image: TImage;
procedure CBClientActiveClick(Sender: TObject);
procedure ButtonSendClick(Sender: TObject);
private
public
end;
TClientHandleThread = class(TThread)
private
protected
procedure Execute; override;
end;
var
ClientFrmMain: TClientFrmMain;
ClientHandleThread: TClientHandleThread; // variable (type see above)
Mem:TmemoryStream;
JPEGSize:Integer;
implementation
{$R *.DFM}
Function GetJPEGSize(message:string):integer;
var
substr_begin:integer;
substr_end:integer;
size:string;
begin
substr_begin:=pos('[',message);
substr_end:=pos(']',message);
size:=copy(message,substr_begin+1,substr_end-substr_begin-1);
result:=StrToInt(size);
end;
procedure TClientHandleThread.Execute;
var
InputBufferSize:Integer;
str:string;
Jpg:TJpegImage;
begin
Mem:=TmemoryStream.Create;
Mem.Position:=0;
jpg:=TJpegImage.Create;
while not Terminated do
begin
if not ClientFrmMain.Client.Connected then
Terminate
else
try
ClientFrmMain.Client.readfromstack(false,1,false);
InputBufferSize:= ClientFrmMain.Client.InputBuffer.Size;
if (InputBufferSize <100) and (InputBufferSize>2) then begin //是文字信息
str:= ClientFrmMain.Client.ReadString(InputBufferSize);
ClientFrmMain.IncomingMessages.Lines.Add(str);
JPEGSize:=GetJPEGSize(str);
end
else if InputBufferSize >100 then begin //是图像信息
ClientFrmMain.Client.ReadStream(mem,JPEGSize);
MEM.Position:=0;
try
JPG.LoadFromStream(mem);
ClientFrmMain.Image.Picture.Assign(JPG);
except
end;
MEM.Clear;
end;
except
end;
end;
end;
procedure TClientFrmMain.CBClientActiveClick(Sender: TObject);
begin
if CBClientActive.Checked then
begin
try
Client.Connect(10000); // in Indy < 8.1 leave the parameter away
ClientHandleThread := TClientHandleThread.Create(True);
ClientHandleThread.FreeOnTerminate:=True;
ClientHandleThread.Resume;
except
on E: Exception do MessageDlg ('Error while connecting:'+#13+E.Message, mtError, [mbOk], 0);
end;
end
else
begin
ClientHandleThread.Terminate;
Client.Disconnect;
end;
ButtonSend.Enabled := Client.Connected;
CBClientActive.Checked := Client.Connected;
end;
procedure TClientFrmMain.ButtonSendClick(Sender: TObject);
begin
// Client.Write(EditMessage.Text);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -