www.pudn.com > PC--WINCE--camora.rar > 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.