|
|
|
Работа оконного интерфейса
|
|||
|---|---|---|---|
|
#18+
Непонятным образом отрабатывает оконный интерфейс, хотя не должен... Ситуация такая - есть OLE компонент, в нем некие функции которые работают ну например 0.1 секунду каждая. Делаем userobject на основе этого ole контрола b и размещаем его на окне. Затем вызываем несколько десятков раз функции этого ole объекта (на кнопке пишем скрипт) так, что они отрабатывают в сумме в течении нескольких секунд и после этого выводим MessageBox. Но! интерфейс при этом работает - т.е. мы можем нажать еще раз на кнопку, закрыть окно подвигать его и т.д. А MessageBox выводится в самом конце обработки - т.е. потаскали окно, а затем он всплывает.Собственно вопрос - почему это так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 12:28 |
|
||
|
Работа оконного интерфейса
|
|||
|---|---|---|---|
|
#18+
Локшин МаркНепонятным образом отрабатывает оконный интерфейс, хотя не должен... Ситуация такая - есть OLE компонент, в нем некие функции которые работают ну например 0.1 секунду каждая. Делаем userobject на основе этого ole контрола b и размещаем его на окне. Затем вызываем несколько десятков раз функции этого ole объекта (на кнопке пишем скрипт) так, что они отрабатывают в сумме в течении нескольких секунд и после этого выводим MessageBox. Но! интерфейс при этом работает - т.е. мы можем нажать еще раз на кнопку, закрыть окно подвигать его и т.д. А MessageBox выводится в самом конце обработки - т.е. потаскали окно, а затем он всплывает.Собственно вопрос - почему это так? вероятно где-то внутри ole есть код аналогичный Yield() что то типа ProcessWindowMessages или как он там в API называется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 20:28 |
|
||
|
Работа оконного интерфейса
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрейвероятно где-то внутри ole есть код аналогичный Yield() ... Вряд ли это так. Ведь функция ole запускается раньше, чем начинают "манипуляции с окном". В этом случае скорее окно должно ждать завершения выполнения функции ole, а не на обоброт. Локшин Марк Мне кажется, что это обыкновенная иерархия (приоритет, очередность) событий. Например, как сначало обрабатывается событие родителя, а потом потомка. Думаю, здесь что-то подобное, т.е. событие userobject на основе этого OLE включается в конце, либо может завершить свой процесс только после события объекта с более высоким приоритетом. А объект с более высоким приоритетом может вставить своё событие между очередным шагом цикла выполнения функций OLE, и OLE приходится ждать пока это событие завершиться и только потом продолжить цикл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 23:50 |
|
||
|
Работа оконного интерфейса
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрейвероятно где-то внутри ole есть код аналогичный Yield() что то типа ProcessWindowMessages или как он там в API называется. Хм, это вариант. Нужно будет допросить автора . AIS Например, как сначало обрабатывается событие родителя, а потом потомка. Думаю, здесь что-то подобное, т.е. событие userobject на основе этого OLE включается в конце, либо может завершить свой процесс только после события объекта с более высоким приоритетом. А объект с более высоким приоритетом может вставить своё событие между очередным шагом цикла выполнения функций OLE, и OLE приходится ждать пока это событие завершиться и только потом продолжить цикл Оно точно начинает исполняться (код в OLE) сразу после нажатия на кнопку. Причем если я нажму кнопку второй раз (до завершения исполнения первого раза) то код на скрипте на событии clicked начнет выполняться заново, а первое исполнение кода прервется в момент второго нажатия и больше не возобновляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 09:22 |
|
||
|
Работа оконного интерфейса
|
|||
|---|---|---|---|
|
#18+
А вот кнопочку, наверное, надо блокировать сразу после нажатия. Это как в артиллерии - механизм предохранения от двойного заряжания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 10:21 |
|
||
|
Работа оконного интерфейса
|
|||
|---|---|---|---|
|
#18+
AIZА вот кнопочку, наверное, надо блокировать сразу после нажатия. Это как в артиллерии - механизм предохранения от двойного заряжания. Это не так просто как кажется, т.к. в программе вся логика на хранимых процедурах реализована и с подобного рода блокированием будут проблемы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 10:57 |
|
||
|
Работа оконного интерфейса
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрейвероятно где-то внутри ole есть код аналогичный Yield() что то типа ProcessWindowMessages или как он там в API называется. Именно так оно и было, хотя OLE-компонент вообще не имеет видимого пользовательского интерфейса, поэтому что-то в этом направлении не подумалось... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2008, 16:50 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=35538807&tid=1336532]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 16ms |
| total: | 146ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...