Delphi7: очистить ячейки Stringgrid если не выполняется условие

  • Автор темы -
  • Дата начала

Гость
#1
Добрый вечер! :rolleyes:
У меня курсовой проект... Дожила! :lool:
Всё шло гладко, но сегодня вот застряла на чистой глупости... :blink:
Задание следующее:
•Дана символьная квадратная матрица порядка 6. Заменить буквой а все ее элементы, расположенные выше строки с номером k.

Мне нужно сделать так, чтобы если за компьютер сядет дворник дядя Вася то он ничего не смог напортачить. Вдруг он например создаст матрицу 3*3 и потребует чтобы заменились символы находящиеся выше 10-ой строки . А 10-ой строки-то и нету. На этот случай предусмотрено ШоуМесседж "Некорректное значение!" и чтобы все элементы матрицы стирались. Сообщение-то показывается, но ячейки не очищаются, а заполняются буквами "а" :angry2: Вот текст программы и архив на всякий случай:

Код:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Spin, Grids, Menus, ImgList, XPMan;

type
TForm1 = class(TForm)
XPManifest1: TXPManifest;
ImageList1: TImageList;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
StringGrid1: TStringGrid;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
Label1: TLabel;
SpinEdit1: TSpinEdit;
BitBtn1: TBitBtn;
SpinEdit2: TSpinEdit;
SpinEdit3: TSpinEdit;
Label2: TLabel;
Label3: TLabel;
BitBtn2: TBitBtn;
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure BitBtn2Click(Sender: TObject);
procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i, j  : Byte;
const
Por	: Byte =5;
[color="#FF0000"]begin
if (SpinEdit1.Value>SpinEdit2.Value) or (SpinEdit1.Value>SpinEdit3.Value) then begin
ShowMessage('Некорректное значение!');
For i:=0 to SpinEdit1.Value-2 do
For j:=0 to SpinEdit1.Value-2 do
StringGrid1.Cells[j,i]:='';
end;[/color]
For i:=0 to SpinEdit1.Value-2 do
For j:=0 to Por do
StringGrid1.Cells[j,i]:='a'
end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13
then
begin
with StringGrid1 do
if Col < ColCount - 1
then
Col := Col + 1
else
if Row < RowCount - 1
then
begin
Row := Row + 1;
Col := 0;
end
else
begin
Row := 0;
Col := 0;
end;
end
else
key:=key;
end;

procedure TForm1.N8Click(Sender: TObject);
begin
MessageDlg('Чтобы запустить программу, нажмите кнопку "Запусить".'+#10#13+
'Чтобы выйти из программы нажмите пункт меню "Файл->Выход"',mtConfirmation,[mbOK],0);
end;


procedure TForm1.N5Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N6Click(Sender: TObject);
begin
MessageDlg('Разработала: Агапчева Юлия Романовна'+#10#13+
'Группа: ПИЮ-Д21'+#10#13+
'Предмет: Разработка и стандартизация программных средств и технологий'+#10#13+
'Вариант: 15',mtConfirmation,[mbOK],0);
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
StringGrid1.RowCount:=SpinEdit3.Value;
StringGrid1.ColCount:=SpinEdit2.Value;
end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
if StringGrid1.Cells[ACol,ARow]<>'' then begin
BitBtn1.Enabled:=True;
N3.Enabled:=True;
end
else
begin
BitBtn1.Enabled:=False;
N3.Enabled:=False;
end
end;

end.
Кто чем сможет... :blush:
 

Вложения

  • 194.6 КБ Просмотры: 5

Гость
#2
А может быть вообще поставить ограничение: чтобы дядя Вася не смог ввести в СпинЭдит1 значение большее чем строчек в матрице? :angry2: Только как ЭТО сделать я точно не знаю :rolleyes:
 
0

0rtega

Гость
#4
Думаю, один else все исправит:

Код:
if (SpinEdit1.Value>SpinEdit2.Value) or (SpinEdit1.Value>SpinEdit3.Value) then begin
ShowMessage('Некорректное значение!');
For i:=0 to SpinEdit1.Value-2 do
For j:=0 to SpinEdit1.Value-2 do
StringGrid1.Cells[j,i]:='';
end else
begin
For i:=0 to SpinEdit1.Value-2 do
For j:=0 to Por do
StringGrid1.Cells[j,i]:='a'
end;
end;
Можно еще проверку на корректность прикрутить к событию OnChange компонента SpinEdit. И там если введено некорректное значение, выдавать сообщение об ошибке и очищать SpinEdit