Advertisement
gguuppyy

1я форма

Feb 20th, 2024 (edited)
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.19 KB | None | 0 0
  1. Unit Main;
  2.  
  3. Interface
  4.  
  5. Uses
  6. Winapi.Windows,
  7. Winapi.Messages,
  8. System.SysUtils,
  9. System.Variants,
  10. System.Classes,
  11. Vcl.Graphics,
  12. Clipbrd,
  13. Vcl.Controls,
  14. Vcl.Forms,
  15. Vcl.Dialogs,
  16. Vcl.StdCtrls,
  17. Vcl.Menus,
  18. Vcl.ExtCtrls,
  19. Vcl.Imaging.Pngimage;
  20.  
  21. Type
  22. TMainForm = Class(TForm)
  23. Button1: TButton;
  24. EditA: TEdit;
  25. EditB: TEdit;
  26. MainMenu1: TMainMenu;
  27. N1: TMenuItem;
  28. N2: TMenuItem;
  29. N3: TMenuItem;
  30. N4: TMenuItem;
  31. N5: TMenuItem;
  32. Y1: TLabel;
  33. X: TLabel;
  34. BalloonHint1: TBalloonHint;
  35. OpenDialog1: TOpenDialog;
  36. SaveDialog1: TSaveDialog;
  37. Y: TLabel;
  38. Result: TMemo;
  39. LabelTask: TLabel;
  40. ImageTask: TImage;
  41. Procedure Button1Click(Sender: TObject);
  42.  
  43. Procedure N2Click(Sender: TObject);
  44. Procedure N5Click(Sender: TObject);
  45.  
  46. Procedure EditBKeyPress(Sender: TObject; Var Key: Char);
  47. Procedure EditAKeyPress(Sender: TObject; Var Key: Char);
  48. Procedure N3Click(Sender: TObject);
  49. Procedure GetPath(Var Path: String);
  50. Procedure N4Click(Sender: TObject);
  51. Procedure Checker(Var IsCorrect: Boolean);
  52. Procedure N1Click(Sender: TObject);
  53. Procedure EditAChange(Sender: TObject);
  54. Procedure EditBChange(Sender: TObject);
  55. Procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  56. Procedure FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  57. Procedure EditRadMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  58. Procedure EditAMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  59. Procedure EditBMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  60. Procedure FormMouseEnter(Sender: TObject);
  61. Private
  62. { Private declarations }
  63. Public
  64. { Public declarations }
  65. End;
  66.  
  67. Const
  68. E: Double = 1.0E-3;
  69. NumSet = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', #8, #44, #45, #46];
  70.  
  71. Var
  72. MainForm: TMainForm;
  73.  
  74. Implementation
  75.  
  76. {$R *.dfm}
  77.  
  78. Uses
  79. Instruction,
  80. Information;
  81.  
  82. Procedure TmainForm.Checker(Var IsCorrect: Boolean);
  83.  
  84. Begin
  85. IsCorrect := True;
  86.  
  87. Try
  88. StrtoFloat(EditA.Text);
  89. Except
  90. IsCorrect := False;
  91. End;
  92.  
  93. Try
  94.  
  95. StrtoFloat(EditB.Text);
  96. Except
  97. IsCorrect := False;
  98. End;
  99.  
  100. End;
  101.  
  102. Procedure TMainForm.Button1Click(Sender: TObject);
  103. Var
  104. A, B: Double;
  105. IsCorrect: Boolean;
  106. Begin
  107. Checker(IsCorrect);
  108. If IsCorrect Then
  109. Begin
  110.  
  111. A := StrtoFloat(EditA.Text);
  112. B := StrtoFloat(EditB.Text);
  113. If (B + A <= 1) And (2*A - B <= 1) And (B >= 0) Then
  114. Begin
  115. Result.Lines.Clear;
  116. Result.Lines.Add('Точка M (' + (EditA.Text) + ';' + (EditB.Text) + ')');
  117. Result.Lines.Add('принадлежит замкнутому множеству D. ')
  118. End
  119. Else
  120. Begin
  121. Result.Lines.Clear;
  122. Result.Lines.Add('Точка M (' + (EditA.Text) + ';' + (EditB.Text) + ')');
  123. Result.Lines.Add('не принадлежит замкнутому множеству D. ');
  124. End;
  125.  
  126. End
  127. Else
  128. Begin
  129. ShowMessage('Заполните все поля');
  130. End;
  131.  
  132. End;
  133.  
  134. Procedure TMainForm.EditBChange(Sender: TObject);
  135. Begin
  136. EditB.MaxLength := 6;
  137. If Length(EditB.Text) = 0 Then
  138. Begin
  139. Result.Lines.Clear;
  140. End;
  141. End;
  142.  
  143. Procedure TMainForm.EditBKeyPress(Sender: TObject; Var Key: Char);
  144. Begin
  145. If Key In NumSet Then
  146. Begin
  147. If Key = '0' Then
  148. Begin
  149. If Length(EditB.Text) = 1 Then
  150. Begin
  151. If EditB.Text[1] In ['0'] Then
  152. Begin
  153. Key := #0;
  154. End;
  155. End;
  156. If Length(EditB.Text) = 2 Then
  157. Begin
  158. If (EditB.Text[1] = '-') AND (EditB.Text[2] = '0') Then
  159. Begin
  160. Key := #0;
  161. End;
  162. End;
  163. End;
  164.  
  165. If Key = #45 Then
  166. Begin
  167. If Length(EditB.Text) > 0 Then
  168. Begin
  169. BalloonHint1.Title := 'Недопустимый символ.';
  170. BalloonHint1.Description := 'Здесь можно ввести только число.';
  171. BalloonHint1.ImageIndex := 1;
  172. BalloonHint1.ShowHint(EditB);
  173. Key := #0;
  174. End;
  175. End;
  176.  
  177. If Key In [',', '.'] Then
  178. Begin
  179. Key := FormatSettings.DecimalSeparator;
  180. If Pos(Key, EditB.Text) <> 0 Then
  181. Begin
  182. BalloonHint1.Title := 'Недопустимый символ.';
  183. BalloonHint1.Description := 'Здесь можно ввести только число.';
  184. BalloonHint1.ImageIndex := 1;
  185. BalloonHint1.ShowHint(EditB);
  186. Key := #0;
  187. End
  188. Else
  189. If Length(EditB.Text) > 0 Then
  190. Begin
  191. If (EditB.Text[1] = '-') AND (Length(EditB.Text) = 1) Then
  192. Begin
  193. Key := #0;
  194. End
  195. End
  196. Else
  197. If EditB.SelStart = 0 Then
  198. Begin
  199. EditB.Text := '0' + EditB.Text;
  200. EditB.SelStart := 1;
  201. End;
  202. End;
  203. End
  204. Else
  205. Begin
  206. BalloonHint1.Title := 'Недопустимый символ.';
  207. BalloonHint1.Description := 'Здесь можно ввести только число..';
  208. BalloonHint1.ImageIndex := 1;
  209. BalloonHint1.ShowHint(EditB);
  210. Key := #0;
  211. End;
  212. End;
  213.  
  214. Procedure TMainForm.EditBMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  215. Begin
  216. Clipboard.Clear;
  217. End;
  218.  
  219. Procedure TMainForm.EditRadMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  220. Begin
  221. Clipboard.Clear;
  222. End;
  223.  
  224. Procedure TMainForm.FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  225. Var
  226. Confirmation: Integer;
  227. Begin
  228. Confirmation := Application.MessageBox('Вы действительно хотите выйти?', 'Выход', MB_YESNO);
  229. CanClose := Confirmation = IDYES;
  230. End;
  231.  
  232. Procedure TMainForm.FormMouseEnter(Sender: TObject);
  233. Begin
  234. Clipboard.Clear;
  235. End;
  236.  
  237. Procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  238. Begin
  239. If (EditA.Text <> '') And (EditB.Text <> '') Then
  240. Button1.Enabled := True
  241. Else
  242. Button1.Enabled := False;
  243. End;
  244.  
  245. Procedure TMainForm.EditAChange(Sender: TObject);
  246. Begin
  247. EditA.MaxLength := 6;
  248. If Length(EditA.Text) = 0 Then
  249. Begin
  250. Result.Lines.Clear;
  251. End;
  252. End;
  253.  
  254. Procedure TMainForm.EditAKeyPress(Sender: TObject; Var Key: Char);
  255. Begin
  256.  
  257. If Key In NumSet Then
  258. Begin
  259. If Key = '0' Then
  260. Begin
  261. If Length(EditA.Text) = 1 Then
  262. Begin
  263. If EditA.Text[1] In ['0'] Then
  264. Begin
  265. Key := #0;
  266. End;
  267. End;
  268. If Length(EditA.Text) = 2 Then
  269. Begin
  270. If (EditA.Text[1] = '-') AND (EditA.Text[2] = '0') Then
  271. Begin
  272. Key := #0;
  273. End;
  274. End;
  275. End;
  276.  
  277. If Key = #45 Then
  278. Begin
  279. If Length(EditA.Text) > 0 Then
  280. Begin
  281. BalloonHint1.Title := 'Недопустимый символ.';
  282. BalloonHint1.Description := 'Здесь можно ввести только число.';
  283. BalloonHint1.ImageIndex := 1;
  284. BalloonHint1.ShowHint(EditA);
  285. Key := #0;
  286. End;
  287. End;
  288.  
  289. If Key In [',', '.'] Then
  290. Begin
  291. Key := FormatSettings.DecimalSeparator;
  292. If Pos(Key, EditA.Text) <> 0 Then
  293. Begin
  294. BalloonHint1.Title := 'Недопустимый символ.';
  295. BalloonHint1.Description := 'Здесь можно ввести только число..';
  296. BalloonHint1.ImageIndex := 1;
  297. BalloonHint1.ShowHint(EditA);
  298. Key := #0;
  299. End
  300. Else
  301. If Length(EditA.Text) > 0 Then
  302. Begin
  303. If (EditA.Text[1] = '-') AND (Length(EditA.Text) = 1) Then
  304. Begin
  305. Key := #0;
  306. End
  307. End
  308. Else
  309. If EditA.SelStart = 0 Then
  310. Begin
  311. EditA.Text := '0' + EditA.Text;
  312. EditA.SelStart := 1;
  313. End;
  314. End;
  315. End
  316. Else
  317. Begin
  318. BalloonHint1.Title := 'Недопустимый символ.';
  319. BalloonHint1.Description := 'Здесь можно ввести только число.';
  320. BalloonHint1.ImageIndex := 1;
  321. BalloonHint1.ShowHint(EditA);
  322. Key := #0;
  323. End;
  324. End;
  325.  
  326. Procedure TMainForm.EditAMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  327. Begin
  328. Clipboard.Clear;
  329. End;
  330.  
  331. Procedure TMainForm.N1Click(Sender: TObject);
  332. Begin
  333. If Result.Lines.Count = 0 Then
  334. Begin
  335. N4.Enabled := False;
  336. End
  337. Else
  338. Begin
  339. N4.Enabled := True;
  340. End;
  341. End;
  342.  
  343. Procedure TMainForm.N2Click(Sender: TObject);
  344. Begin
  345. InstructionForm.ShowModal;
  346. End;
  347.  
  348. Procedure TMainForm.GetPath(Var Path: String);
  349. Begin
  350. If OpenDialog1.Execute Then
  351. Begin
  352. Path := OpenDialog1.FileName;
  353. End
  354. Else
  355. Begin
  356. ShowMessage('Открытие файла отменено!');
  357. End;
  358. End;
  359.  
  360. Procedure TMainForm.N3Click(Sender: TObject);
  361. Var
  362. IsCorrect, Fail: Boolean;
  363. Path, Errors, A, B, Str: String;
  364. Count: Integer;
  365. FileElem: TextFile;
  366. Begin
  367. GetPath(Path);
  368.  
  369. AssignFile(FileElem, Path);
  370. Fail := False;
  371. IsCorrect := True;
  372. Count := 0;
  373.  
  374. If Not FileExists(Path) Then
  375. Begin
  376. ShowMessage('Файл не найден!');
  377. Exit;
  378. End;
  379.  
  380. Try
  381. Try
  382. Reset(FileElem);
  383. Except
  384. CloseFile(FileElem);
  385. IsCorrect := False;
  386. ShowMessage('Ошибка открытия файла');
  387. End;
  388.  
  389. If IsCorrect Then
  390. Begin
  391. While Not Eof(FileElem) Do
  392. Begin
  393. ReadLn(FileElem, Str);
  394. Inc(Count);
  395. End;
  396.  
  397. CloseFile(FileElem);
  398. If Count <> 2 Then
  399. Fail := True;
  400. End;
  401.  
  402. If IsCorrect Then
  403. Begin
  404. Reset(FileElem);
  405.  
  406. Try
  407. Readln(FileElem, A);
  408. StrToFloat(A);
  409. Except
  410. Fail := True;
  411. End;
  412.  
  413. Try
  414. Readln(FileElem, B);
  415. StrToFloat(B);
  416. Except
  417. Fail := True;
  418. End;
  419. End;
  420. Finally
  421. CloseFile(FileElem);
  422. ShowMessage('Обработка завершена');
  423. End;
  424.  
  425. If Fail = False Then
  426. Begin
  427. If ((-99 > StrToFloat(A)) Or (StrToFloat(A) > 999)) Or ((-99 > StrToFloat(B)) Or (StrToFloat(B) > 999)) Then
  428. Fail := True;
  429. End;
  430.  
  431. Errors := 'Проверьте введенные данные и повторите попытку!';
  432. If Fail = True Then
  433. Begin
  434. ShowMessage(Errors);
  435. End
  436. Else
  437. Begin
  438. EditA.Text := A;
  439. EditB.Text := B;
  440. End;
  441. End;
  442.  
  443. Procedure TMainForm.N4Click(Sender: TObject);
  444. Begin
  445.  
  446. If SaveDialog1.Execute Then
  447. Begin
  448.  
  449. Result.Lines.SaveToFile(SaveDialog1.FileName);
  450. End
  451. Else
  452.  
  453. Begin
  454. ShowMessage('Сохранение в файл отменено.');
  455. End;
  456.  
  457. End;
  458.  
  459. Procedure TMainForm.N5Click(Sender: TObject);
  460. Begin
  461. InformationForm.ShowModal;
  462. End;
  463.  
  464. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement