Вниз
Скачать: CL | DM;

OnIdle в KOL   Найти похожие ветки 

← →
Un-man   (2003-02-12 10:19) [0]

Как в KOL заставить приложение выполнять что-то, пока нет других сообщений? В Делфах был OnIdle, а в KOL"е я ничего похожего не нашел. Заранее спасиба.


← →
Gandalf   (2003-02-12 14:28) [1]

Думаю пока только правкой КОЛ, вида:

procedure Run( var AppletWnd: PControl );
begin
 AppletRunning := True;
 Applet := AppletWnd;
 AppletWnd.CreateWindow; //virtual!!!
 while not AppletTerminated do
 begin
   WaitMessage;
   if AppletWnd.ProcessMessages not then // New
     if Assigned(FOnIdle) then           // New
       FOnIdle...;                        // New
 end;
 if AppletWnd <> nil then
   TerminateExecution( AppletWnd );
end;

Плбс мелочь (сам Idle объявить и т.п.). Можно еще поток организовать со слабым приоритетом. Можно таймер.


← →
Kladov   (2003-02-12 16:07) [2]

Зачем править kol.pas, когда свой цикл оработки сообщений никто не запретил? Даже для mck, пишем свой код в proj_1.inc, и все. Не забываем добавить после кода Exit; чтобы не сработал Run(...) в proj_2.inc.


← →
Gandalf   (2003-02-12 21:11) [3]

Мда я про это подзабыл... но пожалуй нетрудно добавить OnIndy в КОЛ, затраты невели, хотя польза неочевидна.


← →
Belest   (2003-03-18 18:22) [4]

Примерчик бы посмотреть...


← →
GandalfTheWhite   (2003-03-20 11:46) [5]

Пиши посмотрим...


← →
Sapersky ©   (2003-10-07 16:44) [6]

Да, неплохо бы пример...


← →
Vladimir Kladov   (2003-10-07 17:53) [7]

В 1.85 появился RegisterIdleHandler. Оно конечно можно еще и в MCK добавить соответственно TKOLApplet.OnIdle.


← →
Sapersky ©   (2003-10-08 09:38) [8]

Какой-то он тормозной, этот OnIdle - наверное, соответствует VCL"овскому Done=True. А мне бы надо Done=False.


← →
Yury Sidrov   (2003-10-08 13:20) [9]

Действительно, он соответствует VCL"овскому Done=True, т.к. на мой взгляд это единственный реально нужный вариант. Для вещей, которые в VCL делались при Done=False, лучше пользовать таймер.


← →
Sapersky ©   (2003-10-08 14:24) [10]

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


← →
Vladimir Kladov   (2003-10-08 15:16) [11]

можно угадаю почему? Не надо вызывать execute. Надо вызывать resume. Смотрите примеры.


← →
SPeller ©   (2003-10-08 20:56) [12]


> Пытался сделать через дополнительный процесс (Thread) -
> но на время его выполнения программа подвисает. Странно...

А не должно. Что это за многопоточность получается тогда?



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.023 c
3-1081008260
Balepa
2004-04-03 20:04
2004.05.02
Ошибка DBCombobox


7-1073478461
Mnch
2004-01-07 15:27
2004.05.02
DOS-программа и USB-RS232


1-1081924598
Tolyan
2004-04-14 10:36
2004.05.02
Разные объекты с одним именем


3-1081268718
Dimedrol
2004-04-06 20:25
2004.05.02
FireBird ODBC export


1-1082209420
vin
2004-04-17 17:43
2004.05.02
отловить Mouse за пределами формы




   Наверх