среда, 22 мая 2019 г.

Как замена Free на FreeAndNil может поломать логику

Этот пост посвящается всем любителям споров FreeAndNil vs Free. Покажу пример, когда бездумную замену второго на первое делать нельзя.
Для понимания проблемы, покажу историю развития вопроса. Понятно, что если задачу решать полностью с нуля, то её можно решить разными способами, и можно выбрать решение, когда 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)

В предыдущей заметке я рассказывал о начале работ по адаптации наших приложений к платформе Win64. Эта заметка является продолжением.

четверг, 29 сентября 2016 г.

среда, 29 июня 2016 г.

Задачка

Может ли класс-деструктор (или finalization-секция модуля) выполниться раньше обычного деструктора? Если может, то при каком условии?

суббота, 12 декабря 2015 г.

Полезняшки. Переключение раскладки клавиатуры при вводе логина и пароля

В наших проектах есть такое требование – логин и пароль пользователя к БД должны быть введены в английской раскладке клавиатуры. Ну так исторически сложилось. А чтобы голову пользователя не напрягать таким ограничением, перед вводом пароля или логина раскладка клавиатуры принудительно переключается на английскую (а потом возвращается та, которая была).

И есть ещё такая полезняшка: при завершении работы, приложение сохраняет пользовательскую раскладку, а при следующем запуске – восстанавливает её.

пятница, 27 ноября 2015 г.

Семинар Embarcadero по RAD Studio 10 Seattle в Питере

Состоялся очередной семинар Embarcadero в Санкт-Петербурге. Это уже стало традицией - с одним из релизов раз в год приезжать к нам в гости, и каждый раз, начиная с 2012 года, я хожу на это мероприятие. Даже не для того, чтобы узнать, что "там" нового - это всё можно узнать в сети. А просто на людей посмотреть, на их энтузиазм, зарядиться позитивом.

понедельник, 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. Пример

Мне очень нравятся Build Events в Delphi. Это когда с проектом можно связать некую команду (например, cmd-скрипт), которая будет выполняться перед сборкой (или после сборки) приложения. Будь то по F9, либо при внешней сборке с помощью MSBuild. Мне это нужно для актуализации автогенерируемого кода, используемого проектом.
На днях занимался оптимизацией Prebuild-события, постоянно правил свой cmd-скрипт, и мне очень быстро надоело переключаться между Delphi и Notepad++ (в котором редактировал скрипт). Немного покопавшись в ToolsApi, у меня получилось сделать подсветку синтаксиса для CMD/BAT-файлов.

понедельник, 15 декабря 2014 г.

Укрощение автопрокрутки

Люблю я Delphi. И нравятся мне в ней такие фичи, как: Ctrl+Shift+Enter (Find Local References), Ctrl+Shift+E (Refactor \ Rename), и многие другие. Вот окошки озвученных фич у меня расположены как-то так:
image
Мне так удобнее – слева от редактора кода. А когда результаты поиска большие (или список для рефакторинга большой) – то на экране так больше помещается. Есть один минус – при клике в строчку, которая не помещается на экране по ширине – происходит автоматическая прокрутка по горизонтали (на картинке выше такая строчка выделена подчёркиванием). Т.е. дерево уезжает влево и родительские узлы прячутся за прокруткой – меня это сильно отвлекает и раздражает.
Не секрет, что эти деревья реализованы на VirtualTreeView-компоненте, поэтому такое “лечится” в одно действие:
  VTV.TreeOptions.AutoOptions := VTV.TreeOptions.AutoOptions + [toDisableAutoscrollOnFocus];
Добавляем в пакет, устанавливаем – и готово!
Исходники доступны по ссылке.

воскресенье, 16 ноября 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’е

Пробую Delphi XE7. Пока нравится. Поставил GExperts – очень уж я привык к сочетаниям Ctrl+Alt+Down и Ctrl+Alt+Up – переход к следующему/предыдущему объявлению идентификатора. CnPackWizards пока не вышел, но и без него вполне можно жить.
И тут вдруг бросилось в глаза, что у Object Inspector’а шрифт не такой, как везде… (везде – Tahoma 8, а тут – Segoe UI 9)

воскресенье, 14 сентября 2014 г.

Helper для TMessage

В предыдущей заметке я упомянул о хелпере для отладки сообщений Windows. Эта заметка будет предельно краткой: ссылки на исходники и скриншот демки.

.

.