Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Delphi. Учимся Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 24

Автор Π‘Π΅Ρ€Π³Π΅ΠΉ ΠŸΠ°Ρ€ΠΈΠΆΡΠΊΠΈΠΉ

Рис. 16.1. Π€ΠΎΡ€ΠΌΠ° клиСнтской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ управлСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

По Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ Connect Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ всС настройки ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ соСдинСниС с сСрвСром:

procedure TForm1.Button1Click(Sender: TObject);

begin

 Client.Port:= StrToInt(port.Text); //считываСм ΠΏΠΎΡ€Ρ‚

 Π‘lient.Address:= ip.text; //считываСм ip-адрСс сСрвСра

 Client.Active:= True; //соСдиняСмся

 Timer1.Enabled:= True; //Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€

end;

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ считываСм всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ настройки, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ с сСрвСром. Если всС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ указатСля ΠΌΡ‹ΡˆΠΈ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Disconnect:

procedure TForm1.Button2Click(Sender: TObject);

begin

 Timer1.Enabled:= False;//Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€

 Client.Close; //Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ соСдинСниС

 Client.Active:=False; //ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΎΡ‚ сСрвСра

end;

ΠŸΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ Disconnect ΠΌΡ‹ пСрСстаСм ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ указатСля Π½Π° сСрвСр ΠΈ отсоСдиняСмся ΠΎΡ‚ Π½Π΅Π³ΠΎ.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° сСрвСрС Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ ошибок ΠΏΡ€ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, создайтС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события Ρ„ΠΎΡ€ΠΌΡ‹ OnDestroy ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

procedure TForm1.FormDestroy(Sender: TObject);

begin

 Client.Close; //Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ соСдинСниС

 Client.Active:=False; //ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΎΡ‚ сСрвСра

end;

ΠŸΡ€ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ закрываСтся соСдинСниС ΠΈ выполняСтся ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ сСрвСра.

Для увСдомлСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΎΠ± ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ соСдинСнии с сСрвСром создайтС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события client.OnConnect:

procedure TForm1.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);

begin

 ShowMessage('Connected!'); //ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ сообщСниС

end;

Для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ дСйствия ΠΏΡ€ΠΈ отсоСдинСнии ΠΎΡ‚ сСрвСра, слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события OnDisconnect:

procedure TForml.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);

begin

 ShowMessage('Disconnected!'); //сообщСниС ΠΏΡ€ΠΈ отсоСдинСнии

end;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ событиС OnTimer для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Timer:

procedure TForm1.Timer1Timer(Sender: TObject);

var

 cur:TPoint; //Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ указатСля ΠΌΡ‹ΡˆΠΈ

begin

 GetCursorPos(cur); //ΡƒΠ·Π½Π°Π΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ указатСля ΠΌΡ‹ΡˆΠΈ

 //отправляСм Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° сСрвСр

 Client.Socket.SendText(IntToStr(cur.X) +'_' + IntToStr(cur.Y));

end;

ΠšΠ°ΠΆΠ΄Ρ‹Π΅ полсСкунды ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ указатСля ΠΌΡ‹ΡˆΠΈ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΡ… Π½Π° сСрвСр. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-сСрвСр.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сСрвСрной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Delphi. РазмСститС Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ β€” ServerSocket ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ Internet ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ свойства Port Π½Π° 2801.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ, обСспСчим нашСй Ρ„ΠΎΡ€ΠΌΠ΅ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события Ρ„ΠΎΡ€ΠΌΡ‹ OnPaint ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

procedure TForm1.FormPaint(Sender: TObject);

begin

 Form1.Hide;

end;

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСрвСр ΠΏΡ€ΠΈ запускС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ событиС Ρ„ΠΎΡ€ΠΌΡ‹ OnCreate:

procedure TForm1.FormCreate(Sender: TObject);

begin

 ServerSocket1.Active:= True; //Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСрвСр

end;

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сСрвСр ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π»ΡΡ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ событиС Ρ„ΠΎΡ€ΠΌΡ‹ OnDestroy:

procedure TForm1.FormDestroy(Sender: TObject);

begin

 ServerSocket1.Active:= False; //ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сСрвСр

end;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ событиС OnClientRead ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ServerSocket. Π­Ρ‚ΠΎ событиС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Код ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° этого события ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);

var

 str, x, y: string; //ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ тСкст ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹

  //указатСля ΠΏΠΎ X ΠΈ ΠΏΠΎ Y

 i, j: integer; //счСтчики Ρ†ΠΈΠΊΠ»ΠΎΠ²

 begin

 //обнуляСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ курсора

 Ρ… := ' ';

 Ρƒ := ' ';

 str:= Socket.ReceiveText; //ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° тСкст

 for i:=1 to Length(str) do begin

  if str[i] <> '_' then x:= x + str[i]; //ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠΎ Ρ…

  if str[i] = '_' then Break; //Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ

   //ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ указатСля

 end;

 for j:= i+1 to Length(str) do Ρƒ:= y+str[j]; //ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠΎ Ρƒ

 //устанавливаСм Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ указатСля

 SetCursorPos(StrToInt(x), StrToInt(Ρƒ));

end;

ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ тСкста ΠΌΡ‹ считываСм Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ указатСля ΠΏΠΎ X ΠΈ ΠΏΠΎ Y. Π—Π°Ρ‚Π΅ΠΌ измСняСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π° Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π³ΠΎΡ‚ΠΎΠ²Π°, ΠΈ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ хотя Π±Ρ‹ Π΄Π²Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊ Internet.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ исходный ΠΊΠΎΠ΄ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ модуля сСрвСрной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставлСн Π² листингС 16.1.

Листинг 16.1. ΠœΠΎΠ΄ΡƒΠ»ΡŒ сСрвСрной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unit Unit1;


interface


uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp;


type TForm1 = class(TForm)

 ServerSocket1: TServerSocket;

 procedure FormDestroy(Sender: TObject);

 procedure FormCreate(Sender: TObject);

 procedure ServerSocketlClientRead(Sender: TObject; Socket: TCustomWinSocket);

 procedure FormPaint(Sender: TObject);

private

 { Private declarations }

public

 { Public declarations }

end;


var

 Form1: TForm1;


implementation

{$R *.dfm}


procedure TForm1.FormDestroy(Sender: TObject);

begin

 ServerSocket1.Active:= False; //ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ сСрвСр

end;


procedure TForm1.FormCreate(Sender: TObject);

begin

 ServerSocket1.Active:= True; //Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСрвСр

end;


procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);

var

 str, x, y: string; //ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ тСкст ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹

  //указатСля ΠΏΠΎ X ΠΈ ΠΏΠΎ Y

 i, j: integer; //счСтчики Ρ†ΠΈΠΊΠ»ΠΎΠ²

 begin

 //обнуляСм ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ курсора

 Ρ… := ' ';

 Ρƒ := ' ';

 str:= Socket.ReceiveText; //ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° тСкст

 for i:=1 to Length(str) do begin

  if str[i] <> '_' then x:= x + str[i]; //ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠΎ Ρ…

  if str[i] = '_' then Break; //Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ

   //ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ указатСля

 end;

 for j:= i+1 to Length(str) do Ρƒ:= y+str[j]; //ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠΎ Ρƒ

 //устанавливаСм Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ указатСля

 SetCursorPos(StrToInt(x), StrToInt(Ρƒ));

end;


procedure TForm1.FormPaint(Sender: TObject);

begin

 Form1.Hide;

end;


end.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ модуля клиСнтской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставлСн Π² листингС 16.2.

Листинг 16.2. ΠœΠΎΠ΄ΡƒΠ»ΡŒ клиСнтской ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unit Unit1;


interface


uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ScktComp, StdCtrls, ExtCtrls;


type TForm1 = class(TForm)

 Button1: TButton;

 Button2: TButton;

 Client: TClientSocket;

 Timer1: TTimer;

 port: TEdit;

 ip: TEdit;

 Label1: TLabel;

 Label2: TLabel;

 procedure Button2Click(Sender: TObject);

 procedure FormDestroy(Sender: TObject);

 procedure Button1Click(Sender: TObject);

 procedure Timer1Timer(Sender: TObject);

 procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);

 procedure ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);

private

 { Private declarations }

public

 { Public declarations }

end;


var

 Form1: TForm1;


implementation

{$R *.dfm}


procedure TForm1.Button2Click(Sender: TObject);

begin

 Timer1.Enabled:= False;//Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€

 Client.Close; //Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ соСдинСниС

 Client.Active:= False; //ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΎΡ‚ сСрвСра

end;


procedure TForm1.FormDestroy(Sender: TObject);

begin

 Client.Close; //Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ соСдинСниС

 Client.Active:=False; //ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΎΡ‚ сСрвСра

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

 Client.Port:= StrToInt(port.Text); //считываСм ΠΏΠΎΡ€Ρ‚

 Π‘lient.Address:= ip.text; //считываСм ip-адрСс сСрвСра

 Client.Active:= True; //соСдиняСмся

 Timer1.Enabled:= True; //Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€

end;


procedure TForm1.Timer1Timer(Sender: TObject);