ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ delphi. ΠΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Delphi (TClientSocket, TServerSocket)
Π²ΡΠ±ΡΠ°ΡΡ ΠΌΠ΅Π½Ρ: Component - Install Packagesβ¦ - Add., Π΄Π°Π»Π΅Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ°ΠΉΠ» β¦\bin\dclsockets70.bpl.
ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ°, Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ°ΡΠ°.
Π‘Π΅ΡΠ΅Π²ΠΎΠΉ ΡΠ°Ρ Π½Π° Π΄Π²ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ, ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΆΠ΅ Π½Π° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ Π½ΡΠΆΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². ΠΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ°Ρ Π½Π° Π΄Π²ΠΎΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΡΠ°ΠΊ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, Π·Π½Π°ΡΠΈΡ, ΠΊΠΈΠ΄Π°Π΅ΠΌ Π² ΡΠΎΡΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ServerSocket ΠΈ ClientSocket . ΠΠ°ΠΆΠ½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΡ. Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Port , ΡΠ²ΡΠ·Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ. ΠΠΈΠ½Π΅ΠΌ Π² ΡΠΎΡΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Edit , ΡΡΠΎΠ±Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΡΡ, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ PortEdit . ΠΠ»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ IP ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΈΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΈΠ½Π΅ΠΌ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Edit , Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ HostEdit . Π’Π°ΠΊ ΠΆΠ΅ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ Π΅ΡΠ΅ Π΄Π²Π° Edit "Π° Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π½ΠΈΠΊΠ° ΠΈ Π²Π²ΠΎΠ΄Π° ΡΠ΅ΠΊΡΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π½Π°Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ NikEdit ΠΈ TextEdit , ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. Π’Π΅ΠΊΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² Memo , ΠΊΠΈΠ½Π΅ΠΌ Π΅Π³ΠΎ Π² ΡΠΎΡΠΌΡ ΠΈ Π½Π°Π·ΠΎΠ²Π΅ΠΌ ChatMemo . Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΡΠ°Π·Ρ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ»ΠΎΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ: ScrollBars = ssVertical , ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ReadOnly = True . ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Button : ServerBtn - Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ/Π·Π°ΠΊΡΡΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ClientBtn - Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ/ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ, SendBtn - Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ·ΠΌΠ΅Π½ΠΈΠΌ Caption ΡΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π½Π° "Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ ", "ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ " ΠΈ "ΠΡΠΏΡΠ°Π²ΠΈΡΡ ", ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΡΠΈΡ - Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π°Π΄ΠΏΠΈΡΠΈ Label Π΄Π»Ρ ΠΏΡΠ΅Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΌΠ΅ Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ΅Π³ΠΎ Π²ΠΈΠ΄Π° (ΡΡΠΎ ΠΏΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡ).
ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΡ ΡΡΠ°Π·Ρ, ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ Π²Π²ΠΎΠ΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ΄Π°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π½Π΅ Π΅ΡΡΡ Π³Π»Π°Π²Π½Π°Ρ ΡΠ΅Π»Ρ. ΠΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π· ΡΡΡΠ΄Π° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΌΠΈ.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΠΎΡΠΌΡ. ΠΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ OnCreate :
begin
// ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΡΠ°
PortEdit.Text:="777";
// Π°Π΄ΡΠ΅Ρ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΠ ("ΡΠ°ΠΌ Π½Π° ΡΠ΅Π±Ρ")
HostEdit.Text:="127.0.0.1";
// ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠΈΡΡΠΈΠΌ
NikEdit.Clear;
TextEdit.Clear;
ChatMemo.Lines.Clear;
end;
ΠΡΠ΄Π΅ΠΌ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ Π²ΡΠ±ΡΠ°Π½ ΡΠ΅ΠΆΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² ΡΠ΅ΠΆΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°Π²ΠΈΡΠ΅ΠΉ "Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ " (ServerBtn) . Π§ΡΠΎΠ±Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈΡΠ½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Π΄Π»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠΈΠΏΠ° RadioButton , ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Tag ΠΊΠ»Π°Π²ΠΈΡΠΈ ServerBtn , ΠΈΠ·ΠΌΠ΅Π½ΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡ ΡΠ΅ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ. ΠΠΎΡ ΡΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π½Π° Π½Π°ΠΆΠ°ΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ ServerBtn (OnClick ):
procedure TForm1.ServerBtnClick(Sender: TObject);
begin
If ServerBtn.Tag=0 then
Begin
// ΠΊΠ»Π°Π²ΠΈΡΡ ClientBtn ΠΈ ΠΏΠΎΠ»Ρ HostEdit, PortEdit Π·Π°Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌ
ClientBtn.Enabled:=False;
HostEdit.Enabled:=False;
PortEdit.Enabled:=False;
// Π·Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΏΠΎΡΡ Π² ServerSocket
ServerSocket.Port:=StrToInt(PortEdit.Text);
// Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΠ²Π΅Ρ
ServerSocket.Active:=True;
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] Π‘Π΅ΡΠ²Π΅Ρ ΡΠΎΠ·Π΄Π°Π½");
// ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΡΠ³
ServerBtn.Tag:=1;
// ΠΌΠ΅Π½ΡΠ΅ΠΌ Π½Π°Π΄ΠΏΠΈΡΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ
ServerBtn.Caption:="ΠΠ°ΠΊΡΡΡΡ ΡΠ΅ΡΠ²Π΅Ρ";
end
else
Begin
// ΠΊΠ»Π°Π²ΠΈΡΡ ClientBtn ΠΈ ΠΏΠΎΠ»Ρ HostEdit, PortEdit ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌ
ClientBtn.Enabled:=True;
HostEdit.Enabled:=True;
PortEdit.Enabled:=True;
// Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠ΅ΡΠ²Π΅Ρ
ServerSocket.Active:=False;
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] Π‘Π΅ΡΠ²Π΅Ρ Π·Π°ΠΊΡΡΡ.");
ServerBtn.Tag:=0;
ServerBtn.Caption:="Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ";
end;
end;
Π Π°Π·Π±Π΅ΡΠ΅ΠΌΡΡ Ρ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ServerSocket "Π°. ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ΄ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ (OnClientConnect ):
procedure TForm1.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ»ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ.");
end;
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ (OnClientDisconnect ):
procedure TForm1.ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] ΠΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΊΠ»ΡΡΠΈΠ»ΡΡ.");
end;
ΠΠΎΠ³Π΄Π° Π½Π° ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π΅Π³ΠΎ. ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° (OnClientRead ):
Socket: TCustomWinSocket);
begin
end;
Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ - ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π£ Π½Π°Ρ ΠΎΠ½Π° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΠΈ "ΠΡΠΏΡΠ°Π²ΠΈΡΡ" (SendBtn ), Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ΅ΠΆΠΈΠΌΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ²Π΅Ρ ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ. ΠΠ°ΠΏΠΈΡΠ΅ΠΌ Π΅Π΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ (OnClick ):
procedure TForm1.SendBtnClick(Sender: TObject);
begin
// ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°
// ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° (ΠΎΠ½ ΠΏΠΎΠ΄ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ 0, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ΄ΠΈΠ½)
ServerSocket.Socket.Connections.SendText("["+TimeToStr(Time)+"] "+NikEdit.Text+": "+TextEdit.Text)
else
// ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ClientSocket.Socket.SendText("["+TimeToStr(Time)+"] "+NikEdit.Text+": "+TextEdit.Text);
// ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ChatMemo
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] "+NikEdit.Text+": "+TextEdit.Text);
end;
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌΡΡ Ρ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠ΄Π΅ΡΡ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ "ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ" (ClientBtn ), Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ ServerBtn ΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ ClientSocket . ΠΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ClientBtn (OnClick) :
procedure TForm1.ClientBtnClick(Sender: TObject);
begin
If ClientBtn.Tag=0 then
Begin
// ΠΊΠ»Π°Π²ΠΈΡΡ ServerBtn ΠΈ ΠΏΠΎΠ»Ρ HostEdit, PortEdit Π·Π°Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌ
ServerBtn.Enabled:=False;
HostEdit.Enabled:=False;
PortEdit.Enabled:=False;
// Π·Π°ΠΏΠΈΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΏΠΎΡΡ Π² ClientSocket
ClientSocket.Port:=StrToInt(PortEdit.Text);
// Π·Π°ΠΏΠΈΡΠ΅ΠΌ Ρ
ΠΎΡΡ ΠΈ Π°Π΄ΡΠ΅Ρ (ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ HostEdit Π² ΠΎΠ±Π°)
ClientSocket.Host:=HostEdit.Text;
ClientSocket.Address:=HostEdit.Text;
// Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ClientSocket.Active:=True;
// ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΡΠ³
ClientBtn.Tag:=1;
// ΠΌΠ΅Π½ΡΠ΅ΠΌ Π½Π°Π΄ΠΏΠΈΡΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ
ClientBtn.Caption:="ΠΡΠΊΠ»ΡΡΠΈΡΡΡΡ";
end
else
Begin
// ΠΊΠ»Π°Π²ΠΈΡΡ ServerBtn ΠΈ ΠΏΠΎΠ»Ρ HostEdit, PortEdit ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌ
ServerBtn.Enabled:=True;
HostEdit.Enabled:=True;
PortEdit.Enabled:=True;
// Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ClientSocket.Active:=False;
// Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ChatMemo
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] Π‘Π΅ΡΡΠΈΡ Π·Π°ΠΊΡΡΡΠ°.");
// Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΡΠ³Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
ClientBtn.Tag:=0;
// Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ Π½Π°Π΄ΠΏΠΈΡΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ
ClientBtn.Caption:="ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ";
end;
end;
ΠΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π½Π° OnConnect , OnDisconnect , OnRead ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ClientSocket . Π‘Π½Π°ΡΠ°Π»Π° Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° (OnRead ):
Socket: TCustomWinSocket);
begin
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΠΏΡΠΈΡΠ΅Π΄ΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
ChatMemo.Lines.Add(Socket.ReceiveText());
end;
procedure TForm1.ClientSocketConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ.");
end;
procedure TForm1.ClientSocketDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΡΠ΅ΡΠ΅ ΡΠ²ΡΠ·ΠΈ
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] Π‘Π΅ΡΠ²Π΅Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½.");
end;
ΠΠΎΡ ΡΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ΄Π΅Π»Π°ΡΡ. ΠΡΡΠ°Π΅ΡΡΡ Π²Π½Π΅ΡΡΠΈ Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ΄ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ Π²Π²ΠΎΠ΄Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: Π° Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅, Π° ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΌΠ°ΡΡΠΈΠ²? ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ³ΡΡ.
ΠΡΠΏΡΠ°Π²ΠΊΠ° ΠΌΠ°ΡΡΠΈΠ²Π° Π΄Π°Π½Π½ΡΡ
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΎΠΉ ΠΆΠ΅ ΡΠΎΡΠΌΠΎΠΉ ΡΠ°ΡΠ°, ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΡΡΡ Π½ΠΈΠΆΠ΅. ΠΡΡΡΡ Π·Π°Π΄Π°ΡΠ° - ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΡΠΈΠΏΠ° Shape
, ΠΌΠ΅Π½ΡΡΡ ΡΠΈΠΏ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠ³ΡΡΡ, ΡΠ²Π΅Ρ, ΡΠ°Π·ΠΌΠ΅ΡΡ. ΠΠΎΠΌΠ΅ΡΡΠΈΠΌ Π² ΡΠΎΡΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ GroupBox
, Π° Π² Π½Π΅Π³ΠΎ Shape
, ΠΈΡ
ΠΈΠΌΠ΅Π½Π° Π±ΡΠ΄ΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅. ΠΠ»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠΏΠ° Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΠ³ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ComboBox
, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ ShapeCBox
. Π‘ΡΠ°Π·Ρ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ, ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π² OnCreate
ΡΠΎΡΠΌΡ. ΠΠ°Π»Π΅Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ComboBox
Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΡΠ²Π΅ΡΠ°, ΠΈ Π΄Π²Π° Edit
"Π° Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΈΠ³ΡΡΡ (Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠΌ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½Π° ΠΊΡΡΠ³ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ΅). ΠΠ°Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ
ColorCBox
, Value1Edit
, Value2Edit
, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΊΠΈΠ½Π΅ΠΌ Π² ΡΠΎΡΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Button
, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ SendBufBtn
, Caption
ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π° "ΠΡΠΏΡΠ°Π²ΠΈΡΡ Π±ΡΡΠ΅Ρ
".
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π²Π²ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² Π²ΠΈΠ΄Π΅ Π±ΡΡΠ΅ΡΠ° Π΄Π°Π½Π½ΡΡ
. ΠΡΠΆΠ½ΠΎ ΡΡΠ°Π·Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π° ΠΊΠ°ΠΊΠΈΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π² Π±ΡΡΠ΅ΡΠ΅. ΠΡΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π±ΡΠ΄Π΅Ρ ΡΠΈΠΏ ΡΠΈΠ³ΡΡΡ, Π·Π° Π½ΠΈΠΌ ΡΠ²Π΅Ρ, Π° ΡΠ»Π΅Π΄ΠΎΠΌ ΠΎΠ±Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΠ»Ρ ΡΡΠΈΡ
ΡΠ΅Π»Π΅ΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Π΄Π»ΠΈΠ½ΠΎΠΉ 4
ΠΈ ΡΠΈΠΏΠΎΠΌ Byte
. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π² ΡΠ°Π·Π΄Π΅Π» var
ΠΌΠ°ΡΡΠΈΠ²:
Buf: array of Byte;
Π‘ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠΈΠ³ΡΡΡ Π²ΡΠ΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π° Π²ΠΎΡ Π΄Π»Ρ ΡΠΈΠΏΠ° ΠΈ ΡΠ²Π΅ΡΠ° Π½ΡΠΆΠ½Π° "ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΡΡΠΈΠ½Π½ΠΎΡΡΠΈ". ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ Π΅Π΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠ΄
ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ 0
ΠΊΡΡΠ³ 1
-------------------
ΠΊΡΠ°ΡΠ½ΡΠΉ 0
Π·Π΅Π»Π΅Π½ΡΠΉ 1
ΡΠΈΠ½ΠΈΠΉ 2
ΠΡΠΎΠ³ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Ρ
Π²Π°ΡΠΈΡ Π΄Π»Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ. ΠΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΊΡΡΠ³ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ, Π²Π²Π΅ΡΡΠΈ ΡΠΈΠΏ Π·Π°Π»ΠΈΠ²ΠΊΠΈ, ΡΠΈΠΏ ΠΊΠΎΠ½ΡΡΡΠ°, ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
ΡΠ΅Π»Π΅ΠΉ.
ΠΡΠΎΠΏΠΈΡΠ΅ΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠΎΠ² Π² OnCreate
ΡΠΎΡΠΌΡ:
procedure TForm1.FormCreate(Sender: TObject);
begin
// ...ΡΠ°ΡΡΡ ΡΠ°ΡΠ°...
// Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠΎΠ²
ShapeCBox.Items.Add("ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ");
ShapeCBox.Items.Add("ΠΊΡΡΠ³");
ColorCBox.Items.Add("ΠΊΡΠ°ΡΠ½ΡΠΉ");
ColorCBox.Items.Add("Π·Π΅Π»Π΅Π½ΡΠΉ");
ColorCBox.Items.Add("ΡΠΈΠ½ΠΈΠΉ");
end;
ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ "ΠΡΠΏΡΠ°Π²ΠΈΡΡ Π±ΡΡΠ΅Ρ " Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π° ΡΠ΅ΠΆΠΈΠΌ ΡΠ΅ΡΠ²Π΅Ρ/ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ. ΠΠΎΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° SendBufBtn (OnClick) :
procedure TForm1.SendBufBtnClick(Sender: TObject);
begin
// ΡΠΎΠ±Π΅ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ
Buf:=ShapeCBox.ItemIndex;
Buf:=ColorCBox.ItemIndex;
Buf:=StrToInt(Value1Edit.Text);
Buf:=StrToInt(Value2Edit.Text);
// ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
If ServerSocket.Active=True then
// ΠΎΡΠΏΡΠ°Π²ΠΈΠΌ Π±ΡΡΠ΅Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° (Π΄Π»ΠΈΠ½Π° ΠΈΠ·Π²Π΅ΡΡΠ½Π° - 4)
ServerSocket.Socket.Connections.SendBuf(Buf,4)
else
// ΠΎΡΠΏΡΠ°Π²ΠΈΠΌ Π±ΡΡΠ΅Ρ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ClientSocket.Socket.SendBuf(Buf,4);
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] ΠΠ°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ.");
Shape.Height:=Buf;
Shape.Width:=Buf;
If Buf>
Case Buf of
0: Shape.Brush.Color:=clRed;
2: Shape.Brush.Color:=clBlue;
end;
// ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠΎΠ»ΡΡ
ShapeCBox.ItemIndex:=Buf;
ColorCBox.ItemIndex:=Buf;
end;
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π²ΡΠΊΠ»ΡΡΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ Π½Π°ΡΡΡΠΎΠ΅ΠΌ Π½Π° ΠΏΡΠΈΠ΅ΠΌ Π±ΡΡΠ΅ΡΠ° (OnClientRead ):
procedure TForm1.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
len: Byte;
begin
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
len:=Socket.ReceiveLength;
Socket.ReceiveBuf(Buf,len);
// ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ Shape
Shape.Height:=Buf;
Shape.Width:=Buf;
If Buf>0 then Shape.Shape:=stCircle {ΠΊΡΡΠ³}
else Shape.Shape:=stRectangle; {ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»Π½ΠΈΠΊ}
// Π²ΡΠ±ΠΎΡ ΡΠ²Π΅ΡΠ° ΠΏΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎΡΡΠΈ
Case Buf of
0: Shape.Brush.Color:=clRed;
1: Shape.Brush.Color:=clGreen;
2: Shape.Brush.Color:=clBlue;
end;
// ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠΎΠ»ΡΡ
ShapeCBox.ItemIndex:=Buf;
ColorCBox.ItemIndex:=Buf;
Value1Edit.Text:=IntToStr(Buf);
Value2Edit.Text:=IntToStr(Buf);
end;
ΠΡΡΠ°Π»ΠΎΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° (OnRead ):
procedure TForm1.ClientSocketRead(Sender: TObject;
Socket: TCustomWinSocket);
var
len: Byte;
begin
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
// ChatMemo.Lines.Add(Socket.ReceiveText());
// ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π±ΡΡΠ΅Ρ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°
len:=Socket.ReceiveLength;
Socket.ReceiveBuf(Buf,len);
// ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ Shape
Shape.Height:=Buf;
Shape.Width:=Buf;
If Buf>0 then Shape.Shape:=stCircle {ΠΊΡΡΠ³}
else Shape.Shape:=stRectangle; {ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»Π½ΠΈΠΊ}
// Π²ΡΠ±ΠΎΡ ΡΠ²Π΅ΡΠ° ΠΏΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎΡΡΠΈ
Case Buf of
0: Shape.Brush.Color:=clRed;
1: Shape.Brush.Color:=clGreen;
2: Shape.Brush.Color:=clBlue;
end;
// ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠΎΠ»ΡΡ
ShapeCBox.ItemIndex:=Buf;
ColorCBox.ItemIndex:=Buf;
Value1Edit.Text:=IntToStr(Buf);
Value2Edit.Text:=IntToStr(Buf);
// Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ChatMemo ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΡΠΈΡ
ΠΎΠ΄Π΅ Π΄Π°Π½Π½ΡΡ
ChatMemo.Lines.Add("["+TimeToStr(Time)+"] ΠΡΠΈΡΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅.");
end;
ΠΡΠΎ ΠΈ Π²ΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (Socket.ReceiveText() ) ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΈΠ½ΡΡΡ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π±ΡΡΠ΅Ρ, ΡΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ. Π Π΅ΡΠΈΡΡ ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π° ΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ°Ρ Π±ΡΡΠ΅ΡΠ° Π²ΠΎΡ ΡΠ°ΠΊ:
For i:=1 to Length(TextEdit.Text) do
Buf:=Copy(TextEdit.Text,i,1);
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² ΡΡΠ°Π½Π΅Ρ Π½Π° ΠΎΠ΄Π½Ρ ΡΡΠ΅ΠΉΠΊΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉ ΡΠΈΠΏ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ. Buf ΠΏΡΠΈ ΡΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΠΌΠ΅ΡΠΊΠΎΠΉ, ΡΠ΅ΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΡΠ΅Π΄ΡΠΈΠΉ Π±ΡΡΠ΅Ρ: ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. Π ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
len:=Socket.ReceiveLength;
Socket.ReceiveBuf(Buf,len);
If Buf="t" then
Begin
β¦ Π΄Π΅Π»Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π² ΡΡΡΠΎΠΊΡ (ΡΠ΅ΡΠ΅Π· ΡΠΈΠΊΠ»)
end;
If Buf="c" then
Begin
β¦ Π΄Π΅Π»Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Shape
end;
ΠΡΠΊΡΠΎΠ΅ΠΌ Delphi ΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ File/Save Project Asβ¦ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅, Π³Π΄Π΅ ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΠΈΠ»ΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ΄ΡΠ΅Ρ ΠΏΠ°ΠΏΠΊΠΈ C:\ΠΠIBExpert . Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ pas ΡΠ°ΠΉΠ» ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ TelSprav1.pas , Π° dpr ΡΠ°ΠΉΠ» TelSprav.dpr . Π ΡΡΠΎΠΌ ΠΎΠΊΠ½Π΅ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Caption Π½Π°ΠΏΠΈΡΠ΅ΠΌ Β«Π’Π΅Π»Π΅ΡΠΎΠ½Π½ΡΠΉ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ Β», Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Β«TelefonSpravΒ». ΠΠΈΠ½Π΅ΠΌ Π½Π° ΡΠΎΡΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ MainMenu ΠΈ Π΄Π²Π°ΠΆΠ΄Ρ ΡΡΠ»ΠΊΠ½Π΅ΠΌ ΠΏΠΎ Π½Π΅ΠΌΡ, ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΎΠΊΠ½ΠΎ (ΡΠΈΡ. 50).
Π ΠΈΡΡΠ½ΠΎΠΊ 50
Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Caption Π½Π°ΠΏΠΈΡΠ΅ΠΌ Β«Π€Π°ΠΉΠ» Β», Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Β«Fille Β». Π©ΡΠ»ΠΊΠ½Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎ ΡΠΈΠ½Π΅ΠΌΡ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΡ, ΡΠ½ΠΈΠ·Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ (ΡΠΈΡ. 51).
Π ΠΈΡΡΠ½ΠΎΠΊ 51
ΠΡΠ΄Π΅Π»ΠΈΠΌ Π΅Π³ΠΎ. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Caption Π½Π°ΠΏΠΈΡΠ΅ΠΌ Β«ΠΠ°ΠΊΡΡΡΡ Β», Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Β«Zakrit Β». ΠΡΠ΄Π΅Π»ΠΈΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ ΡΠΏΡΠ°Π²Π°. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Caption Π½Π°ΠΏΠΈΡΠ΅ΠΌ Β«Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Β», Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Β«Redaktirov Β» ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Ρ Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π²ΠΎΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ (ΡΠΈΡ. 52, ΡΠΈΡ 53, ΡΠΈΡ 54).
Π ΠΈΡΡΠ½ΠΎΠΊ 52
Π ΠΈΡΡΠ½ΠΎΠΊ 53
Π ΠΈΡΡΠ½ΠΎΠΊ 54
Π’Π΅ΠΏΠ΅ΡΡ Π±ΡΠΎΡΠΈΠΌ Π½Π° ΡΠΎΡΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ToolBar , Ρ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Win32. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Align Π²ΡΡΡΠ°Π²ΠΈΠΌ Π² alTop. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ EdgeBorders Π²ΡΡΡΠ°Π²ΠΈΠΌ Π²ΡΡ Π² True. ΠΠ°Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅ΠΌ Π½Π°ΠΌ ΡΡΠ°Π²ΠΈΡΡ Π½Π° Π½ΡΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π ΡΡΠΎΠΌ ΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠΎΠ»Ρ. Π©ΡΠ»ΠΊΠ½Π΅ΠΌ ΠΏΠΎ Π½Π΅ΠΌΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΈ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ Π²ΡΠ±Π΅ΡΠ΅ΠΌ NewButton (ΡΠΈΡ. 55).
Π ΠΈΡΡΠ½ΠΎΠΊ 55
ΠΠΎΡΠ²ΠΈΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ. ΠΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Β«Dob Β». Π§ΡΠΎΠ±Ρ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π½Π°Π΄ΠΎ, Ρ ΡΡΠΎΠΉ ΠΆΠ΅ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ, Π±ΡΠΎΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ImageList ΠΈ Π΄Π²Π°ΠΆΠ΄Ρ ΡΡΠ»ΠΊΠ½ΡΡΡ ΠΏΠΎ Π½Π΅ΠΌΡ. ΠΠΎΡΠ²ΠΈΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ (ΡΠΈΡ. 56), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Addβ¦ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 16Ρ 16. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π²ΡΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π²ΡΠ±ΡΠ°Π½Ρ, Π½Π°ΠΆΠΌΡΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ OK.
Π ΠΈΡΡΠ½ΠΎΠΊ 56
ΠΡΠ΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ToolBar1 ΠΈ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Imeges Π² Π½ΠΈΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ Π²ΡΠ±Π΅ΡΠ΅ΠΌ ImageList1. ΠΠ° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°. ΠΡΠ»ΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π΄ΡΡΠ³Π°Ρ, ΡΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΈ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ ImageIndex Π² Π½ΠΈΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΡΡ.
ΠΠ°ΠΆΠΌΡΠΌ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ToolBar1 ΠΈ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ Π²ΡΠ±Π΅ΡΠ΅ΠΌ NewSeparator (ΡΠΈΡ. 55). ΠΠΊΠΎΠ»ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ. ΠΠ΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Name, Ρ.ΠΊ. ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ. ΠΡΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π΅Π³ΠΎ ΡΠΈΡΠΈΠ½Ρ Width. Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ ΡΠ°Π²Π½ΡΠΌ 5. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠΎΠ·Π΄Π°ΡΠΌ Π΅ΡΡ ΡΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠΠΎ Π²ΡΠΎΡΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Β«Red Β». Π ΡΡΠ΅ΡΡΠ΅ΠΉ Β«Ydali Β». Π ΡΠ΅ΡΠ²ΡΡΡΠΎΠΉ Β«Exiit Β». ΠΠ΅ΠΆΠ΄Ρ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ ΡΡΠ°Π²ΠΈΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ NewSeparator. ΠΠΎΡΡΠ°Π²ΠΈΠΌ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΠ°Π²Π½ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 50. ΠΡΠΎΡΠΈΠΌ ΠΎΠΊΠΎΠ»ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Label ΠΈ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Caption ΠΏΠΈΡΠ΅ΠΌ Π€Π°ΠΌΠΈΠ»ΠΈΡ. Π ΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ Label1 ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Edit, Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Β«Familiya Β». ΠΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, Label ΠΈ Edit , ΡΠΎΠ»Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈΠ³ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π΅Π» Π² Π½Π°Π±ΡΠ°Π½Π½ΠΎΠΌ ΡΠ»ΠΎΠ²Π΅ Π€Π°ΠΌΠΈΠ»ΠΈΡ. ΠΡΠΎΡΠΈΠΌ Π΅ΡΡ ΠΏΠ°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Label ΠΈ Edit. Π£ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name Π²ΡΡΡΠ°Π²ΠΈΠΌ Β«Telefon Β». Π£ ΠΎΠ±ΠΎΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Edit Π½Π°Π΄ΠΎ ΠΎΡΠΈΡΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Text. Π ΡΠ΄ΠΎΠΌ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π° (Edit) ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Button, Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name Π²Π²Π΅Π΄ΡΠΌ Naiti.
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Data Controls Π½Π°Π΄ΠΎ Π±ΡΠΎΡΠΈΡΡ Π½Π° ΡΠΎΡΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ DBGrid. Π Π°ΡΡΡΠ½ΠΈΡΠ΅ Π΅Π³ΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΊΠ½Ρ, ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Align Π²ΡΡΡΠ°Π²ΠΈΠΌ Π² alClient. Π£ Π½Π°Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΡΠΈΡΡΡΡ Π½Π΅ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ (ΡΠΈΡ. 57).
Π ΠΈΡΡΠ½ΠΎΠΊ 57
ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΠΎΡΡΡΠΎΠ΅Π½.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠΌ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅. ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ File/New/Otherβ¦ ΠΈ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ (ΡΠΈΡ. 58) Π²ΡΠ±Π΅ΡΠ΅ΠΌ DataModule, Π½Π°ΠΆΠΌΡΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ OK. Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅, Ρ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ DataModule1.pas ΠΈ DataModule.dpr.
Π ΠΈΡΡΠ½ΠΎΠΊ 58
Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠ΅ DM . ΠΠΎΡ Π² ΡΡΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΠ. Π‘ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ InterBase ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ: IBDatabase, IBStoredProc, IBQuery, IBTransaction. ΠΡΡΠ°Π²ΠΈΠΌ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΡ, Ρ.ΠΊ. ΠΌΡ ΠΈΡ Π² ΠΎΠΊΠ½ΠΎ Π±ΡΠΎΡΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΌΠΈ. ΠΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Ρ ΡΠΈΡΡΠΎΠΉ 1 Π² ΠΊΠΎΠ½ΡΠ΅. Π‘ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Data Access Π±ΡΠΎΡΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ DataSource Π² Π½ΠΈΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ DataSet Π²ΡΠ±Π΅ΡΠ΅ΠΌ IBQuery1.
Π‘Π΅ΠΉΡΠ°Ρ ΡΠ°ΡΠΏΠΈΡΠ΅ΠΌ, ΠΊΠ°ΠΊΡΡ ΡΠΎΠ»Ρ ΠΈΠ³ΡΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ:
- IBDatabase - ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π΄Π»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . ΠΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²ΡΠ·Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ;
- IBStoredProc β ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Ρ ΡΠ°Π½ΠΈΠΌΡΠΌΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌΠΈ. ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΈΡ , ΠΏΠΎΠ΄Π°Π²Π°ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅);
- IBQuery - ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° TQuery. ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ SQL;
- IBTransaction - ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠ°Π±ΠΎΡΡ Π²ΡΠ΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ ;
- DataSource - Π―Π²Π»ΡΠ΅ΡΡΡ ΡΠ²ΡΠ·ΡΡΡΠΈΠΌ Π·Π²Π΅Π½ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ TIBQuery ΠΈ TIBStoredProc, ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ.
ΠΡΠ°ΠΊ, ΡΡΠ»ΠΊΠ½Π΅ΠΌ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ IBDatabase, Π²ΡΠ»Π΅Π·Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ (ΡΠΈΡ. 59).
Π ΠΈΡΡΠ½ΠΎΠΊ 59
Π ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π°Π΄ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠ½ΠΊΡ Database Editorβ¦ ΠΠΎΡΠ²ΠΈΡΡΡ ΠΎΠΊΠ½ΠΎ Database Component Editor (ΡΠΈΡ. 60).
Π ΠΈΡΡΠ½ΠΎΠΊ 60
Π ΡΠ°Π·Π΄Π΅Π»Π΅ Connection Π²ΡΠ±Π΅ΡΠ΅ΠΌ Local, Ρ.ΠΊ. ΠΌΡ ΠΏΠΎΠΊΠ° ΡΠΎΠ·Π΄Π°ΡΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ . Π ΠΏΠΎΠ»Π΅ Database Π½ΡΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ ΠΈΠΌΡ Π½Π°ΡΠ΅ΠΉ ΠΠ. ΠΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ Π½Π°Π±ΡΠ°ΡΡ Π²ΡΡ ΡΡΡΠΊΠ°ΠΌΠΈ, Π½ΠΎ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Browse. ΠΡΠ»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π·Π°Π»Π΅Π·ΡΡ Π² ΠΏΠ°ΠΏΠΊΡ Ρ Π½Π°ΡΠ΅ΠΉ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ (TELEFONSPRAVOCHNIK.FDB), ΡΠΎ ΠΎΠ½Π° Π² ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΡΠ±ΡΠ°ΡΡ ΡΡΡ ΠΠ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π² ΡΡΡΠΎΠΊΠ΅ Π’ΠΈΠΏ ΡΠ°ΠΉΠ»ΠΎΠ² Π²ΡΠ±ΡΠ°ΡΡ AllFiles(*.*). ΠΠΎΡ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΈΠ· ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ, ΠΎΡΠΎΠ±ΡΠ°Π·ΡΡΡΡ. ΠΡΠ±Π΅ΡΠ΅ΠΌ ΡΠ°ΠΉΠ» ΠΠ (TELEFONSPRAVOCHNIK.FDB) ΠΈ ΡΡΠ»ΠΊΠ½Π΅ΠΌ OK.
Π ΡΠ°Π·Π΄Π΅Π»Π΅ Database Parameters Π² ΠΏΠΎΠ»Π΅ User Name Π²Π²Π΅Π΄ΡΠΌ Π»ΠΎΠ³ΠΈΠ½ β SYSDBA, Π² ΠΏΠΎΠ»Π΅ PassWord Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΏΠ°ΡΠΎΠ»Ρ β masterkey. ΠΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅, ΠΊΠ°ΠΊΠΈΠΌΠΈ Π²Π²ΠΎΠ΄ΠΈΠ»ΠΈΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΠ Π² IBExpert. Π£ΠΏΡΠ°Π²Π»ΡΡΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π² Delphi.
Π Π½ΠΈΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ Character Set Π²ΡΠ±Π΅ΡΠ΅ΠΌ Win1251. Π£Π±Π΅ΡΡΠΌ Π³Π°Π»ΠΎΡΠΊΡ Login Prompt, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ. Π‘ΠΏΡΠ°Π²Π° Π² ΠΎΠΊΠ½Π΅ Settings ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π²ΡΡ, ΡΡΠΎ ΠΌΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΠ»ΠΈ ΠΈ Π²Π²Π΅Π»ΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Test. ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ OK, Π½Π°Π΄ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΠ. ΠΠΎΡΠ²ΠΈΡΡΡ ΠΎΠΊΠ½ΠΎ (ΡΠΈΡ. 61).
Π ΠΈΡΡΠ½ΠΎΠΊ 61
ΠΡΠ»ΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ β Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ InterBase. ΠΠ»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Π΄ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ InterBase, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°. Π ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ» Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ gds32.dll ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ C:\WINDOWS\system32.
ΠΠΎΡΠ»Π΅ ΡΡΠΈΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΉ ΠΏΡΠΈΠ΄ΡΡΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΠΈ FireBird, Ρ.ΠΊ. ΠΌΡ ΡΠ΄Π°Π»ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, IBExpert Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠΆΠ΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠΎΡΠ»Π΅ Π²ΡΠ΅Ρ ΡΡΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ FireBird. ΠΡΠΈΡΠΈΠ½ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ, Π½ΠΎ ΡΡΠ° ΡΠ°ΠΌΠ°Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½Π°Ρ.
ΠΡΠ΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ IBQuery1 ΠΈ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Database Π²ΡΠ±Π΅ΡΠ΅ΠΌ IBDatabase1. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Database ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ TIBDatabase, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ Π΄Π°Π½Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ . Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Transaction Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ IBTransaction1. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Transaction ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²ΡΠ±ΠΎΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° TQuery β SQL, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ ΡΠΈΠΏ TStrings . ΠΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ Π·Π°ΠΏΡΠΎΡΡ SQL, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ, Ρ ΠΊΠ°ΠΊΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΠ΅ΠΉ ΠΈΠ»ΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ°Π±ΠΎΡΠ°. ΠΠΎ Π΄Π°Π»Π΅Π΅ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ SQL ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° TStrings : Clear β ΠΎΡΠΈΡΡΠΊΠ°, Add β Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈ Ρ.Π΄.
ΠΡΠ°ΠΊ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ SQL ΡΡΠ»ΠΊΠ½Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ Ρ ΡΡΠ΅ΠΌΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΠΈ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Π²Π²Π΅Π΄ΡΠΌ SQL Π·Π°ΠΏΡΠΎΡ (ΡΠΈΡ. 62).
Π ΠΈΡΡΠ½ΠΎΠΊ 62
ΠΠ°ΠΏΡΠΎΡ Π·Π²ΡΡΠΈΡ ΡΠ°ΠΊ β Π²ΡΠ±ΡΠ°ΡΡ Π²ΡΠ΅ ΠΏΠΎΠ»Ρ (SELECT * ) ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ TELEPHON_SPRAVOCCHNIK (FROM TELEPHON_SPRAVOCCHNIK) ΠΈ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ (ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ) ΠΏΠΎ ΠΏΠΎΠ»Ρ KEY (ORDER BY KEY). ΠΠ°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ OK.
ΠΡΠ΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ IBTransaction1 ΠΈ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ DefaultDatabase Π²ΡΠ±Π΅ΡΠ΅ΠΌ IBDatabase1 .
ΠΡΠ΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ IBStoredProc1, Π² ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Database Π²ΡΠ±Π΅ΡΠ΅ΠΌ IBDatabase1 . Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ StoredProcName ΠΈΠ· Π½ΠΈΡΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ±Π΅ΡΠ΅ΠΌ Π½Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ TEL_SPRAV_PROC Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π² IBExpert.
ΠΡΠ΄Π΅Π»ΠΈΠΌ IBQuery1, ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Active Π²ΡΡΡΠ°Π²ΠΈΠΌ Π² True .
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ ΠΊ Π΄Π°Π½Π½ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ (DataModule1) Π³Π»Π°Π²Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ TelSprav1 , Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ File/Use Unitβ¦, Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ (ΡΠΈΡ. 63.)
Π ΠΈΡΡΠ½ΠΎΠΊ 63
Π²ΡΠ±Π΅ΡΠ΅ΠΌ TelSprav1 ΠΈ Π½Π°ΠΆΠΌΡΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ Use Unit. ΠΠΎΡΠ»Π΅ ΡΠ»ΠΎΠ²Π° implementation Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ Π²ΡΠ»Π΅Π·Π΅Ρ ΡΠ°Π·Π΄Π΅Π» uses Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ TelSprav1. ΠΠΎΡ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ DataModule1 Π·Π½Π°Π΅Ρ ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ TelSprav1.
ΠΠ΅ΡΠ΅ΠΉΠ΄ΡΠΌ Π² Π³Π»Π°Π²Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ TelSprav1 ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ DataModule1. Π‘Π΅ΠΉΡΠ°Ρ ΡΡΠΈ Π΄Π²Π° ΠΌΠΎΠ΄ΡΠ»Ρ Π·Π½Π°ΡΡ ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΈ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°.
ΠΡΠ΄Π΅Π»ΠΈΠΌ ΡΠ΅ΡΠΊΡ DBGrid1 ΠΈ Π² Π½ΠΈΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΠΌΠ΅Π½Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° DataSource Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ DM.DataSource1 . Π Π½Π°ΡΠ΅ΠΉ ΡΠ΅ΡΠΊΠ΅ ΠΏΠΎΡΠ²ΡΡΡΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»Π΅ΠΉ ΠΠ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ File/New/Form. ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ ΡΠΎΡΠΌΡ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ File/Save Project Asβ¦ Π ΠΏΠΎΠ»Π΅ ΠΠΌΡ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠ΄ΡΠ»Ρ Π²Π²Π΅Π΄ΡΠΌ DobavRedakt1.pas , Π° ΠΠΌΡ ΡΠΎΡΠΌΡ - DobavRedakt.dpr . Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name Π²Π΅Π΄ΡΠΌ ΠΈΠΌΡ ΡΠΎΡΠΌΡ DobRed. ΠΠΈΠ½Π΅ΠΌ Π½Π° ΡΠΎΡΠΌΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅, Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ:
- TEdit - Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΠ°ΠΌΠΈΠ»ΠΈΠΈ. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Familiya. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Text ΠΎΡΠΈΡΡΠΈΠΌ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°;
- TEdit - Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠ΅Π½ΠΈ. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Imya. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Text ΠΎΡΠΈΡΡΠΈΠΌ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°;
- TDateTimePicker β Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π΄Π°ΡΡ. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ VData. Π Π½ΠΈΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° DateMode Π²ΡΠ±Π΅ΡΠ΅ΠΌ dmUpDown, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ Π΄ΡΡΠ³ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅;
- TEdit - Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ΅Π»Π΅ΡΠΎΠ½Π°. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ NomerTelefona. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Text ΠΎΡΠΈΡΡΠΈΠΌ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°;
- TEdit - Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ°. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ EMail. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Text ΠΎΡΠΈΡΡΠΈΠΌ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°;
- TCheckBox β ΠΏΡΠΈΠ·Π½Π°ΠΊ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π»Π΅ΡΠΎΠ½Π°. ΠΡΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π³Π°Π»ΠΎΡΠΊΡ, ΡΠΎ ΡΠΎΡΠΎΠ²ΡΠΉ ΡΠ΅Π»Π΅ΡΠΎΠ½ Π΅ΡΡΡ Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Caption ΠΏΠΈΡΠ΅ΠΌ ΠΠΎΠ±ΠΈΠ»ΡΠ½ΠΈΠΊ. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Mobilnik;
- TComboBox β Π½ΠΈΡΠΏΠ°Π΄Π°ΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° Π³ΠΎΡΠΎΠ΄Π°. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Gorod. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Text ΠΎΡΠΈΡΡΠΈΠΌ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π°;
- TButton β ΠΊΠ½ΠΎΠΏΠΊΠ° Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Dobavit. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Caption ΠΏΠΈΡΠ΅ΠΌ OK;
- TButton β ΠΊΠ½ΠΎΠΏΠΊΠ° Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Name ΠΏΠΈΡΠ΅ΠΌ Redact. Π ΡΠ²ΠΎΠΉΡΡΠ²Π΅ Caption ΠΏΠΈΡΠ΅ΠΌ OK.
Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ ΡΠΎΡΠΌΡ. ΠΠ°ΠΊΡΠΎΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΡΠ½ΠΎΠ²Π° Π΅Π³ΠΎ ΠΎΡΠΊΡΠΎΠ΅ΠΌ. ΠΠΎΡΠ»Π΅ ΠΎΡΠΊΡΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΠΊΠ»Π°Π΄ΠΊΡ DobavRedakt1 (Π ΠΈΡ. 64).
Π ΠΈΡΡΠ½ΠΎΠΊ 64
ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Project/Add to Projectβ¦ ΠΈ Π² ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ (ΡΠΈΡ. 65).
Π ΠΈΡΡΠ½ΠΎΠΊ 65
ΠΡΠ±Π΅ΡΠ΅ΠΌ ΡΠ°ΠΉΠ» DobavRedakt1.pas ΠΈ Π½Π°ΠΆΠΌΡΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ OK. ΠΠΎ ΡΡΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΡΠ°ΠΉΠ» DataModule1.pas , Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ Π½Π΅Ρ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ DataModule1. ΠΠ°Π½Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠΊΠ½Π΅ Project Manager ΠΎΡΡΡΡΡΡΠ²ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π½Π°ΠΌ pas ΠΈ dpr ΡΠ°ΠΉΠ»Ρ. ΠΠΊΠ½ΠΎ Project Manager Π²ΡΠ»Π΅Π·Π΅Ρ ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ View/Project/Managerβ¦
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ DobavRedakt1 ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ TelSprav1. Π’Π°ΠΊ ΠΆΠ΅ ΠΈ ΠΊ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ Π³Π»Π°Π²Π½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈ DataModule1.
ΠΡ Π²ΡΡ! ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅, Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅, ΠΎΠΊΠ½Π° ΡΠΎΠ·Π΄Π°Π½Ρ. ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ OnClick (Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ) Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ Dobavit ΠΏΠΈΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
procedure
TTelefonSprav.DabavitClick(Sender: TObject);
begin
  {Π΅ΡΠ»ΠΈ Π±ΡΠ»Π° Π½Π°ΠΆΠ°ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° "Dobavit", ΡΠΎ Π΄Π΅Π»Π°Π΅ΠΌ
   ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ "ExiStsDobRed" Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ}
     ExiStsDobRed:=true;
  //ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ "Dabavit" - "Tag=1"
     tag:=1;
  //Π΄Π΅Π»Π°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΡ "Dob"
     DobRed.Dobav.Visible:=true;
  //Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΡ βredβ
     DobRed.Redact.Visible:=false;
  //ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ
     DobRed.ShowModal;
end;
ΠΠ±ΡΡΠ²ΠΈΠΌ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ExiStsDobRed Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Var . ΠΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ, Π² ΠΌΠΎΠ΄ΡΠ»Π΅, Π²ΠΎΡ ΡΠ°ΠΊ.
var
  TelefonSprav: TTelefonSprav;
  ExiStsDobRed: boolean=false;
ΠΠ°Π½Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΡΠΈΠ·Π½Π°ΠΊ ΠΎΡΠΊΡΡΡΠΈΡ ΠΎΠΊΠ½Π° ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈ Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ ΡΠ°Π²Π½Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ False. ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ "Dobavit" ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ExiStsDobRed ΡΠ°Π²Π½Π° True.
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π΅ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Tag, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ. ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ 1 ΡΠ²ΠΎΠΉΡΡΠ²Ρ Tag, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: ΠΌΡ Π½Π°ΠΆΠ°Π»ΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Dobav, ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅.
ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» Ρ Π½Π°Ρ Π² ΠΎΠΊΠ½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ 2 ΠΊΠ½ΠΎΠΏΠΊΠΈ Dobav, Redact (ΡΠΈΡ. 66).
Π ΠΈΡΡΠ½ΠΎΠΊ 66
ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½Ρ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π½Ρ Π° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² ΡΠ΅ΡΠ²ΡΡΡΠΎΠΉ ΡΡΡΠΎΡΠΊΠ΅ ΠΊΠΎΠ΄Π° ΠΌΡ ΠΊΠ½ΠΎΠΏΠΊΡ Redact Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ. Π ΡΡΠ΅ΡΡΠ΅ΠΉ ΡΡΡΠΎΡΠΊΠ΅ Π΄Π΅Π»Π°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΡ Dobav. ΠΠ° ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Visible. Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΡΡΠΎΡΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π Π΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
ΠΡΠ°ΠΊ, ΡΠ½Π°ΡΠ°Π»Π° ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° IdTCPServer (Π·Π°ΠΊΠ»Π°Π΄ΠΊΠ° Indy Servers ). ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π½Π° ΡΠΎΡΠΌΡ (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π΅ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΈ). ΠΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π°:
- Active - Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΈΠ»ΠΈ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅Ρ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ False );
- Bindings - Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ (ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΠΈΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΌΡ ΠΏΠΎΡΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ IP-Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈ ΠΏΠΎΡΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Binding ;
- ListenQueue - ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΠ΅Π΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ;
- MaxConnections - ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ;
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ Π³Π½Π΅Π·Π΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π° Bindings . Π’Π°ΠΊ, Π½Π° ΡΠΈΡ. 1 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΡΠ²ΠΎΠΉΡΡΠ²Π° Binding Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ΅ΡΠ²Π΅Ρ Π½Π° ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² Ρ Π»ΡΠ±ΡΠΌΠΈ IP-Π°Π΄ΡΠ΅ΡΠ°ΠΌΠΈ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Ρ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ ΠΊ ΠΏΠΎΡΡΡ 12340.
Π ΠΈΡ. 1. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ²ΠΎΠΉΡΡΠ²Π° Binding .
ΠΠ° ΡΡΠΎΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π·Π°Π²Π΅ΡΡΠΈΡΡ (Ρ ΠΎΡΡ Π·Π΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° IdTCPServer ). ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ OnExecute . Π ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ TIdContext - ΠΏΠΎΡΠΎΠΊ, Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΠΌ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (Π° ΡΠΎΡΠ½Π΅Π΅, Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° Connection ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° TIdContext ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 1.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ (IdTCPClient - Π·Π°ΠΊΠ»Π°Π΄ΠΊΠ° Indy Clients ), ΡΡΠΎΠ±Ρ ΠΎΠ½ Π±ΡΠ» ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π½Π°ΡΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π’Π‘Π -ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ Π½Π° ΡΠΎΡΠΌΡ (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΉ).
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΅Π³ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° (ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π΄Π°Π»Π΅Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ):
- Host - ΠΈΠΌΡ ΠΈΠ»ΠΈ IP-Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠ΅Π½ ΡΠ΅ΡΠ²Π΅Ρ;
- Port - Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ°, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Ρ.
ΠΠΎΠΎΠ±ΡΠ΅, Π΄Π°ΠΆΠ΅ ΡΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π° ΡΡΠ°ΠΏΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΡΠΌΡ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ, Π΅ΡΠ»ΠΈ Π΄Π°Π²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΡΠ°ΡΡ (ΠΈΠ»ΠΈ Π²Π²Π΅ΡΡΠΈ) ΠΈΠΌΡ ΠΈΠ»ΠΈ Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΡΠΎΡΡΠΎΠΉ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½ΡΠΌΠΈ
Π Π½Π°ΡΠ°Π»Π΅ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ IdTCPServer ΠΈ IdTCPClient ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΡΠ°ΡΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
- ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π΅ΠΌΡ Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΡΡΠΎΠΊΡ, ΠΆΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°, Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ΅ΠΊΡΡ, ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°.
- Π‘Π΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΠΎΡΠ²Π΅Ρ (ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ), ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ°Π·ΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. ΠΠ»ΡΡ ΠΊ ΡΡΠΎΠΌΡ Π²Π΅Π΄Π΅ΡΡΡ ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΎΠ±ΡΠ»ΡΠΆΠ΅Π½Π½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ IP-Π°Π΄ΡΠ΅Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ΅Π» ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π·Π°ΠΏΡΠΎΡ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ, ΡΠ°ΠΊ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°. ΠΡΠΎΠ΅ΠΊΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ SimpleServer . ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΡΠΎΡΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ° (Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠΈΡ. 2.
Π ΠΈΡ. 2. ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°
Π’Π΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ (Edit ) Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ txtCount , Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΎΠ±ΡΠ»ΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° Π½Π°Π·Π²Π°Π½ΠΎ txtFrom . ΠΡΡ ΡΠ°Π±ΠΎΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Execute Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° IdTCPServer , ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΠΎΡΠΌΡ (ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΊ ΠΏΠΎΡΡΡ 12340 ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Active = True ) (Π»ΠΈΡΡΠΈΠ½Π³ 1).
ΠΠΈΡΡΠΈΠ½Π³ 1. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°
Procedure TForm1.FormCreate(Sender: TObject); begin section:= TCriticalSection.Create; end; procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); var strText: String; begin //ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊΡ strText:= AContext.Connection.Socket.ReadLn; //ΠΡΠ²Π΅ΡΠ°Π΅ΠΌ AContext.Connection.Socket.WriteLn("Took the line: " + strText); //ΠΠ±Π½ΠΎΠ²ΠΈΠΌ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ Π½Π° ΡΠΎΡΠΌΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° (ΡΠ΅ΡΠ²Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ, //ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ section.Enter; Inc(processed, 1); txtCount.Text:= IntToStr(processed); txtFrom.Text:= AContext.Connection.Socket.Binding.PeerIP; section.Leave; //ΠΠ°ΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ AContext.Connection.Disconnect; end;
ΠΡΠΈ ΠΎΡΠ²Π΅ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠ΅ΡΠ²Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅Ρ ΠΏΡΠΈΠ½ΡΡΡΡ ΠΎΡ Π½Π΅Π³ΠΎ ΡΡΡΠΎΠΊΡ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ° "ΠΡΠΈΠ½ΡΠ»: " Π² Π½Π°ΡΠ°Π»ΠΎ ΡΡΡΠΎΠΊΠΈ.
ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΡ Π»ΠΈΡΡΠΈΠ½Π³ 1 , ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π²ΠΈΠ΄Π° ΡΠΎΡΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ (Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ SyncObjs Π² ΡΠ΅ΠΊΡΠΈΡ uses ).
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈ (ΠΏΡΠΎΠ΅ΠΊΡ SimpleClient ). ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° ΡΠΈΡ. 2.
Π ΠΈΡ. 2. ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠΎΡΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° IdTCPClient (Π΅Π³ΠΎ ΠΈΠΌΡ - IdTCPClient1 ). Π‘Π²ΠΎΠΉΡΡΠ²Ρ Port ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 12340. Π’Π΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ (Edit ) Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΉ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π½Π΅ ΡΠ΅ΡΠ²Π΅Ρ, ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ txtMessage . Π’Π΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ (Edit ), Π² ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²Π²ΠΎΠ΄ΠΈΡΡΡ ΠΈΠΌΡ ΠΈΠ»ΠΈ Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π½Π°Π·Π²Π°Π½ΠΎ txtServer . ΠΠΎΠ»Π΅ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ² (Memo ) ΠΈΠΌΠ΅Π΅Ρ ΠΈΠΌΡ txtResults .
ΠΡΡ ΡΠ°Π±ΠΎΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ . Π’Π΅ΠΊΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2 .
ΠΠΈΡΡΠΈΠ½Π³ 2. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
Procedure TForm1.Button1Click(Sender: TObject); begin //Π‘ΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΠΏΠΎΡΡΠ»Π°Π΅ΠΌ Π΅ΠΌΡ Π²Π²Π΅Π΄Π΅Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ IdTCPClient1.Host:= txtServer.Text; IdTCPClient1.Connect; IdTCPClient1.Socket.WriteLn(txtMessage.Text); txtMessage.Text:= ""; //ΠΠΆΠΈΠ΄Π°Π΅ΠΌ ΠΎΡΠ²Π΅Ρ ΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ txtResults.Lines.Append(IdTCPClient1.Socket.ReadLn); IdTCPClient1.Disconnect; end;
ΠΡΠ΅, ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ (Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ²) ΠΈ ΠΏΠΎΠ½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ ΠΈΡ ΡΠ°Π±ΠΎΡΡ. Π’ΠΎΠ»ΡΠΊΠΎ Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΠ²Π΅Ρ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Π½Π΅ΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ . ΠΡΠΏΠΎΠ»Π½Π΅Π½ Π½Π° Delphi XE.
Π‘Π»Π΅ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠΌ ΠΏΠΎ ΡΠ΅ΡΠΈ (IdTCPServer, IdTCPClient)
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π²ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² IdTCPServer ΠΈ IdTCPCLient , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ, ΠΈΠΌΠ΅ΡΡΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠ² ΡΠ΅ΡΠΈ.
Π‘Π΅ΡΠ²Π΅ΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½Π° (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΡΠ΅ΡΠ²Π΅Ρ) Π·Π°ΠΏΡΡΠ΅Π½Π°:
- ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°;
- Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΠ²Π΅ΡΠ° Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ°;
- ΠΏΠΎΠ»Π½ΠΎΡΠ°Π·ΠΌΠ΅ΡΠ½ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠΊΡΠ°Π½Π°;
- ΠΊΠΎΠΏΠΈΡ ΡΠΊΡΠ°Π½Π°, ΡΠΌΠ΅Π½ΡΡΠ΅Π½Π½ΡΡ (ΠΈΠ»ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½Π½ΡΡ) Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ².
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΏΡΠΎ Π³ΡΠ°ΠΌΠΌΠ°-ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΠ»Π°ΡΡ ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
- get_screen_width - Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΡΠΈΠ½Ρ ΠΈ get_screen_height -Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΡΠΎΡΡ ΡΠΊΡΠ°Π½Π° Π² ΠΏΠΈΠΊΡΠ΅Π»Π°Ρ ;
- get_screen_colors - Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠ° Π³Π»ΡΠ±ΠΈΠ½Ρ ΡΠ²Π΅ΡΠ° (Π±ΠΈΡ Π½Π° ΡΠΎΡΠΊΡ);
- get_screen - Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½Π°;
- get_screen: X, Y - Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½Π°, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΊ ΡΠ°Π·ΠΌΠ΅ΡΡ Π₯ Ρ Y .
Π‘Π½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ° (ΠΏΡΠΎΠ΅ΠΊΡ SpyServer ). ΠΠ΅ΡΡ ΠΊΠΎΠ΄, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Unit1.pas ΡΠΎΡΠΌΡ Form1 . ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² - Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π΄Π»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° - ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 3.
ΠΠΈΡΡΠΈΠ½Π³ 3. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²
Procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread); var strText: String; width, height, i: Integer; dc: HDC; begin //ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊΡ strText:= AThread.Connection.ReadLn; //ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ if strText = "get_screen_height" then //Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠΌ Π²ΡΡΠΎΡΡ ΡΠΊΡΠ°Π½Π° AThread.Connection.WriteInteger(Screen.Height) else if strText = "get_screen_width" then //Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠΌ ΡΠΈΡΠΈΠ½Ρ ΡΠΊΡΠ°Π½Π° AThread.Connection.WriteInteger(Screen.Width) else if strText = "get_screen_colors" then begin //Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΡ Π½Π° ΡΠΎΡΠΊΡ dc:= GetDC(0); AThread.Connection.WriteInteger(GetDeviceCaps(dc, BITSPIXEL)); ReleaseDC(0, dc) end else if strText = "get_screen" then //Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠΌ ΠΏΠΎΠ»Π½ΠΎΡΠ°Π·ΠΌΠ΅ΡΠ½ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠΊΡΠ°Π½Π° SendScreen(Screen.Width, Screen.Height, AThread.Connection) else begin //ΡΡΡΠΎΠΊΠ° Π²ΠΈΠ΄Π° "get_screen:x, y" //ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈ Π²ΡΡΠΎΡΡ ΠΈ ΡΠΈΡΠΈΠ½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ strText:= Copy(strText, 12, Length(strText) - 11); i:= Pos(",", strText); //ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΎΠΉ width:= StrToInt(Copy(strText, 1, i - 1)); height:= StrToInt(Copy(strText, i+1, Length(strText) - i)); //Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠΌ ΠΊΠΎΠΏΠΈΡ ΡΠΊΡΠ°Π½Π° SendScreen(width, height, AThread.Connection); end; end;
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 3 ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° SendScreen, ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΠ°Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΊΠΎΠΏΠΈΡ ΡΠΊΡΠ°Π½Π°, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 4.
ΠΠΈΡΡΠΈΠ½Π³ 4. Π‘Π½ΡΡΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½Π°
//ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΏΠΈΡ ΡΠΊΡΠ°Π½Π°, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ //ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ //ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ procedure SendScreen(width1: Integer; height1: Integer; Connection: TIdTCPServerConnection); var ScreenCopy: TCanvas; gr: TBitmap; stream: TMemoryStream; rcDest, rcSource: TRect; begin rcDest:= Rect(0,0,width1,height1); //ΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ rcSource:= Screen.DesktopRect; //ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ //ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ°Π½Π²Ρ ΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌ Π΅Π΅ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΡ Π Π°Π±ΠΎΡΠ΅Π³ΠΎ ΡΡΠΎΠ»Π° ScreenCopy:= TCanvas.Create; ScreenCopy.Handle:= GetDC(0); //ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½Π° ΠΈ ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ gr:= TBitmap.Create; gr.Height:= height1; gr.Width:= width1; gr.Canvas.CopyRect(rcDest, ScreenCopy, rcSource); ReleaseDC(0, ScreenCopy.Handle); //ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ stream:= TMemoryStream.Create; gr.SaveToStream(stream); //ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Connection.WriteStream(stream, true, true); stream.Clear; stream.Free; gr.Free; end;
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ, Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌΠ°Ρ ΡΠ»ΠΎΠΆΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° - ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ - ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π½Π°Π»ΠΈΡΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠ°ΠΊ TMemoryStream .
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ IdTCPServer (Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ IdTCPServer1 ) Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ ΠΊ ΠΏΠΎΡΡΡ 12341 (Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Active = True ).
Π’Π΅ΠΏΠ΅ΡΡ ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (ΠΏΡΠΎΠ΅ΠΊΡ SpyClient ). ΠΠ½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΡΠΎΡΠΌΡ (Form1 ) ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΡΠΈΡ. 3 (Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΡΠΎΠΈΠ³ΡΠ°Π» Π² ΠΈΠ³ΡΡ Π‘Π°ΠΏΠ΅Ρ).
Π ΠΈΡ. 3
ΠΠΏΠΈΡΠ°Π½ΠΈΡ, ΠΈΠΌΠ΅Π½Π° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π²ΡΡΡΠ½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ°ΠΌΡΡ Π²Π°ΠΆΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΡΠΎΡΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ 1.
Π’Π°Π±Π»ΠΈΡΠ° 1. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΡΠΎΡΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°
Π Π°Π±ΠΎΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. ΠΠΎΠ΄, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΡΡΡ ΠΎΠΏΡΠ΅Π°ΡΠΈΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.
ΠΠΈΡΡΠΈΠ½Π³ 5.Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
Procedure TForm1.cmbConnectClick(Sender: TObject); begin if cmbConnect.Caption = "ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ" then begin if txtServer.Text = "" then //Π½Π΅ Π²Π²Π΅Π΄Π΅Π½ΠΎ ΠΈΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΠ° MessageDlg("ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΠΈΠΌΡ ΠΌΠ°ΡΠΈΠ½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅", mtInformation, , 0) else begin //ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ IdTCPClient1.Host:= txtServer.Text; try IdTCPClient1.Connect; except MessageDlg("ΠΠ΅ ΡΠ΄Π°Π΅ΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ", mtError, , 0); Exit; end; end end else //ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° IdTCPClient1.Disconnect; end;
ΠΡΠ»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ TForm1.IdTCPClient1Connected , ΠΏΠΎΠ΄Π³ΠΎΡΠ°Π²Π»ΠΈΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΊ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° (Π»ΠΈΡΡΠΈΠ½Π³ 6).
ΠΠΈΡΡΠΈΠ½Π³ 6. ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ
Procedure TForm1.IdTCPClient1Connected(Sender: TObject); begin txtServer.Enabled:= False; cmbConnect.Caption:= "ΠΡΠΊΠ»ΡΡΠΈΡΡΡΡ"; //Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Timer1.Enabled:= True; //Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ, Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡ ΡΡΠ°Π±Π°ΡΡΠ²Π²Π°Π½ΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ° Timer1Timer(nil); end;
ΠΡΠΈ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°ΡΡΠΈΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ) (Π»ΠΈΡΡΠΈΠ½Π³ 7).
ΠΠΈΡΡΠΈΠ½Π³ 7. ΠΠ΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
Procedure TForm1.IdTCPClient1Disconnected(Sender: TObject); begin txtServer.Enabled:= True; cmbConnect.Caption:= "ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ"; Timer1.Enabled:= False; end;
Π‘Π°ΠΌΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΈΡΡΠ»Π°Π΅ΠΌΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 8.
Procedure TForm1.Timer1Timer(Sender: TObject); var stream: TMemoryStream; begin //Π·Π°ΠΏΡΠ°ΡΠ°Π²Π°Π΅ΠΌ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄Π°Π½Π½ΡΠ΅ ΠΎ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ with (IdTCPClient1) do begin //...ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ WriteLn("get_screen_width"); WriteLn("get_screen_height"); lblResolution.Caption:= IntToStr(ReadInteger) + "x" + IntToStr(ReadInteger); //...Π³Π»ΡΠ±ΠΈΠ½Π° ΡΠ²Π΅ΡΠ° WriteLn("get_screen_colors"); lblColors.Caption:= IntToStr(ReadInteger); //...ΠΊΠΎΠΏΠΈΡ ΡΠΊΡΠ°Π½Π° //.....1-ΠΉ Π²Π°ΡΠΈΠ°Π½Ρ - ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΊΡΠ°Π½Π° Π±Π΅Π· ΡΠΆΠ°ΡΠΈΡ //WriteLn("get_screen"); //.....2-ΠΉ Π²Π°ΡΠΈΠ°Π½Ρ - ΡΠΆΠ°ΡΠΈΠ΅ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° WriteLn("get_screen:" + IntToStr(imgScreen.Width) + "," + IntToStr(imgScreen.Height)); //....ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ stream:= TMemoryStream.Create; ReadStream(stream); stream.Position:= 0; //....ΡΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ imgScreen.Picture.Bitmap.LoadFromStream(stream); stream.Clear; stream.Free; end; end;
Π ΡΠ΅ΠΊΡΡΠ΅ Π»ΠΈΡΡΠΈΠ½Π³Π° 8 ΡΠΎΠ·Π΄Π°Π½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², ΠΏΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΡΠ½ΡΡΡ Π΅Π³ΠΎ Π½Π΅Ρ ΡΠΌΡΡΠ»Π°. ΠΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ Π»ΠΈΡΡ Π½Π° ΡΠΎΠΌ, Π·Π°ΡΠ΅ΠΌ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ TForm1.Timer1Timer ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΡΠ΅ Π΄Π΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΆΠ°ΡΠΈΠ΅ (Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΡΠ°Π½Π° Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° imgScreen ) Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΠ½ΡΡΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½Π°. ΠΡΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΡΠ΅ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΡΠ΅ΡΡΡΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΡΠΆΠ°ΡΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΡΠΆΠ΅, ΡΠ΅ΠΌ ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Image Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠ»ΠΈ ΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΆΠ°ΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ° Π½Π° ΡΠ΅ΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΡΠΊΡΠ°Π½Π°, Π° Π²ΡΡ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΡΠΆΠ°ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΡΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ imgScreen (ΡΠΎ Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ°ΡΠΈΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°). ΠΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠΊΡΠ°Π½Π° Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° (ΠΈΠ»ΠΈ ΠΏΡΠΈ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠΈ ΡΡΠ°Π·Ρ Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°ΠΌΠΈ) ΠΌΠ°ΡΠΈΠ½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠΎΡΠ½Π°Ρ, ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠ°ΡΡ Π²Π΅ΡΡΠΌΠ° ΠΎΡΡΡΠΈΠΌΠΎ "ΡΠΎΡΠΌΠΎΠ·ΠΈΡΡ". ΠΠ°ΡΠ΅ΡΡΠ²ΠΎ ΡΠΆΠ°ΡΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΌ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ° ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΡ Ρ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅ (Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΡΠΈΠ½Π° ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ°Π»ΠΎΠΌΠΎΡΠ½ΠΎΠΉ).
ΠΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ . ΠΡΠΏΠΎΠ»Π½Π΅Π½ Π½Π° Delphi 7.
Π Π°Π· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅Π΅, ΡΠΎ Ρ ΡΠ΅ΡΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΠ MS Jet 4.0 (ΠΏΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ ΠΠ MS Access). ΠΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ·Π²Π°Π½ΠΎ ΡΠ΅ΠΌ ΡΡΠΎ Jet (ΠΏΡΠΎΡΡ Π½Π΅ ΠΏΡΡΠ°ΡΡ Ρ MS Access) ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠΌ ΠΈ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ MS Windows (ΡΠΎ Π±ΠΈΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΡΠ°ΠΌ Access). ΠΠ° ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΠ ΠΎΡΠ΅Π½Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎΠΉ, ΠΈ ΡΠ΄ΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΡΡΡ ΡΠΈΠΏΠΎΠ² ΠΏΠΎΠ»Π΅ΠΉ Π΄Π»Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΡ ΡΠ°ΠΌΡΡ ΠΈΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΡ ΠΆΠ΅Π»Π°Π½ΠΈΠΉ ΠΏΡΠΈ Ρ ΡΠ°Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΡΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΡ ΠΠ, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ Test ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ Π΅Π΅ Π² ΠΏΠ°ΠΏΠΊΠ΅ C:\ClientServer\Server\Data (ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΠ Π² ΠΠΊΡΠ΅ΡΠ΅ Ρ, ΠΏΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ, ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ ΠΎΠΏΡΡΠΊΠ°Ρ, ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡ - Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π½Π°ΡΡ Π±Π°Π·Ρ).
1. Π’Π°Π±Π»ΠΈΡΠ° ΠΏΠ΅ΡΠ²Π°Ρ, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ First (Π½Ρ Π½Π΅ Π»ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Ρ!)
2. Π’Π°Π±Π»ΠΈΡΠ° Π²ΡΠΎΡΠ°Ρ, Π° Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ ΡΠΆΠ΅ ΠΏΠΎ Ρ ΠΈΡΡΠΎΠΌΡ - Second
ΠΡ Π²ΠΎΡ, ΠΊΠ°ΠΊ Π±Ρ, Ρ Π±Π°Π·ΠΎΠΉ ΠΈ Π²ΡΠ΅.
2. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° |
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ Π΅Π³ΠΎ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Server Π² ΠΏΠ°ΠΏΠΊΠ΅ C:\ClientServer\Server. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Remote Data Module Ρ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Multitier ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠ°ΡΠΈΡ (Π ΠΈΡ. 1).
ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ RDM ΠΌΠ°ΡΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ - ΡΠ°ΠΌ Π²Π²Π΅Π΄Π΅ΠΌ ΠΈΠΌΡ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° "Test".
ΠΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΡΠ°Π²ΠΈΠΌ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠΎΡΠ»Π΅ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ "ΠΠΊ" Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΡΠΎΡΠΌΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΌΡ Π΄Π°ΡΠ° ΠΌΠΎΠ΄ΡΠ»Ρ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Test. Π‘ΠΎΡ ΡΠ°Π½ΠΈΠΌ Π΅Π΅ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ RDMFrm.pas .
ΠΡΠ»ΠΎΠΆΠΈΠΌ Π½Π° Π½Π΅Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ADOConnection (ΠΎΠ΄Π½Π° ΡΡΡΠΊΠ°), ADOTable ΠΈ DataSetProvider (ΠΏΠΎ Π΄Π²Π΅ ΡΡΡΠΊΠΈ). ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ADOTable ΠΈ DataSetProvider ΠΎΠ±Π·ΠΎΠ²Π΅ΠΌ - adotFirst, adotSecond, dspFirst ΠΈ dspSecond ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΌΡ ΠΊΠ»ΠΈΠΊΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ADOConnection Π²ΡΠ²Π°Π»ΠΈΡΡΡ ΠΌΠ°ΡΡΠ΅Ρ Connection String. ΠΡΠ±Π΅ΡΠ°Π΅ΠΌ ΠΏΡΠ½ΠΊΡ "Use Connection String" ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΎΡΠΊΡ Build. Π ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ "Π‘Π²ΠΎΠΉΡΡΠ²Π° ΡΠ²ΡΠ·ΠΈ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ" Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΠΏΡΠ½ΠΊΡ "Microsoft Jet 4.0 OLE DB Provider" ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ "ΠΠ°Π»Π΅Π΅". ΠΠ° Π²Π»Π°Π΄ΠΊΠ΅ "ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅" Π²Π²Π΅Π΄Π΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΠ, Π½Π°ΠΆΠΌΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΎΡΠΊΡ "ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅" ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π·Π°ΠΊΡΠΎΠ΅ΠΌ ΠΌΠ°ΡΡΠ΅Ρ ΠΏΡΡΠ΅ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΠ. ΠΡΠ΅ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ADOConnection ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π΅ΡΡΡ LoginPrompt, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π² False ΠΈ Connected - True. Π£ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅ΡΠΎΠ² ADOTable ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Connection ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ°Π²Π½ΡΠΌ ADOConnection ΠΏΡΡΠ΅ΠΌ Π²ΡΠ±ΠΎΡΠ° ΠΈΠ· Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ°. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ TableName ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π² First ΠΈ Second ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²Π΅Π½Π½ΠΎ. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ CursorType - ctDynamic, ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ TableDirect - True. ΠΡΠ·Π²Π°ΡΡ FieldsEditor ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΠ΄Π° Π²ΡΠ΅ ΠΏΠΎΠ»Ρ.
Π£ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² DataSetProvider:ΠΠΎΡ Π½Π° ΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎΠ³ΠΎ MIDAS ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΠΌ.
Π§ΡΠΎΠ±Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²Π΅Ρ Π² ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ΅ DCOM Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ /regserver - Server.exe /regserver.
Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΡΠΈΡ
, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π‘ΠΎΠΊΠ΅ΡΠ‘Π΅ΡΠ²Π΅Ρ ΠΎΡ ΠΠΎΡΠ»Π°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ Delphi?/Bin/scktsvr.exe. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠ³ Π²ΠΈΠ΄Π΅ΡΡ ΡΠ΅ΡΠ²Π΅Ρ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ scktsvr.exe (Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Win NT/w2k/XP ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ»ΡΠΆΠ±Ρ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ scktsvr.exe /install)
2.2. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ Π΅Π³ΠΎ Π² ΠΏΠ°ΠΏΠΊΠ΅ C:\ClientServer\Client ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Client. Π Π°Π·ΠΌΠ΅ΡΡΠΈΠΌ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ ΡΠΎΡΠΌΠ΅ ΠΏΠΎ Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ClientDataSet(ΠΎΠ±Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ cdsFirst, cdsSecond), DataSource(ΠΎΠ±Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ dsFirst, dsSecond), DBGrid(ΠΎΠ±Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ dbgFirst, dbgSecond) ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ SocetConnection.
SocetConnectionΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΡΠΎ ΠΏΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Connected Π² True, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅Ρ.
ClientDataSetΠΠ°ΠΏΡΡΡΠΈΠΌ Π Π΅Π΄Π°ΠΊΡΠΎΡ ΠΠΎΠ»Π΅ΠΉ (Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΊΠ»ΠΈΠΊ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ) ΠΈ Π·Π°Π½Π΅ΡΠ΅ΠΌ ΡΡΠ΄Π° Π²ΡΠ΅ ΠΏΠΎΠ»Ρ. ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ClientDataSet Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ sdsAfterPost
Π ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΠΌ Π΅Π³ΠΎ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠ±ΡΡΠΈΡ AfterPost ΠΎΠ±ΠΎΠΈΡ ClientDataSet"ΠΎΠ².DataSource
|
DBGrid
|
ΠΠ°ΠΏΡΡΡΠΈΠΌ Π Π΅Π΄Π°ΠΊΡΠΎΡ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ (Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΊΠ»ΠΈΠΊ ΠΏΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ) ΠΈ Π·Π°Π½Π΅ΡΠ΅ΠΌ ΡΡΠ΄Π° Π²ΡΠ΅ ΠΏΠΎΠ»Ρ.
ΠΠΎΠ»ΠΎΠΆΠΈΠΌ Π½Π° ΡΠΎΡΠΌΠ΅ Π²ΠΎΠ·Π»Π΅ ΠΡΠΈΠ΄ΠΎΠ² ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ ΠΈ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ onClick Π·Π°ΠΏΠΈΡΠ΅ΠΌ.