Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 925

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
1. Вопрос такой: у меня есть программа "П". она вызывает процедуру "Б". В процедуре "Б" проверяется переменная "а". Если она неверная, то выводится сообщение об ошибке, затем
Form2.close;
Form1.showmodal;
Мне нужно, чтобы при ошибке открывалась первая форма и работа программы приостанавливалась, ожидая реакции.
Так вот, этот код работает, но только один раз. Если опять "а" с ошибкой, то программа "виснет" при нажатии на кнопку, вызывающую вторую форму(из первой модальной). Помогите...
2. Есть 9 штук Edit. Можно ли в паре строк сделать их видимыми, или придётся писать 9 раз EditX.visible:= true?

Тамара Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задала: Тамара (статус: Посетитель)
Вопрос отправлен: 15 сентября 2007, 16:45
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Dron

Здравствуйте, Тамара!
2. Найти компонент по имени можно с помощью метода FindComponent. В данном случае главное, чтобы компоненты имели имена \'EditN\'. Массовые операции делаются с помощью цикла:

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  for i:=1 to 9 do
    TEdit(FindComponent(\'Edit\'+IntToStr(i))).Visible:=True
end;
Удачи!

Ответ отправил: Dron (статус: Студент)
Время отправки: 15 сентября 2007, 18:33
Оценка за ответ: 5

Комментарий к оценке: Спасибо! Это то, что нужно!

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Тамара!
По-первому вопросу просим весь исходный код в студию, бо так тяжело понять, что и где Вы там написали.

По-второму. Если у Вас на форме больше нет компонентов TEdit и/или у них разные имена, тогда лучше так использовать:

for i := 0 to ComponentCount - 1 do
      if Components[i] is TEdit then
         (Components[i] as TEdit).Visible := True;
А если последнюю строку заменить на
(Components[i] as TEdit).Visible := not (Components[i] as TEdit).Visible;
то это получается "выключатель", и такую функцию можно использовать как для отображения TEdit, так и для их скрытия.

Ну а если у Вас есть еще другие TEdit на форме, тогда лучше нужные Вам TEdit назвать следующим образом: первая чать имени постоянная и одинаковая для всех, а вторая - номер по порядку. Например, как это делается по умолчанию.
В таком случая проще использовать:
for i := 1 to 9 do
    (FindComponent('Edit'+IntToStr(i)) as TEdit).Visible := True;

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 17 сентября 2007, 13:34
Оценка за ответ: 5

Комментарий к оценке: Спасибо, очень подробно!

Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 20 сентября 2007, 20:13; участников в обсуждении: 3.
Тамара

Тамара (статус: Посетитель), 17 сентября 2007, 20:13 [#1]:

Feniks, попробую вкрадце описать:
на первой форме вводятся исходные данные, затем

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.hide;
form2.show;
end;

procedure TForm2.B(a: real);
begin
if (a > 100) then
begin
if MessageDlg(\'ошибка: а> 100\',mterror,[mbOK],0) then
begin
form2.close;
form1.showmodal;
end
end
end;

Так вот, если в первой форме исправить данные, но "а" будет опять больше ста, вернёмся в первую форму, но при попытке вызвать третий раз форму2 всё "висит".
Вот, вроде всё.
Feniks

Feniks (статус: Бакалавр), 18 сентября 2007, 19:08 [#2]:

Все равно мало что понятно. :(
Зачем вызывать "В" из Формы2 ? Может ее можно положить в Форму1 и от туда вызывать ? И что вообще находится на Форме2 ?
Тамара

Тамара (статус: Посетитель), 19 сентября 2007, 20:08 [#3]:

На первой форме вводятся данные, на второй идут расчёты(довольно громоздкие, с вызовом кучи подпрограмм, в том числе и "Б") и выводятся результаты на экран. Я думаю, может вызывать проверку с "Б" ещё на выходе из первой формы и блокировать начало расчётов(и выход из 1 формы)?
Вадим К

Вадим К (статус: Академик), 19 сентября 2007, 20:33 [#4]:

Ну так вы разделяйте мухи и котлеты.
расчёты отдельно, проверки отдельно, вывод тоже отдельно.
Галочка "подтверждения прочтения" - вселенское зло.
Тамара

Тамара (статус: Посетитель), 20 сентября 2007, 20:13 [#5]:

Да. Так стало гораздо лучше - не надо из формы в форму скакать и всё работает. Спасибо всем за участие!

31 января 2011, 19:29: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:51
Выполнено за 0.04 сек.