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

Вниз

как показать форму в отдельном потоке   Найти похожие ветки 

 
id_privin   (2002-08-29 17:07) [0]

Мастера, помогите примером.
По всякому пробовал и даже книжку читал но не получается.

Надо на время определенных действий в основном потоке показать формочку, а потом убрать ее.


 
Hooch   (2002-08-29 17:08) [1]

можно так
f := TForm.Create
f.show
f.update
// что то делаем
f.free


 
id_privin   (2002-08-29 17:32) [2]

Надо обязательно в отдельном потоке, тк надо чтобы форма работала, независимо от основного процесса. А так она "висит" пока основной процесс не доделает все что надо


 
Digitman   (2002-08-29 17:34) [3]

посылай некоему окну осн.потока процесса приложения некое сообщение, в обработчике которого выполняй примерные рекомендации от <Hooch>

или воспользуйся тем же самым, реализованным уже в методе TThread.Synchronize()


 
id_privin   (2002-08-29 17:35) [4]

Ну можно пример, пожалуйста.


 
Digitman   (2002-08-29 17:39) [5]

>id_privin

У тебя каша в голове. Разберись в понятиях "процесс" и "кодовые потоки процесса". Оно легче будет дальше.


 
NailS   (2002-08-29 17:53) [6]

Попробуй не форму в отдельный поток запихнуть, а вынеси в отдельный поток "то что надо", т.е. то из-за чего все остальное тормозит. Проще получится и правильней.


 
id_privin   (2002-08-29 17:55) [7]

Я конечно чего-то не понимаю, но что такое поток вроде знаю.

Делаю так

type
THeadBandForm = class(TForm)
GIFImage1: TGIFImage;
Text: TLabel;
end;

Runner = class(TThread)
protected
procedure Execute; override;
end;

var
HB : THeadBandForm;


implementation

{$R *.DFM}

{ Runner }

procedure Runner.Execute;
begin
HB := THeadBandForm.Create(nil); <<<LABEL
HB.Show;
HB.Update;
end;

В основном потоке

runner.Crete(false);
sleep(1000);


на место <<<Label попадаем уже после sleep(1000)

А потом вообще все рушиться с непонятными ошибками


 
Digitman   (2002-08-29 18:30) [8]

Как минимум отрисовка формы должна происходить только в осн.потоке процесса. Ты же пытаешься "нарисовать" ее в дополнительном потоке и, разумеется, получаешь исключение. К тому же необрабатываемое никак.

Еще раз - почитай о методе TThread.Synchronize() и воспользуйся им для данной цели. Хоть она и бестолковая, цель эта...


 
id_privin   (2002-08-29 18:41) [9]

Так мне и надо рисовать в дополнительном потоке, разве это нельзя. В основном у меня ничего рисоваться не будет, он своими делами занят. Очень не хочеться сильно переделывать прогу за ради желания занять юзера делом пока прога считает.


 
Digitman   (2002-08-29 19:02) [10]

Нельзя.
Переделывать-таки придется.
Считать "долго и нудно" - обязанности доп.код.потока.
Задача же осн.код.потока (в подавляющем большинстве нормальных случаев) - графический интерфейс пользователя


 
Skier   (2002-08-29 19:03) [11]

>id_privin
Главное что тебе следует запомнить : все обращение к полям,свойствам и методам объектов VCL должны производиться
в контексте основного потока приложения, тобиш тебе нужен
TThread.Synchronize() (см. Digitman © (29.08.02 18:30))



 
id_privin   (2002-08-29 19:26) [12]

Понял я, пришлось переделать на половину. Дело в том что в основном потоке как раз шло создание интерфейса, загрузка настроек из базы, настройка контактов с офисом и прочая туфта. По очевидным причинам в отдельный поток это не выноситься. Причем занимает этот странный процесс секунд десять.



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

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

Наверх




Память: 0.47 MB
Время: 0.007 c
8-27115
Bober
2002-04-30 23:55
2002.09.09
Текстурирование


1-27060
Krann
2002-08-27 13:37
2002.09.09
Позиция в Stream


1-26999
Smok_er
2002-08-29 18:43
2002.09.09
Stringtowidechar выдает Access Violation :(


14-27224
lds78
2002-08-09 10:59
2002.09.09
ZIP/UNZIP без VCL


4-27256
asmer
2002-07-07 15:26
2002.09.09
Accelerators в модальном диалоговом окне





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