Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизОпределение ширины строки в пикселах для компонента memo Найти похожие ветки
← →
SMT (2005-01-03 11:20) [0]Уважаемые Мастера,
Как правильно определить ширину строки в пикселах для компонента Memo?
Я пытаюсь автоматически подгонять ширину компонента Memo в зависимости от
установленного числа логических пикселей для экрана от 96 до 120
пикселей/дюйм. Для этого надо найти свойство или метод у компонента
Memo, позволяющего провести такой расчет, например,аналог Form.Canvas.TextWidth.
Однако я ничего не нашел.
Без автонастройки текст либо не помещается в габарит Memo, либо справа
остается слишком широкое пустое пространство.
Игорь Степанов
← →
saNat © (2005-01-03 12:42) [1]Когда я делал выравнивание по ширине у Memo, то для определения длины строки использовал метод канвы формы Form.Canvas.TextWidth. Хотя была проблема, например, при длине текста 99 пикселей и клиентской ширине Мемо 100 пикселей. Текст все равно переносился. Я решил, что это из-за 3D рамки и делал отступ порялка 6 пикселей.
С уважением, ЕВА
← →
KilkennyCat © (2005-01-03 12:55) [2]
> saNat © (03.01.05 12:42) [1]
да, когда-то тоже была проблема, тоже применил 6 пикселов.
← →
Anatoly Podgoretsky © (2005-01-03 12:57) [3]У формы и у мемо может быть разный шрифт
← →
Дурдом (2005-01-03 13:33) [4]Длина строки в пикселах определяется через АПИ GetTextExtentPoint32
Посмотрите, в SDK есть её описание.
← →
KSergey © (2005-01-04 10:24) [5]По поводу получения ширины текста на memo
cnv := TCanvas.Create;
try
cnv.Handle := GetDC (memo.Handle);
cnv.Font.Assign (memo.Font);
cnv.TextWidth(текст); // а вот и получили ширину, именно тем шрифтом как и memo
На счет как там будет с "пикселей/дюйм" - не уверен, может еще что-то надо сделать "Assign"?
По поводу получения "запаса" - например, такmemo.Perform(EM_GETRECT, 0, Integer(@MemoRect));
// 1. MemoRect.Right - MemoRect.Left - ширина клиентской области memo
// 2. memo.Width - полная ширина.
// Разница между 1 и 2 думаю даст как раз подходящую поправку.
← →
KSergey © (2005-01-04 10:25) [6]Таки забыл приписать:
var
MemoRect: TRect;
← →
SMT (2005-01-04 14:48) [7]Уважаемые мастера,
Большое спасибо за помощь. В моем случае ошибка заключалась именно в том, что у формы Form1.Canvas.Font были другие параметры, чем у Memo1.Font. Когда шрифт в Canvas получил в точности параметры шрифта в memo, Form1.Canvas.TextWidth дало правильные значения. Таким образом, проблема закрыта. теперь у меня размеры Memo1 и, соответственно, формы не меняются при установке значения логических пикселей от 96 до 120 pixels/inch.
С уважением и наилучшими пожеланиями,
Игорь Степанов
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.036 c