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

Тема в разделе "Delphi - FAQ", создана пользователем -, 21 мар 2010.

  1. Гость

    Доброго времени суток! ^_^
    Программа:
    Код (Text):
    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?:
     
  2. Гость

    Спасибо:)
     
Загрузка...

Поделиться этой страницей