![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выполнение обработке в одной форме, а показ прогресса в другой. [D7, 95/98, XP]
_Lucifer_ © (2005-12-26 13:16:00)У меня есть две формы. В первой выполняется обработка. На время выполнения обработки форма скрывается. Чтоб не доводить пользователя до обморочного состояния я хочу вывести вторую форму, в которой будет бежать прогресс выполнения обработки.
Интересует вопрос как показать форму2 при этом изменяя прогресс из скрытой формы1?
Самый простой, очевидный и не подходящий вариант решения это поместить обработку во второю форму, но это черевато серьёзными последствиями (много кода и при переносе получу комплект таких ошибок, что лучше и не пытаться).
dr D (2005-12-26 15:51:00) [1]СПАСИБО! После того как избавился от Showmodal; заработало как часы. Ещё раз спасибо.
Digitman (2005-12-26 15:21:00) [2]
> sniknik © (26.12.05 15:08) [13]
угу ..на модальность я не обратил внимания...
видимо, у автора как раз в этом и загвоздка
sniknik (2005-12-26 15:08:00) [3]Digitman © (26.12.05 15:00) [12]
не поможет, модальный вызов формы блокирует дальнейший код.
Digitman (2005-12-26 15:00:00) [4]with TForm2.Create(nil) do begin
try
Showmodal;
for i:=1 to n do begin
{тут у нас код обработки}
Gauge1.Possition:=i;
Gauge1.Update; //или, на худой конец, Application.Processmessages;
end;
finally
Free;
end;
end;
sniknik (2005-12-26 14:57:00) [5]_Lucifer_ © (26.12.05 14:54) [9]
> Showmodal;
а теперь посмотри > Digitman © (26.12.05 13:37) [1] сравни
Gydvin (2005-12-26 14:55:00) [6]А если
Form1.enable:=false;
form2.show;
..... бла бла бла
form2.progress.position:=x;
..... бла бла бла
form2.hide
formm1.enable:=true;
_Lucifer_ (2005-12-26 14:54:00) [7]
with TForm2.Create(nil) do begin
try
Showmodal;
for i:=1 to n do begin
{тут у нас код обработки}
Gauge1.Possition:=i;
end;
finally
Free;
end;
end;
Digitman (2005-12-26 14:47:00) [8]
> Вот только не пойму, что именно
А что, собственно, ты делаешь ?
Так сложно продемонстрировать в коде свои эксперименты ?
_Lucifer_ (2005-12-26 14:33:00) [9]Digitman © (26.12.05 14:03) [5]
Уже пробовал. После показа формы 2 никакие действия не выполнялись до тех пор, пока я не закрывал форму 2. Только после этого выполнялись все операции. Может я что не так делаю? Вот только не пойму, что именно.
Если никаких идей нет, то придётся производить перенос.
kkot (2005-12-26 14:16:00) [10]_Lucifer_ © (26.12.05 13:59) [4]
Попробуй показывать вторую форму модально, не скрывая первой. А у второй BorderStyle установи в bsNone, и самостоятельно создавай и разрушай ее, когда это потребуется, а потом см. [5]
Digitman (2005-12-26 14:03:00) [11]
> _Lucifer_ © (26.12.05 13:59) [4]
> я не знаю как управлять из скрытой формы
точно так же как из НЕскрытой
абсолютно никакой разницы
в коде любого метода формы1 (хоть скрыта она хоть не скрыта) :
Форма2.Объект_этой_формы.Метод/свойство_этого_объекта
_Lucifer_ (2005-12-26 13:59:00) [12]Есть форма, в которой происходит обработка (довольно утомительный процесс, в течении которого пользователю в голову лезут не правильные мысли). Дабы уберечься от дурака (то бишь пользователя) я скрываю форму. Но этого мало - этому пользователю надо ещё и пояснить, что форма скрыта, а не с программой проблемы. Для этого я показываю ещё одну форму с прогрессом. Но я не знаю как управлять из скрытой формы объектами на форме, которую я показал (форма №2). Поэтому я хочу узнать есть ли способ, не прерывая выполнения обработки в первой форме, показать вторую форму и из первой формы управлять второй формой? Просто меня слабо радует перспектива переноса кода и я хочу этой перспективы избежать.
Digitman (2005-12-26 13:49:00) [13]
> конкретно вам не понятно
мне непонятно, в чем конкретноу тебя проблема.
_Lucifer_ (2005-12-26 13:45:00) [14]Digitman © (26.12.05 13:37) [1]
Пытался упростить до минимума, но ...
Как показать форму я знаю и прекрасно её показываю. Изменять прогресс в самой форме тоже не проблема. Проблема из формы 1 показать форму 2 и продолжить обработку в форме 1.
Вы выразите, что конкретно вам не понятно буду уточнять.
Digitman (2005-12-26 13:37:00) [15]
> как показать форму2
форма2.Show[Modal]
> изменяя прогресс
форма2.прогресс.Позиция := ..