unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Grids, StdCtrls, ExtCtrls, Buttons, ImgList, Menus, Psock, NMsmtp,
  ScktComp, ComCtrls, ToolWin, shellApI, registry;

type Nd = record
          q : String;
          qnum : integer;
          drive : String;
          Status : string;
          end;

     Word2 = record
             Value : String;
             Sost  : Integer;
             end;
     TTableChar = record
                  Char : String;
                  index : integer;
                  end;
  THeader = record
           Id : Char;
           SzAlphabet : integer;
           SzComHeight : integer;
           SzComWidth : integer;
           end;
  TBlock = record
          i,j : Byte;
          Info : Nd
          end;
  TLoader = record
            Name : String;
            FilePath : TFileName;
            index : integer;
            end;

type

  TForm1 = class(TForm)
    Panel1: TPanel;
    sg1: TStringGrid;
    Label1: TLabel;
    Panel2: TPanel;
    sg2: TStringGrid;
    Panel4: TPanel;
    Label2: TLabel;
    Edit1: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit3: TEdit;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolbarImages: TImageList;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton9: TToolButton;
    MainMenu1: TMainMenu;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    N16: TMenuItem;
    N1: TMenuItem;
    N17: TMenuItem;
    N18: TMenuItem;
    EMail1: TMenuItem;
    ToolButton10: TToolButton;
    N01101: TMenuItem;
    fxx11: TMenuItem;
    N19: TMenuItem;
    Panel3: TPanel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    PrintDialog1: TPrintDialog;
    Memo1: TRichEdit;
    Label3: TLabel;
    N31: TMenuItem;
    N20: TMenuItem;
    N21: TMenuItem;
    N22: TMenuItem;
    N23: TMenuItem;
    N24: TMenuItem;
    wwwlogicru1: TMenuItem;
    ServerSocket1: TServerSocket;
    Splitter1: TSplitter;
    Splitter2: TSplitter;
    N25: TMenuItem;
    h1: TMenuItem;
    StatusBar1: TStatusBar;
    N26: TMenuItem;
    N27: TMenuItem;
    N28: TMenuItem;
    N271: TMenuItem;
    NMSMTP1: TNMSMTP;
    NMSMTP3: TNMSMTP;
    procedure FormCreate(Sender: TObject);
    function GetData(P : String) : nd;
    procedure SaveToFile(Const FileName : String);
    procedure OpenFromFile(Const FileName : String);
    function FindIndexSost : integer;
    function FindIndexChar(p : String) : integer;
    function FindIndexArray : integer;
    procedure ClearArray;
    procedure NetDetect;
    procedure PrintWord2;
    procedure TotalWork;
    procedure ChangeWord(Resource : Nd; indexSost : integer);
    procedure sg1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    function GetInfo(Data : String) : Nd;
    procedure fxx21Click(Sender: TObject);
    procedure d1Click(Sender: TObject);
    procedure Image5Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure ooooooooooo1Click(Sender: TObject);
    procedure EMail1Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure ToolButton6Click(Sender: TObject);
    procedure ToolButton7Click(Sender: TObject);
    procedure ToolButton8Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N24Click(Sender: TObject);
    procedure sg1SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure wwwlogicru1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure N27Click(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure N28Click(Sender: TObject);
    procedure N271Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Aw : array[0..60,0..60] of Nd;
  AWord : array[1..60] of Word2;
  TableChar : array[1..20] of TTableChar;
  TableSost : array[1..60] of TTableChar;
  Form1: TForm1;
  NameMachine : String;
  FlagNext, FlagTotal : Boolean;
  SzComHeight, SzComWidth, SzAlphHeight, SzWord : Byte;
  NetVariantGetInfo : String;
  Loader : array[1..60] of TLoader;
  Connectvar : Boolean;



implementation

{$R *.DFM}

function TForm1.GetInfo(Data : String) : Nd;
var
 i,j : integer;
 St : String;
begin
St := '';
for i := 2 to length(Data) do
  begin
  if Data[i] = '-' then
     begin
     j := i;
     Break;
     end;
  St := St + Data[i];
  end;
GetInfo.QNum := strtoint(St);
st := '';
for i := j+1 to length(Data) do
  begin
  if (UpCase(Data[i]) = 'S') or
     (UpCase(Data[i]) = 'L') or
     (UpCase(Data[i]) = 'R') then Break;
      St := St + data[i];
  end;
GetInfo.q := 'q';
GetInfo.drive := st;
GetInfo.Status := Data[length(Data)];
end;

procedure TForm1.OpenFromFile(Const FileName : String);
var
i,m,j : integer;
FirstBlock : THeader;
St : String;
Block : TBlock;
Dta : TextFile;
begin
AssignFile(Dta,FileName);
Reset(Dta);
Readln(Dta,NameMachine);
Readln(Dta,SzAlphHeight);
Readln(Dta,SzComHeight);
Readln(Dta,SzComWidth);

for i := 1 to SzAlphHeight do
  begin
  Readln(Dta,St);
  Sg1.Cells[1,i] := St;
  end;

for i := 1 to SzComHeight do
  for j := 1 to SzComWidth do
    begin
    ReadLn(Dta,st);
    sg2.cells[j,i] := St;
    end;
sg1.RowCount := SzAlphHeight+1;
sg2.RowCount := SzComHeight+1;
sg2.ColCount := SzComWidth+1;
label3.Caption := NameMachine;

CloseFile(Dta);

end;


procedure TForm1.SaveToFile(Const FileName : String);
var
i,m,j : integer;
Dtb : File;
Dta : TextFile;
FirstBlock : THeader;
Block : TBlock;
St : String;

begin

SzComHeight := sg2.RowCount-1;
SzComWidth := sg2.ColCount-1;
SzAlphHeight := sg1.RowCount-1;

AssignFile(Dta,FileName);
ReWrite(Dta);
Writeln(Dta,NameMachine);
WriteLn(Dta,SzAlphHeight);
WriteLn(Dta,SzComHeight);
WriteLn(Dta,SzComWidth);
for i := 1 to SzAlphHeight do
  WriteLn(Dta,Sg1.Cells[1,i]);
for i := 1 to SzComHeight do
  for j := 1 to SzComWidth do
    WriteLn(Dta,sg2.cells[j,i]);

CloseFile(Dta);


end;

procedure TForm1.FormCreate(Sender: TObject);
var
  reg : TRegistry;
  F : TSearchRec;
  Dta : TextFile;
  i,j : integer;
  st : string;
  Men : TMenuItem;
  hLib : THandle;
begin
reg := TRegistry.Create;

reg.RootKey := HKEY_LOCAL_MACHINE;

reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion',false);
St := reg.ReadString('SystemRoot');

reg.CloseKey;

sg1.Cells[1,0] := 'çнÀченÈе';
sg1.cells[0,1] := '1';
sg2.cells[0,1] := '1';
SpeedButton1.Enabled := false;
SpeedButton2.Enabled := false;
i := 1;

// ДÎбÀвËенÈе нÀÇвÀнÈе мÀшÈн в СÏÈсÎÊ
if FindFirst('mch\*.mch',faAnyFile,f) = 0 then
begin
 repeat
  AssignFile(Dta,'mch\'+f.Name);
  Reset(dta);
  Readln(dta,Loader[i].Name);
  CloseFile(dta);

  Loader[i].FilePath := f.Name;
  Loader[i].Index := i;
  inc(i);
 until FindNext(f) <> 0;
dec(i);
for j := 0 to 27 do
MainMenu1.Items[1].items[0].items[3].items[j].Visible := false;
for j := 0 to i-1 do
begin
if j = 27 then Break;
MainMenu1.Items[1].items[0].items[3].items[j].Caption := Loader[j+1].Name;
MainMenu1.Items[1].items[0].items[3].items[j].ImageIndex := 17;
MainMenu1.Items[1].items[0].items[3].items[j].Visible := true;
end;
end;
//**********************************

// ïрÎверÊÀ ÊËючÀ реестрÀ
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;

reg.OpenKey('\SOFTWARE\KapXimka',false);
st := reg.ReadString('ADMIN');
reg.CloseKey;

if st = '1' then NetDetect;


end;

procedure TForm1.NetDetect;
begin
MainMenu1.Items[3].Visible := true;
end;

procedure TForm1.sg1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
i : integer;
begin
if Key = vk_Down then
  begin
  i := sg1.row;
  Sg1.Cells[0,i+1] := inttostr(i+1);
  if i+1 = sg1.RowCount then
    if Trim(sg1.Cells[1,i]) <> '' then sg1.RowCount := sg1.RowCount + 1;
  end;

if Key = vk_Up then
  begin
  i := sg1.row;
  if (Trim(sg1.cells[1,i]) = '') and (i <> 1) then
  sg1.RowCount := sg1.RowCount - 1;
  end;
end;

function TForm1.GetData(P : String) : Nd;
var
i : integer;
flag1, flag2,flag3 : boolean;
st1,st : String;
begin
GetData.q := p[1];
flag1 := false;
Flag2 := false;
Flag3 := False;
i := 3;
St := ''; St1 := '';

while i <= Length(P) do
 begin
 if flag3 = false then
   begin
   if (Flag1 = false) and (P[i] <> ')') then St1 := St1 + P[i]
   else if (P[i] = ')') then begin
        Flag1 := true;
        GetData.qnum := strtoint(St1);
        i := i + 2;
        end;
   if (flag1 = true) and (flag2 = false) and (P[i] <> '(') then  St := St + P[i]
   else if (P[i] = '(') then begin
        Flag2 := true;
        GetData.drive := St;
        end;
   if (flag2 = true) then
     begin
     i := i +1;
     GetData.Status := p[i];
     flag3 := true;
     Break;
     end;
   inc(i)
   end;
 end;

end;

procedure TForm1.TotalWork;
var
  s : string;
  p : Nd;
  W : Word2;
  Res : Nd;
  St : String;
  i,j : integer;
  indArray : integer;
begin
memo1.Clear;
ClearArray;
SzComHeight := sg2.RowCount-1;
SzComWidth := sg2.ColCount-1;
SzAlphHeight := sg1.RowCount-1;


p.q := 'q'; p.qnum := 0; p.drive := '0'; p.Status := 'L';
for i := 1 to sg2.ColCount-1 do
  for j := 1 to sg2.RowCount-1 do
   begin
   St := sg2.Cells[i,j];
   if St <> '' then Aw[i,j] := GetInfo(St) else Aw[i,j] := p;
   end;





for i := 1 to sg1.RowCount-1 do
 begin
 TableChar[i].Char := sg1.Cells[1,i];
 TableChar[i].index := i;
 end;

for i := SzWord to 60 do AWord[i].Sost := -1;

//*************************************************
// AWord - стрÎÊÀ где нÀхÎдÈтÜся сËÎвÎ
// TableChar - àËфÀвÈт
// Aw - тÀбËÈцÀ где нÀхÎдÈтÜся сÀм ÀËгÎрÈтм ТÜюрÈнгÀ
// FindIndexSost - ÏÎÈсÊ нÎмерÀ сÎстÎянÈя ÀÊстÈвнÎгÎ
// FindIndexArray - ÏÎÈсÊ нÎмерÀ сÎстÎянÈя ÀÊстÈвнÎгÎ в мÀссÈве
// q(0-этÎ FindIndexSost)-0(S)
//  4  /  5 /  1  /
//  -1 /  1 /  -1 /  - FindIndexArray
//*************************************************

PrintWord2;
i := FindIndexSost;
W.Sost := i;
while W.Sost <> 0 do
  begin
  i := FindIndexSost;
  indArray := FindIndexArray;
  j := FindIndexChar(AWord[indArray].Value);
  Res := Aw[j,i];
  w.Sost := Res.qnum;
  ChangeWord(Res,indArray);
  PrintWord2;
  end;
St := '';
for j := 1 to 60 do  St := St + AWord[j].Value;
Memo1.lines.add(st);
NetVariantGetInfo := st;
//*************************************************
end;

//*************************************************
// function : Functoin for changing word on rules.
// Name: ChangeWord
//*************************************************
procedure TForm1.ChangeWord(Resource : Nd; indexSost : integer);
var
 B : array[1..20] of Word2;
 i : integer;
begin
if Resource.Status = 'S' then AWord[indexSost].Sost := Resource.qnum;
if Resource.Status = 'L' then
  begin
  // ДÎбÀвËенÈе 0 с сÎстÎянÈем -1 нÀ Ëевую ÏÎÇÈцÈю
  // È сдвÈг всегÎ мÀссÈвÀ вÏрÀвÎ нÀ 1 еденÈцу
  if indexSost = 1 then //
    begin
    //********************************
    AWord[indexSost].Sost := -1;
    for i := 1 to 20 do
    begin
    b[i].Value := AWord[i].Value;
    b[i].Sost := AWord[i].Sost;
    end;
    for i := 2 to 20 do
     begin
     AWord[i].Value := b[i-1].Value;
     AWord[i].Sost := AWord[i].Sost;
     end;
    //*********************************
     indexSost := indexSost +1;
    end else AWord[indexSost].Sost := -1;
  AWord[indexSost-1].Sost := Resource.qnum;
  end;

  if Resource.Status = 'R' then
  begin
  AWord[indexSost].Sost := -1;
  if AWord[indexSost+1].Value = '' then AWord[indexSost+1].Value := '0';
  AWord[indexSost+1].Sost := Resource.qnum;
  end;
AWord[indexSost].Value := Resource.Drive;
end;

//*************************************************
procedure TForm1.PrintWord2;
var
 i : integer;
 St : String;
begin
St := '';
for i :=  1 to 60 do
  begin
  if AWord[i].Sost <> -1 then St := St + 'q('+inttostr(AWord[i].Sost)+')' + AWord[i].Value else
  St := St + AWord[i].Value;
  end;
memo1.Lines.Add(st);
end;

function TForm1.FindIndexChar(p : String) : integer;
var i : integer;
begin
for i := 1 to 20 do
  if TableChar[i].Char = p then
    begin
    FindIndexChar := i;
    Break;
    end;
end;

function TForm1.FindIndexSost : integer;
var
i : integer;
begin
for i := 1 to 60 do
  if AWord[i].Sost <> -1 then
   begin
   FindIndexSost := AWord[i].Sost;
   Break;
   end;
end;

function TForm1.FindIndexArray : integer;
var
i : integer;
begin
for i := 1 to 60 do
  if AWord[i].Sost <> -1 then
   begin
   FindIndexArray := i;
   Break;
   end;
end;


procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = vk_f9 then Image5Click(Sender);
end;

procedure TForm1.ClearArray;
var i,j : integer;
begin
for i := 1 to 60 do
  for j := 1 to 60 do
    begin
    Aw[i,j].qnum := 0;
    Aw[i,j].drive := '';
    Aw[i,j].Status := '';
    end;


for i := 1 to 60 do
  begin
  TableSost[i].Char := '';
  TableSost[i].index := 0;
  end;

for i := 1 to 20 do
  begin
  TableChar[i].Char := '';
  TableSost[i].index := 0;
  end;
end;

procedure TForm1.fxx21Click(Sender: TObject);
begin
sg2.Cells[1,1] := 'q2-1L';
sg2.Cells[2,1] := 'q1-1R';
sg2.Cells[1,2] := 'q3-1R';
sg2.Cells[2,2] := 'q2-1R';
sg2.Cells[1,3] := 'q0-0S';
sg2.Cells[2,3] := 'q0-1S';

sg1.Cells[1,1] := '0';
sg1.Cells[1,2] := '1';
sg1.RowCount := 3;
Sg2.RowCount := 4; Sg2.ColCOunt := 3;
edit1.text := '01110';
end;

procedure TForm1.d1Click(Sender: TObject);
begin
sg2.Cells[1,1] := 'q2-0R';
sg2.Cells[1,2] := 'q0-0S';
sg2.Cells[2,2] := 'q2-0R';

sg1.Cells[1,1] := '0';
sg1.Cells[1,2] := '1';

sg1.RowCount := 3;
Sg2.RowCount := 3; Sg2.ColCOunt := 3;
edit1.text := '01110';

end;

procedure TForm1.Image5Click(Sender: TObject);
var
 st : string;
 i : integer;
begin
if edit1.Text <> '' then
begin
for i := 1 to 60 do
  begin
  AWord[i].Value := '';
  AWord[i].Sost := 0;
  end;     
SzWord := length(trim(edit1.text));

for i := 1 to length(trim(edit1.text)) do
 begin
 AWord[i].Value := edit1.text[i];
 if strtoint(edit3.Text) = i then  AWord[i].Sost := 1 else AWord[i].Sost := -1;
 end;

SpeedButton1.Enabled := true;
SpeedButton2.Enabled := true;
TotalWork;
end
else ShowMessage('ВведÈте ÏрÎверÎчнÎе сËÎвÎ');
end;

procedure TForm1.N1Click(Sender: TObject);
begin
MessageDlg('ïрÎгрÀммÀ нÀÏÈсÀнÀ êÀÏустнÈÊÎвÛм М. (2001 ÀÏреËÜ). гр. ïМè-001(НФè êемГУ), НÎвÎÊуÇнецÊ ',mtConfirmation,[mbOK],0);
end;

procedure TForm1.ooooooooooo1Click(Sender: TObject);
begin
sg2.Cells[1,1] := 'q2-0R';
sg2.Cells[1,2] := 'q3-0L';
sg2.Cells[1,3] := 'q1-1L';
sg2.Cells[1,4] := 'q0-0S';

sg2.Cells[2,1] := 'q2-1R';
sg2.Cells[2,2] := 'q4-0R';
sg2.Cells[2,3] := 'q0-1S';
sg2.Cells[2,4] := 'q2-0S';

sg1.Cells[1,1] := '0';
sg1.Cells[1,2] := '1';

sg1.RowCount := 3;
Sg2.RowCount := 5; Sg2.ColCOunt := 3;
edit1.text := '01110';

end;

procedure TForm1.EMail1Click(Sender: TObject);
begin
ShellExecute(handle,'open','mailto:ximka@yandex.ru',nil,nil,SW_SHOW);
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
if OpenDialog1.Execute then OpenFromFile(OpenDialog1.FileName);
end;

procedure TForm1.ToolButton3Click(Sender: TObject);
begin
IF SaveDialog1.Execute then
  SaveToFile(SaveDialog1.FileName+'.mch');

end;

procedure TForm1.ToolButton1Click(Sender: TObject);
var
 i,j : integer;
begin
// èнтерфеÉснÛе устÀнÎвÊÈ
SpeedButton1.Enabled := false;
SpeedButton2.Enabled := false;
//*********************************
for i := 1 to sg2.RowCount-1 do
 for j := 1 to sg2.ColCount-1 do
   sg2.cells[j,i] := '';
sg2.RowCount := 2; sg2.ColCount := 2;

for i := 1 to sg1.RowCount-1 do
 for j := 0 to sg1.ColCount-1 do
   sg1.cells[j,i] := '';
sg1.RowCount := 2; sg1.ColCount := 2;

edit1.Text := '';
memo1.clear;
ClearArray;
end;

procedure TForm1.ToolButton5Click(Sender: TObject);
var i : byte;
begin
i := sg2.Col;
  if (Trim(sg2.Cols[i].Text) = '') and (i <> 1) then sg2.ColCount := sg2.ColCount - 1;
end;

procedure TForm1.ToolButton6Click(Sender: TObject);
begin
sg2.RowCount := sg2.RowCount -1;
end;

procedure TForm1.ToolButton7Click(Sender: TObject);
begin
sg2.RowCount := sg2.RowCount +1;
sg2.Cells[0,Sg2.RowCount] := inttostr(Sg2.RowCount-1);
end;

procedure TForm1.ToolButton8Click(Sender: TObject);
var i : byte;
begin
 i := sg2.Col;
  if i = sg2.ColCount-1 then
   if sg2.ColCount <> sg1.RowCount then
    begin
    sg2.ColCount := sg2.ColCount + 1;
    end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
SaveDialog1.Filter := 'Text File (*.txt)|*.txt|All file (*.*)|*.*';
if SaveDialog1.Execute then Memo1.Lines.SaveToFile(SaveDialog1.FileName+'.txt');
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
Memo1.Lines.Insert(0,'ïрÎцесс рÀбÎтÛ мÀшÈнÛ ТÜюрÈнгÀ');
if PrintDialog1.Execute then
   Memo1.Print(PrintDialog1.GetNamePath);
Memo1.Lines.Delete(0);
end;

procedure TForm1.N8Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N24Click(Sender: TObject);

begin
InputQuery('ВведÈте нÀÇвÀнÈе мÀшÈнÛ','МÀшÈнÀ ТÜюрÈнгÀ',NameMachine);
Label3.Caption := NameMachine;
end;

procedure TForm1.sg1SetEditText(Sender: TObject; ACol, ARow: Integer;
  const Value: String);
begin
sg2.Cells[ARow,0] := Value;
end;

procedure TForm1.wwwlogicru1Click(Sender: TObject);
begin
ShellExecute(handle,'open','www.logic.ru',nil,nil,SW_SHOW);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
//ShowWindow(Application.Handle,SW_HIDE);
end;

procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
 st : String;
 F : TStringStream;
 i : integer;
begin
St := Socket.ReceiveText;
if St <> '' then
begin
for i := 1 to 60 do
  begin
  AWord[i].Value := '';
  AWord[i].Sost := 0;
  end;     
SzWord := Length(st);
for i := 1 to Length(st) do
  begin
  AWord[i].Value := St[i];
  AWord[i].Sost := -1;
  end;
AWord[1].Sost := 1;
TotalWork;
st := NetVariantGetInfo;

F := TStringStream.Create(NetVariantGetInfo);
socket.SendText(NetVariantGetInfo);
Socket.SendStream(f);
end;

end;

procedure TForm1.N27Click(Sender: TObject);
begin
ServerSocket1.active := true;
StatusBar1.Panels[0].Text := 'Сервер рÀбÎтÀет';
StatusBar1.Panels[1].Text := 'êÎËÈчествÎ ÏÎдÊËюченÈÉ = 0';

end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
StatusBar1.Panels[1].Text := 'êÎËÈчествÎ ÏÎдÊËюченÈÉ = '+inttostr(ServerSocket1.Socket.ActiveConnections);
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
StatusBar1.Panels[1].Text := 'êÎËÈчествÎ ÏÎдÊËюченÈÉ = '+inttostr(ServerSocket1.Socket.ActiveConnections);
end;

procedure TForm1.N28Click(Sender: TObject);
begin
ServerSocket1.Active := false;
StatusBar1.Panels[0].Text := 'Сервер не рÀбÎтÀет';
StatusBar1.Panels[1].Text := '';

end;

procedure TForm1.N271Click(Sender: TObject);
var
 st : string;
begin
InputQuery('ВведÈте нÎмер ÏÎртÀ','МÀшÈнÀ ТÜюрÈнгÀ',St);
ServerSocket1.Port := strtoint(St);
MainMenu1.Items[3].Items[2].Caption := 'ïÎрт: '+st;
end;

end.