Николай Зверев — DelphiFeeds.ru 2.0 http://delphifeeds2.ru Лучшие Delphi блоги Рунета Sat, 30 Apr 2022 18:56:22 +0000 ru-RU hourly 1 https://wordpress.org/?v=4.9.20 Как замена Free на FreeAndNil может поломать логику http://delphifeeds2.ru/2019/05/22/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bc%d0%b5%d0%bd%d0%b0-free-%d0%bd%d0%b0-freeandnil-%d0%bc%d0%be%d0%b6%d0%b5%d1%82-%d0%bf%d0%be%d0%bb%d0%be%d0%bc%d0%b0%d1%82%d1%8c-%d0%bb%d0%be%d0%b3%d0%b8%d0%ba/ http://delphifeeds2.ru/2019/05/22/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bc%d0%b5%d0%bd%d0%b0-free-%d0%bd%d0%b0-freeandnil-%d0%bc%d0%be%d0%b6%d0%b5%d1%82-%d0%bf%d0%be%d0%bb%d0%be%d0%bc%d0%b0%d1%82%d1%8c-%d0%bb%d0%be%d0%b3%d0%b8%d0%ba/#respond Wed, 22 May 2019 17:19:00 +0000 http://delphifeeds2.ru/2019/05/22/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bc%d0%b5%d0%bd%d0%b0-free-%d0%bd%d0%b0-freeandnil-%d0%bc%d0%be%d0%b6%d0%b5%d1%82-%d0%bf%d0%be%d0%bb%d0%be%d0%bc%d0%b0%d1%82%d1%8c-%d0%bb%d0%be%d0%b3%d0%b8%d0%ba/

Этот пост посвящается всем любителям споров FreeAndNil vs Free. Покажу пример, когда бездумную замену второго на первое делать нельзя.
Для понимания проблемы, покажу историю развития

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

]]>
http://delphifeeds2.ru/2019/05/22/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bc%d0%b5%d0%bd%d0%b0-free-%d0%bd%d0%b0-freeandnil-%d0%bc%d0%be%d0%b6%d0%b5%d1%82-%d0%bf%d0%be%d0%bb%d0%be%d0%bc%d0%b0%d1%82%d1%8c-%d0%bb%d0%be%d0%b3%d0%b8%d0%ba/feed/ 0
Delphi Notes Splitter обновлён (v1.11) http://delphifeeds2.ru/2018/11/04/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-11/ http://delphifeeds2.ru/2018/11/04/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-11/#respond Sun, 04 Nov 2018 17:22:00 +0000 http://delphifeeds2.ru/2018/11/04/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-11/

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

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

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

]]>
http://delphifeeds2.ru/2018/11/04/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-11/feed/ 0
Delphi Notes Splitter обновлён (v1.10) http://delphifeeds2.ru/2018/10/16/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-10/ http://delphifeeds2.ru/2018/10/16/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-10/#respond Tue, 16 Oct 2018 19:37:00 +0000 http://delphifeeds2.ru/2018/10/16/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-10/

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

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

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

]]>
http://delphifeeds2.ru/2018/10/16/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-10/feed/ 0
А Вы перешли на WIN64? (Часть 2) http://delphifeeds2.ru/2016/10/10/%d0%b0-%d0%b2%d1%8b-%d0%bf%d0%b5%d1%80%d0%b5%d1%88%d0%bb%d0%b8-%d0%bd%d0%b0-win64-%d1%87%d0%b0%d1%81%d1%82%d1%8c-2/ http://delphifeeds2.ru/2016/10/10/%d0%b0-%d0%b2%d1%8b-%d0%bf%d0%b5%d1%80%d0%b5%d1%88%d0%bb%d0%b8-%d0%bd%d0%b0-win64-%d1%87%d0%b0%d1%81%d1%82%d1%8c-2/#respond Sun, 09 Oct 2016 22:38:00 +0000 http://delphifeeds2.ru/2016/10/10/%d0%b0-%d0%b2%d1%8b-%d0%bf%d0%b5%d1%80%d0%b5%d1%88%d0%bb%d0%b8-%d0%bd%d0%b0-win64-%d1%87%d0%b0%d1%81%d1%82%d1%8c-2/

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

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

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

]]>
http://delphifeeds2.ru/2016/10/10/%d0%b0-%d0%b2%d1%8b-%d0%bf%d0%b5%d1%80%d0%b5%d1%88%d0%bb%d0%b8-%d0%bd%d0%b0-win64-%d1%87%d0%b0%d1%81%d1%82%d1%8c-2/feed/ 0
А Вы перешли на WIN64? http://delphifeeds2.ru/2016/09/29/%d0%b0-%d0%b2%d1%8b-%d0%bf%d0%b5%d1%80%d0%b5%d1%88%d0%bb%d0%b8-%d0%bd%d0%b0-win64/ http://delphifeeds2.ru/2016/09/29/%d0%b0-%d0%b2%d1%8b-%d0%bf%d0%b5%d1%80%d0%b5%d1%88%d0%bb%d0%b8-%d0%bd%d0%b0-win64/#respond Wed, 28 Sep 2016 22:36:00 +0000 http://delphifeeds2.ru/2016/09/29/%d0%b0-%d0%b2%d1%8b-%d0%bf%d0%b5%d1%80%d0%b5%d1%88%d0%bb%d0%b8-%d0%bd%d0%b0-win64/

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

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

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

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

]]>
http://delphifeeds2.ru/2016/09/29/%d0%b0-%d0%b2%d1%8b-%d0%bf%d0%b5%d1%80%d0%b5%d1%88%d0%bb%d0%b8-%d0%bd%d0%b0-win64/feed/ 0
Задачка http://delphifeeds2.ru/2016/06/29/%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%ba%d0%b0/ http://delphifeeds2.ru/2016/06/29/%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%ba%d0%b0/#respond Wed, 29 Jun 2016 07:36:00 +0000 http://delphifeeds2.ru/2016/06/29/%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%ba%d0%b0/

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

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

]]>
http://delphifeeds2.ru/2016/06/29/%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%ba%d0%b0/feed/ 0
Полезняшки. Переключение раскладки клавиатуры при вводе логина и пароля http://delphifeeds2.ru/2015/12/12/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8f%d1%88%d0%ba%d0%b8-%d0%bf%d0%b5%d1%80%d0%b5%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d1%80%d0%b0%d1%81%d0%ba%d0%bb%d0%b0%d0%b4%d0%ba%d0%b8-%d0%ba/ http://delphifeeds2.ru/2015/12/12/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8f%d1%88%d0%ba%d0%b8-%d0%bf%d0%b5%d1%80%d0%b5%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d1%80%d0%b0%d1%81%d0%ba%d0%bb%d0%b0%d0%b4%d0%ba%d0%b8-%d0%ba/#respond Sat, 12 Dec 2015 13:57:00 +0000 http://delphifeeds2.ru/2015/12/12/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8f%d1%88%d0%ba%d0%b8-%d0%bf%d0%b5%d1%80%d0%b5%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d1%80%d0%b0%d1%81%d0%ba%d0%bb%d0%b0%d0%b4%d0%ba%d0%b8-%d0%ba/

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

 

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

]]>
http://delphifeeds2.ru/2015/12/12/%d0%bf%d0%be%d0%bb%d0%b5%d0%b7%d0%bd%d1%8f%d1%88%d0%ba%d0%b8-%d0%bf%d0%b5%d1%80%d0%b5%d0%ba%d0%bb%d1%8e%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d1%80%d0%b0%d1%81%d0%ba%d0%bb%d0%b0%d0%b4%d0%ba%d0%b8-%d0%ba/feed/ 0
Семинар Embarcadero по RAD Studio 10 Seattle в Питере http://delphifeeds2.ru/2015/11/27/%d1%81%d0%b5%d0%bc%d0%b8%d0%bd%d0%b0%d1%80-embarcadero-%d0%bf%d0%be-rad-studio-10-seattle-%d0%b2-%d0%bf%d0%b8%d1%82%d0%b5%d1%80%d0%b5/ http://delphifeeds2.ru/2015/11/27/%d1%81%d0%b5%d0%bc%d0%b8%d0%bd%d0%b0%d1%80-embarcadero-%d0%bf%d0%be-rad-studio-10-seattle-%d0%b2-%d0%bf%d0%b8%d1%82%d0%b5%d1%80%d0%b5/#respond Fri, 27 Nov 2015 11:03:00 +0000 http://delphifeeds2.ru/2015/11/27/%d1%81%d0%b5%d0%bc%d0%b8%d0%bd%d0%b0%d1%80-embarcadero-%d0%bf%d0%be-rad-studio-10-seattle-%d0%b2-%d0%bf%d0%b8%d1%82%d0%b5%d1%80%d0%b5/

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

 

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

]]>
http://delphifeeds2.ru/2015/11/27/%d1%81%d0%b5%d0%bc%d0%b8%d0%bd%d0%b0%d1%80-embarcadero-%d0%bf%d0%be-rad-studio-10-seattle-%d0%b2-%d0%bf%d0%b8%d1%82%d0%b5%d1%80%d0%b5/feed/ 0
Блокировка перерисовки окна на время обновления его дочерних окон http://delphifeeds2.ru/2015/09/21/%d0%b1%d0%bb%d0%be%d0%ba%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b0-%d0%bf%d0%b5%d1%80%d0%b5%d1%80%d0%b8%d1%81%d0%be%d0%b2%d0%ba%d0%b8-%d0%be%d0%ba%d0%bd%d0%b0-%d0%bd%d0%b0-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f/ http://delphifeeds2.ru/2015/09/21/%d0%b1%d0%bb%d0%be%d0%ba%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b0-%d0%bf%d0%b5%d1%80%d0%b5%d1%80%d0%b8%d1%81%d0%be%d0%b2%d0%ba%d0%b8-%d0%be%d0%ba%d0%bd%d0%b0-%d0%bd%d0%b0-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f/#respond Mon, 21 Sep 2015 10:11:00 +0000 http://delphifeeds2.ru/2015/09/21/%d0%b1%d0%bb%d0%be%d0%ba%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b0-%d0%bf%d0%b5%d1%80%d0%b5%d1%80%d0%b8%d1%81%d0%be%d0%b2%d0%ba%d0%b8-%d0%be%d0%ba%d0%bd%d0%b0-%d0%bd%d0%b0-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f/

Открыл для себя сообщение 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 меняет видимость окна (оно как бы скрывается, но при этом область под окном – не перерисовывается). И если окно уже было скрыто, то оно может быть ошибочно отображено (и наоборот), поэтому не забывайте проверять этот момент.

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

]]>
http://delphifeeds2.ru/2015/09/21/%d0%b1%d0%bb%d0%be%d0%ba%d0%b8%d1%80%d0%be%d0%b2%d0%ba%d0%b0-%d0%bf%d0%b5%d1%80%d0%b5%d1%80%d0%b8%d1%81%d0%be%d0%b2%d0%ba%d0%b8-%d0%be%d0%ba%d0%bd%d0%b0-%d0%bd%d0%b0-%d0%b2%d1%80%d0%b5%d0%bc%d1%8f/feed/ 0
Delphi Notes Splitter обновлён (v1.09) http://delphifeeds2.ru/2015/09/21/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-09/ http://delphifeeds2.ru/2015/09/21/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-09/#respond Mon, 21 Sep 2015 10:03:00 +0000 http://delphifeeds2.ru/2015/09/21/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-09/

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

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

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

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

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

]]>
http://delphifeeds2.ru/2015/09/21/delphi-notes-splitter-%d0%be%d0%b1%d0%bd%d0%be%d0%b2%d0%bb%d1%91%d0%bd-v1-09/feed/ 0