Программа вылетает (delphi 7)

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

Guest

#1
Доброго времени суток! ^_^
Программа:
Код:
unit laba3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;

type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Edit1Change(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit2Change(Sender: TObject);
procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
private
{ Private declarations }
public
{ Public declarations }
end;
const
SIZE=20;
var
a: array[1..SIZE] of integer;
Form1: TForm1;
I,J: integer;
h,k,n,m: integer;


implementation

{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject);
begin
h:=0;
n:=StrToInt(Edit1.text);
If (n>20) OR (n<=0)
then begin ShowMessage('Выход за границы массива!');
Edit1.Text:='20';
end;
StringGrid1.ColCount:=n+1;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
m:=StrToInt(Edit2.text);
if (2147483647 < StrToInt64(Edit2.Text)) or (-2147483647 > StrToInt64(Edit2.Text))
then
begin
ShowMessage('Превышен размер числа!');
Edit2.Text:='0';
end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9':;
else
begin
Key := #0;
ShowMessage('Недопустимый элемент!');
end;
end;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9':;
else
begin
Key := #0;
ShowMessage('Недопустимый элемент!');
end;
end;
end;

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
h:=h+1;
Label1.Caption:=IntToStr(h);
for i:=1 to n-1 do
a[i]:=StrToInt(StringGrid1.Cells[i,1]);
case Key of
'0'..'9':;
else
begin
Key := #0;
ShowMessage('Недопустимый элемент!');
end;
end;
end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
if (2147483647 < StrToInt64(Value)) or (-2147483647 > StrToInt64(Value))
then begin
ShowMessage('Превышен размер числа!');
for i:=1 to n do
StringGrid1.Cells[i,j+1]:='';
end;
//if h=StrToInt(Edit1.Text) then Button1.Enabled:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
found: boolean;
i: integer;
begin
{ввод числа элементов массива n<20}
{ввод массива }
{ввод искомого элемента массива}
{процедура поиска в массиве}
found:=false;
i:=1;
repeat
if a[i]=m then
found:=true
else
i:=i+1;
until (i>n) or (found = true);
if found=true then
ShowMessage('Совпадение с элементом номер '+ IntToStr(i)+#13+
'Поиск успешно завершен')
else
ShowMessage('Заданный элемент не найден!');
end;
end.
Преподаватель дал задание сделать Button1 недоступной или невидимой до тех пор пока не будут заполнены все ячейки StringGrid1. Подсказал что из процедуры Button1.Click нужно переместить всё что не связано непосредственно с кнопкой в Edit'ы и поставить в свойствах Button1 Enabled=False, а в тексте программы ввести счётчик и условие "если счётчик=кол-ву эл-тов то Enabled:=True" Я это сделала. Но как только пытаюсь щёлкнуть в Edit'ы или на StringGrid - программа вылетает с ошибкой "is not a valid integer value". :) С чем это связано? Я бы хотела доделать эту программу. :what?: