Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

обработчик исключительной ситуации


Страницы:   1 2

Дева ©   (2005-11-14 22:47:00) 

Помогите, пожалуйста, написать обработчик исключительной ситуации. Совершенно не могу понять, как его писать, может на примере разберусь.

Задача:
Имеется текстовое поле Edit1, в которое вводятся данные. При нажатии на кнопку Button1:

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
i:=StrToInt(Edit1.Text);
end;

Если в поле Edit1 будут написаны буквы к примеру, то сработает исключительная ситуация и обрубится выполнение всей программы. Надо этого избежать, помогите.


Leonid Troyanovsky   (2005-11-17 14:18:00) [1]


> Дева ©   (17.11.05 13:55) [27]
> Еще вот что, как сделать панель с крестиком в правом верхнем
> углу? То усть, чтобы она закрывалась?


IMHO, вопрос достоин отдельной темы, в которой нужно попытаться
объяснить, что есть искомая панель (и на зачем она нужна).
Или, на худой конец, нарисовать.

--
Regards, LVT.


Дева   (2005-11-17 13:55:00) [2]

Еще вот что, как сделать панель с крестиком в правом верхнем углу? То усть, чтобы она закрывалась?


Leonid Troyanovsky   (2005-11-17 13:43:00) [3]


> Дева ©   (17.11.05 13:18) [24]

> procedure TDlgClientForm.ButtonOkClick(Sender: TObject);
>
> begin
> if Length(Edit1.Text) <> 13 then
>        begin
>        ShowMessage('длина должна быть равна 13');
>        Edit1.SetFocus;
>        end
>  else
>    begin
>    ButtonOk.ModalResult:=mrOk;//Вот присваиваю значение
> mrOk



Немного не так.
Во-первых, кнопке ModalResult = mrOK присваивается заранее,
например, в design time.

А если надо отменить закрытие формы, то после, скажем,
ShowMessage надо сделать {Self.}ModalResult := mrNone.

--
Regards, LVT.


Skyle   (2005-11-17 13:32:00) [4]


> ButtonOk.ModalResult:=mrOk;//Вот присваиваю значение mrOk

убрать выделенное?


Дева   (2005-11-17 13:18:00) [5]

Помогите, пожалуйста!! Совсем не могу понять. Я вызываю методом ShowModal форму, на которой расположена кнопка Ok. Изначально ModalResult = mrNone, это нужно для того, чтобы закрытие формы и выполнение дальнейшего кода происходило лишь в том случае, когда данные в полях TEdit соответствовали требованиям, тогда ModalResult устанавливается в значение mrOk. Но тут у меня проблема - при выполнении всех требований нажимаю на кнопку хорошо и ничего не происходит, приходится нажимать второй раз. Тогда все происходит так, как должно было происходить. Почему? Где моя ошибка
модуль Client

procedure TFormClient.EditPMClick(Sender: TObject);
begin
with DlgClientForm do
 begin
   Edit1.Text:=ADOQueryClient.Fields.Fields[1].AsString;
   Edit2.Text:=ADOQueryClient.Fields.Fields[2].AsString;
   ButtonOk.ModalResult:=mrNone;//устанавливаю значение ModalResult
 end;
//вот вызов другой формы с проверкой того, какая кнопка нажата
if DlgClientForm.ShowModal=mrOk then
 begin
 ADOQueryClient.Edit;
 ADOQueryClient.Fields.Fields[1].AsString:=DlgClient.Cl1;
 ADOQueryClient.Fields.Fields[2].AsString:=DlgClient.Cl2;
 ADOQueryClient.Post;
 end;
end;

модуль DlgClient

procedure TDlgClientForm.ButtonOkClick(Sender: TObject);
begin
if Length(Edit1.Text) <> 13 then
       begin
       ShowMessage('длина должна быть равна 13');
       Edit1.SetFocus;
       end
 else
   begin
   ButtonOk.ModalResult:=mrOk;//Вот присваиваю значение mrOk
   Cl1:=Edit1.Text;
   Cl2:=Edit2.Text;
   end;
end;

P. S. Leonid Troyanovsky, спасибо, буду пробовать


Leonid Troyanovsky   (2005-11-17 12:20:00) [6]


> Дева ©   (17.11.05 12:01) [22]

> TEdit строку, длиной 13 символов и состоящую только из цифер,
>  как это проверить? Ну длину функцией Length я определю,
>  но как узнать, что она только из цифер?


http://rsdn.ru/?Forum/?mid=626935

Ну, а ConvertInput нужно написать свою, с учетом вхождения
только цифр: (s[i] in ['0'..'9]) and Length(s) <=13

--
Regards, LVT.


Дева   (2005-11-17 12:01:00) [7]

Подскажите еще вопрос. А если надо ввести в текстовое поле TEdit строку, длиной 13 символов и состоящую только из цифер, как это проверить? Ну длину функцией Length я определю, но как узнать, что она только из цифер?


Дева   (2005-11-17 03:37:00) [8]

Книг нет и это печально. На самом деле я купила себе книгу, что-то типа Delphi 5. И сравнила - один в один манулка по второму. Теперь не вижу смысл переводить деньги

Virgo_StyleСпасибо большое. Это и правда надежнее.

А в какой ситуации есть потребность использовать методы типа EConvertError. И в какой есть необходимость писать свой?


Virgo_Style   (2005-11-16 20:29:00) [9]

msguns ©   (16.11.05 16:24) [16]

imho, надежнее использовать TryStrTo...


Плохиш   (2005-11-16 17:30:00) [10]


> Дева ©   (16.11.05 15:25) [12]
> Плохиш, а насчет того, что обрубается, я нисколечки не вру!

Врёшь, врёшь. Там написано, что произошла ошибка такая-то и выполнение программы приостановлено, выполнение может быть продолжено по-шагово или нажатием "Старт".


Игорь Шевченко   (2005-11-16 16:50:00) [11]

msguns ©   (16.11.05 16:24) [16]

:))) вот бы такой компилятор


Amoeba   (2005-11-16 16:47:00) [12]


> Ведь есть же куча функций StrToXXXDef

Если у автора вопроса D5, то там эта ф-ия еще не появилась


msguns   (2005-11-16 16:24:00) [13]

Применительно к сабжевой ситуации ИМХО не стоит для проверки введенного значения в каждомконтроле ставить защищенный блок. Ведь есть же куча функций StrToXXX Def

Для данного случая вполне подходит такой вариант:

with Edit1 do
  if (Text>'') and  (if StrToIntDef(Text,-1)=-1) then
    begin
      ShowMessage('Ошибка !');
      SetFocus; SelectAll;
    end;


Игорь Шевченко   (2005-11-16 16:09:00) [14]

Digitman ©   (16.11.05 15:29) [13]


> им давно уже место на гвоздике в сортире.


Это ты, Сергей, погорячился. Потому как написание обработчика исключительной ситуации относится к книгам по первому Delphi.


Tonich   (2005-11-16 15:45:00) [15]


> Tonich. А в каких же это ситуациях мы краснеем?

ну это не тот форум что бы это обсуждать ))


> А то у меня все книги по второму дельфи

а вот это действительно печально как-то...


Digitman   (2005-11-16 15:29:00) [16]


> то у меня все книги по второму дельфи


им давно уже место на гвоздике в сортире.

неужто все так печально и нет ни резона ни возможности приобрести из соотв.литературы что-нть посвежее ?

хотя ключевые концепции в Делфи и по сей день не изменились, так что зерно "разумного-доброго-вечного" и там, в Д2, найти можно...


Дева   (2005-11-16 15:25:00) [17]

Sergey Masloff[1]
Как запретить ввод букв?

Джо, большое спасибо, что помог, хоть ты понял. А то у меня все книги по второму дельфи, а то что там написано, где галочку снимать, не соответствует моему (кажется, пятому). У меня теперь все работает, теперь смогу разобраться с тем, что же все-таки предсавляет из себя обработчик исключительной ситуации:)

Tonichи Плохиш
Хватить глумится. Я же помощи просила, вон Джо, например, без глума понял, в чем проблема...  

Плохиш, а насчет того, что обрубается, я нисколечки не вру!

Tonich. А в каких же это ситуациях мы краснеем?


Tonich   (2005-11-16 12:28:00) [18]

неее, они все краснеют )) особенно в определенных ситуациях )))))


Плохиш   (2005-11-16 11:57:00) [19]

Мне больше фраза "и обрубится выполнение всей программы" нравиться, ведь врёт и не краснеет, хотя может и краснеет :-)


Tonich   (2005-11-16 11:40:00) [20]


> Может всё-таки соизволишь прочитать, что в этот момент отладчик
> тебе сообщает и постараешься понять смысл этого сообщения?
>

а нафига???

она ж


> просто хочу разобраться с тем, как писать обработку исключительной
> ситуации


а тут еще читать всякие сообщения компилятора...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо