Advertisement
fewfw

Untitled

Jun 22nd, 2020
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 6.35 KB | None | 0 0
  1. unit Unit1;
  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.StdCtrls, Vcl.Menus, Vcl.Grids, shellapi;
  8.  
  9. type
  10.   TMainForm = class(TForm)
  11.     MainMenu: TMainMenu;
  12.     Menu: TMenuItem;
  13.     Help: TMenuItem;
  14.     About: TMenuItem;
  15.     Exit: TMenuItem;
  16.     Tab: TStringGrid;
  17.     ChangeColorButton: TButton;
  18.     SecondTab: TStringGrid;
  19.     procedure TabKeyPress(Sender: TObject; var Key: Char);
  20.     procedure ConfirmExit(Sender: TObject; var CanClose: Boolean);
  21.     procedure TabDrawCell(Sender: TObject; ACol, ARow: Integer;
  22.        Rect: TRect; State: TGridDrawState);
  23.     procedure CheckFill(Sender: TObject; var IsFilled: Boolean);
  24.     procedure ChangeColor(Sender: TObject);
  25.     procedure FillSecondTab(Sender: TObject);
  26.     procedure FirstFill(Sender: TObject);
  27.     procedure AboutClick(Sender: TObject);
  28.     procedure HelpClick(Sender: TObject);
  29.     procedure ExitClick(Sender: TObject);
  30.     procedure ChangeColorButtonClick(Sender: TObject);
  31.     procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  32.     procedure TabKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  33.   private
  34.     { Private declarations }
  35.   public
  36.     { Public declarations }
  37.   end;
  38.  
  39. var
  40.   MainForm: TMainForm;
  41.  
  42. implementation
  43.  
  44. {$R *.dfm}
  45.  
  46. procedure TMainForm.TabKeyDown(Sender: TObject; var Key: Word;
  47.   Shift: TShiftState);
  48. begin
  49.     if Key = VK_RETURN then
  50.     ChangeColorButtonClick(Sender);
  51. end;
  52.  
  53. procedure TMainForm.TabDrawCell(Sender: TObject; ACol, ARow: Integer;
  54.    Rect: TRect; State: TGridDrawState);
  55. begin
  56.     with Tab do
  57.    begin
  58.       try
  59.       begin
  60.         case (StrToInt(Cells[ACol, ARow])) of
  61.             1 :
  62.             begin
  63.                 Canvas.Brush.Color := clAqua ;
  64.                 Canvas.FillRect(Rect);
  65.             end;
  66.             2 :
  67.             begin
  68.                 Canvas.Brush.Color := clBlue;
  69.                 Canvas.FillRect(Rect);
  70.             end;
  71.             3 :
  72.             begin
  73.                 Canvas.Brush.Color := clLime;
  74.                 Canvas.FillRect(Rect);
  75.             end;
  76.             4 :
  77.             begin
  78.                 Canvas.Brush.Color := clOlive;
  79.                 Canvas.FillRect(Rect);
  80.             end;
  81.             5 :
  82.             begin
  83.                 Canvas.Brush.Color := clPurple;
  84.                 Canvas.FillRect(Rect);
  85.             end;
  86.             6 :
  87.             begin
  88.                 Canvas.Brush.Color := clRed;
  89.                 Canvas.FillRect(Rect);
  90.             end;
  91.             7 :
  92.             begin
  93.                 Canvas.Brush.Color := clGreen;
  94.                 Canvas.FillRect(Rect);
  95.             end;
  96.             8 :
  97.             begin
  98.                 Canvas.Brush.Color := clYellow;
  99.                 Canvas.FillRect(Rect);
  100.             end;
  101.          end;
  102.       end
  103.       except
  104.     end;
  105.     end;
  106.    Tab.Canvas.TextOut(Rect.Left+2, Rect.Top+2, SecondTab.Cells[ACol, ARow]);
  107. end;
  108.  
  109. procedure TMainForm.AboutClick(Sender: TObject);
  110. begin
  111.     ShowMessage('Данная программа выводит на экран окно, которое пользователь заполняет с помощью ReadKey. Окно разбивается на вертикальные столбцы. Столбцы закрашены периодически повторяющимися цветами фона с номерами от единицы до восьми.');
  112. end;
  113.  
  114. procedure TMainForm.ChangeColorButtonClick(Sender: TObject);
  115. var
  116.    IsFilled: Boolean;
  117. begin
  118.    CheckFill(Sender, IsFilled);
  119.    if (isFilled) then
  120.    begin
  121.     if SecondTab.Cells[12,9] = '1' then
  122.         ChangeColor(Sender)
  123.     else
  124.     begin
  125.         FillSecondTab(Sender);
  126.         FirstFill(Sender);
  127.     end;
  128.     Tab.Options:= Tab.Options - [goEditing];
  129.    end
  130.    else
  131.     ShowMessage('Заполните таблицу до конца!');
  132. end;
  133.  
  134. procedure TMainForm.ConfirmExit(Sender: TObject; var CanClose: Boolean);
  135. begin
  136.     case Application.MessageBox('Вы уверены, что хотите закрыть программу?', 'Выход', MB_YESNO) of ID_YES: ;
  137.     else
  138.         CanClose := False;
  139.     end;
  140. end;
  141.  
  142. procedure TMainForm.FillSecondTab(Sender: TObject);
  143. var
  144.     i, j: Integer;
  145. begin
  146.     for i:= 0 to Tab.ColCount do
  147.         for j:= 0 to Tab.RowCount do
  148.             if (Length(SecondTab.Cells[i,j]) = 0) then
  149.                 SecondTab.Cells[i,j] := Tab.Cells[i,j];
  150. end;
  151.  
  152. procedure TMainForm.FirstFill(Sender: TObject);
  153. var
  154.     Num, i, j: Integer;
  155. begin
  156.     Num:= 0;
  157.    for i:= 0 to Tab.ColCount do
  158.     begin
  159.         Inc(Num);
  160.         if Num = 9 then Num:= 1;
  161.             for j:= 0 to Tab.RowCount do
  162.             Tab.Cells[i,j]:= IntToStr(Num);
  163.         end;
  164.    SecondTab.Cells[12,9]:= '1'
  165. end;
  166.  
  167. procedure TMainForm.TabKeyPress(Sender: TObject; var Key: Char);
  168. var
  169.     Numerals: set of char;
  170. begin
  171.     Numerals := ['0'..'9', #8];
  172.     if (Key in Numerals) then
  173.         Key := #0;
  174.    if (Length(Text) = 1) and (Key <> #8) then
  175.     Key := #0;
  176.    if (Length(Text) = 0) and (Key = '0') then
  177.     Key := #0;
  178.    if (Length(Tab.Cells[Tab.Col, Tab.Row]) = 1) and (Key <> #8) then
  179.     Key := #0;
  180.    if (Tab.Cells[Tab.Col, Tab.Row] = '0') and (Key <> #8) then
  181.     Key := #0;
  182. end;
  183.  
  184. procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
  185.   Shift: TShiftState);
  186. begin
  187.    if Key = VK_RETURN then
  188.     ChangeColorButtonClick(Sender);
  189. end;
  190.  
  191. procedure TMainForm.ChangeColor(Sender: TObject);
  192. var
  193.     i, j: Integer;
  194. begin
  195.     for i:= 0 to Tab.ColCount do
  196.     SecondTab.Cells[i,9]:= Tab.Cells[i,0];
  197.    for i:= 0 to Tab.ColCount do
  198.    begin
  199.       for j:= 0 to Tab.RowCount do
  200.       begin
  201.          if (i < 11) then
  202.             Tab.Cells[i,j] := SecondTab.Cells[i+1,9]
  203.          else
  204.             Tab.Cells[i,j]:= SecondTab.Cells[1,9];
  205.       end;
  206.    end;
  207. end;
  208.  
  209. procedure TMainForm.CheckFill(Sender: TObject; var IsFilled: Boolean);
  210. var
  211.     i,j, ColCount, RowCount: Integer;
  212. begin
  213.     IsFilled:= True;
  214.    ColCount:= Tab.ColCount - 1;
  215.    RowCount:= Tab.RowCount - 1;
  216.    for i:= 0 to  ColCount do
  217.     for j:= 0 to RowCount do
  218.         if (Length(Tab.Cells[i,j]) = 0) then
  219.             IsFilled:= False;
  220. end;
  221.  
  222.  
  223.  
  224. procedure TMainForm.ExitClick(Sender: TObject);
  225. begin
  226.     Close;
  227. end;
  228.  
  229. procedure TMainForm.HelpClick(Sender: TObject);
  230. begin
  231.     ShowMessage('Для ввода следующего символа используйте Tab. Для смены цвета нажмите Enter или кнопку смены цвета');
  232. end;
  233.  
  234. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement