![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Версия 2.80 [Delphi, KOL/MCK, Windows]
Vladimir Kladov © (2007-09-19 20:13:00)Новости от 19 сентября 2007 (KOL & MCK v2.80)
[*] Добавлена и установлена в качестве нового обработчика по умолчанию
процедура прозрачности, разработанная Александром Карпинским a.k.a.
homm. По сравнению с прежней процедурой (доступной включением символа
OLD_TRANSPARENT) добавляет лишь около 60 байт, но при этом
эффективнее, т.к значительно уменьшает количество прорисовок
контролов.
[*] Процедура выравнивания контролов на форме по умолчанию выполняется
новым вариантом, разработанным Александром Карпинским a.k.a. homm.
Прежняя процедура доступна с использованием символа OLD_ALIGN. (Новая
процедура более эффективна, приводит к меньшему числу изменений
размеров контролов).
[*] С новым символом TLIST_FAST существенно изменяется алгоритм работы
и размещения в памяти элементов базового списка. В этом варианте
оптимизируется работа с большими списками, в основном за счёт
уменьшения количества перераспределений памяти и последующего
уменьшения дефрагментации кучи. Но этот алгоритм требует больше кода,
и может оказаться неоптимальным по скорости для каких-либо применений.
Для TList добавлено свойство ItemAddress.
[*] С новым символом SNAPMOUSE2DFLTBTN алгоритм процедур MsgBox,
ShowMsg, ShowMessage изменяется таким образом, чтобы обеспечить
автоматическую установку курсора мыши на кнопку по умолчанию - если в
системе выставлена такая опция для мыши. Аналогично, изменения
работают для ShowQuestion / ShowQuestionEx (из KOLadd).
[-] Исправлена работа стандартного OpenDirDlg при назначенном событии
OnSelChanged для Windows95 (не становилась доступной кнопка OK), и для
UNICODE_CTRLS с этим же событием исправлены типы данных.
[+] Добавлены средства для упрощения разработки кнопок с произвольными
дочерними элементами (для помещения на кнопки, например, картинок
вместе с текстом):
- в MCK для всех контролов добавлено свойство времени разработки
AcceptChildren. Включение его в TRUE позволяет во время разработки
положить на этот контрол дочерние элементы.
- в KOL добавлена функция, а в MCK - соответствующее свойство
MouseTransparent, использование которого для контрола перенаправляет
все сообщения мыши к родительскому (или лежащему слоем ниже) контролу.
- в KOL объект TImageShow для вывода изображения использует свойства
ClientLeft, ClientTop для смещения изображения при выводе (в MCK
соответствующие свойства MarinLeft и MarginTop опубликованы для
зеркала TKOLImageShow).
- в MCK для кнопки опубликовано свойство Border.
[*] Файл visual_xp_styles.inc изменён автором, MTsvDN:
1. Отрисовка всех элементов (точнее, заднего фона для каждого элемента).
2. Исправлено создание шрифта.
3. Исправлена прорисовка границ панели.
4. Исправлен 2ой клик на сплиттере.
5. Оптимизирован код, за счет этого размер уменьшился на 3кБ.
6. Добавлена обработка TextAlign для GroupBox.
7. Исправлена работа с UNICODE и ANSI.
8. Маленькое исправление для радиобокса.
9. Отрисовка сплиттера приближена к стандартному.
[*] Для memory stream при прямой установке Size по умолчанию значение
не округляется теперь в большую сторону до очередной границы
CapacityMask, а используется как есть. Прежнее поведение можно вернуть
символом OLD_MEMSTREAMS_SETSIZE.
[-] Работа свойств AnchorXXXX исправлена для нового варианта кода
(оставлен по умолчанию, и прежний вариант так же доступен с символом
ANCHORS_WM_SIZE) .
[-] Исправлена ошибка в обработчике сообщения WM_WINDOWPOSCHANGED для
toolbar-контрола (возвращалось true вместо false). Эта ошибка не
давала правильно выравнивать дочерние контролы на тулбаре.
[-] По совету MTsvDN, в процедуре WndProc_RichEdTransp_Update
добавлена обработка сообщения WM_CHAR, что предотвращает появление
"следов" от каретки во время печатанья в прозрачном rich edit-
контроле.
[-] Исправлена ошибка с невозможностью компиляции асм-версии при
наличии символа USE_DROPDOWNCOUNT.
[*] MCK Свойство FixFlatXP для тулбара реализовано более дешёвым
средством, не требующим включения прозрачности: установкой пустого
обработчика события OnTBCustomDraw, введённым несколько ранее. Как и
прежде, FixFlatXP предназначено для устранения черного фона при
включённым темах и подключённом манифесте, для "плоских" тулбаров (с
опцией tboFlat).
[-] В генераторе кода MCK исправлена опечатка MCKControls -> MCKCtrls.
[*] Существенно переработан компонент KOLPng:
- добавлена возможность загрузки 1/8, 1/4 или 1/2 изображения, что
может существенно сократить время построения мини-эскиза для
interlaced-изображений (для не-interlaced эффект менее заметен, и
некоторое ускорение обнаруживается только для очень больших
изображений, за счёт меньшего потребления памяти);
- выполнена оптимизация некоторых критичных участков, с использованием
ассемблера, в том числе MMX.
Sapersky (2007-10-05 14:38:00) [1]Но. Вам повезло: начало цикла случайно попало на границу 8 байт. И я был ленив, каюсь. Не ожидал от Delphi и пентиума такой прыти. После переписывания по-нормальному мне удалось сделать на 10% быстрее всё же, чем в вашем варианте.
Начало цикла - это инструкция, на которую выполняется переход с конечной проверки? Тогда повезло вам, а у меня в тестовом примере адрес оказался кратен только 4. Вообще, действительно, Delphi никакого выравнивания здесь не делает, и этот адрес достаточно свободно "плавает" (не оказывая заметного влияния на результаты тестов).
Посмотрел обновлённую версию. Да, на большинстве картинок быстрее; другой вопрос, какой ценой достигнуты эти 5-10% и стоят ли они того. Хотя свой вариант я тоже написал не сразу, в CPU window пришлось заглядывать неоднократно, но думаю, что соотношение "затраченные усилия / результат" у него всё же лучше.
Не настаиваю (в свете недавней ветки об отказе от asm) ни на каких "волевых решениях", просто демонстрирую возможности альтернативного метода :)
Единственная просьба - по возможности выносить asm-код в отдельные функции, а то на FilterRow смотреть страшно.
Vladimir Kladov (2007-09-28 16:15:00) [2]Есть в KOL такая строчка:
Result := TRUE; // this prevents Align working for child controls of Toolbar !
Так вот в 2.80 она закомментарена (и тогда же появился комментарий). Если раскомментарить, то всё нормально - в вашем случае. придётся делать условную компиляцию. Иногда важнее дочек выравнивать, а сам тулбар уже на панели и ему ничего не страшно.
mdw (2007-09-28 11:54:00) [3]Владимир, послал Вам письмо на vk<собака>kolmck.net
Vladimir Kladov (2007-09-27 19:55:00) [4]А я что пишу? Сжу и жду, когда вы уже предоставите. См. мой предыдущий пост, номер не знаю.
mdw (2007-09-27 19:00:00) [5]Кстати, Владимир, по поводу [25], нужен мин. проект или уже разобрались?
Vladimir Kladov (2007-09-27 18:34:00) [6]Ну так, что, будет минимальный проект для демонстрации проблемы? Или все-таки нет инкакой проблемы? Я сделал тестовй проект, и у меня все нормально выравнивается, и в new_align и в old_align.
Vladimir Kladov (2007-09-27 15:35:00) [7]на панели тулбар панель и тулбар
Вот это как понимать? У меня обычно тулбар на панели, ничего не наезжает. Тем более не теряются картинки.
misha_shar (2007-09-27 07:53:00) [8]Если на панели тулбар панель и тулбар то в версии 2.80 все наезжает друг на друга и не помогает OLD_ALIGN даже ручное размещение Controlov
не помогает происходит пропадание картинок и надписей на тулбаре.
Пришлось вернуться к версии 2.78
mdw (2007-09-24 18:41:00) [9]C OLD_ALIGN все нормально работает.
Vladimir Kladov (2007-09-24 18:14:00) [10]Насчёт тулбара я такого не замечал, гляну. Вообще, попробуйте OLD_ALIGN. Мне пришлось на него перейти в своём последнем проекте (3 дня прошло и не помню в чём загвоздка была. Надо включить снова NEW_, чтобы вспомнить. Но что-то сердитое).
А переход на WM_SIZE - проблему решает?
Я тут вообще с выравниванием меток подумал надо давать им TabOrder всё-таки.
mdw (2007-09-24 17:10:00) [11]
> [-] Исправлена ошибка в обработчике сообщения WM_WINDOWPOSCHANGED
> дляtoolbar-контрола (возвращалось true вместо false).
> Эта ошибка недавала правильно выравнивать дочерние контролы
> на тулбаре.
Владимир, оно может и ошибка, но теперь не выравниваются контролы, лежащие рядом с тулбаром, если у них TabOrder больше TabOrder'a тулбара (caTop, caBottom) или выравнивание caClient.
exero (2007-09-24 07:50:00) [12]
> Как я и думал. Убираете FixFlatXP, и при отсутствии манифеста
> - будет прозрачным тулбар. Поставите манифест - станет в
> стиле XP, но не прозрачным. Если все-таки нужен прозрачный,
> убираете tboFlat. Но тогда при отключенных темах прозрачность
> для тулбара останется, а кнопки будут выпуклые в стиле классики.
Спасибо за информацию.
> Если нужен именно GRush, то элементарно решается заменой
> тулбара панелью с кнопками, что я и проделал в ToGRush.
Подключил я ToGrush - картинки пропали - не полноценная замена получилась - так что не вариант.
>Собственно,
> я не понял, при чем тут новая версия KOL, разве аналогичных
> траблов, но в других сочетаниях, не было раньше. В новой
> версии FixFlatXP работает не за счёт дорогой по коду прозрачности,
> а за счет установки OnTBCustomDraw.
Да собственно говоря не причем - просто кое-что работает не так, как мне хотелось - вот и все.
Vladimir Kladov (2007-09-23 20:00:00) [13]2Sapersky: а вы правы, снимаю фуражку. Ваш вариант быстрее на 5%. Был.
Но. Вам повезло: начало цикла случайно попало на границу 8 байт. И я был ленив, каюсь. Не ожидал от Delphi и пентиума такой прыти. После переписывания по-нормальному мне удалось сделать на 10% быстрее всё же, чем в вашем варианте.
Кстати PaethPredictor( 0, b, 0 ) = b. Впрочем первый цикл все равно ни на что не влияет. И and 255 к байту тоже не имеет смысла. Без него ваш вариант чуть быстрее. А вот выравнивать на границу слова начала цикла Delphi все-таки не умеет. после небольших изменений в коде процедуры выше, ваш вариант сразу стал чуть медленнее, чем в начале. И строковые команды работают быстрее, чем пара MOV+INC ESI/EDI. Это я тоже проверил.
Как протестирую (и поправлю при нужде) прочие фильтры, выложу новый вариант.
Sapersky (2007-09-21 16:29:00) [14]Так что мой вариант всяко быстрее вашего, причем наверняка не на несколько процентов.
Я ни на чём не настаиваю, но неужели долго проверить?
Для большего реализма добавлю: быстрее с 24 bpp, с 8 bpp чуть медленнее (но большие картинки, на которых имеет смысл бороться за скорость, обычно именно 24 bpp).
Вообще результат несколько неожиданный для меня самого, могу только предполагать, что причина в использовании вами строковых asm-команд. Вроде бы это наибыстрейший вариант на i486, но не на современных CPU.
А с раскидыванием переменных по регистрам и дельфийский оптимизатор неплохо справляется, во всяком случае на небольших функциях (поэтому и оставлен call; ещё, как оказалось, большое значение имеет тип передаваемых a,b,c).
Vladimir Kladov (2007-09-21 16:06:00) [15]Как я и думал. Убираете FixFlatXP, и при отсутствии манифеста - будет прозрачным тулбар. Поставите манифест - станет в стиле XP, но не прозрачным. Если все-таки нужен прозрачный, убираете tboFlat. Но тогда при отключенных темах прозрачность для тулбара останется, а кнопки будут выпуклые в стиле классики.
Если нужен именно GRush, то элементарно решается заменой тулбара панелью с кнопками, что я и проделал в ToGRush.
Собственно, я не понял, при чем тут новая версия KOL, разве аналогичных траблов, но в других сочетаниях, не было раньше. В новой версии FixFlatXP работает не за счёт дорогой по коду прозрачности, а за счет установки OnTBCustomDraw.
Vladimir Kladov (2007-09-21 14:22:00) [16]Насчет paeth. Видите ли в ассемблерном варианте у меня я избавился от лишних if-ов в начале цикла, но немного другим способом. Кроме того, у меня там не делается call для вызова paeth, он встроен внутрь цикла, причем весь на регистрах. Так что мой вариант всяко быстрее вашего, причем наверняка не на несколько процентов.
по прозрачности тулбаров: приду, смотреть буду, что там и как.
exero (2007-09-21 07:59:00) [17]когда tboFlat = False - то с прозрачностью проблем нет
exero (2007-09-21 07:53:00) [18]Как и обещал - неработающая прозрачность http://up.spbland.ru/files/07092144/
Как выяснилось манифест в данном случае на прозрачность не влияет.
Должен признать, что это не вполне обычный способ - хотя и ничего особенного в нем нет. В обычном случае проблем действительно не возникает.
Sapersky (2007-09-20 23:21:00) [19]Там главное не PaethPredictor, который практически аналогичен стандартному, а FilterRow. И таки да, быстрее, до 15% (Cel 2.8).
homm (2007-09-20 21:31:00) [20]> [15] Vladimir Kladov © (20.09.07 20:52)
> Жаль, что его вообще придумали.
+1 :)