среда, 22 мая 2019 г.
Как замена Free на FreeAndNil может поломать логику
Для понимания проблемы, покажу историю развития вопроса. Понятно, что если задачу решать полностью с нуля, то её можно решить разными способами, и можно выбрать решение, когда FreeAndNil будет лучшим и правильным вариантом. Однако в исторической перспективе получилось так, как получилось, я увидел что FreeAndNil всё поломает и решил об этом написать заметку.
воскресенье, 4 ноября 2018 г.
Delphi Notes Splitter обновлён (v1.11)
Версия 1.07.
Версия 1.08.
Версия 1.09.
Версия 1.10.
Текущая версия 1.11 доступна на gitub'е, в новой версии:
+ Добавлена поддержка VCL стилей
+ Добавлена поддержка старых версий Delphi
* UpdateControlSize вызывает WM_SETREDRAW только если:
а) Parent не является окном верхнего уровня (иначе есть вероятность "провалиться" сквозь окно,
а так же наблюдаются глюки прорисовки в Delphi7 при dpi > 96)
б) включено свойство Parent.DoubleBuffered (при выключенном DoubleBuffered эффект не заметен)
! Исправлена проблема поиска AlignControl при первом "кидании" компонента на форму в дизайнере
вторник, 16 октября 2018 г.
Delphi Notes Splitter обновлён (v1.10)
Версия 1.07.
Версия 1.08.
Версия 1.09.
Текущая версия 1.10 доступна на gitub'е, в новой версии:
(*) Изменён алгоритм определения цвета кнопки при наведении мыши (*) Оптимизация отрисовки в методе DrawArrow (!) CMDialogKey заменён на CMChildKey (иначе VK_ESCAPE может не дойти до контрола)
понедельник, 10 октября 2016 г.
А Вы перешли на WIN64? (Часть 2)
четверг, 29 сентября 2016 г.
среда, 29 июня 2016 г.
Задачка
суббота, 12 декабря 2015 г.
Полезняшки. Переключение раскладки клавиатуры при вводе логина и пароля
В наших проектах есть такое требование – логин и пароль пользователя к БД должны быть введены в английской раскладке клавиатуры. Ну так исторически сложилось. А чтобы голову пользователя не напрягать таким ограничением, перед вводом пароля или логина раскладка клавиатуры принудительно переключается на английскую (а потом возвращается та, которая была).
И есть ещё такая полезняшка: при завершении работы, приложение сохраняет пользовательскую раскладку, а при следующем запуске – восстанавливает её.
пятница, 27 ноября 2015 г.
Семинар Embarcadero по RAD Studio 10 Seattle в Питере
понедельник, 21 сентября 2015 г.
Блокировка перерисовки окна на время обновления его дочерних окон
Открыл для себя сообщение WM_SETREDRAW. Позволяет на какое-то время отключить перерисовку контрола (окна), тем самым избавить пользователя от лишних мерцаний, эффекта шлейфа и тому подобного. Применил в своём сплиттере, теперь при изменении размеров – красота. Сравните две анимашки (т.к. это gif – сохранил в оттенках серого, иначе появляются цветовые артефакты).
Delphi Notes Splitter обновлён (v1.09)
По этой ссылке можно перейти на страницу с заметкой о компоненте и ссылкой на исходник.
Версия 1.07.
Версия 1.08.
В новой версии:
(*) Метод UpdateControlSize обрамлён сообщением WM_SETREDRAW для плавного изменения размеров компонент, окружающих сплиттер
Ссылка для скачивания: Исходник компонента + исходник демо приложения + скомпилированное демо (zip-архив 216 К)
В следующей заметке расскажу чуть более подробнее о WM_SETREDRAW и там будет наглядный пример.
среда, 18 февраля 2015 г.
Своя подсветка синтаксиса в IDE Delphi. Пример
На днях занимался оптимизацией Prebuild-события, постоянно правил свой cmd-скрипт, и мне очень быстро надоело переключаться между Delphi и Notepad++ (в котором редактировал скрипт). Немного покопавшись в ToolsApi, у меня получилось сделать подсветку синтаксиса для CMD/BAT-файлов.
понедельник, 15 декабря 2014 г.
Укрощение автопрокрутки
Мне так удобнее – слева от редактора кода. А когда результаты поиска большие (или список для рефакторинга большой) – то на экране так больше помещается. Есть один минус – при клике в строчку, которая не помещается на экране по ширине – происходит автоматическая прокрутка по горизонтали (на картинке выше такая строчка выделена подчёркиванием). Т.е. дерево уезжает влево и родительские узлы прячутся за прокруткой – меня это сильно отвлекает и раздражает.
Не секрет, что эти деревья реализованы на VirtualTreeView-компоненте, поэтому такое “лечится” в одно действие:
VTV.TreeOptions.AutoOptions := VTV.TreeOptions.AutoOptions + [toDisableAutoscrollOnFocus];Добавляем в пакет, устанавливаем – и готово!
Исходники доступны по ссылке.
воскресенье, 16 ноября 2014 г.
Общее оформление файла
Эта заметка является продолжением к заметкам Стиль оформления кода. Вместо вступления, Настройки окружения и Регистр букв.
(Я планировал немного другой порядок публикаций, но отсутствие времени (ну т.е. лень) не даёт мне возможности навести порядок в некоторых промежуточных моментах.)
пятница, 7 ноября 2014 г.
Регистр букв
Эта заметка является продолжением к заметкам Стиль оформления кода. Вместо вступления и Настройки окружения.
пятница, 31 октября 2014 г.
Настройки окружения
Эта заметка является продолжением к предыдущей.
Программное окружение, в котором работает программист, а точнее его настройки – сугубо индивидуальная вещь. Но есть несколько моментов, которые прямо или косвенно влияют на результат. Ниже приведены рекомендации, которые будут частью будущего документа; на них будут ссылаться другие разделы документа.
четверг, 23 октября 2014 г.
Стиль оформления кода. Вместо вступления
Читая чужой код, или даже свой собственный (спустя неделю-месяц-год), наверняка каждый хоть раз да испытывал это ощущение “вырви глаз”. Ощущение, когда не покидает мысль: “да это проще переписать заново, чем разбираться в этом”. Речь конечно идёт о стиле оформления кода.
понедельник, 22 сентября 2014 г.
Переход с Delphi 2010 на Delphi XE7
Чуть больше года назад я писал об успешном переходе с Delphi 7 на Delphi 2010 приложений в нашей компании (Вот и мы перешли на Юникод).
В этой заметке кратенько опишу об особенностях перехода с Delphi 2010 на Delphi XE7.
пятница, 19 сентября 2014 г.
Про OCIBreak и принудительное прерывание обращения к БД
Я как-то уже не раз писал о том, что мы не используем стандартные компоненты доступа к БД. Почти всё самописное. И работаем мы с Oracle.
Недавно я, наконец-таки, сделал “фишку”, без которой вполне можно жить, но с ней приятнее.
Представьте, что у вас есть запрос к БД, который выполняется длительное время. Ну, например, пользователь указал слишком мягкие критерии для фильтрации данных. Или индекса в БД нет. Или запрос изначально “кривой”. Или всё вместе взятое… Для прерывания выполнения текущего обращения к серверу в OCI есть стандартная функция – OCIBreak.
среда, 17 сентября 2014 г.
Коррекция шрифта в Object Inspector’е
И тут вдруг бросилось в глаза, что у Object Inspector’а шрифт не такой, как везде… (везде – Tahoma 8, а тут – Segoe UI 9)
воскресенье, 14 сентября 2014 г.
Helper для TMessage
В предыдущей заметке я упомянул о хелпере для отладки сообщений Windows. Эта заметка будет предельно краткой: ссылки на исходники и скриншот демки.