Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];

Вниз

Как показать форму, а код выполнять дальше?   Найти похожие ветки 

 
GoRdon_2007 ©   (2007-06-10 20:22) [0]

Привет всем! Уважаемые мастера подскажите пожалуйста как показать форму (Модально) и чтобы не закрывая эту форму код выполнялся дальше.
Вот у меня есть форма со списком(Плэй Лист) и еще одна форма типа "Please wait ..." когда добовляются файлы мне надо что бы "Please wait ...", а после добавления эта форма закрывалась, вот мой код:


procedure TPlayListForm.SpeedButton1Click(Sender: TObject);
var
dirMus,currDir: String;
addFiles: TStringList;
begin
addFiles:= TStringList.Create;
if Form1.FolderDialog1.Execute then
begin
 try
   // вот эта форма должна показатся и не закрывая
   processForm.ShowModal;
   // должен выполнятся вот этот код
   ProcessForm.Label1.Caption:= "Добавляются файлы в PlayList";
   dirMus:= Form1.FolderDialog1.SelectedFolder;
   findFiles(dirMus,"*.mp3", addFiles);
   playListAdv1.ADD_Files(addFiles);
 finally
   // после выполнения кода форма должна закрытся
   ProcessForm.Close;
 end;
end
else
begin
exit;
end;
end;


При выполнении этого куска кода выводится форма processForm и дальше ничего не выполняется, а как сделать что бы выполнялось дальше?


 
Desdechado ©   (2007-06-10 20:29) [1]

Модальность означает, что окно захватывает на себя все в этом приложении. Поэтому так не получится, как ты хочешь.
Можно сделать окошко, которое будет висеть поверх других, но немодально. Если тебе не хочется, чтобы при этом юзер нажимал на кнопки, временно заблокируй их.


 
GoRdon   (2007-06-10 20:41) [2]

processForm.ShowModal;

если это заменить так

processForm.Show;

То форма подвисает до тех пор пока не выполнится код до finally, т.е. появляется только серый прямоугольник без всяких там Label"ов, как простым путем избавится от зависания или может как то в отдельный поток, не особо то хочется изучать потоки, но если надо изучу!


 
trubin ©   (2007-06-10 21:00) [3]

Сделай вызов Application.ProcessMessages после строчки :

> ProcessForm.Label1.Caption:= "Добавляются файлы в PlayList";


Во время выполнения какого-либо длительного процесса (возможно у тебя это findFiles) между итерациями вызывай Application.ProcessMessages, тогда все накопившиеся в очереди сообщения (в т.ч. WM_PAINT) будут обработаны.


 
GoRdon_2007 ©   (2007-06-10 21:25) [4]

Большое спасибо trubin


 
antonn ©   (2007-06-10 22:18) [5]

и еще addFiles нужно убивать... а если Form1.FolderDialog1.Execute не исполнится, будет утечка...


 
GoRdon_2007 ©   (2007-06-10 23:40) [6]

Спасибо за совет antonn, теперь я его убью.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.07.01;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.004 c
2-1181491812
{RASkov}
2007-06-10 20:10
2007.07.01
Не полное сравнение данных


11-1164289862
Psychedelic
2006-11-23 16:51
2007.07.01
Unit mirror was compiled with a different version of KOL.TOnChar


3-1175687982
elserpiente
2007-04-04 15:59
2007.07.01
from MySQL to Firebird ;)


2-1181260861
Solbon
2007-06-08 04:01
2007.07.01
ftp


2-1181413107
Infinityx93
2007-06-09 22:18
2007.07.01
проценты в chart





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский