Delphi High-DPI Components - PullRequest
       11

Delphi High-DPI Components

0 голосов
/ 31 октября 2018

У меня вопрос по поводу приложения с высоким разрешением в Delphi. В Интернете я нашел серию статей, опубликованных Жарко Гайичем. В этих статьях рассказывается о создании приложения Delphi, готового для High-DPI. Описанный метод прекрасно работает, но автор использует его внутри каждого отдельного приложения; например, говоря о TSpeedButtons.

У меня такой вопрос: есть ли способ реализовать такое поведение также в компонентах? Например, я реализую простой компонент, который работает как Embarcadero TSpeedButton, но использует прозрачные изображения PNG. Изображения внутри компонента загружаются во время разработки из некоторых изображений PNG. У меня есть TObjectDictionary, в котором я регистрирую состояния кнопок: включен, отключен и т. Д. Он объявлен следующим образом:

FGlyphs: TObjectDictionary<TGlyphState, TPicture>

В приложении, использующем этот компонент, я загружаю изображения PNG из файлов с разрешением 24 x 24 пикселя. Когда я запускаю приложение на мониторе 4K, эти изображения становятся очень маленькими. Если я применяю метод Žarko, все работает хорошо, но таким образом каждое приложение, использующее мой компонент, должно реализовать это решение.

Как реализовать это непосредственно внутри компонента? Я подумал реализовать это внутри процедуры SetGlyph , которая похожа на следующий код, но я не знаю, является ли это правильным местом.

procedure TNCRSpeedButton.SetGlyphs(Index: TGlyphState; Value: TPicture);
begin
  FGlyphs.Items[Index].Assign(Value);
end;

TGlyphState определяется следующим образом:

TGlyphState = (gtEnabled, gtDisabled, gtDown, gtOver);

Эрос

1 Ответ

0 голосов
/ 02 ноября 2018

1) Прежде всего вы должны включить опцию Enable High-Dpi в Project Option -> Application -> your target platform -> Manifest file. Эта опция доступна начиная с Delphi 10 (Сиэтл).

2) если в ОС W10 у вас другие значения Scale, вы можете рассчитать и запустить TWinControl.ScaleBy (доступно для форм) для окна настройки и всех элементов в одном конкретном окне.

См. Демонстрацию на https://github.com/KohrAhr/DelphiDemoPPI

Демо содержит TToolButtons элементы управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...