Программа "Защита от дураков"

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

  1. Гость

    Доброго времени суток! :wub:
    У меня программа поиска элемента, вводимого в ячейки StringGrid. При нахождении элемента показывается сообщение "Найден", если же такого эл-та нет, то соответственно "Не найден". Преподаватель велел поставить в программу "Защиту от дураков", то есть если за компьютер садится какая-нибудь Баба Маня и вместо цифр начнёт писать элементы словами или писать символы или выходить за границы массива или дробные писать (в общем все-все-все её неправильные действия я должна предугадать), то программа НЕ должна вылетать, никаких окошек с крестиком не должно появляться, а должно показываться "Недопустимый элемент" и неправильное значение в ячейке или эдите должно стираться. Я решила сделать это через case, ну и затупила... :) Ну редко я пользуюсь этим case! :( Понимаю что это нехорошо, и хочу исправиться ^_^
    Вот программа:
    Код (Delphi):
    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);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;
    I,J: integer;
    implementation

    {$R *.dfm}
    procedure TForm1.Edit1Change(Sender: TObject);
    begin
    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
    '1':;
    '2':;
    '3':;
    '4':;
    '5':;
    '6':;
    '7':;
    '8':;
    '9':;
    '0':;
    else begin
    [color="#FF0000"]Key:='';[/color]
    ShowMessage('Недопустимый элемент!');
    end;
    end;
    end.
    Красным выделено то что программа мне подсвечивает.
    Как исправить сиё недоразумение? :eek:oo:
     
  2. Dock1100

    Dock1100 :-]

    Регистрация:
    9 ноя 2009
    Сообщения:
    678
    Симпатии:
    0
    Попробуй через Try

    Код (Text):
    1 Try //при ошыбке должно просто пропустить
    оператор
    Finally //выполняетса после Try независимо от того была там ошибка или нет
    оператор
    End;//для Try

    2 Try //при ошыбке должно просто пропустить
    оператор
    Except //выполняетса после Try если была ошибка в Try
    оператор
    End; //для Try
    К примеру
    Код (Text):
    Try
    n:=StrToInt(Edit1.text);
    Except
    showmessage('не могу считать ячейку');
    end;
     
  3. Гость

    Спасибо огромное! :) Как здесь повысить Вам репутацию?
     
Загрузка...

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