Форум: "Основная";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];
ВнизПрограмное закрытие модальной формы Найти похожие ветки
← →
yUrrius (2003-03-11 10:03) [0]Ребята, помогите решить проблему.
Из формы Form1 активирую форму Form2 в модальном режиме.
procedure TFrmMain.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
Далее при активации формы 2, я выполняю некоторые действия.
procedure Tform2.FormActivate(Sender: TObject);
begin
{действия}
end;
Как можно програмно закрыть форму 2 ??????
← →
Style (2003-03-11 11:19) [1]Close :) А причем сдесь WinAPI??
← →
Jel (2003-03-11 11:28) [2]Form.ModalResult подойдет?
Use ModalResult to close the form when it is displayed modally.
By default, ModalResult is mrNone. Set ModalResult to any nonzero value to close the form. The value assigned to ModalResult becomes the return value of the ShowModal function call used to display the form.
← →
Anatoly Podgoretsky (2003-03-11 11:33) [3]Странно, зачем же тогда ативируешь, если она не нужна.
← →
yUrrius (2003-03-11 11:42) [4]Ответ < Anatoly Podgoretsky > - Нужна она.
Я выполняю перемещение файлов.И вот она активна, файлы успешно перемещены, перемещение это отображено, но ни Close, ни
ModalResult не помогает.
Мож кто нить подскажет как нужно делать.
Задача то стоит в перемещении файлов, при этом нуно
вывести формочку с процессом перемещения, а процесс заканчивается
форму закрыть, но не руцями.
???????????????
procedure TFrmInfoMove.FormActivate(Sender: TObject);
begin
{...}
MoveFile(PChar(PathIN+"\"+sr.Name),PChar(PathEXE+"\in\"+sr.Name));
{...}
//Close; -не работает
//FrmInfoMove.ModalResult:=mrOK; - не работает
← →
Anatoly Podgoretsky (2003-03-11 11:50) [5]Абсолютно не нужная форма, которая к тому же не покащывается.
← →
dolmat (2003-03-11 12:10) [6]Попробуйте обойти. Создайте кнопку, которая будет закрывать окно, а в конце procedure TFrmInfoMove.FormActivate
вызовите событие botton.clikc
← →
REA (2003-03-11 12:38) [7]Смысла нет модально показывать - это точно. Однако так не закрыть из Activate. Можно попроовать послать PostMessage WM_CLOSE. А вообще-то забыл, как это делалось...
← →
yUrrius (2003-03-11 13:01) [8]Согласен с тем, что модально показывать смысла нет.
Тогда подскажите плиз, ламеру. как мона немодально
вызвать форму, а потом ее програмно закрыть????
← →
Anatoly Podgoretsky (2003-03-11 13:05) [9]Так форма то совсем не нужна
← →
dolmat (2003-03-11 13:05) [10]Добавте на форму timer и вызовите его после процедуры. проверено. работает.
procedure TForm2.Timer1Timer(Sender: TObject);
begin
form2.Close;
end;
← →
Sheriff (2003-03-11 13:07) [11]procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Form2:=TForm2.Create(self);
try
Form2.Show;
finally
Form2.Hide;
Form2.Free;
end;
end;
procedure TForm2.FormActivate(Sender: TObject);
var i: Integer;
begin
for i:=0 to 10000 do begin
Application.ProcessMessages;
Label1.Caption:=IntToStr(i);
end;
end;
← →
yUrrius (2003-03-11 13:11) [12]:-)
Спасибо всем за подсказки.
Кстати по поводу нужна или не нужна:
я написал прогу без этой байды и все работает, но человек
ее заказавший просит что бы была формочка где показывается
процесс перемещения файлов.
:-)
Сам я себе лишний гемор не исчу. :)
Еще раз спасибо
← →
Romkin (2003-03-11 13:16) [13]SHFileOperation - покажет, что надо, как надо...
Если просто перемещаешь, конечно
← →
Anatoly Podgoretsky (2003-03-11 13:17) [14]Так у тебя никакого процесса не нет, просто открывается форма, в ней удаляется и закрывается.
Что бы процесс надо иметь на форме прогресс бар и перемещать файл не весь сразу а кусками.
← →
Shirson (2003-03-11 13:31) [15]Только что проверил.
TFrmMain.Button1Click(Sender: TObject);
Begin
timer1.Enabled:=true;
form2.ShowModal;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
form2.close;
timer1.Enabled:=false;
end;
Закрывает модальную форму на ура.
Таймер на второй форме тоже закрывает её на ура.
Однако в FormActivate команда close не пашет... Хе-хе
Значит отринем стереотипы ;)))))))
На форму FrmInfoMove ложим таймер и ставим ему Enabled в False
procedure TFrmInfoMove.Timer1Timer(Sender: TObject);
begin
form2.Close;
end;
procedure TFrmInfoMove.FormActivate(Sender: TObject);
begin
{...}
MoveFile(PChar(PathIN+"\"+sr.Name),PChar(PathEXE+"\in\"+sr.Name));
{...}
timer1.Interval:=1;
timer1.Enabled:=true;
end;
И не нужно говорить, что это не по правилам >;))))))
← →
Shirson (2003-03-11 13:33) [16]>dolmat
Сорри за повтор. Пока писал свой ответ появился твой :)
← →
yUrrius (2003-03-11 15:26) [17]Спасибо ребята.
Не оставили без ответа.
:)
← →
Deniska (2003-03-18 11:27) [18]а не проще создать поток, в котором будут файлы обрабатываться, затем открыть модальное окно...
когда поток закончит работу, убить окно by form2.close???
← →
Andrews (2003-03-18 11:51) [19]Может я не в тему, но я закрываю модальные формы так:
PostMessage(Form2.Handle,WM_CLOSE,0,0);
на мой взгляд, просто и никаких проблем.
← →
Shirson (2003-03-18 12:18) [20]>Andrews
Конечно просто. И правильно.
Но таймер - это с подвыподвертом ;)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.31;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c