2013-02-14 2 views
2

Delphi7. У меня есть Listbox, OwnerDrawn, с фиксированным ItemHeight. Теперь я хочу, чтобы оно выглядело нормально при 125% размерах шрифтов Windows. В настоящее время я вижу, что шрифт элементов увеличивается, но ItemHeight не является, поэтому элементы «усекаются» по Y. Как отрегулировать ItemHeight, когда OS имеет размер шрифта 125% или 150%?Delphi: как настроить ownerdrawn Listbox, для различных систем DPI?

+0

Я думаю, что это неопровержимо, если вы не разместите несколько примеров кода. Как мы можем догадаться, что вы делаете? Во-вторых, я считаю, что вам нужно масштабировать ItemHeight, чтобы обрабатывать высоту текста шрифта, который вы хотите нарисовать, поскольку ItemHeight находится в пикселях, а не в диалогах. Я бы использовал Canvas.TextHeight ('X') + Padding, чтобы получить высоту и сохранить ее в ItemHeight. (Padding = от 4 до 6 пикселей) –

+0

@Warren P Спасибо, используя Canvas.Textheight тоже хорошо. Я решил ниже. – Prog1020

+0

@Ingo, используя «TextHeight», также был точкой моего ответа ... Вы отклонили его только потому, что хотите отрегулировать высоту элемента в другом месте, потому что вы используете другой стиль списка. Ничего ... – TLama

ответ

1

Невозможно использовать OnMeasureItem как List.Style = OwnerDrawFixed. My sol:

function ScaleFontSize(Size: Integer; Form: TForm): Integer; 
begin 
    Result:= Size * Form.PixelsPerInch div 96 + 1; 
end; 

procedure TfmSetup.TntFormCreate(Sender: TObject); 
begin 
    with ListTabColors do 
    ItemHeight:= ScaleFontSize(ItemHeight, Self); 
end; 
Смежные вопросы