Вверх ↑
Этот топик читают: Гость
Ответов: 1926
Рейтинг: 172
#1: 2012-04-16 14:22:29 ЛС | профиль | цитата
code_27663.txt

Если после нажатия кнопки сразу прижать мышью заголовок и тащить - не закроется. Более того, кнопка после такого вообще работать больше не будет.
карма: 9
0
файлы: 1code_27663.txt [206B] [347]
Разработчик
Ответов: 26149
Рейтинг: 2127
#2: 2012-04-16 14:30:59 ЛС | профиль | цитата
3042 писал(а):
Если после нажатия кнопки сразу прижать мышью заголовок и тащить - не закроется. Более того, кнопка после такого вообще работать больше не будет.

Нажал, перешел на заголовок, потаскал -- не закрылась, и не должна была -- на момент перетаскивания, очередь событий формы, включая таймер, блокируется. Так работает система.
Вообще-то эффект довольно интересный -- очередь действительно перехватывается, намертво, и больше никакими коврижками не возвращается обратно. Очень странно, но искать причину надо в главной библиотеке KOL, там находится глобальный обработчик событий всех контролов
карма: 22

0
Ответов: 1926
Рейтинг: 172
#3: 2012-04-16 14:45:24 ЛС | профиль | цитата
Но ведь после перетаскивания кнопка больше не работает. Разве это не ошибка?
карма: 9
0
Ответов: 1731
Рейтинг: 68
#4: 2012-04-16 14:45:58 ЛС | профиль | цитата
Хе хе , у меня странный эффект, после всех манипуляция кнопка не только не работала, но еще и реагировала на 2 секунды позже.
карма: 1

0
Разработчик
Ответов: 26149
Рейтинг: 2127
#5: 2012-04-16 14:47:02 ЛС | профиль | цитата
Тут похоже на глобальную ошибку всей очереди контролов, при выполнении любого SendMessage, очередь ждет его исполнения, иногда с параметрами, а перехвааченная системой очередь не возвращает выход из посланного сообщения, и очередь контролов тупо виснет
карма: 22

0
Ответов: 3889
Рейтинг: 362
#6: 2012-04-16 14:47:54 ЛС | профиль | цитата
[offtop]Таймеры вообще штука ненадёжная. У меня одно фоновое (трей) приложение не может работать несколько дней к ряду из-за того, что через некоторое время пропадают события onTimer. Происходит это с обоими таймерами через один-два дня, но не происходит при использовании интервала в Thread (по понятным причинам). Всё руки не доходят зафиксировать момент, но не удивлюсь, если это будет что-нибудь вроде 00:00:00.[/offtop]
карма: 1

0
Разработчик
Ответов: 26149
Рейтинг: 2127
#7: 2012-04-16 15:03:08 ЛС | профиль | цитата
3042 писал(а):
Разве это не ошибка?

Это нельзя так просто исправить, надо переписывать весь обработчик событий в KOL. Ты не возьмешься, случаем, а че, раз плюнуть
------------ Дoбавленo в 14.52:
1nd1g0 писал(а):
Происходит это с обоими таймерами через один-два дня, но не происходит при использовании интервала в Thread

В приведенном случае, не работает и сторонний поток впридачу, ничего толком не работает, что жми на кнопку, что не жми -- один хрен, мертвый перехват событий
------------ Дoбавленo в 15.03:
Более подробно проверил схему -- блокировка возврата происходит после получения события с таймера на doClose, после этого и происходит впадание контролов в кому, ни одно событие после этого уже не отрабатывается
карма: 22

0
Ответов: 3889
Рейтинг: 362
#8: 2012-04-16 15:08:03 ЛС | профиль | цитата
Хочешь сказать, частично закрывается обработка сообщений, хотя окно остаётся на экране? Окно продолжает реагировать на перетаскивание, разворачивание, закрытие. Так что, как минимум, обработчик по умолчанию (у меня, по крайней мере) продолжает работать.
карма: 1

0
Ответов: 1926
Рейтинг: 172
#9: 2012-04-16 15:15:08 ЛС | профиль | цитата
1nd1g0 писал(а):
Окно продолжает реагировать на перетаскивание и разворачивание, так что как минимум обработчик по умолчанию (у меня, по крайней мере) продолжает реагировать.


И у меня так же.
карма: 9
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#10: 2012-04-16 15:18:38 ЛС | профиль | цитата
Я нашел место блокировки, оно находится вот здесь, в главной форме


   if isMain then
begin
Result := false;
_hi_OnEvent(_event_onClose);
EventOff;
end
else

Метод EventOff

Но я не буду его править до тех пор, пока мне не скажут для чего его туда поставили, ведь для чего-то он там стоит
------------ Дoбавленo в 15.17:
1nd1g0 писал(а):
Хочешь сказать, частично закрывается обработка сообщений

Разобрался уже, внутри формы его вырубают после события onClose, и все, дальше уже никак не вернуть
------------ Дoбавленo в 15.18:
Кому не вмоготу такой подход, может у себя поставить ремарку на этом методе, но чисто на свой страх и риск, или написать автору и спросить, зачем он поставил там этот метод
карма: 22

0
Ответов: 1926
Рейтинг: 172
#11: 2012-04-16 15:26:42 ЛС | профиль | цитата
Это Dilm'у спрашивать надо, но где его найти теперь?

карма: 9
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#12: 2012-04-16 15:34:52 ЛС | профиль | цитата
3042 писал(а):
Это Dilm'у спрашивать надо, но где его найти теперь?

Вот вам решение вопроса, только не нойте, ради всего святого

code_27664.txt
карма: 22

0
файлы: 1code_27664.txt [1KB] [290]
Ответов: 1926
Рейтинг: 172
#13: 2012-04-16 15:43:37 ЛС | профиль | цитата
nesco, я не ною, а лишь сообщаю об ошибках, разве не так раздел называется? Собственно, за 6 лет использования HiAsm впервые столкнулся с этой проблемой, но посчитал нужным описать её, чтобы другие не спотыкались. Ну и при наличии возможности чтобы решили проблему; чтобы, раз новых версий HiAsm не выходит, старые улучшались.

Но если
nesco писал(а):
Но я не буду его править до тех пор, пока мне не скажут для чего его туда поставили, ведь для чего-то он там стоит

, то на "нет" и суда нет.
карма: 9
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#14: 2012-04-16 15:49:52 ЛС | профиль | цитата
3042 писал(а):
на "нет" и суда нет

Я не могу править то, что не знаю для чего стоит. Для чего вырубают события, совершенно не ясно, могу предположить только, что возможны ситуации, когда могут возникнуть при выходе какие-то совсем не нужные действия в схеме, к примеру, из параллельного потока. К тому же, такие ситуации, как ты привел, бывают один раз в восемь лет, ну не встречал я такого раньше -- нажать выход и пытаться елозить формой, специально придумать надо еще такое
карма: 22

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)