Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.Grids, shellapi;
- type
- TMainForm = class(TForm)
- MainMenu: TMainMenu;
- Menu: TMenuItem;
- Help: TMenuItem;
- About: TMenuItem;
- Exit: TMenuItem;
- Tab: TStringGrid;
- ChangeColorButton: TButton;
- SecondTab: TStringGrid;
- procedure TabKeyPress(Sender: TObject; var Key: Char);
- procedure ConfirmExit(Sender: TObject; var CanClose: Boolean);
- procedure TabDrawCell(Sender: TObject; ACol, ARow: Integer;
- Rect: TRect; State: TGridDrawState);
- procedure CheckFill(Sender: TObject; var IsFilled: Boolean);
- procedure ChangeColor(Sender: TObject);
- procedure FillSecondTab(Sender: TObject);
- procedure FirstFill(Sender: TObject);
- procedure AboutClick(Sender: TObject);
- procedure HelpClick(Sender: TObject);
- procedure ExitClick(Sender: TObject);
- procedure ChangeColorButtonClick(Sender: TObject);
- procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
- procedure TabKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- MainForm: TMainForm;
- implementation
- {$R *.dfm}
- procedure TMainForm.TabKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if Key = VK_RETURN then
- ChangeColorButtonClick(Sender);
- end;
- procedure TMainForm.TabDrawCell(Sender: TObject; ACol, ARow: Integer;
- Rect: TRect; State: TGridDrawState);
- begin
- with Tab do
- begin
- try
- begin
- case (StrToInt(Cells[ACol, ARow])) of
- 1 :
- begin
- Canvas.Brush.Color := clAqua ;
- Canvas.FillRect(Rect);
- end;
- 2 :
- begin
- Canvas.Brush.Color := clBlue;
- Canvas.FillRect(Rect);
- end;
- 3 :
- begin
- Canvas.Brush.Color := clLime;
- Canvas.FillRect(Rect);
- end;
- 4 :
- begin
- Canvas.Brush.Color := clOlive;
- Canvas.FillRect(Rect);
- end;
- 5 :
- begin
- Canvas.Brush.Color := clPurple;
- Canvas.FillRect(Rect);
- end;
- 6 :
- begin
- Canvas.Brush.Color := clRed;
- Canvas.FillRect(Rect);
- end;
- 7 :
- begin
- Canvas.Brush.Color := clGreen;
- Canvas.FillRect(Rect);
- end;
- 8 :
- begin
- Canvas.Brush.Color := clYellow;
- Canvas.FillRect(Rect);
- end;
- end;
- end
- except
- end;
- end;
- Tab.Canvas.TextOut(Rect.Left+2, Rect.Top+2, SecondTab.Cells[ACol, ARow]);
- end;
- procedure TMainForm.AboutClick(Sender: TObject);
- begin
- ShowMessage('Данная программа выводит на экран окно, которое пользователь заполняет с помощью ReadKey. Окно разбивается на вертикальные столбцы. Столбцы закрашены периодически повторяющимися цветами фона с номерами от единицы до восьми.');
- end;
- procedure TMainForm.ChangeColorButtonClick(Sender: TObject);
- var
- IsFilled: Boolean;
- begin
- CheckFill(Sender, IsFilled);
- if (isFilled) then
- begin
- if SecondTab.Cells[12,9] = '1' then
- ChangeColor(Sender)
- else
- begin
- FillSecondTab(Sender);
- FirstFill(Sender);
- end;
- Tab.Options:= Tab.Options - [goEditing];
- end
- else
- ShowMessage('Заполните таблицу до конца!');
- end;
- procedure TMainForm.ConfirmExit(Sender: TObject; var CanClose: Boolean);
- begin
- case Application.MessageBox('Вы уверены, что хотите закрыть программу?', 'Выход', MB_YESNO) of ID_YES: ;
- else
- CanClose := False;
- end;
- end;
- procedure TMainForm.FillSecondTab(Sender: TObject);
- var
- i, j: Integer;
- begin
- for i:= 0 to Tab.ColCount do
- for j:= 0 to Tab.RowCount do
- if (Length(SecondTab.Cells[i,j]) = 0) then
- SecondTab.Cells[i,j] := Tab.Cells[i,j];
- end;
- procedure TMainForm.FirstFill(Sender: TObject);
- var
- Num, i, j: Integer;
- begin
- Num:= 0;
- for i:= 0 to Tab.ColCount do
- begin
- Inc(Num);
- if Num = 9 then Num:= 1;
- for j:= 0 to Tab.RowCount do
- Tab.Cells[i,j]:= IntToStr(Num);
- end;
- SecondTab.Cells[12,9]:= '1'
- end;
- procedure TMainForm.TabKeyPress(Sender: TObject; var Key: Char);
- var
- Numerals: set of char;
- begin
- Numerals := ['0'..'9', #8];
- if (Key in Numerals) then
- Key := #0;
- if (Length(Text) = 1) and (Key <> #8) then
- Key := #0;
- if (Length(Text) = 0) and (Key = '0') then
- Key := #0;
- if (Length(Tab.Cells[Tab.Col, Tab.Row]) = 1) and (Key <> #8) then
- Key := #0;
- if (Tab.Cells[Tab.Col, Tab.Row] = '0') and (Key <> #8) then
- Key := #0;
- end;
- procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if Key = VK_RETURN then
- ChangeColorButtonClick(Sender);
- end;
- procedure TMainForm.ChangeColor(Sender: TObject);
- var
- i, j: Integer;
- begin
- for i:= 0 to Tab.ColCount do
- SecondTab.Cells[i,9]:= Tab.Cells[i,0];
- for i:= 0 to Tab.ColCount do
- begin
- for j:= 0 to Tab.RowCount do
- begin
- if (i < 11) then
- Tab.Cells[i,j] := SecondTab.Cells[i+1,9]
- else
- Tab.Cells[i,j]:= SecondTab.Cells[1,9];
- end;
- end;
- end;
- procedure TMainForm.CheckFill(Sender: TObject; var IsFilled: Boolean);
- var
- i,j, ColCount, RowCount: Integer;
- begin
- IsFilled:= True;
- ColCount:= Tab.ColCount - 1;
- RowCount:= Tab.RowCount - 1;
- for i:= 0 to ColCount do
- for j:= 0 to RowCount do
- if (Length(Tab.Cells[i,j]) = 0) then
- IsFilled:= False;
- end;
- procedure TMainForm.ExitClick(Sender: TObject);
- begin
- Close;
- end;
- procedure TMainForm.HelpClick(Sender: TObject);
- begin
- ShowMessage('Для ввода следующего символа используйте Tab. Для смены цвета нажмите Enter или кнопку смены цвета');
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement