Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit2222;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, Vcl.StdCtrls, Clipbrd,
- Vcl.Grids, Vcl.ExtCtrls;
- type
- TForm1 = class(TForm)
- MainMenu1: TMainMenu;
- N1: TMenuItem;
- N3: TMenuItem;
- N4: TMenuItem;
- N5: TMenuItem;
- OpenDialog1: TOpenDialog;
- SaveDialog1: TSaveDialog;
- Label1: TLabel;
- Label3: TLabel;
- Button1: TButton;
- PopupMenu1: TPopupMenu;
- N8: TMenuItem;
- Label2: TLabel;
- StringGrid1: TStringGrid;
- N2: TMenuItem;
- N6: TMenuItem;
- N7: TMenuItem;
- Label4: TLabel;
- Edit1: TEdit;
- Button2: TButton;
- PopupMenu2: TPopupMenu;
- N9: TMenuItem;
- Bevel1: TBevel;
- Shape1: TShape;
- Shape2: TShape;
- Label5: TLabel;
- Label6: TLabel;
- Label9: TLabel;
- procedure N3Click(Sender: TObject);
- procedure N5Click(Sender: TObject);
- procedure N4Click(Sender: TObject);
- procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- procedure Button1Click(Sender: TObject);
- procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure N8Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
- Rect: TRect; State: TGridDrawState);
- procedure N6Click(Sender: TObject);
- procedure N7Click(Sender: TObject);
- procedure Edit1Change(Sender: TObject);
- procedure Edit1KeyPress(Sender: TObject; var Key: Char);
- procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
- procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
- const Value: string);
- procedure FormCreate(Sender: TObject);
- procedure N2Click(Sender: TObject);
- procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
- procedure StringGrid1Exit(Sender: TObject);
- procedure StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;
- var Value: string);
- procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
- var CanSelect: Boolean);
- function FormHelp(Command: Word; Data: NativeInt;
- var CallHelp: Boolean): Boolean;
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- Type
- TArr = Array Of Integer;
- Const
- EnabledKeys = ['0'..'9', #8];
- var
- Form1: TForm1;
- SaveResult : TModalResult;
- OutputFile, InputFile: TextFile;
- IsOkay, HasBeenSaved: Boolean;
- implementation
- {$R *.dfm}
- procedure TForm1.N2Click(Sender: TObject);
- Var
- StrNum, StrMark: String;
- Num, I, Mark: Integer;
- IsCorrect, IsEnough, IsInRange: Boolean;
- begin
- OpenDialog1:= TOpenDialog.Create(self);
- OpenDialog1.InitialDir := GetCurrentDir;
- OpenDialog1.Filter := 'Text file|*.txt';
- OpenDialog1.DefaultExt := 'txt';
- OpenDialog1.FileName := 'InputFileForm';
- with CreateMessageDialog('Файл должен иметь расширение .txt и быть открытым для чтения.'+#13#10+'Данные в файле должны быть представлены следующим образом:'+#13#10+'Первое число: число элементов.'+#13#10+'На следующей строке(-ах) находятся элементы, разделенные пробелом(-ами) или концом строки.'+#13#10+'После последнего элемента не должно быть никаких символов.', mtCustom, [mbOK], mbOK) do
- begin
- Caption := 'Инструкция';
- ShowModal;
- end;
- if OpenDialog1.Execute then
- begin
- if FileExists(OpenDialog1.FileName) then
- Begin
- AssignFile(InputFile, OpenDialog1.FileName);
- IsCorrect := True;
- IsEnough := True;
- IsInRange := True;
- try
- Reset(InputFile);
- except
- ShowMessage('Файл закрыт для чтения.');
- IsCorrect := False;
- end;
- if IsCorrect then
- Begin
- Try
- Read(InputFile, Num);
- Except
- IsCorrect := False;
- ShowMessage('Количество элементов должно быть числом.');
- End;
- If IsCorrect And ((Num < 2) Or (Num > 40)) Then
- Begin
- IsCorrect := False;
- ShowMessage('Количество элементов должно быть от 2 до 40.');
- End;
- if IsCorrect then
- Begin
- Edit1.Text := IntToStr(Num);
- StringGrid1.ColCount := Num;
- For I := 0 To StringGrid1.ColCount-1 Do
- Begin
- if Not(Eof(InputFile)) then
- Begin
- Try
- Read(InputFile, Mark);
- Except
- IsCorrect := False;
- End;
- if IsCorrect And ((Mark > -1000) And (Mark < 10000)) then
- Begin
- StrMark := IntToStr(Mark);
- StringGrid1.Cells[I, 0] := StrMark;
- End
- Else
- Begin
- if IsCorrect then
- IsInRange := False;
- End
- End
- Else
- IsEnough := False;
- End;
- End;
- if Not(IsCorrect) then
- ShowMessage('В файле есть не-число.');
- if Not(IsInRange) then
- Begin
- ShowMessage('В файле есть число, не входящее в диапазон допустимых значений.');
- IsCorrect := False;
- End;
- if Not(EoF(InputFile)) then
- Begin
- IsCorrect := False;
- ShowMessage('В файле находятся лишние данные.');
- End;
- if Not(IsEnough) then
- Begin
- ShowMessage('В файле не хватает данных.');
- IsCorrect := False;
- End;
- End;
- if IsCorrect then
- Begin
- IsOkay := True;
- StringGrid1.Visible := True;
- Label2.Visible := True;
- StringGrid1.Visible := True;
- Bevel1.Visible := True;
- Label5.Visible := True;
- Label6.Visible := True;
- Shape1.Visible := True;
- Shape2.Visible := True;
- Button2.Visible := True;
- Button2.Enabled := True;
- End
- Else
- Begin
- StringGrid1.Rows[0].Clear;
- Button2.Enabled := False;
- End;
- CloseFile(InputFile);
- End
- Else
- ShowMessage('Файл с таким именем не существует.');
- OpenDialog1.Free;
- End
- Else
- ShowMessage('Открытие файла было отменено.');
- end;
- procedure TForm1.N3Click(Sender: TObject);
- Var
- Result: String;
- begin
- SaveDialog1 := TSaveDialog.Create(self);
- SaveDialog1.InitialDir := GetCurrentDir;
- SaveDialog1.FileName := 'FormSave1';
- SaveDialog1.Filter := 'Text file|*.txt';
- SaveDialog1.DefaultExt := 'txt';
- if (StringGrid1.Visible) then
- if saveDialog1.Execute then
- begin
- if FileExists(SaveDialog1.FileName) then
- ShowMessage('Файл с таким именем уже существует, поэтому он будет перезаписан.');
- AssignFile(OutputFile, SaveDialog1.FileName);
- Rewrite(OutputFile);
- Result := Label9.Caption;
- Write(OutputFile, Result);
- CloseFile(OutputFile);
- ShowMessage('Сохранение прошло успешно.');
- HasBeenSaved := True;
- end
- else
- Begin
- ShowMessage('Сохраниение файла было отменено.');
- SaveDialog1.Free;
- End
- else
- ShowMessage('Нечего сохранять.');
- end;
- procedure TForm1.N4Click(Sender: TObject);
- begin
- with CreateMessageDialog('Эта программа получает наибольший элемент, используя рекурсию.' + #13#10 +'В первое поле необходимо ввести натуральное число от 2 до 40 и нажать кнопку "Получить".'+ #13#10 + 'В появившейся таблице заполните каждую ячейку элементом: числом от -9999 до 9999.' + #13#10 + 'Обратите внимание на цвет ячеек.' + #13#10 + 'Чтобы увидеть результат, нажмите кнопку "Получить".', mtCustom, [mbOK], mbOK) do
- begin
- Caption := 'Инструкция';
- ShowModal;
- end;
- end;
- procedure TForm1.N5Click(Sender: TObject);
- begin
- with CreateMessageDialog('Разработала Лутай В.В., гр. 351003.', mtCustom, [mbOK], mbOK) do
- begin
- Caption := 'О разработчице.';
- ShowModal;
- end;
- end;
- procedure TForm1.N6Click(Sender: TObject);
- Var
- Num: Integer;
- IsCorrect: Boolean;
- Str: String;
- begin
- Str := Clipboard.AsText;
- While (Length(Str) > 1) And (Str[1] = '0') Do
- Delete(Str, 1, 1);
- if (Str = '-0') then
- Str := '0';
- IsCorrect := True;
- Try
- Num := StrToInt(Str);
- Except
- On E: EConvertError Do
- Begin
- ShowMessage('В буфере находится объект, не являющийся числом.');
- IsCorrect := False;
- End;
- End;
- if IsCorrect then
- Begin
- if ActiveControl is TStringGrid then
- if (Num > -1000) And (Num < 10000) then
- StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := Str
- Else
- IsCorrect := False
- Else
- if (Num < 41) And (Num > 1) then
- Edit1.Text := Str
- Else
- IsCorrect := False;
- if Not(IsCorrect) then
- ShowMessage('В буфере находится число, которое не входит в диапазон допустимых значений.');
- End;
- end;
- procedure TForm1.N7Click(Sender: TObject);
- Var
- ACol, ARow: Integer;
- begin
- ClipBoard.AsText := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
- StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := '';
- end;
- procedure TForm1.N8Click(Sender: TObject);
- Var
- ACol, ARow: Integer;
- begin
- Clipboard.AsText := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
- end;
- procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
- Rect: TRect; State: TGridDrawState);
- Const
- clWebLightPink = TColor($C1B6FF);
- clWebDarkMagenta = TColor($8B008B);
- clWebMediumVioletRed = TColor($9314FF);
- Var
- Mark: Integer;
- IsFilled, IsCorrect, IsAMark: Boolean;
- begin
- IsCorrect := True;
- Try
- Mark := StrToInt(StringGrid1.Cells[ACol, ARow]);
- Except
- IsCorrect := False;
- End;
- if (StringGrid1.Cells[ACol, ARow] = '') then
- Begin
- StringGrid1.Canvas.Brush.Color := clWebLightPink;
- StringGrid1.Canvas.FillRect(Rect);
- StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
- End
- Else
- (*if Not(IsCorrect) then
- Begin
- StringGrid1.Canvas.Brush.Color := clWebDarkMagenta;
- StringGrid1.Canvas.FillRect(Rect);
- StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
- end
- Else
- if (IsCorrect And ((Mark < -999) Or (Mark > 9999))) then
- Begin
- StringGrid1.Canvas.Brush.Color := clWebMediumVioletRed;
- StringGrid1.Canvas.FillRect(Rect);
- StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
- End
- Else *)
- Begin
- StringGrid1.Canvas.Brush.Color := RGB(255, 251, 251);
- StringGrid1.Canvas.FillRect(Rect);
- StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
- End;
- end;
- procedure TForm1.StringGrid1Exit(Sender: TObject);
- Var
- Str: String;
- J, K: Integer;
- begin
- With StringGrid1 Do
- for K := 0 to ColCount-1 do
- Begin
- Str := Cells[K,0];
- j := 1;
- while J <= High(Str) do
- Begin
- if str[j] = ' ' then
- Begin
- Delete(Str, J, 1);
- Dec(j);
- End;
- Inc(j);
- End;
- if (Str = '-0') then
- StringGrid1.Cells[K, 0] := '0'
- Else
- Cells[K, 0] := Str;
- End;
- end;
- procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;
- var Value: string);
- begin
- Value := '#999';
- end;
- procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
- Var
- ACol, Arow: Integer;
- begin
- if Not(Key in EnabledKeys) And Not (Key = '-') Or ((Length(Trim(StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row])) >= 1) And (StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row][1]='0')) then
- Key := #0;
- end;
- procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- Var
- ACol, ARow: Integer;
- begin
- if Button = mbRight then
- Begin
- StringGrid1.MouseToCell(X, Y, ACol, ARow);
- StringGrid1.Col:=ACol;
- StringGrid1.Row:=ARow;
- Popupmenu1.Popup(X+GetClientOrigin.X+StringGrid1.Left, Y+GetClientOrigin.Y+StringGrid1.Top);
- End;
- end;
- procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
- var CanSelect: Boolean);
- Var
- Str: String;
- J, K: Integer;
- begin
- With StringGrid1 Do
- for K := 0 to ColCount-1 do
- Begin
- Str := Cells[K,0];
- j := 1;
- while J <= High(Str) do
- Begin
- if str[j] = ' ' then
- Begin
- Delete(Str, J, 1);
- Dec(j);
- End;
- Inc(j);
- End;
- if (Str = '-0') then
- StringGrid1.Cells[K, 0] := '0'
- Else
- if Str = '-' then
- Cells[K, 0] := ''
- Else
- Cells[K, 0] := Str;
- End;
- end;
- procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
- const Value: string);
- Var
- I, Mark, Pos: Integer;
- P: TPoint;
- Str: String;
- begin
- IsOkay := True;
- Label9.Visible := False;
- N3.Enabled := False;
- Button2.Enabled := False;
- Label3.Visible := False;
- if (Length(Trim(StringGrid1.Cells[ACol, ARow])) > 1) And (StringGrid1.Cells[ACol, ARow][1] = '-') then
- Pos := 2
- Else
- Pos := 1;
- While (Length(Trim(StringGrid1.Cells[ACol, ARow])) > Pos) And (Trim(StringGrid1.Cells[ACol, ARow][Pos]) = '0') Do
- Begin
- Str := Trim(StringGrid1.Cells[ACol, ARow]);
- Delete(Str, Pos, 1);
- StringGrid1.Cells[ACol, ARow] := Str;
- End;
- With StringGrid1 Do
- if (Trim(StringGrid1.Cells[ACol, ARow]) = '-0') then
- StringGrid1.Cells[ACol, ARow] := '0';
- for I := 0 to (StringGrid1.ColCount-1) do
- Begin
- if (Trim(StringGrid1.Cells[I, 0]) = '') Or (Trim(StringGrid1.Cells[I, 0]) = '-') then
- IsOkay := False
- Else
- Begin
- Try
- Mark := StrToInt(Trim(StringGrid1.Cells[I, 0]));
- Except
- IsOkay := False;
- End;
- if IsOkay then
- if (Mark > 9999) Or (Mark < -999) then
- IsOkay := False;
- End;
- End;
- if IsOkay then
- Button2.Enabled := True
- Else
- Button2.Enabled := False;
- end;
- procedure TForm1.Button1Click(Sender: TObject);
- Var
- Num: Integer;
- IsCorrect: Boolean;
- begin
- IsCorrect := True;
- Try
- Num := StrToInt(Edit1.Text);
- Except
- IsCorrect := False;
- ShowMessage('Введенное значение не соответствует формату.');
- End;
- if IsCorrect And (Num > 1) And (Num < 41) then
- Begin
- Label2.Visible := True;
- StringGrid1.ColCount := Num;
- StringGrid1.Visible := True;
- Bevel1.Visible := True;
- Label5.Visible := True;
- Label6.Visible := True;
- Shape1.Visible := True;
- Shape2.Visible := True;
- Button2.Visible := True;
- End
- Else
- ShowMessage('Введенное число не входит в диапазон допустимых значений.');
- end;
- Function FindMax(Arr: TArr; Max, I: Integer): Integer;
- Begin
- if I = -1 then
- Result := Max
- Else
- if Max < Arr[I] then
- Begin
- Max := Arr[I];
- Result := FindMax(Arr, Arr[I], I-1);
- End
- Else
- Result := FindMax(Arr, Max, I-1);
- End;
- procedure TForm1.Button2Click(Sender: TObject);
- Var
- Max, I: Integer;
- Arr: TArr;
- begin
- if IsOkay then
- Begin
- With StringGrid1 Do
- Begin
- SetLength(Arr, ColCount);
- for I := 0 to ColCount-1 do
- Arr[I] := StrToInt(Cells[I, 0]);
- Max := FindMax(Arr, Arr[High(Arr)], High(Arr));
- End;
- Label3.Visible := True;
- Label9.Caption := IntToStr(Max);
- Label9.Visible := True;
- N3.Enabled := True;
- End
- Else
- Begin
- Label9.Visible := False;
- Label3.Visible := False;
- N3.Enabled := False;
- ShowMessage('Перепроверьте введенные данные.');
- End;
- end;
- procedure TForm1.Edit1Change(Sender: TObject);
- begin
- if (Length(Edit1.Text) = 0) then
- Begin
- Button1.Enabled := False;
- Button2.Enabled := False;
- End
- Else
- if (StrToInt(Edit1.Text) > 1) And (StrToInt(Edit1.Text) < 41) then
- Button1.Enabled := True
- Else
- Button1.Enabled := False;
- HasBeenSaved := False;
- StringGrid1.Rows[0].Clear;
- Label9.Caption := '';
- Label9.Visible := False;
- Label3.Visible := False;
- N3.Enabled := False;
- end;
- procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- TEdit(Sender).ReadOnly := ((Shift=[ssShift]) Or (Shift=[ssCtrl]))
- end;
- procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
- begin
- if Not (Key in EnabledKeys) Or ((Length(Edit1.Text)=0) And (Key = '0')) then
- Key := #0
- Else
- if (Length(Edit1.Text) = 1) And ((Edit1.Selstart = 0) And (Key <> #8) And (StrToInt(Key+Edit1.Text) > 40) Or (Edit1.Selstart = 1) And Not(Key = #8) And ((StrToInt(Edit1.Text+Key)) > 40)) then
- Key := #0;
- end;
- procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
- Var
- Result: String;
- begin
- if Not(HasBeenSaved) And (Label9.Caption <> '') then
- with CreateMessageDialog('Вы не сохранили результат. Хотите сохранить?', mtWarning, [mbYes, mbNo]) do
- begin
- Caption := 'Запрос на выход';
- (FindComponent('Yes') as TButton).Caption := 'Да';
- (FindComponent('No') as TButton).Caption := 'Нет';
- ShowModal;
- if ModalResult = mrYes then
- Begin
- SaveDialog1 := TSaveDialog.Create(self);
- SaveDialog1.InitialDir := GetCurrentDir;
- SaveDialog1.FileName := 'FormSave1';
- SaveDialog1.Filter := 'Text file|*.txt';
- SaveDialog1.DefaultExt := 'txt';
- if saveDialog1.Execute then
- begin
- if FileExists(SaveDialog1.FileName) then
- ShowMessage('Файл с таким именем уже существует, поэтому он будет перезаписан.');
- AssignFile(OutputFile, SaveDialog1.FileName);
- Rewrite(OutputFile);
- Result := Label9.Caption;
- Write(OutputFile, Result);
- CloseFile(OutputFile);
- SaveDialog1.Free;
- Application.Terminate;
- end
- else
- Begin
- ShowMessage('Сохраниение файла было отменено.');
- CanClose := False;
- End;
- End
- Else
- if ModalResult = mrNo then
- Application.Terminate
- else
- CanClose := False;
- End
- Else
- with CreateMessageDialog('Вы точно хотите выйти?', mtWarning, [mbYes, mbNo]) do
- begin
- Caption := 'Запрос на выход';
- (FindComponent('Yes') as TButton).Caption := 'Да';
- (FindComponent('No') as TButton).Caption := 'Нет';
- ShowModal;
- if ModalResult = mrYes then
- Application.Terminate
- Else
- CanClose := False;
- End;
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- HasBeenSaved := False;
- end;
- function TForm1.FormHelp(Command: Word; Data: NativeInt;
- var CallHelp: Boolean): Boolean;
- begin
- CallHelp := False;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement