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

Вниз

Версия 2.54   Найти похожие ветки 

 
Vladimir Kladov   (2007-02-25 20:14) [0]

Новости от 25 февраля 2007 (KOL & MCK v2.54)

[-]
ASM
Метод TBitmap.Convert2Mask (asm-версия) исправлен для случая 256 цветов (pf8bit).

[-]
MCK
Удалены дублирующие присваивания свойству Name (для символа USE_NAMES) для некоторых объектов (наследников TKOLObject). Присваивание свойству Name для TKOLDataModule исправлено (объект сохраняется в списке самого объекта, а не в  Applet, т.к. он разрушается после разрушения объекта Applet и финальная очистка имени приводила к краху приложения на завершении).

Не в ту тему сначала отправил.


 
MTsv DN ©   (2007-02-26 14:31) [1]

Обновление доступно на http://www.kolnmck.ru


 
AndreyRus   (2007-02-28 13:41) [2]

Ошибка работы обработчика события завершения работы операционной системы не исправлена? :)


 
Vladimir Kladov   (2007-02-28 20:08) [3]

Нет ошибки. Если вы считаете, что вам нужна такая обработка, устанавливаете соответствующий обработчик. Всем делать этот обработчик - противоречит принципу "только минимум необходимого кода".


 
AndreyRus   (2007-03-01 13:53) [4]

Я предполагаю, что на эти грабли будут наступать очень многие, особенно те, кто ранее использовал VCL, где обработчик формы - onDestroy срабатывал и при обычном завершении работы приложения (alt+F4) и при завершении работы операционной системы (WM_QueryEndSession). И это логичное и правильное поведение обработчика - onDestroy. Я совершенно случайно обнаружил эту особенность поведения КОЛ. Хорошо, что в обработчике не использовалось критического finally. А ведь это могло привести к большим неприятностям...

> Всем делать этот обработчик - противоречит принципу "только минимум необходимого кода".
Не думаю, что обработчик события "WM_QueryEndSession" и последующий вызов onDestroy добавит много кода, вероятнее всего лишь десяток байт :)


 
ANTPro ©   (2007-03-01 14:47) [5]

> [4] AndreyRus   (01.03.07 13:53)
> и при завершении работы операционной системы (WM_QueryEndSession)
> . И это логичное и правильное поведение обработчика - onDestroy

+1


 
Vladimir Kladov   (2007-03-01 17:35) [6]

У Applet"а есть OnQueryEndSession. Ставите свой обработчик, и какие проблемы. Далеко не все приложения по завершении работы системы обязательно должны контролировать этот факт, и что-то при этом специальное делать.


 
homm ©   (2007-03-01 22:15) [7]

> Далеко не все приложения по завершении работы системы обязательно
> должны контролировать этот факт, и что-то при этом специальное делать.
Насколько я понимаю речь как раз о том что нужно делать что-то не спецально, а как раз стандартно. Что-бы поставив обработчик OnDestroy программист мог быть уверен что он сработает при любой ситуации, когда программа коректно выгружается. Чем завершение работы хуже сочетания alt+f4???


 
AndreyRus   (2007-03-01 22:48) [8]


> Чем завершение работы хуже сочетания alt+f4???

+1


 
Vladimir Kladov   (2007-03-02 07:57) [9]

Процедура обработки WM_QUERYENDSESSION занимает 134 байта. Этим и хуже. По крайней мере половина программ работают не с документом, который редактируют, а просто исполняют какой-нибудь сервис, например, сидя в трее. И им напрочь не надо ничего особого делать по завершении работы. Если надо, ставите обработчик, и в нем Form.Close - самый простой путь получить свои OnDestroy, OnClose и т.д.


 
Vladimyr ©   (2007-03-05 22:27) [10]

+1 :)


 
Barloggg   (2007-03-13 11:04) [11]

гм. а чего это событие onSbScroll срабатывает дважды при движении ползунка на TScrollBar?


 
Vladimir Kladov   (2007-03-13 17:37) [12]

Хоть 20. Ваш код не должен зависеть от количества таких вызовов. Например, OnMouseMove срабатывает регулярно, даже если мышь никуда не движется. У вас не вызывает это отрицательных эмоций?


 
Barloggg   (2007-03-13 18:03) [13]

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

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

это типа винда перестраховывается? :)


 
AndreyRus   (2007-03-15 15:59) [14]


> Процедура обработки WM_QUERYENDSESSION занимает 134 байта.

А чего так много... Это ведь просто сравнение и переход. Должно быть байтов 10.


 
Vladimir Kladov   (2007-03-15 17:22) [15]

Защитный диапазон ставится в несколько строк кода и один таймер. Если для вас действительно это актуально.

OnMouseMove срабатывает регулярно, если курсор находится в окне. Так работает Windows. Можете просто завернуть мышь в тряпочку, перевернуть вверх ногами и положить на кусочек поролона, обработчик будет срабатывать.

Так что если какое-либо событие посылается виндой дважды, это совсем не должно быть причиной для протеста. Может быть, конечно, дело в KOL, но для этого события что-то сомнительно (тем более разные значения).


 
Vladimir Kladov   (2007-03-15 17:30) [16]

> Процедура обработки WM_QUERYENDSESSION занимает 134 байта.
А чего так много... Это ведь просто сравнение и переход. Должно быть байтов 10.

Код открыт, смотрите, что там еще делается.


 
D[u]fa ©   (2007-03-15 18:28) [17]

Vladimir Kladov, так может добавить их? =)
10 байт не так много ведь..


 
AndreyRus   (2007-03-15 18:53) [18]


> Код открыт, смотрите, что там еще делается.

Посмотрел. На мой взгляд - это неправильный подход с точки зрения статистики использования обработчика "WM_QUERYENDSESSION". Он нужен далеко не всем, а вот вызов деструктора программы при завершения работы операционной системы нужен очень даже часто. Очень многие разработчики программ уповают на то, что если они назначили обработчик уничтожения программы - "onDestroy", то он должен вызываться при всех возможных способах завершения программы, кроме жеского "терминирования" процесса диспечером задач.


 
Vladimir Kladov   (2007-03-16 20:40) [19]

Вопрос - зачем. Чтобы ресурсы освоюодить? Система завершается, все ресурсы и так будут освобождены, даже в 9х. В NT так вообще достаточно завершить приложение, и все ресурсы освободятся максимально быстро и эффективно. Документ сохранить? Далеко не всем программам это нужно. А если нужно, я уже решение указал. Назначаете обработчик, который даже ничего не делает. И все.

Если 10 байт нужны 10% программ, то по правилам KOL, за добавление этих 10 байт отвечает программист. Чтобы остальные 90% программ были на 10 байт короче.


 
AndreyRus   (2007-03-16 21:45) [20]


> Если 10 байт нужны 10% программ, то по правилам KOL, за
> добавление этих 10 байт отвечает программист.


Далеко не 10%-ам, IMHO, больше половины. Например, операции изменения файла (шифрование, сжатие). Файловая система, это вам, не сочтите за наглость, не SQL сервер. Автоматические транзакции отсутствуют. Последствия... катастрофические. А ведь это изменение в КОL прошло практически незамеченным. Разработчики будьте внимательны! Уважаемый Владимир! Мне кажется, что нарушение идеологии OOП в ущерб размеру программ недопустимо. Энтропия не пройдет!


 
Galkov ©   (2007-03-16 22:27) [21]


> что нарушение идеологии OOП в ущерб размеру программ недопустимо

С этого момента, по-подробнее, пожалуйста :))


 
AndreyRus   (2007-03-16 23:56) [22]


> С этого момента, по-подробнее, пожалуйста :))

По настоящему, впервые ООП поразило меня в "Turbo Vision", где назначив обрабочик закрытия окна, я не беспокоился о том, как будет закрыто окно (крысой или клавой). ;)


 
Galkov ©   (2007-03-17 09:45) [23]

Ах вот оно что такое ООП, оказывается !!!
Дать человеку возможность не думать...


 
Vladimir Kladov   (2007-03-17 15:36) [24]

Это ваше имхо. Из тем десятков программ, которые я накорябал за последние 8 лет, только одной потребовалось обработать завершение винды. Как раз чтобы сохранить "документ" (но ничего при этом не спрашивая у бедного пользователя, в файл типа Autosave. Вы только представьте себе, каково пользователю, с запущенными примерно 15 приложениями будет завершать сессию, если они все начнут что-то спрашивать...). И, кстати, обработка там идет в OnMessage, своя. Наверное OnQueryEndSession еще не существовало.


 
AndreyRus   (2007-03-17 17:41) [25]


> Galkov
> Ах вот оно что такое ООП, оказывается !!!Дать человеку возможность
> не думать...

Не уродствуйте! Не думать... это как? ООП позволяет меньше задумываться о проблемах поведения кода в зависимости от окружающей среды, например OS. Слова инкапсуляция, полиморфизм и наследование вам должны ведь быть знакомы?


> И, кстати, обработка там идет в OnMessage, своя.
>  Наверное OnQueryEndSession еще не существовало.


OnQueryEndSession вообще не нужен в KOL! Его реализация очень проста даже для новичка в KOL&VCL и вот он действительно не нужен (+1xx байт).
Но вот обработка родственных событий Windows обязательно должна присутсвовать в логике работы любой программы при ее разрушении.
Владимир, хотите я навскидку назову десяток типов задач (программ) надежность работы которых, при сокращении KOL на эти злосчасные десять байт (сравнение&переход), будет уменьшена ровно на количество (выключений&перезагрузкок, в том числе и аварийных&гибернаций&переходов в режим энергосбережения).


 
Vladimir Kladov   (2007-03-17 18:55) [26]

KOL существует потому, что VCL не дает такой возможности - отказаться от кода, который в данном конкретном приложении не нужен. Даже если бы только 1 приложение из 100 было таким, которое не нуждается в анализе завершения сессии, я был бы вынужден предоставить такую возможность. Единственный способ это сделать - переложить это окончательное решение на программиста. И точка.


 
AndreyRus   (2007-03-17 19:36) [27]


>  Даже если бы только 1 приложение из 100 было таким, которое
> не нуждается в анализе завершения сессии, я был бы вынужден
> предоставить такую возможность.


Это неправильный подход, правильный - если больше половине программ это нужно и это можно реализовать "малой кровью", значит лучше так тому и быть. IMHO.


> Единственный способ это сделать - переложить это окончательное
> решение на программиста.


Что влечет за собой неоправданные расходы на изучение особенностей Вашей библиотеки. Уверен, увеличение программ на 10 байт - не повод для появления новой.


 
Vladimir Kladov   (2007-03-18 07:06) [28]

Что влечет за собой неоправданные расходы на изучение особенностей Вашей библиотеки.
Любая библиотека требует изучения. Нежелание читать мануалы и комментарии меня волнует меньше всего. Кто не желает, может и дальше пользоваться VCL, если думает, что им можно пользоваться без изучения VCL.


 
Galkov ©   (2007-03-18 08:20) [29]

Есть другое ИМХО :))

KOL тоже не всегда свободен от "подумать за программиста"

Ну, скажем, упомянутый недавно здесь на форуме WM_MOUSEWHEEL.
В KOL уже принято решение за программиста, что обязательно будет вызвано DefWindowProc

Ну и неправильно это, ИМХО (вот оно, другое :))
- даже если иное потребует лишних 10 байт кода
- даже если мало кто знает, чем отличается вызов от невызова
- и потребует дополнительного изучения библиотеки

ЗЫ: это просто пример, на котором интересно посмотреть отношение Автора к аналогичным вопросам.


 
Vladimir Kladov   (2007-03-18 08:49) [30]

OnMessage - и вы можете перехватить и не допустить дальнейшего исполнения ЛЮБОГО сообщения.


 
Galkov ©   (2007-03-18 18:38) [31]

Ну, тут технических проблем нет.
Кроме одной: задачи перестают быть "локальными", если несколько динамических объектов цепляются на один и тот же OnMessage. Именно динамических, и именно несколько – проблема при уничтожении динамического объекта, непонятно как удалить именно свой "перехват".

Но главное таки, это то, что OnMessage - все-таки "универсальное" решение.
А то самое "имхо" состояло в том, если делать "персональное" решение, то правильней без "избыточного интеллекта", заключающегося в ограничении возможностей, предоставляемых WinApi.

И, безусловно, без отрицания полезности и такого "персонального" решения
В общем, именно ИМХО :)
И конечно WM_MOUSEWHEEL - это только пример. Можно и еще привести.


 
GMax   (2007-03-19 00:25) [32]

честно говоря, я вообще не понимаю борьбы за 10 байт в данном конкретном случае, тем более, что эти десять байт наверняка растворятся в каком-нибудь alignment"е и на конечный размер exe-шника никак не повлияют.
а вот логике это будет соответствовать. всё-таки Destroy происходит, значит и событие должно быть.


 
D[u]fa ©   (2007-03-19 08:13) [33]

Вот и я про то же... надо было тесты провести, добавить и проверить размер)


 
Vladimir Kladov   (2007-03-19 16:30) [34]

1. я ни с кем не борюсь. В своей правоте уверен, и все уже и так сделал, как считаю нужным и правильным.
2. речь идет не о 10 а о 1хх байтов. Кому непонятно, из чего они складываются, код открыт, смотрите, изучайте.
3. тесты были проведены, и это сокращение было проделано заодно с кучей прочих не так давно. Размер минимального приложения тогда как раз и сократился с 14К до 11.5К. ЭКОНОМЬТЕ БАЙТЫ, КИЛОБАЙТЫ САМИ СЕБЯ СБЕРЕГУТ.


 
GMax   (2007-03-19 23:26) [35]

ну если уж на то пошло, может тогда все-таки дать честную _стандартную_ возможность программисту добиться нужного функционала, как обычно, через IFDEF ?
понятно, что через onMessage можно всё, но ведь и на WinApi можно тоже, однако мы KOL пользуемся ;-)


 
Vladimir Kladov   (2007-03-20 15:39) [36]

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


 
имя   (2007-08-08 21:30) [37]

Удалено модератором


 
имя   (2007-10-03 10:12) [38]

Удалено модератором


 
имя   (2007-10-03 10:12) [39]

Удалено модератором



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

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

Наверх




Память: 0.55 MB
Время: 0.007 c
2-1213011349
Johnnnnn
2008-06-09 15:35
2008.07.13
Как заполнить Flesh форму?


15-1212399903
DevilDevil
2008-06-02 13:45
2008.07.13
"Алгоритм прямоугольников"?


15-1211734954
Дмитрий С
2008-05-25 21:02
2008.07.13
Облегчить реализацию IDispach


3-1201959891
Антон Шестаков
2008-02-02 16:44
2008.07.13
Удалить все записи в базе Парадокс


3-1201989045
md10
2008-02-03 00:50
2008.07.13
существование поля





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