Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
8-100334
Yasha
2002-12-25 17:54
2003.03.31
распечатать JPEG


6-100359
LAMO)(
2003-02-07 23:19
2003.03.31
Game


3-100151
neXt
2003-03-12 16:57
2003.03.31
Timeout BDE


1-100279
Uran
2003-03-19 11:33
2003.03.31
Тип линии в TChart


7-100469
Alex Shulg
2003-02-04 15:49
2003.03.31
Сервис WinNT





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский