Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как исключить нечитаемые и слишком крупные шрифты из списка `TComboBox` в Delphi 10.1.2

Delphi , Графика и Игры , Шрифты

Как исключить нечитаемые и слишком крупные шрифты из списка TComboBox в Delphi 10.1.2

При работе с компонентом TComboBox в приложениях VCL для Delphi 10.1.2, разработчики часто сталкиваются с проблемой отображения шрифтов, которые не предназначены для чтения или имеют слишком большой размер. В данной статье мы рассмотрим, как можно отфильтровать такие шрифты, чтобы пользовательский интерфейс был удобным и функциональным.

Проблема отображения шрифтов

Пример кода, который заполняет TComboBox списком шрифтов, выглядит следующим образом:

procedure TForm2.FormCreate(Sender: TObject);
begin
  AddFontsToComboList;
end;

procedure TForm2.AddFontsToComboList;
var
  i: Integer;
begin
  ComboBox1.Items.BeginUpdate;
  try
    for i := 0 to Screen.Fonts.Count - 1 do
    begin
      ComboBox1.Items.Add(Screen.Fonts[i]);
    end;
  finally
    ComboBox1.Items.EndUpdate;
  end;
end;

procedure TForm2.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
  // Код для отображения шрифтов в стиле owner draw
end;

Однако, в результате работы такого кода, в списке могут отображаться шрифты, которые не предназначены для чтения, например, Cambria Math, или имеют слишком большой размер, что делает их неудобными для использования в TComboBox.

Решение проблемы

Чтобы отфильтровать шрифты, необходимо использовать функцию GetTextMetrics(), которая позволяет измерить метрики шрифта и определить, подходит ли он для отображения в TComboBox. Код для измерения метрик шрифта может выглядеть следующим образом:

uses
  Winapi.Windows;

function IsFontReadable(const FontName: string; Height: Integer): Boolean;
var
  HDC: HDC;
  FontMetrics: TFontMetrics;
begin
  HDC := GetDC(0);
  FontMetrics := TDC.FontMetrics;
  try
    FontMetrics.FontSize := Height;
    if not CreateScalableFontResource(HDC, PChar(FontName), 0, TRANSFORM, FontMetrics) then
      Exit(False);
    Result := FontMetrics.tmHeight > 0;
  finally
    ReleaseDC(0, HDC);
  end;
end;

procedure TForm2.AddFontsToComboList;
var
  i: Integer;
begin
  ComboBox1.Items.BeginUpdate;
  try
    for i := 0 to Screen.Fonts.Count - 1 do
    begin
      if IsFontReadable(Screen.Fonts[i], ComboBox1.ItemHeight) then
        ComboBox1.Items.Add(Screen.Fonts[i]);
    end;
  finally
    ComboBox1.Items.EndUpdate;
  end;
end;

В данном примере кода, перед добавлением шрифта в TComboBox, проверяется, что его высота не превышает высоту элемента списка. Это позволяет исключить слишком крупные шрифты из отображения.

Подтвержденный ответ

Используя функцию IsFontReadable, разработчики могут фильтровать шрифты по метрикам и исключать те, которые не подходят для чтения или имеют слишком большой размер. Это обеспечит удобство и функциональность отображения списка шрифтов в TComboBox.

Альтернативный ответ и дополнительные замечания

Разработчики также обсуждали возможность ручного обрезки текста и использования переменного размера элементов списка, но это может привести к неожиданному поведению компонента, например, к изменению его размера при выборе определенного шрифта.

Заключение

В данной статье мы рассмотрели, как исключить нечитаемые и слишком крупные шрифты из списка TComboBox в Delphi 10.1.2. Использование функции GetTextMetrics() и создания вспомогательной функции IsFontReadable позволяет эффективно отфильтровать шрифты перед их добавлением в список, что улучшает пользовательский опыт и облегчает разработку.

Создано по материалам из источника по ссылке.

Ответ содержит инструкции по исключению из списка компонента TComboBox в Delphi 10.1.2 нечитаемых и слишком крупных шрифтов, используя функцию проверки метрик шрифтов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Шрифты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-10 17:45:18/0.014198064804077/1