|
Вопрос # 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 (статус: Бакалавр), 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)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|