Advertisement
THOMAS_SHELBY_18

Lab4_1

Feb 18th, 2024
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 34.43 KB | Source Code | 0 0
  1. unit AddRecordUnit;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Mask, Vcl.StdCtrls, Vcl.Menus, Clipbrd;
  8.  
  9. type
  10.   TAddRecordForm = class(TForm)
  11.     HardwareNameEdit: TEdit;
  12.     CompanyNameEdit: TEdit;
  13.     DescriptionEdit: TEdit;
  14.     WarrantyEdit: TEdit;
  15.     HardwareNameLabel: TLabel;
  16.     TitleLabel: TLabel;
  17.     CompanyNameLabel: TLabel;
  18.     DescriptionLabel: TLabel;
  19.     WarrantyLabel: TLabel;
  20.     PriceLabel: TLabel;
  21.     AddButton: TButton;
  22.     CancelButton: TButton;
  23.     PriceEdit: TEdit;
  24.     CopyPastePopupMenu: TPopupMenu;
  25.     CopyButton: TMenuItem;
  26.     PasteButton: TMenuItem;
  27.     CutButton: TMenuItem;
  28.     procedure CancelButtonClick(Sender: TObject);
  29.     procedure AddButtonClick(Sender: TObject);
  30.     procedure CopyButtonClick(Sender: TObject);
  31.     procedure PasteButtonClick(Sender: TObject);
  32.     procedure CutButtonClick(Sender: TObject);
  33.     procedure CopyPastePopupMenuPopup(Sender: TObject);
  34.     procedure StrEditChange(Sender: TObject);
  35.     procedure WarrantyEditChange(Sender: TObject);
  36.     procedure PriceEditChange(Sender: TObject);
  37.     procedure EditKeyDown(Sender: TObject; var Key: Word;
  38.       Shift: TShiftState);
  39.     procedure WarrantyEditKeyPress(Sender: TObject; var Key: Char);
  40.     procedure PriceEditKeyPress(Sender: TObject; var Key: Char);
  41.     procedure EditDblClick(Sender: TObject);
  42.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  43.     procedure StrEditKeyPress(Sender: TObject; var Key: Char);
  44.   private
  45.     { Private declarations }
  46.   public
  47.     { Public declarations }
  48.   end;
  49.  
  50. var
  51.   AddRecordForm: TAddRecordForm;
  52.  
  53. const
  54.     kBACKSPACE = #8;
  55.     kMINUS = #45;
  56.     kCOMMA = #44;
  57.     kDOWN = 40;
  58.     kUP = 38;
  59.     kENTER = 13;
  60.     kINSERT = 45;
  61.  
  62. implementation
  63. uses MainUnit;
  64.     {$R *.dfm}
  65.  
  66. procedure ClearAddRecordForm;
  67. begin
  68.     With AddRecordForm Do
  69.     Begin
  70.         HardwareNameEdit.Text := '';
  71.         CompanyNameEdit.Text := '';
  72.         DescriptionEdit.Text := '';
  73.         WarrantyEdit.Text := '';
  74.         PriceEdit.Text := '';
  75.     End;
  76. end;
  77.  
  78. Function CreateNewRecord: THardwareRecord;
  79. Var
  80.     NewHardwareRecord: THardwareRecord;
  81. Begin
  82.     With NewHardwareRecord, AddRecordForm Do
  83.     Begin
  84.         HardwareName := HardwareNameEdit.Text;
  85.         CompanyName := CompanyNameEdit.Text;
  86.         Description := DescriptionEdit.Text;
  87.         Warranty := StrToInt(WarrantyEdit.Text);
  88.         Price := Int(StrToFloat(PriceEdit.Text) * 100) / 100;
  89.     End;
  90.     CreateNewRecord := NewHardwareRecord;
  91. End;
  92.  
  93. Procedure AddRecordToGrid(NewHardwareRecord: THardwareRecord);
  94. Begin
  95.     With MainForm.StringGrid, NewHardwareRecord Do
  96.     Begin
  97.         if IsStringGridNotEmpty then
  98.             RowCount := RowCount + 1
  99.         else
  100.             IsStringGridNotEmpty := True;
  101.  
  102.         Cells[0, RowCount-1] := HardwareName;
  103.         Cells[1, RowCount-1] := CompanyName;
  104.         Cells[2, RowCount-1] := Description;
  105.         Cells[3, RowCount-1] := IntToStr(Warranty) + ' мес';
  106.         Cells[4, RowCount-1] := FloatToStr(Price);
  107.         Cells[DelColomn, RowCount-1] := '  X';
  108.         Cells[EditColomn, RowCount-1] := ' ...';
  109.     End;
  110.     IsSomeChanges := True;
  111. End;
  112.  
  113. procedure AddRecordToCorrectedRecordsFile(NewHardwareRecord: THardwareRecord);
  114. begin
  115.     Seek(CorrectedRecordsFile, FileSize(CorrectedRecordsFile));
  116.     Write(CorrectedRecordsFile, NewHardwareRecord);
  117. end;
  118.  
  119. procedure TAddRecordForm.AddButtonClick(Sender: TObject);
  120. Var
  121.     NewHardwareRecord: THardwareRecord;
  122. begin
  123.     NewHardwareRecord := CreateNewRecord();
  124.     AddRecordToGrid(NewHardwareRecord);
  125.     AddRecordToCorrectedRecordsFile(NewHardwareRecord);
  126.     AddRecordForm.Close;
  127. end;
  128.  
  129. procedure TAddRecordForm.CancelButtonClick(Sender: TObject);
  130. begin
  131.     AddRecordForm.Close;
  132. end;
  133.  
  134. procedure TAddRecordForm.CopyButtonClick(Sender: TObject);
  135. begin
  136.     TEdit(ActiveControl).CopyToClipboard;
  137. end;
  138.  
  139. procedure TAddRecordForm.CopyPastePopupMenuPopup(Sender: TObject);
  140. var
  141.     IValue: Integer;
  142.     FlValue: Single;
  143.     Buffer: String;
  144. begin
  145.     Buffer := Clipboard.AsText;
  146.     PasteButton.Enabled := True;
  147.  
  148.     if ActiveControl.Name = 'WarrantyEdit' then
  149.         PasteButton.Enabled := TryStrToInt(Buffer, IValue)
  150.     else
  151.         if ActiveControl.Name = 'PriceEdit' then
  152.             PasteButton.Enabled := TryStrToFloat(Buffer, FlValue);
  153. end;
  154.  
  155. procedure TAddRecordForm.CutButtonClick(Sender: TObject);
  156. begin
  157.     TEdit(ActiveControl).CutToClipboard;
  158. end;
  159.  
  160. Function CheckPriceEdit():Boolean;
  161. var
  162.     IsEditCorrect: Boolean;
  163.     FlValue: Single;
  164. Begin
  165.     with AddRecordForm.PriceEdit do
  166.     begin
  167.         IsEditCorrect := (Text <> '') And (TryStrToFloat(Text, FlValue) And (Text[1] <> ',') And (Text[High(Text)] <> ','));
  168.     end;
  169.     CheckPriceEdit := IsEditCorrect;
  170. End;
  171.  
  172. Procedure EditAddButtonEnabled;
  173. var
  174.     IsRecordCorrect: Boolean;
  175. Begin
  176.     with AddRecordForm do
  177.     begin
  178.         IsRecordCorrect := (HardwareNameEdit.Text <> '') And (CompanyNameEdit.Text <> '') And (DescriptionEdit.Text <> '') And (WarrantyEdit.Text <> '') And CheckPriceEdit;
  179.         AddRecordForm.AddButton.Enabled := IsRecordCorrect;
  180.     end;
  181. End;
  182.  
  183. procedure TAddRecordForm.StrEditChange(Sender: TObject);
  184. begin
  185.     EditAddButtonEnabled;
  186. end;
  187.  
  188. procedure TAddRecordForm.WarrantyEditChange(Sender: TObject);
  189. var
  190.     CursPos: Byte;
  191.     TempStr: String;
  192.     IValue: Integer;
  193. begin
  194.     with WarrantyEdit do
  195.     begin
  196.         CursPos := SelStart;
  197.         TempStr := Text;
  198.  
  199.         if not TryStrToInt(TempStr, IValue) or (IValue < 0) then
  200.         begin
  201.             Delete (TempStr, SelStart, 1);
  202.             Text := TempStr;
  203.             SelStart := CursPos-1;
  204.         end
  205.         else
  206.         begin
  207.             Text := IntToStr(IValue);
  208.             SelStart := CursPos;
  209.         end;
  210.     end;
  211.  
  212.     EditAddButtonEnabled;
  213. end;
  214.  
  215. procedure TAddRecordForm.PriceEditChange(Sender: TObject);
  216. var
  217.     TempStr: String;
  218.     CursPos: Byte;
  219. begin
  220.     with PriceEdit do
  221.     begin
  222.         TempStr := Text;
  223.         CursPos := SelStart;
  224.  
  225.         if (length(TempStr)>1) And (TempStr[1] = '0') And (TempStr[2] = '0') then
  226.         begin
  227.             Delete(TempStr, 2, 1);
  228.             Text := TempStr;
  229.             SelStart := CursPos-1;
  230.         end;
  231.     end;
  232.  
  233.     EditAddButtonEnabled;
  234. end;
  235.  
  236. procedure TAddRecordForm.EditKeyDown(Sender: TObject; var Key: Word;
  237.   Shift: TShiftState);
  238. Begin
  239.     case key of
  240.         kENTER, kDOWN:
  241.         begin
  242.             SelectNext(ActiveControl, True, True);
  243.             with TEdit(ActiveControl) do
  244.                 SelStart := Length(Text);
  245.         end;
  246.         kUP:
  247.         begin
  248.             SelectNext(ActiveControl, False, True);
  249.             with TEdit(ActiveControl) do
  250.                 SelStart := Length(Text);
  251.         end;
  252.         kINSERT:
  253.             Key := 0;
  254.     end;
  255. End;
  256.  
  257. procedure TAddRecordForm.FormClose(Sender: TObject; var Action: TCloseAction);
  258. begin
  259.     ClearAddRecordForm;
  260.     ActiveControl := HardwareNameEdit;
  261. end;
  262.  
  263. procedure TAddRecordForm.StrEditKeyPress(Sender: TObject;
  264.   var Key: Char);
  265. begin
  266.     if Key = #13 then
  267.         Key := #0;
  268. end;
  269.  
  270. procedure TAddRecordForm.EditDblClick(Sender: TObject);
  271. begin
  272.     TEdit(Sender).Text := '';
  273. end;
  274.  
  275. procedure TAddRecordForm.WarrantyEditKeyPress(Sender: TObject; var Key: Char);
  276. begin
  277.     if Not (Key in ['0'..'9', kBACKSPACE]) then
  278.         Key := #0;
  279. end;
  280.  
  281. procedure TAddRecordForm.PriceEditKeyPress(Sender: TObject; var Key: Char);
  282. begin
  283.     if Not (Key in ['0'..'9', kBACKSPACE, kCOMMA]) then
  284.         Key := #0;
  285. end;
  286.  
  287. procedure TAddRecordForm.PasteButtonClick(Sender: TObject);
  288. var
  289.     CursPos: Byte;
  290.     TempStr: String;
  291.     ActiveEdit: TEdit;
  292.     IValue: Integer;
  293.     FlValue: Single;
  294. begin
  295.     ActiveEdit := TEdit(ActiveControl);
  296.     with ActiveEdit do
  297.     begin
  298.         CursPos := SelStart;
  299.         TempStr := Text;
  300.  
  301.         PasteFromClipboard;
  302.  
  303.         if ActiveControl.Name = 'WarrantyEdit' then
  304.         begin
  305.             if not TryStrToInt(Text, IValue) or (IValue < 0) then
  306.             begin
  307.                 Text := TempStr;
  308.                 SelStart := CursPos;
  309.             end;
  310.         end
  311.         else
  312.             if ActiveControl.Name = 'PriceEdit' then
  313.             begin
  314.                 if not TryStrToFloat(Text, FlValue) or (FlValue < 0) then
  315.                 begin
  316.                     Text := TempStr;
  317.                     SelStart := CursPos;
  318.                 end
  319.             end;
  320.     End;
  321. end;
  322.  
  323. end.
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333. unit EditRecordUnit;
  334.  
  335. interface
  336.  
  337. uses
  338.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  339.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.StdCtrls, Clipbrd;
  340.  
  341. type
  342.   TEditRecordForm = class(TForm)
  343.     HardwareNameLabel: TLabel;
  344.     TitleLabel: TLabel;
  345.     CompanyNameLabel: TLabel;
  346.     DescriptionLabel: TLabel;
  347.     WarrantyLabel: TLabel;
  348.     PriceLabel: TLabel;
  349.     HardwareNameEdit: TEdit;
  350.     CompanyNameEdit: TEdit;
  351.     DescriptionEdit: TEdit;
  352.     WarrantyEdit: TEdit;
  353.     EditButton: TButton;
  354.     CancelButton: TButton;
  355.     PriceEdit: TEdit;
  356.     CopyPastePopupMenu: TPopupMenu;
  357.     CopyButton: TMenuItem;
  358.     PasteButton: TMenuItem;
  359.     CutButton: TMenuItem;
  360.     procedure CancelButtonClick(Sender: TObject);
  361.     procedure EditButtonClick(Sender: TObject);
  362.     procedure CopyPastePopupMenuPopup(Sender: TObject);
  363.     procedure CopyButtonClick(Sender: TObject);
  364.     procedure CutButtonClick(Sender: TObject);
  365.     procedure PasteButtonClick(Sender: TObject);
  366.     procedure StrEditChange(Sender: TObject);
  367.     procedure WarrantyEditChange(Sender: TObject);
  368.     procedure PriceEditChange(Sender: TObject);
  369.     procedure EditKeyDown(Sender: TObject; var Key: Word;
  370.       Shift: TShiftState);
  371.     procedure HardwareNameEditDblClick(Sender: TObject);
  372.     procedure WarrantyEditKeyPress(Sender: TObject; var Key: Char);
  373.     procedure PriceEditKeyPress(Sender: TObject; var Key: Char);
  374.     procedure StrEditKeyPress(Sender: TObject; var Key: Char);
  375.     procedure FormShow(Sender: TObject);
  376.   private
  377.     { Private declarations }
  378.   public
  379.     { Public declarations }
  380.   end;
  381.  
  382. var
  383.   EditRecordForm: TEditRecordForm;
  384.   CurrRow: Integer;
  385.  
  386. const
  387.     kBACKSPACE = #8;
  388.     kMINUS = #45;
  389.     kCOMMA = #44;
  390.     kDOWN = 40;
  391.     kUP = 38;
  392.     kENTER = 13;
  393.     kINSERT = 45;
  394.  
  395.  
  396. implementation
  397.  
  398. uses
  399.     MainUnit;
  400.  
  401. {$R *.dfm}
  402.  
  403. procedure TEditRecordForm.CancelButtonClick(Sender: TObject);
  404. begin
  405.     EditRecordForm.Close;
  406. end;
  407.  
  408. Function CreateNewRecord: THardwareRecord;
  409. Var
  410.     NewHardwareRecord: THardwareRecord;
  411. Begin
  412.     With NewHardwareRecord, EditRecordForm Do
  413.     Begin
  414.         HardwareName := HardwareNameEdit.Text;
  415.         CompanyName := CompanyNameEdit.Text;
  416.         Description := DescriptionEdit.Text;
  417.         Warranty := StrToInt(WarrantyEdit.Text);
  418.         Price := Int(StrToFloat(PriceEdit.Text) * 100) / 100;
  419.     End;
  420.     CreateNewRecord := NewHardwareRecord;
  421. End;
  422.  
  423.  
  424.  
  425. ////////////////////////////POPUP MENU /////////////////////////////////////
  426. procedure TEditRecordForm.CopyPastePopupMenuPopup(Sender: TObject);
  427. var
  428.     IValue: Integer;
  429.     FlValue: Single;
  430.     Buffer: String;
  431. begin
  432.     Buffer := Clipboard.AsText;
  433.     PasteButton.Enabled := True;
  434.  
  435.     if ActiveControl.Name = 'WarrantyEdit' then
  436.         PasteButton.Enabled := TryStrToInt(Buffer, IValue)
  437.     else
  438.         if ActiveControl.Name = 'PriceEdit' then
  439.             PasteButton.Enabled := TryStrToFloat(Buffer, FlValue);
  440. end;
  441.  
  442. Procedure ReplaceRecordInGrid(NewHardwareRecord: THardwareRecord);
  443. Begin
  444.     With MainForm.StringGrid, NewHardwareRecord Do
  445.     Begin
  446.         Cells[0, CurrRow] := HardwareName;
  447.         Cells[1, CurrRow] := CompanyName;
  448.         Cells[2, CurrRow] := Description;
  449.         Cells[3, CurrRow] := IntToStr(Warranty) + ' мес';
  450.         Cells[4, CurrRow] := FloatToStr(Price);
  451.     End;
  452.  
  453.     IsSomeChanges := True;
  454. End;
  455.  
  456. procedure ReplaceRecordInCorrectedFile(NewHardwareRecord: THardwareRecord);
  457. var
  458.     RecordsNum: Integer;
  459. begin
  460.     RecordsNum := CurrRow-1;
  461.     Seek(CorrectedRecordsFile, RecordsNum);
  462.     Write(CorrectedRecordsFile, NewHardwareRecord);
  463.     Seek(CorrectedRecordsFile, FileSize(CorrectedRecordsFile));
  464. end;
  465.  
  466.  
  467. procedure TEditRecordForm.EditButtonClick(Sender: TObject);
  468. Var
  469.     NewHardwareRecord: THardwareRecord;
  470. begin
  471.     NewHardwareRecord := CreateNewRecord();
  472.     ReplaceRecordInGrid(NewHardwareRecord);
  473.     ReplaceRecordInCorrectedFile(NewHardwareRecord);
  474.     EditRecordForm.Close;
  475. end;
  476.  
  477. procedure TEditRecordForm.PasteButtonClick(Sender: TObject);
  478. var
  479.     CursPos: Byte;
  480.     TempStr: String;
  481.     ActiveEdit: TEdit;
  482.     IValue: Integer;
  483.     FlValue: Single;
  484. begin
  485.     ActiveEdit := TEdit(ActiveControl);
  486.     with ActiveEdit do
  487.     begin
  488.         CursPos := SelStart;
  489.         TempStr := Text;
  490.  
  491.         PasteFromClipboard;
  492.  
  493.         if ActiveControl.Name = 'WarrantyEdit' then
  494.         begin
  495.             if not TryStrToInt(Text, IValue) or (IValue < 0) then
  496.             begin
  497.                 Text := TempStr;
  498.                 SelStart := CursPos;
  499.             end;
  500.         end
  501.         else
  502.             if ActiveControl.Name = 'PriceEdit' then
  503.             begin
  504.                 if not TryStrToFloat(Text, FlValue) or (FlValue < 0) then
  505.                 begin
  506.                     Text := TempStr;
  507.                     SelStart := CursPos;
  508.                 end
  509.             end;
  510.     End;
  511. end;
  512.  
  513. procedure TEditRecordForm.CopyButtonClick(Sender: TObject);
  514. begin
  515.     TEdit(ActiveControl).CopyToClipboard;
  516. end;
  517.  
  518. procedure TEditRecordForm.CutButtonClick(Sender: TObject);
  519. begin
  520.     TEdit(ActiveControl).CutToClipboard;
  521. end;
  522.  
  523. Function CheckPriceEdit():Boolean;
  524. var
  525.     IsEditCorrect: Boolean;
  526.     FlValue: Single;
  527. Begin
  528.     with EditRecordForm.PriceEdit do
  529.     begin
  530.         IsEditCorrect := (Text <> '') And (TryStrToFloat(Text, FlValue) And (Text[1] <> ',') And (Text[High(Text)] <> ','));
  531.     end;
  532.     CheckPriceEdit := IsEditCorrect;
  533. End;
  534.  
  535. Procedure EditEditButtonEnabled;
  536. var
  537.     IsRecordCorrect: Boolean;
  538. Begin
  539.     with EditRecordForm do
  540.     begin
  541.         IsRecordCorrect := (HardwareNameEdit.Text <> '') And (CompanyNameEdit.Text <> '') And (DescriptionEdit.Text <> '') And (WarrantyEdit.Text <> '') And CheckPriceEdit;
  542.         EditRecordForm.EditButton.Enabled := IsRecordCorrect;
  543.     end;
  544. End;
  545.  
  546. procedure TEditRecordForm.StrEditChange(Sender: TObject);
  547. begin
  548.     EditEditButtonEnabled;
  549. end;
  550.  
  551. procedure TEditRecordForm.WarrantyEditChange(Sender: TObject);
  552. var
  553.     CursPos: Byte;
  554.     TempStr: String;
  555.     IValue: Integer;
  556. begin
  557.     with WarrantyEdit do
  558.     begin
  559.         CursPos := SelStart;
  560.         TempStr := Text;
  561.  
  562.         if not TryStrToInt(TempStr, IValue) or (IValue < 0) then
  563.         begin
  564.             Delete (TempStr, SelStart, 1);
  565.             Text := TempStr;
  566.             SelStart := CursPos-1;
  567.         end
  568.         else
  569.         begin
  570.             Text := IntToStr(IValue);
  571.             SelStart := CursPos;
  572.         end;
  573.     end;
  574.  
  575.     EditEditButtonEnabled;
  576. end;
  577.  
  578. procedure TEditRecordForm.PriceEditChange(Sender: TObject);
  579. var
  580.     TempStr: String;
  581.     CursPos: Byte;
  582. begin
  583.     with PriceEdit do
  584.     begin
  585.         TempStr := Text;
  586.         CursPos := SelStart;
  587.  
  588.         if (length(TempStr)>1) And (TempStr[1] = '0') And (TempStr[2] = '0') then
  589.         begin
  590.             Delete(TempStr, 2, 1);
  591.             Text := TempStr;
  592.             SelStart := CursPos-1;
  593.         end;
  594.     end;
  595.  
  596.     EditEditButtonEnabled;
  597. end;
  598.  
  599. procedure TEditRecordForm.EditKeyDown(Sender: TObject;
  600.   var Key: Word; Shift: TShiftState);
  601. Begin
  602.     case key of
  603.         kENTER, kDOWN:
  604.         begin
  605.             SelectNext(ActiveControl, True, True);
  606.             with TEdit(ActiveControl) do
  607.                 SelStart := Length(Text);
  608.         end;
  609.         kUP:
  610.         begin
  611.             SelectNext(ActiveControl, False, True);
  612.             with TEdit(ActiveControl) do
  613.                 SelStart := Length(Text);
  614.         end;
  615.         kINSERT:
  616.             Key := 0;
  617.     end;
  618. End;
  619.  
  620. procedure TEditRecordForm.FormShow(Sender: TObject);
  621. var
  622.     WarrantyStr: String;
  623.     Row: Integer;
  624. begin
  625.     Row := CurrRow;
  626.  
  627.     HardwareNameEdit.Text := MainForm.StringGrid.Cells[0, Row];
  628.     CompanyNameEdit.Text := MainForm.StringGrid.Cells[1, Row];
  629.     DescriptionEdit.Text := MainForm.StringGrid.Cells[2, Row];
  630.  
  631.     WarrantyStr := MainForm.StringGrid.Cells[3, Row];
  632.     WarrantyEdit.Text := Copy(WarrantyStr, 1, Length(WarrantyStr) - 4);
  633.  
  634.     PriceEdit.Text := MainForm.StringGrid.Cells[4, Row];
  635.  
  636.     ActiveControl := CancelButton;
  637. end;
  638.  
  639. procedure TEditRecordForm.HardwareNameEditDblClick(Sender: TObject);
  640. begin
  641.     TEdit(Sender).Text := '';
  642. end;
  643.  
  644. procedure TEditRecordForm.StrEditKeyPress(Sender: TObject;
  645.   var Key: Char);
  646. begin
  647.     if Key = #13 then
  648.         Key := #0;
  649. end;
  650.  
  651. procedure TEditRecordForm.WarrantyEditKeyPress(Sender: TObject; var Key: Char);
  652. begin
  653.     if Not (Key in ['0'..'9', kBACKSPACE]) then
  654.         Key := #0;
  655. end;
  656.  
  657. procedure TEditRecordForm.PriceEditKeyPress(Sender: TObject; var Key: Char);
  658. begin
  659.     if Not (Key in ['0'..'9', kBACKSPACE, kCOMMA]) then
  660.         Key := #0;
  661. end;
  662. end.
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676. unit InformationUnit;
  677.  
  678. interface
  679.  
  680. uses
  681.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  682.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids;
  683.  
  684. type
  685.   TInformationForm = class(TForm)
  686.     StringGrid: TStringGrid;
  687.     TitleLabel: TLabel;
  688.     BackButton: TButton;
  689.     procedure FormCreate(Sender: TObject);
  690.     procedure BackButtonClick(Sender: TObject);
  691.     procedure FormShow(Sender: TObject);
  692.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  693.   private
  694.     { Private declarations }
  695.   public
  696.     { Public declarations }
  697.   end;
  698.  
  699. var
  700.   InformationForm: TInformationForm;
  701.  
  702. implementation
  703.  
  704. uses MainUnit;
  705. {$R *.dfm}
  706.  
  707. type
  708.     TArrOfRecord = Array Of THardwareRecord;
  709.  
  710. procedure TInformationForm.BackButtonClick(Sender: TObject);
  711. begin
  712.     InformationForm.Close;
  713. end;
  714.  
  715. procedure TInformationForm.FormClose(Sender: TObject; var Action: TCloseAction);
  716. var
  717.     I: Integer;
  718. begin
  719.     with StringGrid do
  720.     begin
  721.         for I := 1 to RowCount-1 do
  722.         begin
  723.             Cells[0,I] := '';
  724.             Cells[1,I] := '';
  725.         end;
  726.     end;
  727. end;
  728.  
  729. procedure TInformationForm.FormCreate(Sender: TObject);
  730. begin
  731.     With StringGrid Do
  732.     Begin
  733.         ColWidths[0] := 210;
  734.         ColWidths[1] := 80;
  735.  
  736.         Cells[0,0] := 'Фирма изготовитель';
  737.         Cells[1,0] := 'Цена (BYN)';
  738.     End;
  739. end;
  740.  
  741. procedure OutputRecordsArr(RecordsArr: TArrOfRecord);
  742. var
  743.     I: Integer;
  744. begin
  745.     with InformationForm.StringGrid do
  746.     begin
  747.         For I := 0 To High(RecordsArr) Do
  748.         Begin
  749.             Cells[0, I+1] := RecordsArr[I].CompanyName;
  750.             Cells[1, I+1] := FloatToStr(RecordsArr[I].Price);
  751.         End;
  752.     end;
  753. end;
  754.  
  755. function SortArrayOfRecords(RecordsArr: TArrOfRecord): TArrOfRecord;
  756. Var
  757.     I, K, IMin: Integer;
  758.     Buf: THardwareRecord;
  759. Begin
  760.     For K := 0 To High(RecordsArr)-1 Do
  761.     Begin
  762.         IMin := K;
  763.         For I := K + 1 To High(RecordsArr) Do
  764.         Begin
  765.             If RecordsArr[I].Price < RecordsArr[IMin].Price Then
  766.                 IMin := I;
  767.         End;
  768.  
  769.         Buf := RecordsArr[IMin];
  770.         RecordsArr[IMin] := RecordsArr[K];
  771.         RecordsArr[K] := Buf;
  772.     End;
  773.  
  774.     SortArrayOfRecords := RecordsArr;
  775. End;
  776.  
  777.  
  778. function CreateArrayOfRecords(RowCount: Integer): TArrOfRecord;
  779. var
  780.     RecordsArr: TArrOfRecord;
  781.     TempRecord: THardwareRecord;
  782.     I: Integer;
  783. begin
  784.     SetLength(RecordsArr, RowCount-1);
  785.     Seek(CorrectedRecordsFile, 0);
  786.  
  787.     for I := 0 to High(RecordsArr) do
  788.     begin
  789.         Read(CorrectedRecordsFile, TempRecord);
  790.         RecordsArr[I] := TempRecord;
  791.     end;
  792.  
  793.     CreateArrayOfRecords := RecordsArr;
  794. end;
  795.  
  796. procedure TInformationForm.FormShow(Sender: TObject);
  797. var
  798.     RowCount: Integer;
  799.     RecordsArr: TArrOfRecord;
  800. begin
  801.     RowCount := MainForm.StringGrid.RowCount;
  802.  
  803.     InformationForm.StringGrid.RowCount := RowCount;
  804.     if IsStringGridNotEmpty then
  805.     begin
  806.         RecordsArr := CreateArrayOfRecords(RowCount);
  807.         RecordsArr := SortArrayOfRecords(RecordsArr);
  808.         OutputRecordsArr(RecordsArr);
  809.     end;
  810. end;
  811.  
  812. end.
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832. unit MainUnit;
  833.  
  834. interface
  835.  
  836. uses
  837.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  838.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.StdCtrls, Vcl.Grids;
  839.  
  840. type
  841.     THardwareRecord = Record
  842.         HardwareName: String[17];
  843.         CompanyName: String[17];
  844.         Description: String[40];
  845.         Warranty: Word;
  846.         Price: Real;
  847.     end;
  848.   TMainForm = class(TForm)
  849.     TitelLabel: TLabel;
  850.     MainMenu: TMainMenu;
  851.     FileMenuItem: TMenuItem;
  852.     ManualMenuItem: TMenuItem;
  853.     AboutDeveloperMenuItem: TMenuItem;
  854.     OpenMenuItem: TMenuItem;
  855.     SaveMenuItem: TMenuItem;
  856.     StringGrid: TStringGrid;
  857.     AddRecordButton: TButton;
  858.     BackButton: TButton;
  859.     OpenDialog: TOpenDialog;
  860.     SaveDialog: TSaveDialog;
  861.     InfoButton: TButton;
  862.     procedure FormCreate(Sender: TObject);
  863.     procedure BackButtonClick(Sender: TObject);
  864.     procedure AddRecordButtonClick(Sender: TObject);
  865.     procedure StringGridClick(Sender: TObject);
  866.     procedure StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
  867.       Rect: TRect; State: TGridDrawState);
  868.     procedure StringGridKeyDown(Sender: TObject; var Key: Word;
  869.       Shift: TShiftState);
  870.     procedure FormShow(Sender: TObject);
  871.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  872.     procedure OpenMenuItemClick(Sender: TObject);
  873.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  874.     procedure SaveMenuItemClick(Sender: TObject);
  875.     procedure InfoButtonClick(Sender: TObject);
  876.     procedure AboutDeveloperMenuItemClick(Sender: TObject);
  877.   private
  878.     { Private declarations }
  879.   public
  880.     { Public declarations }
  881.   end;
  882.  
  883. const
  884.     DelColomn = 5;
  885.     EditColomn = 6;
  886.     clGrayCarbon = TColor($232323);
  887.     kRIGHT = 39;
  888.  
  889. var
  890.   MainForm: TMainForm;
  891.   IsStringGridNotEmpty, IsSomeChanges: Boolean;
  892.   RecordsFile, CorrectedRecordsFile, SaveFile: File Of THardwareRecord;
  893.  
  894. implementation
  895.  
  896. uses
  897.     AddRecordUnit, EditRecordUnit, InformationUnit;
  898. {$R *.dfm}
  899.  
  900. Procedure ResetRectFocus;
  901. Var
  902.     NewFocusRect: TGridRect;
  903. Begin
  904.     NewFocusRect.Left := 0;
  905.     NewFocusRect.Top  := 1;
  906.     NewFocusRect.Right := 0;
  907.     NewFocusRect.Bottom := 1;
  908.     MainForm.StringGrid.Selection := NewFocusRect;
  909. End;
  910.  
  911. Procedure DeleteRecordFromGrid (Row: Integer);
  912. Var
  913.     I: Integer;
  914. Begin
  915.     With MainForm.StringGrid Do
  916.     Begin
  917.         if RowCount = 2 then
  918.         Begin
  919.            Cells[0, 1] := '';
  920.            Cells[1, 1] := '';
  921.            Cells[2, 1] := '';
  922.            Cells[3, 1] := '';
  923.            Cells[4, 1] := '';
  924.            Cells[DelColomn, 1] := '';
  925.            Cells[EditColomn, 1] := '';
  926.            IsStringGridNotEmpty := False;
  927.         End
  928.         Else
  929.         Begin
  930.             For I := Row + 1 To RowCount - 1 Do
  931.             Begin
  932.                 Cells[0, I-1] := Cells[0, I];
  933.                 Cells[1, I-1] := Cells[1, I];
  934.                 Cells[2, I-1] := Cells[2, I];
  935.                 Cells[3, I-1] := Cells[3, I];
  936.                 Cells[4, I-1] := Cells[4, I];
  937.             End;
  938.             RowCount := RowCount - 1;
  939.         End;
  940.     End;
  941.     IsSomeChanges := True;
  942. End;
  943.  
  944. procedure DeleteRecordFromCorrectedFile(RecordsNum: Integer);
  945. var
  946.     I, RecordsCount: Integer;
  947.     TempRecord: THardwareRecord;
  948. begin
  949.     RecordsCount := FileSize(CorrectedRecordsFile);
  950.  
  951.     for I := RecordsNum to RecordsCount-1 do
  952.     begin
  953.         Seek(CorrectedRecordsFile, I);
  954.         Read(CorrectedRecordsFile, TempRecord);
  955.         Seek(CorrectedRecordsFile, I-1);
  956.         Write(CorrectedRecordsFile,TempRecord);
  957.     end;
  958.  
  959.     Seek(CorrectedRecordsFile, RecordsCount-1);
  960.     Truncate(CorrectedRecordsFile);
  961. end;
  962.  
  963. Procedure EditRecord(Row: Integer);
  964. Begin
  965.     CurrRow := Row;  //В модуле EditRecordUnit глобальная переменная со значением номера редактируемой строки
  966.     EditRecordForm.ShowModal;
  967. End;
  968.  
  969. procedure TMainForm.StringGridClick(Sender: TObject);
  970. var
  971.     SelectedRectCol, SelectedRectRow: Integer;
  972.  
  973. begin
  974.     SelectedRectCol := StringGrid.Selection.Right;
  975.     SelectedRectRow := StringGrid.Selection.Bottom;
  976.  
  977.     if (IsStringGridNotEmpty) then
  978.         case SelectedRectCol of
  979.             DelColomn:
  980.             Begin
  981.                 If MessageBox(Handle, 'Вы действительно хотите удалить выбранную запись?', 'Вы уверены?', MB_YESNO Or MB_ICONQUESTION) = IDYES Then
  982.                     DeleteRecordFromGrid(SelectedRectRow);
  983.                     DeleteRecordFromCorrectedFile(SelectedRectRow);
  984.                 ResetRectFocus;
  985.             End;
  986.             EditColomn:
  987.             Begin
  988.                 EditRecord(SelectedRectRow);
  989.                 ResetRectFocus;
  990.             End;
  991.         end;
  992. end;
  993. procedure TMainForm.AboutDeveloperMenuItemClick(Sender: TObject);
  994. begin
  995.    MessageBox(Handle, 'Разработчик: Наривончик Александр Михайлович, гр. 351004', 'О разработчике', MB_OK Or MB_ICONINFORMATION);
  996. end;
  997.  
  998. procedure TMainForm.AddRecordButtonClick(Sender: TObject);
  999. begin
  1000.     AddRecordForm.ShowModal;
  1001. end;
  1002.  
  1003. procedure TMainForm.BackButtonClick(Sender: TObject);
  1004. begin
  1005.     MainForm.Close;
  1006. end;
  1007.  
  1008. Procedure AddRecordToGrid(NewHardwareRecord: THardwareRecord);
  1009. Begin
  1010.     With MainForm.StringGrid, NewHardwareRecord Do
  1011.     Begin
  1012.         if IsStringGridNotEmpty then
  1013.             RowCount := RowCount + 1
  1014.         else
  1015.             IsStringGridNotEmpty := True;
  1016.  
  1017.         Cells[0, RowCount-1] := HardwareName;
  1018.         Cells[1, RowCount-1] := CompanyName;
  1019.         Cells[2, RowCount-1] := Description;
  1020.         Cells[3, RowCount-1] := IntToStr(Warranty) + ' мес';
  1021.         Cells[4, RowCount-1] := FloatToStr(Price);
  1022.         Cells[DelColomn, RowCount-1] := '  X';
  1023.         Cells[EditColomn, RowCount-1] := ' ...';
  1024.     End;
  1025. End;
  1026.  
  1027. Function CheckSaveFile: Boolean;
  1028. var
  1029.     CanBeSaved, IsFileCorrect: Boolean;
  1030.     Path: String;
  1031. begin
  1032.     if MainForm.SaveDialog.Execute then
  1033.     begin
  1034.         IsFileCorrect := True;
  1035.  
  1036.         Path := MainForm.SaveDialog.FileName;
  1037.         AssignFile(SaveFile, Path);
  1038.  
  1039.         try
  1040.             Rewrite(SaveFile);
  1041.         except
  1042.             IsFileCorrect := False;
  1043.             MessageBox(MainForm.Handle, 'Не удалось открыть файл!', 'Ошибка', MB_OK Or MB_ICONERROR);
  1044.         end;
  1045.  
  1046.         if IsFileCorrect then
  1047.             CloseFile(SaveFile);
  1048.  
  1049.         CanBeSaved := IsFileCorrect;
  1050.     end
  1051.     else
  1052.         CanBeSaved := False;
  1053.  
  1054.     CheckSaveFile := CanBeSaved;
  1055. end;
  1056.  
  1057. procedure SaveDataFile;
  1058. var
  1059.     RecordsCount, I: Integer;
  1060.     TempRecord: THardwareRecord;
  1061. begin
  1062.     Rewrite(SaveFile);
  1063.     RecordsCount := FileSize(CorrectedRecordsFile);
  1064.     I := 0;
  1065.     Seek(CorrectedRecordsFile, 0);
  1066.  
  1067.     while I < RecordsCount do
  1068.     begin
  1069.         Read(CorrectedRecordsFile, TempRecord);
  1070.         Write(SaveFile, TempRecord);
  1071.         Inc(I);
  1072.     end;
  1073.     CloseFile(SaveFile);
  1074.     IsSomeChanges := False;
  1075. end;
  1076.  
  1077. procedure TMainForm.SaveMenuItemClick(Sender: TObject);
  1078. begin
  1079.     If CheckSaveFile then
  1080.         SaveDataFile;
  1081. end;
  1082.  
  1083. procedure ClearStringGrid;
  1084. var
  1085.     I: Integer;
  1086. begin
  1087.     for I := MainForm.StringGrid.RowCount-1 DownTo 1  do
  1088.         DeleteRecordFromGrid(I);
  1089.     IsStringGridNotEmpty := False;
  1090. end;
  1091.  
  1092. procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
  1093. begin
  1094.     CloseFile(CorrectedRecordsFile);
  1095.     Erase(CorrectedRecordsFile);
  1096.     ClearStringGrid;
  1097. end;
  1098.  
  1099. procedure FillCorrectedRecordsFile;
  1100. var
  1101.     TempRecord: THardwareRecord;
  1102.     RecordsCount, I: Integer;
  1103. begin
  1104.     Reset(RecordsFile);
  1105.     RecordsCount := FileSize(RecordsFile);
  1106.     I := 0;
  1107.     while I < RecordsCount do
  1108.     begin
  1109.         Read(RecordsFile, TempRecord);
  1110.         Write(CorrectedRecordsFile, TempRecord);
  1111.         Inc(I);
  1112.     end;
  1113.  
  1114.     CloseFile(RecordsFile);
  1115. end;
  1116.  
  1117. procedure DownloadRecordsFromFile;
  1118. var
  1119.     I, RecordsCount: Integer;
  1120.     NewRecord: THardwareRecord;
  1121. begin
  1122.     Reset(RecordsFile);
  1123.     RecordsCount := FileSize(RecordsFile);
  1124.  
  1125.     if RecordsCount = 0 then
  1126.         IsStringGridNotEmpty := False
  1127.     else
  1128.     begin
  1129.         I := 0;
  1130.         while I < RecordsCount do
  1131.         begin
  1132.             Read(RecordsFile, NewRecord);
  1133.             AddRecordToGrid(NewRecord);
  1134.             Inc(I);
  1135.         end;
  1136.     end;
  1137.     CloseFile(RecordsFile);
  1138. end;
  1139.  
  1140. function CheckFileIn(const Path: String): Boolean;
  1141. var
  1142.     IsFileCorrect: Boolean;
  1143. begin
  1144.     IsFileCorrect := True;
  1145.     AssignFile(RecordsFile, Path);
  1146.     try
  1147.         Reset(RecordsFile);
  1148.     except
  1149.         IsFileCorrect := False;
  1150.         MessageBox(MainForm.Handle, 'Не удалось открыть файл!', 'Ошибка', MB_OK Or MB_ICONERROR);
  1151.     end;
  1152.  
  1153.     if IsFileCorrect then
  1154.         CloseFile(RecordsFile);
  1155.  
  1156.     CheckFileIn := IsFileCorrect;
  1157. end;
  1158.  
  1159. procedure ResetProgram;
  1160. begin
  1161.     ClearStringGrid;
  1162.     Seek(CorrectedRecordsFile, 0);
  1163.     Truncate(CorrectedRecordsFile);
  1164. end;
  1165.  
  1166. procedure TMainForm.OpenMenuItemClick(Sender: TObject);
  1167. var
  1168.     Path: String;
  1169.     IsFileCorrect: Boolean;
  1170. begin
  1171.     if OpenDialog.Execute then
  1172.     begin
  1173.         Path := OpenDialog.FileName;
  1174.  
  1175.         IsFileCorrect := CheckFileIn(Path);
  1176.         if IsFileCorrect then
  1177.         begin
  1178.             ResetProgram;
  1179.             DownloadRecordsFromFile;
  1180.             FillCorrectedRecordsFile;
  1181.             IsSomeChanges := False;
  1182.         end;
  1183.     end;
  1184. end;
  1185.  
  1186. procedure CreateEmptyCorrectedRecordsFile;
  1187. begin
  1188.     AssignFile (CorrectedRecordsFile, 'CorrectedFile.hdb');
  1189.     Rewrite(CorrectedRecordsFile);
  1190. end;
  1191.  
  1192. procedure TMainForm.FormShow(Sender: TObject);
  1193. begin
  1194.     CreateEmptyCorrectedRecordsFile;
  1195.     IsStringGridNotEmpty := False;
  1196.     IsSomeChanges := False;
  1197. end;
  1198.  
  1199. procedure TMainForm.InfoButtonClick(Sender: TObject);
  1200. begin
  1201.     InformationForm.ShowModal;
  1202. end;
  1203.  
  1204. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  1205. begin
  1206.     if IsStringGridNotEmpty And IsSomeChanges then
  1207.         if MessageBox(Handle, 'Вы хотите сохранить файл данных?', 'Cохранить?', MB_YESNO Or MB_ICONQUESTION) = IDYES Then
  1208.         begin
  1209.             CanClose := CheckSaveFile;
  1210.             If CanClose then
  1211.                 SaveDataFile;
  1212.         end;
  1213. end;
  1214.  
  1215. procedure TMainForm.FormCreate(Sender: TObject);
  1216. begin
  1217.     With StringGrid Do
  1218.     Begin
  1219.         ColWidths[0] := 120;
  1220.         ColWidths[1] := 120;
  1221.         ColWidths[2] := 240;
  1222.         ColWidths[3] := 70;
  1223.         ColWidths[4] := 70;
  1224.         Cells[0,0] := 'Название устройства';
  1225.         Cells[1,0] := 'Фирма изготовитель';
  1226.         Cells[2,0] := 'Главная техническая характеристика';
  1227.         Cells[3,0] := 'Гарантия';
  1228.         Cells[4,0] := 'Цена (BYN)';
  1229.     End;
  1230. end;
  1231.  
  1232. procedure TMainForm.StringGridDrawCell(Sender: TObject; ACol, ARow: Integer;
  1233.   Rect: TRect; State: TGridDrawState);
  1234. begin
  1235.     if IsStringGridNotEmpty And (Arow > 0) then
  1236.         case Acol of
  1237.             DelColomn:
  1238.                 With StringGrid Do
  1239.                 Begin
  1240.                     Canvas.Brush.Color := clGrayCarbon;
  1241.                     Canvas.FillRect(CellRect(Acol, Arow));
  1242.                     Canvas.TextOut(Rect.Left, Rect.Top, Cells[ACol, ARow]);
  1243.                 End;
  1244.             EditColomn:
  1245.                 With StringGrid Do
  1246.                 Begin
  1247.                     Canvas.Brush.Color := clGrayCarbon;
  1248.                     Canvas.FillRect(CellRect(Acol, Arow));
  1249.                     Canvas.TextOut(Rect.Left, Rect.Top, Cells[ACol, ARow]);
  1250.                 End;
  1251.         end;
  1252. end;
  1253.  
  1254. procedure TMainForm.StringGridKeyDown(Sender: TObject; var Key: Word;
  1255.   Shift: TShiftState);
  1256. var
  1257.     SelectedRectCol: Integer;
  1258. begin
  1259.     SelectedRectCol := StringGrid.Selection.Right;
  1260.     If (Key = kRIGHT) And (SelectedRectCol = DelColomn-1) Then
  1261.         Key := 0;
  1262. end;
  1263.  
  1264. end.
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291.  
  1292.  
  1293.  
  1294.  
  1295. unit StartUnit;
  1296.  
  1297. interface
  1298.  
  1299. uses
  1300.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  1301.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls,
  1302.   Vcl.Imaging.pngimage, Vcl.Menus, MainUnit;
  1303.  
  1304. type
  1305.   TStartForm = class(TForm)
  1306.     ProgramNameLabel: TLabel;
  1307.     StartButtonLabel: TLabel;
  1308.     DogImage: TImage;
  1309.     StartMainMenu: TMainMenu;
  1310.     ManualMenuItem: TMenuItem;
  1311.     AboutDeveloperMenuItem: TMenuItem;
  1312.     ExitLabel: TLabel;
  1313.     procedure LabelMouseEnter(Sender: TObject);
  1314.     procedure LabelMouseLeave(Sender: TObject);
  1315.     procedure StartButtonLabelClick(Sender: TObject);
  1316.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  1317.     procedure ExitLabelClick(Sender: TObject);
  1318.     procedure AboutDeveloperMenuItemClick(Sender: TObject);
  1319.   private
  1320.     { Private declarations }
  1321.   public
  1322.     { Public declarations }
  1323.   end;
  1324.  
  1325. var
  1326.   StartForm: TStartForm;
  1327.  
  1328. implementation
  1329.  
  1330. {$R *.dfm}
  1331.  
  1332. procedure TStartForm.StartButtonLabelClick(Sender: TObject);
  1333. begin
  1334.     StartForm.Visible := False;
  1335.     MainForm.ShowModal;
  1336.     StartForm.Visible := True;
  1337. end;
  1338.  
  1339. procedure TStartForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  1340. begin
  1341.     CanClose := MessageBox(Handle, 'Вы действительно хотите выйти?', 'Вы уверены?', MB_YESNO Or MB_ICONQUESTION) = IDYES;
  1342. end;
  1343.  
  1344. procedure TStartForm.AboutDeveloperMenuItemClick(Sender: TObject);
  1345. begin
  1346.    MessageBox(Handle, 'Разработчик: Наривончик Александр Михайлович, гр. 351004', 'О разработчике', MB_OK Or MB_ICONINFORMATION);
  1347. end;
  1348.  
  1349. procedure TStartForm.ExitLabelClick(Sender: TObject);
  1350. begin
  1351.     StartForm.Close;
  1352. end;
  1353.  
  1354. procedure TStartForm.LabelMouseEnter(Sender: TObject);
  1355. begin
  1356.     With Sender As TLabel Do
  1357.     Begin
  1358.         Font.Size := Font.Size + 4;
  1359.         Top := Top - 5;
  1360.         Left := Left - 5;
  1361.     End;
  1362. end;
  1363.  
  1364. procedure TStartForm.LabelMouseLeave(Sender: TObject);
  1365. begin
  1366.     With Sender As TLabel Do
  1367.     Begin
  1368.         Font.Size := Font.Size - 4;
  1369.         Top := Top + 5;
  1370.         Left := Left + 5;
  1371.     End;
  1372. end;
  1373.  
  1374. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement