|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Программа вылетает (delphi 7), свойство кнопки Enabled или Visible
Доброго времени суток!
Программа: Код:
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". С чем это связано? Я бы хотела доделать эту программу. |
#2
|
||||
|
||||
Для начала:
StrToInt(Edit1.text) если там пустая строка или '-' как раз и даст такую ошибку. А Edit1Change наступает после каждого изменения. |