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

Вниз

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

 
Инна   (2009-10-07 13:02) [0]

здравствуйте !
хотела бы узнать как сделать дочернюю форму которая выполняется в отдельном потоке, чтоб например при выполнении цикла в этой форме-зависала только она

p.s. принципиально интересует именно этот вариант а не applet.processmessages и прочее.


 
halex   (2009-10-07 14:11) [1]

Не смотря на
> p.s. принципиально интересует именно этот вариант а не applet.
> processmessages и прочее.

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


 
Инна   (2009-10-07 15:20) [2]

ну может про потоки это черезчур
но нужна форма с отдельной очередью обработки сообщений никак
не связаной с главной формой и аплетом,тоесть не блокирующая их, если вообще это возможно


 
abyss_by ©   (2009-10-07 20:41) [3]

Была у меня подобная задача. Нужно было сделать выезжающее окошко над систреем, а-ля касперски. И вот если не в отдельном потоке, тормозила прогу безбожно, никакие " processmessages" не помогали. А так, без проблем :)

Для формы, с выполнением задачи в отдельном потоке:


.....
 private
  ToolTipThread: PThread;
.....

procedure TForm3.FormShowHint;
begin
 if Assigned(ToolTipThread) then
  ToolTipThread.Terminate;
  ToolTipThread := NewThreadAutofree(ShowTollTips);
  ToolTipThread.PriorityClass := THREAD_PRIORITY_IDLE;
  ToolTipThread.Threadpriority := THREAD_PRIORITY_LOWEST;
end;

function TForm3.ShowTollTips(Sender: pThread): integer;
begin
//тут чего-то делается
end;

procedure TForm3.KOLForm1Destroy(Sender: PObj);
begin
 if Assigned(ToolTipThread) then ToolTipThread.Terminate;
end;


Создаем её:

procedure TForm1.fShowHint;
begin
NewForm3( Form3, Applet );
Form3.FormShowHint;
end;


Чему чего присвоить думаю понятно без комментов. Здесь в потоке только то, что выполняется при вызове формы.


 
Инна   (2009-10-08 10:48) [4]

спасиба :) в тесте вроде работает
позже может еще чего уточню


 
Инна   (2009-10-08 11:26) [5]

нет не то :( это просто отдельный поток


 
abyss_by ©   (2009-10-09 17:15) [6]

:) Что значит "просто отдельный поток"?
function TForm3.ShowTollTips(Sender: pThread): integer;
Здесь и обрабатывай свой цикл.


 
Инна   (2009-10-09 17:26) [7]


> Здесь и обрабатывай свой цикл.

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


 
abyss_by ©   (2009-10-09 21:45) [8]

Обработать событие драг-энд-дроп в отдельном потоке естественно можно. Но тебе, как я понял, нужно не это. Че там за секретный цикл, кусочек кода можешь скинуть? Или стучись сюда - 2117062, это ася.


 
Инна   (2009-10-10 10:14) [9]


> Обработать событие драг-энд-дроп в отдельном потоке естественно
> можно

на прием, да можно как угодно, а на отдачу неполучица

цикла никакова нет, есть

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
-------------------------
  DoDragDrop(DataObject,DropSource, DROPEFFECT_COPY, Effect);
---------------------
end;


где на DoDragDrop останавливается все, до тех пор пока DragDrop не закончится, в это время программа не получает события ввода,таймера,юзера и возможно еще чего то.
поэтому и надо эту форму изолировать от остальных

p.s.
DoDragDrop нельзя запустить без нажатия мыши, поэтому и просто отдельный поток отпадает


 
abyss_by ©   (2009-10-10 13:55) [10]

Как вариант с потоком, можно попробовать создать свой объект от TThread, где перебить Execute. Ты в VCL проекте используешь KOL?


 
Инна   (2009-10-10 15:21) [11]

нет кол в коле


 
Barloggg   (2009-10-13 16:14) [12]

ну, можно создать вторую форму в виде dll. так точняк все без проблем будет.
особенность кол в том, что для dll придется создавать свой applet и вот вам пожалуйста собственная очередь сообщений. со всеми причитающими mousemove и тому подобное.
на сайте есть пример формы в длл. в разделе "примеры".


 
Инна   (2009-10-14 12:55) [13]

кстати бала такая мысль-вылетела из башки :)
фишка работает,но в оригинале там форма создается пустая,а я подключала форму МСКшную ,может я чего не так сделала но сообщения от таймера она не получает :(

да и делать дллху изза одной опции както не круто-неужели эти аплеты так нельзя разделить ???


 
Ruzzz ©   (2009-10-16 04:49) [14]

По поводу таймеров в книге по KOL глава 5.7. Часы (TTimer) - есть уточнение о работе таймеров в многопоточном приложении, может оно?


 
halex   (2009-10-16 12:20) [15]


> DoDragDrop нельзя запустить без нажатия мыши, поэтому и
> просто отдельный поток отпадает

Вы бы поделились минимальным приложением, а то если честно писать что-то ради кого-то, тупо лень.

А почему нельзя запустить поток в Button1MouseDown?



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

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

Наверх




Память: 0.48 MB
Время: 0.023 c
2-1385473851
sas9568635
2013-11-26 17:50
2014.11.30
Dll-модули


15-1397823673
ВладОшин
2014-04-18 16:21
2014.11.30
напомните, как сплитер динамически поместить правильно


4-1270641367
groog
2010-04-07 15:56
2014.11.30
Как убрать полосу прокрутки у консольного окна?


15-1397651154
Дмитрий СС
2014-04-16 16:25
2014.11.30
Флешка как CD-ROM


11-1254906149
Инна
2009-10-07 13:02
2014.11.30
форма в отдельном потоке





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