Определите высоту текста в TMenuItem, чтобы решить, на какую высоту изменить MenuItem, через TMenuItem.OnMeasureItem

1

Я использую Borland C++ Builder 2009 и когда используется большой шрифт, элементы меню в MainMenu и Popup слишком близки друг к другу, текст обрезается сверху и снизу, даже когда он слишком большой.

Я понимаю, что могу изменить высоту элементов с помощью TMenuItem.OnMeasureItem но на какой высоте я должен установить его?

Какой лучший способ рассчитать идеальную высоту и как мне получить переменные для нее (например, высота текста)?

  • 1
    Посмотрите на метод TCanvas.TextHeight() . Создайте временный TCanvas , назначьте ему текущий Screen.MenuFont , передайте TMenuItem.Caption его TextHeight() , а затем освободите его. Или, поскольку меню VCL уже обрабатывают WM_MEASUREITEM внутри, WM_MEASUREITEM исходный код VCL, чтобы выяснить, почему высоты по умолчанию слишком малы, а затем исправьте его.
  • 0
    Лучшее решение состоит в том, чтобы изменить код VCL, чтобы перестать использовать меню рисования владельца
Показать ещё 1 комментарий
Теги:
delphi-2009
c++builder
c++builder-2010

1 ответ

1

Обработчики OnMeasureItem предлагают значение по умолчанию в параметре Height var.

Вы можете умножить это значение на соотношение текущего экрана PPI и PPI по умолчанию для размера шрифта 100% (96), например Height := Ceil(Height * Screen.PixelsPerInch/96);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню