Advertisement
gguuppyy

форма22

Feb 27th, 2024 (edited)
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.91 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. EditC: TEdit;
  42. EditD: TEdit;
  43. Label1: TLabel;
  44. Label2: TLabel;
  45. Label3: TLabel;
  46. Label4: TLabel;
  47. Procedure Button1Click(Sender: TObject);
  48.  
  49. Procedure N2Click(Sender: TObject);
  50. Procedure N5Click(Sender: TObject);
  51.  
  52. Procedure EditBKeyPress(Sender: TObject; Var Key: Char);
  53. Procedure EditAKeyPress(Sender: TObject; Var Key: Char);
  54. Procedure N3Click(Sender: TObject);
  55. Procedure GetPath(Var Path: String);
  56. Procedure N4Click(Sender: TObject);
  57. Procedure Checker(Var IsCorrect: Boolean);
  58. Procedure N1Click(Sender: TObject);
  59. Procedure EditAChange(Sender: TObject);
  60. Procedure EditBChange(Sender: TObject);
  61. Procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  62. Procedure FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  63. Procedure EditRadMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  64. Procedure EditAMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  65. Procedure EditBMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  66. Procedure FormMouseEnter(Sender: TObject);
  67. Procedure EditCChange(Sender: TObject);
  68. Procedure EditCKeyPress(Sender: TObject; Var Key: Char);
  69. Procedure EditDKeyPress(Sender: TObject; Var Key: Char);
  70. Procedure EditDChange(Sender: TObject);
  71. Procedure EditCMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  72. Procedure EditDMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  73. Private
  74. { Private declarations }
  75. Public
  76. { Public declarations }
  77. End;
  78.  
  79. Const
  80. E: Double = 1.0E-3;
  81. NumSet = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', #8, #44, #45, #46];
  82.  
  83. Var
  84. MainForm: TMainForm;
  85.  
  86. Implementation
  87.  
  88. {$R *.dfm}
  89.  
  90. Uses
  91. Instruction,
  92. Information;
  93.  
  94. Procedure TmainForm.Checker(Var IsCorrect: Boolean);
  95.  
  96. Begin
  97. IsCorrect := True;
  98.  
  99. Try
  100. StrtoFloat(EditA.Text);
  101. Except
  102. IsCorrect := False;
  103. End;
  104.  
  105. Try
  106.  
  107. StrtoFloat(EditB.Text);
  108. Except
  109. IsCorrect := False;
  110. End;
  111.  
  112. End;
  113.  
  114. Function NOD(A, B: Integer): Integer;
  115. Var
  116. Temp: Integer;
  117. Begin
  118. While B <> 0 Do
  119. Begin
  120. Temp := B;
  121. B := A Mod B;
  122. A := Temp;
  123. End;
  124. NOD := A;
  125. End;
  126.  
  127. Function CheckNum(A, B: INTEGER): Boolean;
  128.  
  129. begin
  130. Result := Abs(A) < Abs(B);
  131. end;
  132.  
  133. Function ChecSokr(A, B: INTEGER): Boolean;
  134.  
  135. begin
  136. Result := not((NOD(abs(a),abs(b)) <> 1) or ((a<0) and (b<0)));
  137. end;
  138.  
  139. Procedure TMainForm.Button1Click(Sender: TObject);
  140. Var
  141. A, B, C, D, NumEnd, DenomEnd, Temp: Integer;
  142. IsCorrect: Boolean;
  143. Begin
  144. A := StrtoInt(EditA.Text);
  145. B := StrtoInt(EditB.Text);
  146. C := StrtoInt(EditC.Text);
  147. D := StrtoInt(EditD.Text);
  148. Checker(IsCorrect);
  149. if not (checknum(a,b) and checknum(c,d)) Then
  150. ShowMessage('Введите обыкновенные дроби.')
  151. else if not (ChecSokr(A, B) and ChecSokr(c, d)) then
  152. ShowMessage('Введите несократимые дроби.')
  153. else If IsCorrect then
  154. Begin
  155.  
  156. A := StrtoInt(EditA.Text);
  157. B := StrtoInt(EditB.Text);
  158. C := StrtoInt(EditC.Text);
  159. D := StrtoInt(EditD.Text);
  160. DenomEnd := B * D;
  161. NumEnd := A * D - C * B;
  162.  
  163. Temp := NOD(Abs(NumEnd), Abs(DenomEnd));
  164. NumEnd := NumEnd Div Temp;
  165. DenomEnd := DenomEnd Div Temp;
  166. If NumEnd Mod DenomEnd = 0 Then
  167. Begin
  168. Result.Lines.Clear;
  169. Result.Lines.Add('Искомая дробь: ' + IntToStr(NumEnd div DenomEnd));
  170. End
  171. Else
  172. Begin
  173. Result.Lines.Clear;
  174. Result.Lines.Add('Искомая дробь: ' + IntToStr(NumEnd) + '/' + IntToStr(DenomEnd));
  175. End;
  176.  
  177.  
  178. End
  179. Else
  180. Begin
  181. ShowMessage('Заполните все поля');
  182. End;
  183.  
  184. End;
  185.  
  186. Procedure TMainForm.EditBChange(Sender: TObject);
  187. Begin
  188. EditB.MaxLength := 6;
  189. If Length(EditB.Text) = 0 Then
  190. Begin
  191. Result.Lines.Clear;
  192. End;
  193. End;
  194.  
  195. Procedure TMainForm.EditBKeyPress(Sender: TObject; Var Key: Char);
  196. begin
  197.  
  198. If Key In NumSet Then
  199. Begin
  200. If Key = '0' Then
  201. Begin
  202. If Length(EditB.Text) = 1 Then
  203. Begin
  204. If EditB.Text[1] In ['0'] Then
  205. Begin
  206. Key := #0;
  207. End;
  208. End;
  209. If Length(EditB.Text) = 2 Then
  210. Begin
  211. If (EditB.Text[1] = '-') AND (EditB.Text[2] = '0') Then
  212. Begin
  213. Key := #0;
  214. End;
  215. End;
  216. End;
  217.  
  218. If Key = #45 Then
  219. Begin
  220. If Length(EditB.Text) > 0 Then
  221. Begin
  222. BalloonHint1.Title := 'Недопустимый символ.';
  223. BalloonHint1.Description := 'Здесь можно ввести только число.';
  224. BalloonHint1.ImageIndex := 1;
  225. BalloonHint1.ShowHint(EditB);
  226. Key := #0;
  227. End;
  228. End;
  229.  
  230. if Key = '0' then // Проверяем знак минус
  231. begin
  232. BalloonHint1.Title := 'Недопустимый символ.';
  233. BalloonHint1.Description := 'Здесь можно ввести только число неравное 0.';
  234. BalloonHint1.ImageIndex := 1;
  235. BalloonHint1.ShowHint(EditB);
  236. Key := #0;
  237. end;
  238.  
  239. If Key In [',', '.'] Then
  240. Begin
  241. Key := FormatSettings.DecimalSeparator;
  242. If Pos(Key, EditB.Text) <> 0 Then
  243. Begin
  244. BalloonHint1.Title := 'Недопустимый символ.';
  245. BalloonHint1.Description := 'Здесь можно ввести только число.';
  246. BalloonHint1.ImageIndex := 1;
  247. BalloonHint1.ShowHint(EditB);
  248. Key := #0;
  249. End
  250. Else
  251. If Length(EditB.Text) > 0 Then
  252. Begin
  253. If (EditB.Text[1] = '-') AND (Length(EditB.Text) = 1) Then
  254. Begin
  255. Key := #0;
  256. End
  257. End
  258. Else
  259. If EditB.SelStart = 0 Then
  260. Begin
  261. EditB.Text := '0' + EditB.Text;
  262. EditB.SelStart := 1;
  263. End;
  264. End;
  265. End
  266. Else
  267. Begin
  268. BalloonHint1.Title := 'Недопустимый символ.';
  269. BalloonHint1.Description := 'Здесь можно ввести только число..';
  270. BalloonHint1.ImageIndex := 1;
  271. BalloonHint1.ShowHint(EditB);
  272. Key := #0;
  273. End;
  274.  
  275.  
  276. End;
  277.  
  278. Procedure TMainForm.EditBMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  279. Begin
  280. Clipboard.Clear;
  281. End;
  282.  
  283. Procedure TMainForm.EditCChange(Sender: TObject);
  284. Begin
  285. EditC.MaxLength := 6;
  286. If Length(EditC.Text) = 0 Then
  287. Begin
  288. Result.Lines.Clear;
  289. End;
  290. End;
  291.  
  292. Procedure TMainForm.EditCKeyPress(Sender: TObject; Var Key: Char);
  293. Begin
  294. If Key In NumSet Then
  295. Begin
  296. If Key = '0' Then
  297. Begin
  298. If Length(EditC.Text) = 1 Then
  299. Begin
  300. If EditC.Text[1] In ['0'] Then
  301. Begin
  302. Key := #0;
  303. End;
  304. End;
  305. If Length(EditC.Text) = 2 Then
  306. Begin
  307. If (EditC.Text[1] = '-') AND (EditC.Text[2] = '0') Then
  308. Begin
  309. Key := #0;
  310. End;
  311. End;
  312. End;
  313.  
  314. If Key = #45 Then
  315. Begin
  316. If Length(EditC.Text) > 0 Then
  317. Begin
  318. BalloonHint1.Title := 'Недопустимый символ.';
  319. BalloonHint1.Description := 'Здесь можно ввести только число.';
  320. BalloonHint1.ImageIndex := 1;
  321. BalloonHint1.ShowHint(EditC);
  322. Key := #0;
  323. End;
  324. End;
  325.  
  326. If Key In [',', '.'] Then
  327. Begin
  328. Key := FormatSettings.DecimalSeparator;
  329. If Pos(Key, EditC.Text) <> 0 Then
  330. Begin
  331. BalloonHint1.Title := 'Недопустимый символ.';
  332. BalloonHint1.Description := 'Здесь можно ввести только число.';
  333. BalloonHint1.ImageIndex := 1;
  334. BalloonHint1.ShowHint(EditC);
  335. Key := #0;
  336. End
  337. Else
  338. If Length(EditC.Text) > 0 Then
  339. Begin
  340. If (EditC.Text[1] = '-') AND (Length(EditC.Text) = 1) Then
  341. Begin
  342. Key := #0;
  343. End
  344. End
  345. Else
  346. If EditC.SelStart = 0 Then
  347. Begin
  348. EditC.Text := '0' + EditB.Text;
  349. EditC.SelStart := 1;
  350. End;
  351. End;
  352. End
  353. Else
  354. Begin
  355. BalloonHint1.Title := 'Недопустимый символ.';
  356. BalloonHint1.Description := 'Здесь можно ввести только число..';
  357. BalloonHint1.ImageIndex := 1;
  358. BalloonHint1.ShowHint(EditC);
  359. Key := #0;
  360. End;
  361. End;
  362.  
  363. Procedure TMainForm.EditCMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  364. Begin
  365. Clipboard.Clear;
  366. End;
  367.  
  368. Procedure TMainForm.EditDChange(Sender: TObject);
  369. Begin
  370. EditD.MaxLength := 6;
  371. If Length(EditD.Text) = 0 Then
  372. Begin
  373. Result.Lines.Clear;
  374. End;
  375. End;
  376.  
  377. Procedure TMainForm.EditDKeyPress(Sender: TObject; Var Key: Char);
  378. Begin
  379. If Key In NumSet Then
  380. Begin
  381. If Key = '0' Then
  382. Begin
  383. If Length(EditD.Text) = 1 Then
  384. Begin
  385. If EditD.Text[1] In ['0'] Then
  386. Begin
  387. Key := #0;
  388. End;
  389. End;
  390. If Length(EditD.Text) = 2 Then
  391. Begin
  392. If (EditD.Text[1] = '-') AND (EditD.Text[2] = '0') Then
  393. Begin
  394. Key := #0;
  395. End;
  396. End;
  397. End;
  398.  
  399. If Key = #45 Then
  400. Begin
  401. If Length(EditD.Text) > 0 Then
  402. Begin
  403. BalloonHint1.Title := 'Недопустимый символ.';
  404. BalloonHint1.Description := 'Здесь можно ввести только число.';
  405. BalloonHint1.ImageIndex := 1;
  406. BalloonHint1.ShowHint(EditD);
  407. Key := #0;
  408. End;
  409. End;
  410.  
  411. if Key = '0' then // Проверяем знак минус
  412. begin
  413. BalloonHint1.Title := 'Недопустимый символ.';
  414. BalloonHint1.Description := 'Здесь можно ввести только число неравное 0.';
  415. BalloonHint1.ImageIndex := 1;
  416. BalloonHint1.ShowHint(EditD);
  417. Key := #0;
  418. end;
  419.  
  420. If Key In [',', '.'] Then
  421. Begin
  422. Key := FormatSettings.DecimalSeparator;
  423. If Pos(Key, EditD.Text) <> 0 Then
  424. Begin
  425. BalloonHint1.Title := 'Недопустимый символ.';
  426. BalloonHint1.Description := 'Здесь можно ввести только число.';
  427. BalloonHint1.ImageIndex := 1;
  428. BalloonHint1.ShowHint(EditD);
  429. Key := #0;
  430. End
  431. Else
  432. If Length(EditD.Text) > 0 Then
  433. Begin
  434. If (EditD.Text[1] = '-') AND (Length(EditD.Text) = 1) Then
  435. Begin
  436. Key := #0;
  437. End
  438. End
  439. Else
  440. If EditD.SelStart = 0 Then
  441. Begin
  442. EditD.Text := '0' + EditD.Text;
  443. EditD.SelStart := 1;
  444. End;
  445. End;
  446. End
  447. Else
  448. Begin
  449. BalloonHint1.Title := 'Недопустимый символ.';
  450. BalloonHint1.Description := 'Здесь можно ввести только число..';
  451. BalloonHint1.ImageIndex := 1;
  452. BalloonHint1.ShowHint(EditD);
  453. Key := #0;
  454. End;
  455. End;
  456.  
  457. Procedure TMainForm.EditDMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  458. Begin
  459. Clipboard.Clear;
  460. End;
  461.  
  462. Procedure TMainForm.EditRadMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  463. Begin
  464. Clipboard.Clear;
  465. End;
  466.  
  467. Procedure TMainForm.FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  468. Var
  469. Confirmation: Integer;
  470. Begin
  471. Confirmation := Application.MessageBox('Вы действительно хотите выйти?', 'Выход', MB_YESNO);
  472. CanClose := Confirmation = IDYES;
  473. End;
  474.  
  475. Procedure TMainForm.FormMouseEnter(Sender: TObject);
  476. Begin
  477. Clipboard.Clear;
  478. End;
  479.  
  480. Procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  481. Begin
  482. If (EditA.Text <> '') And (EditB.Text <> '') Then
  483. Button1.Enabled := True
  484. Else
  485. Button1.Enabled := False;
  486. End;
  487.  
  488. Procedure TMainForm.EditAChange(Sender: TObject);
  489. Begin
  490. EditA.MaxLength := 6;
  491. If Length(EditA.Text) = 0 Then
  492. Begin
  493. Result.Lines.Clear;
  494. End;
  495. End;
  496.  
  497. Procedure TMainForm.EditAKeyPress(Sender: TObject; Var Key: Char);
  498. Begin
  499.  
  500. If Key In NumSet Then
  501. Begin
  502. If Key = '0' Then
  503. Begin
  504. If Length(EditA.Text) = 1 Then
  505. Begin
  506. If EditA.Text[1] In ['0'] Then
  507. Begin
  508. Key := #0;
  509. End;
  510. End;
  511. If Length(EditA.Text) = 2 Then
  512. Begin
  513. If (EditA.Text[1] = '-') AND (EditA.Text[2] = '0') Then
  514. Begin
  515. Key := #0;
  516. End;
  517. End;
  518. End;
  519.  
  520. If Key = #45 Then
  521. Begin
  522. If Length(EditA.Text) > 0 Then
  523. Begin
  524. BalloonHint1.Title := 'Недопустимый символ.';
  525. BalloonHint1.Description := 'Здесь можно ввести только число.';
  526. BalloonHint1.ImageIndex := 1;
  527. BalloonHint1.ShowHint(EditA);
  528. Key := #0;
  529. End;
  530. End;
  531.  
  532. If Key In [',', '.'] Then
  533. Begin
  534. Key := FormatSettings.DecimalSeparator;
  535. If Pos(Key, EditA.Text) <> 0 Then
  536. Begin
  537. BalloonHint1.Title := 'Недопустимый символ.';
  538. BalloonHint1.Description := 'Здесь можно ввести только число..';
  539. BalloonHint1.ImageIndex := 1;
  540. BalloonHint1.ShowHint(EditA);
  541. Key := #0;
  542. End
  543. Else
  544. If Length(EditA.Text) > 0 Then
  545. Begin
  546. If (EditA.Text[1] = '-') AND (Length(EditA.Text) = 1) Then
  547. Begin
  548. Key := #0;
  549. End
  550. End
  551. Else
  552. If EditA.SelStart = 0 Then
  553. Begin
  554. EditA.Text := '0' + EditA.Text;
  555. EditA.SelStart := 1;
  556. End;
  557. End;
  558. End
  559. Else
  560. Begin
  561. BalloonHint1.Title := 'Недопустимый символ.';
  562. BalloonHint1.Description := 'Здесь можно ввести только число.';
  563. BalloonHint1.ImageIndex := 1;
  564. BalloonHint1.ShowHint(EditA);
  565. Key := #0;
  566. End;
  567. End;
  568.  
  569. Procedure TMainForm.EditAMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  570. Begin
  571. Clipboard.Clear;
  572. End;
  573.  
  574. Procedure TMainForm.N1Click(Sender: TObject);
  575. Begin
  576. If Result.Lines.Count = 0 Then
  577. Begin
  578. N4.Enabled := False;
  579. End
  580. Else
  581. Begin
  582. N4.Enabled := True;
  583. End;
  584. End;
  585.  
  586. Procedure TMainForm.N2Click(Sender: TObject);
  587. Begin
  588. InstructionForm.ShowModal;
  589. End;
  590.  
  591. Procedure TMainForm.GetPath(Var Path: String);
  592. Begin
  593. If OpenDialog1.Execute Then
  594. Begin
  595. Path := OpenDialog1.FileName;
  596. End
  597. Else
  598. Begin
  599. ShowMessage('Открытие файла отменено!');
  600. End;
  601. End;
  602.  
  603. Procedure TMainForm.N3Click(Sender: TObject);
  604. Var
  605. IsCorrect, Fail: Boolean;
  606. Path, Errors, A, B, C, D, Str: String;
  607. Count: Integer;
  608. FileElem: TextFile;
  609. Begin
  610. GetPath(Path);
  611.  
  612. AssignFile(FileElem, Path);
  613. Fail := False;
  614. IsCorrect := True;
  615. Count := 0;
  616.  
  617. If Not FileExists(Path) Then
  618. Begin
  619. ShowMessage('Файл не найден!');
  620. Exit;
  621. End;
  622.  
  623. Try
  624. Try
  625. Reset(FileElem);
  626. Except
  627. CloseFile(FileElem);
  628. IsCorrect := False;
  629. ShowMessage('Ошибка открытия файла');
  630. End;
  631.  
  632. If IsCorrect Then
  633. Begin
  634. While Not Eof(FileElem) Do
  635. Begin
  636. ReadLn(FileElem, Str);
  637. Inc(Count);
  638. End;
  639.  
  640. CloseFile(FileElem);
  641. If Count <> 4 Then
  642. Fail := True;
  643. End;
  644.  
  645. If IsCorrect Then
  646. Begin
  647. Reset(FileElem);
  648.  
  649. Try
  650. Readln(FileElem, A);
  651. StrToInt(A);
  652. Except
  653. Fail := True;
  654. End;
  655.  
  656. Try
  657. Readln(FileElem, B);
  658. StrToInt(B);
  659. Except
  660. Fail := True;
  661. End;
  662. Try
  663. Readln(FileElem, C);
  664. StrToInt(C);
  665. Except
  666. Fail := True;
  667. End;
  668.  
  669. Try
  670. Readln(FileElem, D);
  671. StrToInt(D);
  672. Except
  673. Fail := True;
  674. End;
  675. End;
  676. Finally
  677. CloseFile(FileElem);
  678. ShowMessage('Обработка завершена');
  679. End;
  680.  
  681. If Fail = False Then
  682. Begin
  683. If ((-99 > StrToFloat(A)) Or (StrToFloat(A) > 999)) Or ((-99 > StrToFloat(B)) Or (StrToFloat(B) > 999)) Then
  684. Fail := True;
  685. End;
  686.  
  687. Errors := 'Проверьте введенные данные и повторите попытку!';
  688. If Fail = True Then
  689. Begin
  690. ShowMessage(Errors);
  691. End
  692. Else
  693. Begin
  694. EditA.Text := A;
  695. EditB.Text := B;
  696. EditC.Text := C;
  697. EditD.Text := D;
  698. End;
  699. End;
  700.  
  701. Procedure TMainForm.N4Click(Sender: TObject);
  702. Begin
  703.  
  704. If SaveDialog1.Execute Then
  705. Begin
  706.  
  707. Result.Lines.SaveToFile(SaveDialog1.FileName);
  708. End
  709. Else
  710.  
  711. Begin
  712. ShowMessage('Сохранение в файл отменено.');
  713. End;
  714.  
  715. End;
  716.  
  717. Procedure TMainForm.N5Click(Sender: TObject);
  718. Begin
  719. InformationForm.ShowModal;
  720. End;
  721.  
  722. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement