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

📄 clientfrmmainunit.pas

📁 PC端通过WINCE端实现摄像功能
💻 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 + -