Delphi Notes Splitter обновлён (v1.11)

Начало.
Версия 1.07.
Версия 1.08.
Версия 1.09.
Версия 1.10.

Текущая версия 1.11 доступна на gitub’е, в новой версии:
+ Добавлена поддержка VCL стилей

Читать на сайте автора.

Delphi Notes Splitter обновлён (v1.10)

Начало.
Версия 1.07.
Версия 1.08.
Версия 1.09.

Текущая версия 1.10 доступна на gitub’е, в новой версии:
(*) Изменён алгоритм определения цвета кнопки при

Читать на сайте автора.

А Вы перешли на WIN64? (Часть 2)

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

Итак, обновив сторонние библиотеки и компоненты, а

Читать на сайте автора.

А Вы перешли на WIN64?

Однажды я писал о переходе на Unicode. Теперь настало время адаптации приложений под Win64.

Собственно план такой же, как и раньше:

обновление сторонних библиотек и компонентов; адаптация

Читать на сайте автора.

Задачка

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

Читать на сайте автора.

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

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

 

Читать на сайте автора.

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

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

 

Читать на сайте автора.

Блокировка перерисовки окна на время обновления его дочерних окон

Открыл для себя сообщение WM_SETREDRAW. Позволяет на какое-то время отключить перерисовку контрола (окна), тем самым избавить пользователя от лишних мерцаний, эффекта шлейфа и тому подобного. Применил в своём сплиттере, теперь при изменении размеров – красота. Сравните две анимашки (т.к. это gif – сохранил в оттенках серого, иначе появляются цветовые артефакты).

До применения WM_SETREDRAW:

before_gs

Здесь прекрасно видно, что панель слева от сплиттера не успевает отрисовываться (да и правая отстаёт).

А это уже после обрамления кода по изменению ширины AlignControl’а в WM_SETREDRAW:

after_gs

 

Обрамление в коде выглядит вот так:

var
  LLockPaint: Boolean;
begin
    LLockPaint := Parent.HandleAllocated and Parent.Visible;
    if LLockPaint then
      SendMessage(Parent.Handle, WM_SETREDRAW, 0, 0);
    try
      // код по изменению размеров контролов
    finally
      if LLockPaint then
      begin
        SendMessage(Parent.Handle, WM_SETREDRAW, 1, 0);
        RedrawWindow(Parent.Handle, nil, 0, RDW_INVALIDATE or RDW_UPDATENOW or RDW_ALLCHILDREN);
      end;
    end;
end;

Хочу отметить, что если просто перерисовывать родительский (по отношению к сплиттеру) контрол, например вызовом Parent.Repaint – то шлейфов тоже не будет, но при этом появляется мерцание, которое заметно в более нагруженных (чем на примере) контролами случаях.

Эту технику можно применять в тех случаях, когда в одном окне необходимо перерасположить несколько контролов. Ну как пример, когда в IDE меняется Layout (Desktop speedsetting) – без блокировки рисования пользователь видит неприятные мерцания.

И ещё одно важное замечание: WM_SETREDRAW меняет видимость окна (оно как бы скрывается, но при этом область под окном – не перерисовывается). И если окно уже было скрыто, то оно может быть ошибочно отображено (и наоборот), поэтому не забывайте проверять этот момент.

Читать на сайте автора.

Delphi Notes Splitter обновлён (v1.09)

По этой ссылке можно перейти на страницу с заметкой о компоненте и ссылкой на исходник.
Версия 1.07.
Версия 1.08.

В новой версии:

(*) Метод UpdateControlSize обрамлён сообщением WM_SETREDRAW для плавного изменения размеров компонент, окружающих сплиттер

Ссылка для скачивания: Исходник компонента + исходник демо приложения + скомпилированное демо (zip-архив 216 К)
В следующей заметке расскажу чуть более подробнее о WM_SETREDRAW и там будет наглядный пример.

Читать на сайте автора.

Своя подсветка синтаксиса в IDE Delphi. Пример

Мне очень нравятся Build Events в Delphi. Это когда с проектом можно связать некую команду (например, cmd-скрипт), которая будет выполняться перед сборкой (или после сборки) приложения. Будь то по F9, либо при внешней сборке с помощью MSBuild. Мне это нужно для актуализации автогенерируемого кода, используемого проектом.
На днях занимался оптимизацией Prebuild-события, постоянно правил свой cmd-скрипт, и мне очень быстро надоело переключаться между Delphi и Notepad++ (в котором редактировал скрипт). Немного покопавшись в ToolsApi, у меня получилось сделать подсветку синтаксиса для CMD/BAT-файлов.
Выглядит это так:
CMDHighlighter
Это в меню Tools Options. Как это выглядит в самом редакторе – см. ниже.
Пока сделал на скорую руку (осторожно, черновой код!), исходник доступен тут: https://github.com/delphinotes/Useful/tree/master/CMDHighlighter
Устанавливается так:

  1. Открываем CMDHighlighter.dproj.
  2. В опциях проекта указываем суффикс – в зависимости от версии Delphi (210 – это для Delphi XE7), см. последний столбец http://docwiki.embarcadero.com/RADStudio/XE7/en/Compiler_Versions
    PackageOptions
  3. В Project Manager’е делаем Install.
    Если не захочет устанавливаться, то можно удалить dproj-файл, открыть dpk-файл и сделать как в пункте 2.
  4. Подсветка установлена, теперь необходимо связать её с cmd-файлами. Рекомендую делать так:
    • File Close All
    • Tools Options –> Editor Options Source Options –> New…Ввести CMD/BAT, нажать OK
    • В поле Extensions ввести cmd;bat
    • Установить флажок Use syntax highlight и выбрать CMD/BAT Highlighter в комбобоксе:
      SourceOptions
    • Остальные флажки и значения – по вкусу.

А вот как выглядит кусочек моего Prebuild-скрипта:
Sample
Спасибо за внимание 🙂

Читать на сайте автора.