Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.15 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ScktComp, StdCtrls, IdBaseComponent, IdComponent,
  8. IdTCPConnection, IdTCPClient, ExtCtrls, IdException, Menus, Buttons, shellapi,
  9. jpeg;
  10.  
  11. type
  12. TfrmClient = class(TForm)
  13. GroupBox1: TGroupBox;
  14. txtMessage: TEdit;
  15. cmbSend: TButton;
  16. lstUsers: TListBox;
  17. GroupBox2: TGroupBox;
  18. txtServer: TEdit;
  19. Label1: TLabel;
  20. cmbConnect: TButton;
  21. txtUser: TEdit;
  22. Label2: TLabel;
  23. Label3: TLabel;
  24. TCPClient: TIdTCPClient;
  25. Timer1: TTimer;
  26. MainMenu1: TMainMenu;
  27. N1: TMenuItem;
  28. Label6: TLabel;
  29. N8: TMenuItem;
  30. N9: TMenuItem;
  31. GroupBox3: TGroupBox;
  32. Button2: TButton;
  33. Button1: TButton;
  34. Button3: TButton;
  35. Button4: TButton;
  36. Button5: TButton;
  37. Button7: TButton;
  38. Button8: TButton;
  39. Image1: TImage;
  40. N2: TMenuItem;
  41. N3: TMenuItem;
  42. N4: TMenuItem;
  43. N5: TMenuItem;
  44. N6: TMenuItem;
  45. N7: TMenuItem;
  46. N10: TMenuItem;
  47. GroupBox4: TGroupBox;
  48. txtChat: TMemo;
  49. Image2: TImage;
  50. Image3: TImage;
  51. N11: TMenuItem;
  52. N12: TMenuItem;
  53. N13: TMenuItem;
  54. N14: TMenuItem;
  55. N16: TMenuItem;
  56. N15: TMenuItem;
  57. N17: TMenuItem;
  58. N18: TMenuItem;
  59. N19: TMenuItem;
  60. N20: TMenuItem;
  61. procedure cmbConnectClick(Sender: TObject);
  62. procedure cmbSendClick(Sender: TObject);
  63. procedure lstUsersDblClick(Sender: TObject);
  64. procedure TCPClientConnected(Sender: TObject);
  65. procedure TCPClientDisconnected(Sender: TObject);
  66. procedure Timer1Timer(Sender: TObject);
  67. procedure N5Click(Sender: TObject);
  68. procedure N4Click(Sender: TObject);
  69. procedure N2Click(Sender: TObject);
  70. procedure N3Click(Sender: TObject);
  71. procedure N9Click(Sender: TObject);
  72. procedure Button2Click(Sender: TObject);
  73. procedure Button1Click(Sender: TObject);
  74. procedure Button3Click(Sender: TObject);
  75. procedure Button5Click(Sender: TObject);
  76. procedure Button4Click(Sender: TObject);
  77. procedure Button7Click(Sender: TObject);
  78. procedure Button6Click(Sender: TObject);
  79. procedure Button8Click(Sender: TObject);
  80. procedure N7Click(Sender: TObject);
  81. procedure Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
  82. Y: Integer);
  83. procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  84. Y: Integer);
  85. procedure Button8MouseMove(Sender: TObject; Shift: TShiftState; X,
  86. Y: Integer);
  87. procedure Button4MouseMove(Sender: TObject; Shift: TShiftState; X,
  88. Y: Integer);
  89. procedure Button5MouseMove(Sender: TObject; Shift: TShiftState; X,
  90. Y: Integer);
  91. procedure Button7MouseMove(Sender: TObject; Shift: TShiftState; X,
  92. Y: Integer);
  93. procedure Button3MouseMove(Sender: TObject; Shift: TShiftState; X,
  94. Y: Integer);
  95. procedure N6Click(Sender: TObject);
  96. procedure N10Click(Sender: TObject);
  97. procedure Edit1Change(Sender: TObject);
  98. procedure N12Click(Sender: TObject);
  99. procedure N13Click(Sender: TObject);
  100. procedure N14Click(Sender: TObject);
  101. procedure N15Click(Sender: TObject);
  102. procedure N16Click(Sender: TObject);
  103. procedure N17Click(Sender: TObject);
  104. procedure N18Click(Sender: TObject);
  105. procedure N20Click(Sender: TObject);
  106.  
  107.  
  108. private
  109. { Private declarations }
  110. public
  111. { Public declarations }
  112. end;
  113.  
  114. var
  115. frmClient: TfrmClient;
  116.  
  117. implementation
  118.  
  119. {Процедура осуществляет манипулиции при подключении к серверу}
  120. procedure Connect();
  121. begin
  122. with frmClient do
  123. begin
  124. cmbConnect.Caption := 'Отключиться';
  125. txtUser.Enabled := False;
  126. txtServer.Enabled := False;
  127.  
  128. Caption := 'Разговорник [' + txtUser.Text + ' подключен к '
  129. + txtServer.Text + ']';
  130.  
  131. lstUsers.Enabled := True;
  132. cmbSend.Enabled := True;
  133. txtMessage.Enabled := True;
  134. txtChat.Enabled := True;
  135. end;
  136. end;
  137.  
  138. {Процедура осуществляет манипуляции при отключении от сервера}
  139. procedure Disconnect();
  140. begin
  141. with frmClient do
  142. begin
  143. cmbConnect.Caption := 'Подключиться';
  144. txtUser.Enabled := True;
  145. txtServer.Enabled := True;
  146.  
  147. Caption := 'Разговорник';
  148.  
  149. lstUsers.Enabled := False;
  150. lstUsers.Clear;
  151. cmbSend.Enabled := False;
  152. txtMessage.Enabled := False;
  153. txtChat.Enabled := False;
  154. end;
  155. end;
  156.  
  157. {Процедура обрабатывает сообщение от севера}
  158. procedure ProcessMessage(strMessage: string);
  159. var
  160. strAction: string; //Тип сообщения (префикс сообщения)
  161. len: Integer; //Длина строки strAction
  162. begin
  163. //Определим тип сообщения и выполним соответствующие действия
  164. len := Pos(':', strMessage);
  165. strAction := Copy(strMessage,1,len-1);
  166. Delete(strMessage,1,len);
  167. if (strAction = 'ok') then
  168. begin
  169. //Регистрация пользователя завершена - можно отправлять сообщения
  170. Connect;
  171. end
  172. else if (strAction = 'error') then
  173. begin
  174. //Ошибка!!!
  175. frmClient.TCPClient.Disconnect;
  176. Disconnect;
  177. MessageDlg(strMessage, mtError, [mbOK], 0);
  178. end
  179. else if (strAction = 'adduser') then
  180. begin
  181. //К разговору присоединился новый пользователь
  182. frmClient.lstUsers.Items.Add(strMessage);
  183. end
  184. else if (strAction = 'deluser') then
  185. begin
  186. //Какой-то пользователь отсоединился
  187. frmClient.lstUsers.Items.Delete(
  188. frmClient.lstUsers.Items.IndexOf(strMessage));
  189. end
  190. else begin
  191. //Покажем принятое сообщение
  192. frmClient.txtChat.Lines.Add(strMessage);
  193. end;
  194. end;
  195.  
  196. {
  197. ******************************************************************************
  198. * Далее идут процедуры обработки сообщений *
  199. ******************************************************************************
  200. }
  201.  
  202. {$R *.dfm}
  203.  
  204. procedure TfrmClient.cmbConnectClick(Sender: TObject);
  205. begin
  206. if (cmbConnect.Caption = 'Подключиться') then
  207. begin
  208. //Проверим, чтобы были введены имя сервера и имя пользователя
  209. if (txtServer.Text = '')then
  210. begin
  211. MessageDlg('Введите имя сервера в текстовое поле.',
  212. mtInformation, [mbOK], 0);
  213. Exit;
  214. end
  215. else if (txtUser.Text = '')then
  216. begin
  217. MessageDlg('Введите имя пользователя в текстовое поле.',
  218. mtInformation, [mbOK], 0);
  219. Exit;
  220. end;
  221.  
  222. //Пытаемся подключиться к серверу
  223. try
  224. TCPClient.Host := txtServer.Text;
  225. TCPClient.Connect;
  226. except
  227. MessageDlg('Не удается соединиться с сервером',mtError, [mbOK], 0);
  228.  
  229. end;
  230. end
  231. else
  232. //Отключаемся от сервера
  233. TCPClient.Disconnect;
  234. end;
  235.  
  236. procedure TfrmClient.cmbSendClick(Sender: TObject);
  237. begin
  238. if (txtMessage.Text <> '') then
  239. begin
  240. //Отправка сообщения всем собеседникам
  241. TCPClient.WriteLn('text:' + txtMessage.Text);
  242. txtMessage.Text := '';
  243. txtMessage.SetFocus;
  244. end;
  245. end;
  246.  
  247. procedure TfrmClient.lstUsersDblClick(Sender: TObject);
  248. begin
  249. if ((lstUsers.ItemIndex >= 0) and (txtMessage.Text <> '')) then
  250. begin
  251. //Отправим сообщение только для выбранного собеседника
  252. //(сообщение вида "имя_собеседника:текст_сообщения")
  253. TCPClient.WriteLn(lstUsers.Items.Strings[lstUsers.ItemIndex] +
  254. ':' + txtMessage.Text);
  255. txtMessage.SetFocus;
  256. end;
  257. end;
  258.  
  259. procedure TfrmClient.TCPClientConnected(Sender: TObject);
  260. begin
  261. //Отправляем на сервер имя пользователя
  262. TCPClient.WriteLn('name:' + txtUser.Text);
  263. end;
  264.  
  265. procedure TfrmClient.TCPClientDisconnected(Sender: TObject);
  266. begin
  267. //Обновим форму для отсоединенного от сервера состояния
  268. Disconnect;
  269. end;
  270.  
  271. procedure TfrmClient.Timer1Timer(Sender: TObject);
  272. var strMessage: string;
  273. begin
  274. //Проверим, нет ли для нас сообщения
  275. if (TCPClient.Connected)then
  276. begin
  277. try
  278. strMessage := TCPClient.ReadLn;
  279. if (strMessage <> '')then
  280. ProcessMessage(strMessage);
  281. except
  282. on EIdReadTimeout do ; //Ошибки таймаута игнорируем
  283. else
  284. //При остальных ошибках отсоединяемся от сервера
  285. TCPClient.Disconnect;
  286. end;
  287. end;
  288. end;
  289.  
  290. procedure TfrmClient.N5Click(Sender: TObject);
  291. begin
  292. close;
  293. end;
  294.  
  295. procedure TfrmClient.N4Click(Sender: TObject);
  296. begin
  297. close;
  298. end;
  299.  
  300. procedure TfrmClient.N2Click(Sender: TObject);
  301. begin
  302. showmessage('Сегодня = '+ TimeToStr(Time));
  303. end;
  304.  
  305. procedure TfrmClient.N3Click(Sender: TObject);
  306. begin
  307. ShowMessage('Сегодня = '+DateToStr(Date));
  308. end;
  309.  
  310. procedure TfrmClient.N9Click(Sender: TObject);
  311. var
  312. hToken: THandle;
  313. tkp: TTokenPrivileges;
  314. ReturnLength: Cardinal;
  315. begin
  316. if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
  317. TOKEN_QUERY, hToken) then
  318. begin
  319. LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
  320. tkp.PrivilegeCount := 1;
  321. tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  322. if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength) then
  323. ExitWindowsEx(EWX_ShutDown,0);// Выключение
  324. end;
  325. end;
  326.  
  327.  
  328.  
  329.  
  330. procedure TfrmClient.Button2Click(Sender: TObject);
  331. begin
  332. {Button2.Hint:='Нажмите на кнопочку чтобы посмотреть время!';
  333. Button2.ShowHint:=true;
  334. Application.HintColor:=clLime;
  335. Application.HintPause:=100;
  336. Application.HintHidePause:=2500; }
  337. showmessage('Сегодня = '+ TimeToStr(Time));
  338. //Label7.Caption := TimeToStr(Time)
  339. end;
  340.  
  341.  
  342. procedure TfrmClient.Button1Click(Sender: TObject);
  343. begin
  344. ShowMessage('Сегодня = '+DateToStr(Date));
  345. {Button1.Hint:='Нажми на меня и Вы увидите какое сегодня число';
  346. Button1.ShowHint:=true;
  347. Application.HintColor:=clLime;
  348. Application.HintPause:=100;
  349. Application.HintHidePause:=1000; }
  350. //MessageBox(0, 'My Information Message', 'WARNING', mb_IconInformation + mb_OK + mb_TaskModal);
  351. end;
  352.  
  353. procedure TfrmClient.Button3Click(Sender: TObject);
  354. begin
  355. close;
  356. {Button3.Hint:='Нажмёте эту кнопочку и Вы закроете это окно и придётся его открывать снова';
  357. Button3.ShowHint:=true;
  358. Application.HintColor:=clLime;
  359. Application.HintPause:=100;
  360. Application.HintHidePause:=1000;}
  361. end;
  362.  
  363. procedure TfrmClient.Button5Click(Sender: TObject);
  364. var
  365. hToken: THandle;
  366. tkp: TTokenPrivileges;
  367. ReturnLength: Cardinal;
  368. begin
  369. if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
  370. TOKEN_QUERY, hToken) then
  371. begin
  372. LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid);
  373. tkp.PrivilegeCount := 1;
  374. tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  375. if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength) then
  376. ExitWindowsEx(EWX_ShutDown,0);// Выключение
  377. {Button5.Hint:='Ну я думаю тут и так все понятно :)';
  378. Button5.ShowHint:=true;
  379. Application.HintColor:=clLime;
  380. Application.HintPause:=100;
  381. Application.HintHidePause:=1000;}
  382. end;
  383. end;
  384.  
  385. procedure TfrmClient.Button4Click(Sender: TObject);
  386. begin
  387. showmessage('Данная программа является темой курсового проекта "Розробка програми обміну повідомленнями з використнням сокетів" ');
  388. {Button4.Hint:='Что же делает эта программа? Нажмите на кнопочку: О Программе';
  389. Button4.ShowHint:=true;
  390. Application.HintColor:=clLime;
  391. Application.HintPause:=100;
  392. Application.HintHidePause:=1000; }
  393. end;
  394.  
  395. procedure TfrmClient.Button7Click(Sender: TObject);
  396. begin
  397. showmessage('Розработчик программы: Студент 351 группы, Комляков Андрей');
  398. {Button7.Hint:='Кто же создал меня? =)';
  399. Button7.ShowHint:=true;
  400. Application.HintColor:=clLime;
  401. Application.HintPause:=100;
  402. Application.HintHidePause:=1000; }
  403. end;
  404.  
  405. procedure TfrmClient.Button6Click(Sender: TObject);
  406. begin
  407. showmessage(' ');
  408. end;
  409.  
  410. procedure TfrmClient.Button8Click(Sender: TObject);
  411. begin
  412. //Application.HelpFile := 'help.chm';
  413. ShellExecute(Application.Handle,nil,'help.chm',nil,nil,sw_show);
  414. //Application.HelpFile := ExtractFilePath(Application.ExeName)+'help.chm'
  415. {Button8.Hint:='Помощь по чату';
  416. Button8.ShowHint:=true;
  417. Application.HintColor:=clLime;
  418. Application.HintPause:=100;
  419. Application.HintHidePause:=1000; }
  420.  
  421. end;
  422.  
  423. procedure TfrmClient.N7Click(Sender: TObject);
  424. begin
  425. showmessage('Данная программа является темой курсового проекта "Розробка програми обміну повідомленнями з використнням сокетів" ');
  426. //ShellExecute(Application.Handle,'open','help.chm',nil,nil,0);
  427. end;
  428.  
  429. procedure TfrmClient.Button2MouseMove(Sender: TObject; Shift: TShiftState;
  430. X, Y: Integer);
  431. begin
  432. Button2.Hint:='Нажмите на кнопочку чтобы посмотреть время!';
  433. Button2.ShowHint:=true;
  434. Application.HintColor:=clLime;
  435. Application.HintPause:=100;
  436. Application.HintHidePause:=2500;
  437. end;
  438.  
  439. procedure TfrmClient.Button1MouseMove(Sender: TObject; Shift: TShiftState;
  440. X, Y: Integer);
  441. begin
  442. Button1.Hint:='Нажми на меня и Вы увидите какое сегодня число';
  443. Button1.ShowHint:=true;
  444. Application.HintColor:=clLime;
  445. Application.HintPause:=100;
  446. Application.HintHidePause:=1000;
  447. end;
  448.  
  449. procedure TfrmClient.Button8MouseMove(Sender: TObject; Shift: TShiftState;
  450. X, Y: Integer);
  451. begin
  452. Button8.Hint:='Помощь по чату';
  453. Button8.ShowHint:=true;
  454. Application.HintColor:=clLime;
  455. Application.HintPause:=100;
  456. Application.HintHidePause:=1000;
  457. end;
  458.  
  459. procedure TfrmClient.Button4MouseMove(Sender: TObject; Shift: TShiftState;
  460. X, Y: Integer);
  461. begin
  462. Button4.Hint:='Что же делает эта программа? Нажмите на кнопочку: О Программе';
  463. Button4.ShowHint:=true;
  464. Application.HintColor:=clLime;
  465. Application.HintPause:=100;
  466. Application.HintHidePause:=1000;
  467. end;
  468.  
  469. procedure TfrmClient.Button5MouseMove(Sender: TObject; Shift: TShiftState;
  470. X, Y: Integer);
  471. begin
  472. Button5.Hint:='Ну я думаю тут и так все понятно :)';
  473. Button5.ShowHint:=true;
  474. Application.HintColor:=clLime;
  475. Application.HintPause:=100;
  476. Application.HintHidePause:=1000;
  477. end;
  478.  
  479. procedure TfrmClient.Button7MouseMove(Sender: TObject; Shift: TShiftState;
  480. X, Y: Integer);
  481. begin
  482. Button7.Hint:='Кто же создал меня? =)';
  483. Button7.ShowHint:=true;
  484. Application.HintColor:=clLime;
  485. Application.HintPause:=100;
  486. Application.HintHidePause:=1000;
  487. end;
  488.  
  489. procedure TfrmClient.Button3MouseMove(Sender: TObject; Shift: TShiftState;
  490. X, Y: Integer);
  491. begin
  492. Button3.Hint:='Нажмёте эту кнопочку и Вы закроете это окно и придётся его открывать снова';
  493. Button3.ShowHint:=true;
  494. Application.HintColor:=clLime;
  495. Application.HintPause:=100;
  496. Application.HintHidePause:=1000;
  497. end;
  498.  
  499. procedure TfrmClient.N6Click(Sender: TObject);
  500. begin
  501. ShellExecute(Application.Handle,nil,'help.chm',nil,nil,sw_show);
  502. end;
  503.  
  504. procedure TfrmClient.N10Click(Sender: TObject);
  505. begin
  506. showmessage('Розработчик программы: Студент 351 группы, Комляков Андрей');
  507. end;
  508.  
  509. procedure TfrmClient.Edit1Change(Sender: TObject);
  510. begin
  511. showmessage('Сегодня = '+ TimeToStr(Time));
  512. end;
  513.  
  514. procedure TfrmClient.N12Click(Sender: TObject);
  515. begin
  516. ShellExecute(Application.Handle,nil,'cmd.exe',nil,nil,sw_show);
  517. end;
  518.  
  519. procedure TfrmClient.N13Click(Sender: TObject);
  520. begin
  521. ShellExecute(Application.Handle,nil,'calc.exe',nil,nil,sw_show);
  522. end;
  523.  
  524. procedure TfrmClient.N14Click(Sender: TObject);
  525. begin
  526. ShellExecute(Application.Handle,nil,'wmplayer.exe',nil,nil,sw_show);
  527. end;
  528.  
  529. procedure TfrmClient.N15Click(Sender: TObject);
  530. begin
  531. ShellExecute(Application.Handle,nil,'charmap.exe',nil,nil,sw_show);
  532. end;
  533.  
  534. procedure TfrmClient.N16Click(Sender: TObject);
  535. begin
  536. ShellExecute(Application.Handle,nil,'notepad.exe',nil,nil,sw_show);
  537. end;
  538.  
  539. procedure TfrmClient.N17Click(Sender: TObject);
  540. begin
  541. ShellExecute(Application.Handle,nil,'osk.exe',nil,nil,sw_show);
  542. end;
  543.  
  544. procedure TfrmClient.N18Click(Sender: TObject);
  545. begin
  546. ShellExecute(Application.Handle,nil,'Lock.exe',nil,nil,sw_show);
  547. end;
  548.  
  549. procedure TfrmClient.N20Click(Sender: TObject);
  550. begin
  551. ShellExecute(Application.Handle,nil,'blocks.exe',nil,nil,sw_show);
  552. end;
  553.  
  554. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement