MainForm.pas 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. { $HDR$}
  2. {**********************************************************************}
  3. { Unit archived using Team Coherence }
  4. { Team Coherence is Copyright 2002 by Quality Software Components }
  5. { }
  6. { For further information / comments, visit our WEB site at }
  7. { http://www.TeamCoherence.com }
  8. {**********************************************************************}
  9. {}
  10. { $Log: 22991: MainForm.pas
  11. {
  12. { Rev 1.0 09/10/2003 3:17:42 PM Jeremy Darling
  13. { Project uploaded for the first time
  14. }
  15. {-----------------------------------------------------------------------------
  16. Demo Name: fMain
  17. Author: Allen O'Neill
  18. Purpose: Basic TCP client demo
  19. History:
  20. Date: 13/07/2002 00:55:23
  21. -----------------------------------------------------------------------------
  22. Notes:
  23. Demonstrates the following functions:
  24. (1) ReadLn, WriteLn, ReadInteger
  25. (2) Using the OnConnect and OnDisconnect events
  26. }
  27. unit MainForm;
  28. interface
  29. uses
  30. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  31. Dialogs, ExtCtrls, StdCtrls, IdBaseComponent, IdComponent,
  32. IdTCPConnection, IdTCPClient, IdTelnet;
  33. type
  34. TfrmMain = class(TForm)
  35. Label2: TLabel;
  36. edHost: TEdit;
  37. Label3: TLabel;
  38. edPort: TEdit;
  39. btnConnect: TButton;
  40. Bevel1: TBevel;
  41. memMsgs: TMemo;
  42. Panel1: TPanel;
  43. edMsg: TEdit;
  44. Client: TIdTCPClient;
  45. Timer1: TTimer;
  46. procedure btnConnectClick(Sender: TObject);
  47. procedure ClientConnect(Sender: TObject);
  48. procedure ClientDisconnect(Sender: TObject);
  49. procedure FormCreate(Sender: TObject);
  50. procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  51. procedure edMsgKeyPress(Sender: TObject; var Key: Char);
  52. procedure Timer1Timer(Sender: TObject);
  53. procedure ClientConnected(Sender: TObject);
  54. procedure ClientDisconnected(Sender: TObject);
  55. private
  56. { Private declarations }
  57. public
  58. { Public declarations }
  59. end;
  60. var
  61. frmMain: TfrmMain;
  62. implementation
  63. {$R *.dfm}
  64. procedure TfrmMain.btnConnectClick(Sender: TObject);
  65. begin
  66. if Client.Connected then
  67. Client.Disconnect
  68. else
  69. begin
  70. Client.Host := edHost.Text;
  71. Client.Port := StrToIntDef(edPort.Text, 8800);
  72. edPort.Text := IntToStr(Client.Port);
  73. memMsgs.Lines.Clear;
  74. Client.Connect;
  75. end;
  76. end;
  77. procedure TfrmMain.ClientConnect(Sender: TObject);
  78. begin
  79. edPort.Enabled := false;
  80. edHost.Enabled := false;
  81. btnConnect.Caption := 'Disconnect';
  82. end;
  83. procedure TfrmMain.ClientDisconnect(Sender: TObject);
  84. begin
  85. edPort.Enabled := true;
  86. edHost.Enabled := true;
  87. btnConnect.Caption := 'Connect';
  88. end;
  89. procedure TfrmMain.FormCreate(Sender: TObject);
  90. begin
  91. memMsgs.Align := alClient;
  92. memMsgs.Lines.Clear;
  93. edMsg.Text := '';
  94. end;
  95. procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  96. begin
  97. Client.Disconnect;
  98. CanClose := not Client.Connected;
  99. end;
  100. procedure TfrmMain.edMsgKeyPress(Sender: TObject; var Key: Char);
  101. var
  102. s : String;
  103. begin
  104. if Key = #13 then
  105. begin
  106. s := edMsg.Text + #10#13;
  107. Key := #0;
  108. edMsg.Text := '';
  109. Client.IOHandler.WriteBuffer(s[1], Length(s));
  110. end;
  111. end;
  112. procedure TfrmMain.Timer1Timer(Sender: TObject);
  113. var
  114. i : integer;
  115. s : String;
  116. begin
  117. if not Client.Connected then
  118. exit;
  119. I := Client.IOHandler.Buffer.Size;
  120. if I > 0 then
  121. begin
  122. SetLength(s, i);
  123. Client.IOHandler.ReadBuffer(s[1], i);
  124. memMsgs.Lines.add(Copy(s, 1, Length(s) -2));
  125. end;
  126. end;
  127. procedure TfrmMain.ClientConnected(Sender: TObject);
  128. begin
  129. btnConnect.Caption := 'Disconnect';
  130. end;
  131. procedure TfrmMain.ClientDisconnected(Sender: TObject);
  132. begin
  133. btnConnect.Caption := 'Connect';
  134. end;
  135. end.