![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Программа всё та же самая: не позволяет пользователю вводить в Edit'ы и StringGrid буквы, символы и прочую чепуху, не позволяет выходить за границы массива. Это я сделала (спасибо Вам). НО ещё нужно сделать чтобы программа не вылетала если мы вводим число превышающее диапазон Integer (-2147483648..2147483647) и как только будет попытка ввести число большее то программа должна выдавать сообщение "Превышен размер числа!" и стирать неправильное число.
Вот программа: Код:
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; 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); private { Private declarations } public { Public declarations } end; var Form1: TForm1; I,J: integer; implementation {$R *.dfm} procedure TForm1.Edit1Change(Sender: TObject); begin If (StrToInt(Edit1.Text)>20) OR (StrToInt(Edit1.Text)<=0) then begin ShowMessage('Выход за границы массива!'); Edit1.Text:='20'; end; StringGrid1.ColCount:=StrToInt(Edit1.Text)+1; end; procedure TForm1.Button1Click(Sender: TObject); const SIZE=20; var a: array[1..SIZE] of integer; n: integer; found: boolean; i,m: integer; begin {ввод числа элементов массива n<20} n:=StrToInt(Edit1.text); {ввод массива } for i:=1 to n-1 do a[i]:=StrToInt(StringGrid1.Cells[i,1]); {ввод искомого элемента массива} m:=StrToInt(Edit2.text); {процедура поиска в массиве} 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; procedure TForm1.Edit1KeyPress(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 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; end. Код:
Программа всё та же самая: не позволяет пользователю вводить в Edit'ы и StringGrid буквы, символы и прочую чепуху, не позволяет выходить за границы массива. Это я сделала (спасибо Вам blush.gif ). НО ещё нужно сделать чтобы программа не вылетала если мы вводим число превышающее диапазон Integer (-2147483648..2147483647) и как только будет попытка ввести число большее то программа должна выдавать сообщение "Превышен размер числа!" и стирать неправильное число. Вот программа: 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; 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); private { Private declarations } public { Public declarations } end; var Form1: TForm1; I,J: integer; implementation {$R *.dfm} procedure TForm1.Edit1Change(Sender: TObject); begin If (StrToInt(Edit1.Text)>20) OR (StrToInt(Edit1.Text)<=0) then begin ShowMessage('Выход за границы массива!'); Edit1.Text:='20'; end; StringGrid1.ColCount:=StrToInt(Edit1.Text)+1; end; procedure TForm1.Button1Click(Sender: TObject); const SIZE=20; var a: array[1..SIZE] of integer; n: integer; found: boolean; i,m: integer; begin {ввод числа элементов массива n<20} n:=StrToInt(Edit1.text); {ввод массива } for i:=1 to n-1 do a[i]:=StrToInt(StringGrid1.Cells[i,1]); {ввод искомого элемента массива} m:=StrToInt(Edit2.text); {процедура поиска в массиве} 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; procedure TForm1.Edit1KeyPress(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 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; end. Какое условие нужно сделать? С if'ами не прокатывает, вылетает ![]() Последний раз редактировалось Admin, 13.03.2010 в 17:16. |
#2
|
||||
|
||||
![]() попробуй StringGrid1.OnSetEditText
а там как всегда Код:
try ... except ... end; |
#3
|
||||
|
||||
![]() Попробую
![]() |
#4
|
|||
|
|||
![]() Вот похожая тема, может поможет)
http://www.delphisources.ru/forum/sh...ad.php?t=11127 |