ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Исходный код программыunit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, StdCtrls, IdSocketHandle, ExtCtrls, XPMan, ComCtrls,ShellAPI;
type TForm1 = class(TForm) IdUDPClient1: TIdUDPClient; IdUDPServer1: TIdUDPServer; Memo1: TMemo; Edit1: TEdit; Timer1: TTimer; Button3: TButton; Button4: TButton; Memo2: TMemo; Label1: TLabel; Button5: TButton; Timer2: TTimer; Button1: TButton; Button2: TButton; XPManifest1: TXPManifest; Button6: TButton; procedure Button1Click(Sender: TObject); procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); procedure Timer1Timer(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure Button6Click(Sender: TObject);
private { Private declarations } public { Public declarations } end;
var Form1: TForm1; var v,ip:string; n:integer; r:boolean; //ожидание сообщения rx:boolean;//ожидания Х ro:boolean;//ожидание О r1:boolean;//ожидание текстового сообщения r2:boolean;//ожидание первого сообщения после установленя связи implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);//Процедура выбора игры крестиками begin if Edit1.Text='' then begin showmessage('Введите имя'); exit; end; begin r:=true; ro:=true; Timer1.Enabled:=true; Timer2.Enabled:=true; Button2.Visible:=False; end; end; procedure TForm1.Button3Click(Sender: TObject);// если нажали "ДА" begin IdUDPClient1.Host:=ip;// запоминаем ip-адрес соперника Button1.Visible:=False; Button2.Visible:=False; Button5.Visible:=True; Button3.Visible:=False; Button4.Visible:=False; Label1.Visible:=False; Memo2.Visible:=False; messageDLG('Соединение установлено',mtInformation,[mbOk],0); Edit1.Clear; end;
procedure TForm1.Button4Click(Sender: TObject);// если нажали "НЕТ" begin IdUDPClient1.BroadcastEnabled:=true; Timer1.Enabled:=true; Button3.Visible:=False; Button4.Visible:=False; Memo2.Visible:=False; Label1.Visible:=False; end;
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream; ABinding: TIdSocketHandle); var s1:string; begin if r=true then begin n:=AData.size;//размер принятого сообщения Setlength(v,n); AData.Read(v[1],n); if(ro)and(v[1]=chr($02)) then //если ожидаем О и получили О begin s1:=Copy(v,2,n-1);//имя с кем хочешь играть Memo2.Lines.Add(s1); ip:=Abinding.PeerIP; IdUDPClient1.Host:=ip; r1:=true; ro:=false;// отключаем ожидание О IdUDPClient1.BroadcastEnabled:=false; Timer2.Enabled:=false;//выключаем минутный таймер Button3.Visible:=True; Button4.Visible:=True; Memo2.Visible:=True; Label1.Visible:=True; end else if (rx)and(v[1]=chr($01)) then //ожидание Х и получили Х begin s1:=Copy(v,2,n-1);//имя с кем хочешь играть Memo2.Lines.Add(s1); Button3.Visible:=True; Button4.Visible:=True; Memo2.Visible:=True; Label1.Visible:=True; ip:=ABinding.Peerip; IdUDPClient1.Host:=ip; IdUDPClient1.Send(Chr($02)+Edit1.Text);//Отправка крестику имя нолика r:=true; //Ожидание текстового сообщения включено rx:=false;//Ожидание "Х" выключено r2:=true;//Ожидание первого сообщения после установления диалога включено end; if (r1)and(ABinding.PeerIP=ip) then begin if r2 then begin r2:=false; end; end; if (v[1]<>Chr($01))and(v[1]<>Chr($02))then //Если принятое сообщение не является запросом begin Memo1.Lines.Add(v+s1); Timer2.Enabled:=false; end; end; end; procedure TForm1.Timer1Timer(Sender: TObject);//Процедура для секундного таймера begin IdUDPClient1.Host:='255.255.255.255'; IdUDPClient1.Send(Chr($01)+Edit1.Text); //Отправка крестика и имени end;
procedure TForm1.Button5Click(Sender: TObject);//Процедура нажатия кнопки "Отправить" var m:string; begin Timer2.Enabled:=true; m:=Edit1.Text; IdUDPClient1.Host:=ip; IdUDPClient1.Send(m); Memo1.Lines.Add(m); Edit1.Clear; end;
procedure TForm1.Button2Click(Sender: TObject);//Процедура выбора игры ноликами begin if Edit1.Text='' then begin showmessage('Введите имя'); exit; end; begin Timer2.Enabled:=true; Button1.Visible:=False; r:=true; rx:=true; end; end; procedure TForm1.FormCreate(Sender: TObject); //Процедура создания формы begin ip:=''; r:=false; ro:=false; rx:=false; Timer1.Enabled:=false; Timer2.Enabled:=false; Button3.Visible:=false; Button4.Visible:=false; Memo2.Visible:=false; Label1.Visible:=false; end; procedure TForm1.Timer2Timer(Sender: TObject);//Процедура для минутного таймера begin Timer2.Enabled:=false; Timer1.Enabled:=false; messageDLG('Нет ответа',mtInformation,[mbOk],0); r:=false; end;
procedure TForm1.Button6Click(Sender: TObject);//рестарт программы begin if MessageBox(Handle,'Перезапустить программу?','Вопрос',MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2)=IDYES then begin ShellExecute (0, 'open', PChar(Application.ExeName), nil, nil, SW_SHOWNORMAL); {Halt}PostQuitMessage(0); end; end;
end. Блок – схемы Процедура принятия сообщений Процедура нажатия «Х»
Процедура TForm1.Timer1Timer Процедура отправки сообщений Не нашли, что искали? Воспользуйтесь поиском:
|