ClientForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:4k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit ClientForm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  5.   StdCtrls, ScktComp, ExtCtrls;
  6. type
  7.   TCliStatus = (csIdle, csList, csBitmap, csText, csError);
  8.   TForm1 = class(TForm)
  9.     ClientSocket1: TClientSocket;
  10.     cbActivate: TCheckBox;
  11.     EditServer: TEdit;
  12.     Label4: TLabel;
  13.     btnExec: TButton;
  14.     EditServerFile: TEdit;
  15.     Label2: TLabel;
  16.     ListFiles: TListBox;
  17.     Label1: TLabel;
  18.     EditDir: TEdit;
  19.     btnGetDir: TButton;
  20.     LabelDir: TLabel;
  21.     Bevel1: TBevel;
  22.     btnBitmap: TButton;
  23.     btnText: TButton;
  24.     procedure ClientSocket1Connect(Sender: TObject;
  25.       Socket: TCustomWinSocket);
  26.     procedure ClientSocket1Disconnect(Sender: TObject;
  27.       Socket: TCustomWinSocket);
  28.     procedure cbActivateClick(Sender: TObject);
  29.     procedure btnExecClick(Sender: TObject);
  30.     procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
  31.     procedure btnGetDirClick(Sender: TObject);
  32.     procedure ListFilesClick(Sender: TObject);
  33.     procedure btnBitmapClick(Sender: TObject);
  34.     procedure btnTextClick(Sender: TObject);
  35.     procedure FormCreate(Sender: TObject);
  36.   private
  37.     CliStatus: TCliStatus;
  38.     Buffer: array [0..9999] of Char;
  39.   end;
  40. var
  41.   Form1: TForm1;
  42. implementation
  43. {$R *.DFM}
  44. uses
  45.   CliBmp, CliText;
  46. procedure TForm1.ClientSocket1Connect(Sender: TObject;
  47.   Socket: TCustomWinSocket);
  48. begin
  49.   Caption := 'Connected';
  50. end;
  51. procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  52.   Socket: TCustomWinSocket);
  53. begin
  54.   Caption := 'Disconnected';
  55. end;
  56. procedure TForm1.cbActivateClick(Sender: TObject);
  57. begin
  58.   if not ClientSocket1.Active then
  59.     ClientSocket1.Address := EditServer.Text;
  60.   ClientSocket1.Active := cbActivate.Checked;
  61. end;
  62. procedure TForm1.btnExecClick(Sender: TObject);
  63. begin
  64.   ClientSocket1.Socket.SendText ('EXEC!' + EditServerFile.Text);
  65. end;
  66. procedure TForm1.ClientSocket1Read(Sender: TObject;
  67.   Socket: TCustomWinSocket);
  68. var
  69.   strIn: string;
  70.   Stream: TMemoryStream;
  71.   nReceived: Integer;
  72. begin
  73.   case CliStatus of
  74.     // look for data to receive
  75.     csIdle:
  76.     begin
  77.       Socket.ReceiveBuf (Buffer, 5);
  78.       strIn := Copy (Buffer, 1, 5);
  79.       if strIn = 'TEXT!' then
  80.         CliStatus := csText
  81.       else if strIn = 'BITM!' then
  82.         CliStatus := csBitmap
  83.       else if strIn = 'LIST!' then
  84.         CliStatus := csList
  85.       else if strIn = 'ERROR' then
  86.         CliStatus := csError;
  87.     end;
  88.     // show the messages (might actually not be an error)
  89.     csError:
  90.     begin
  91.       ShowMessage (Socket.ReceiveText);
  92.       cliStatus := csIdle;
  93.     end;
  94.     // get a directory listing
  95.     csList:
  96.     begin
  97.       ListFiles.Items.Text := Socket.ReceiveText;
  98.       cliStatus := csIdle;
  99.     end;
  100.     // read a text file
  101.     csText:
  102.     begin
  103.       with TFormText.Create (Application) do
  104.       begin
  105.         Memo1.Text := Socket.ReceiveText;
  106.         Show;
  107.       end;
  108.       cliStatus := csIdle;
  109.     end;
  110.     // read a bitmap file
  111.     csBitmap:
  112.       with TFormBmp.Create (Application) do
  113.       begin
  114.         Stream := TMemoryStream.Create;
  115.         Screen.Cursor := crHourglass;
  116.         try
  117.           while True do
  118.           begin
  119.             nReceived := Socket.ReceiveBuf (Buffer, sizeof (Buffer));
  120.             if nReceived <= 0 then
  121.               Break
  122.             else
  123.               Stream.Write (Buffer, nReceived);
  124.             // delay (200 milliseconds)
  125.             Sleep (200);
  126.           end;
  127.           // reset and load the temporary file
  128.           Stream.Position := 0;
  129.           Image1.Picture.Bitmap.LoadFromStream (Stream);
  130.         finally
  131.           Stream.Free;
  132.           Screen.Cursor := crDefault;
  133.         end;
  134.         Show;
  135.       cliStatus := csIdle;
  136.       end;
  137.   end; // case
  138. end;
  139. procedure TForm1.btnGetDirClick(Sender: TObject);
  140. begin
  141.   ClientSocket1.Socket.SendText ('LIST!' + EditDir.Text);
  142.   LabelDir.Caption := EditDir.Text;
  143. end;
  144. procedure TForm1.ListFilesClick(Sender: TObject);
  145. begin
  146.   EditServerFile.Text := LabelDir.Caption + '' +
  147.     ListFiles.Items [ListFiles.ItemIndex];
  148. end;
  149. procedure TForm1.btnBitmapClick(Sender: TObject);
  150. begin
  151.   ClientSocket1.Socket.SendText ('BITM!' + EditServerFile.Text);
  152. end;
  153. procedure TForm1.btnTextClick(Sender: TObject);
  154. begin
  155.   ClientSocket1.Socket.SendText ('TEXT!' + EditServerFile.Text);
  156. end;
  157. procedure TForm1.FormCreate(Sender: TObject);
  158. begin
  159.   CliStatus := csIdle;
  160. end;
  161. end.
  162.