![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Определение ширины строки в пикселах для компонента memo [D7, Win2k, WinXP]
SMT © (2005-01-03 11:20:00)Уважаемые Мастера,
Как правильно определить ширину строки в пикселах для компонента Memo?
Я пытаюсь автоматически подгонять ширину компонента Memo в зависимости от
установленного числа логических пикселей для экрана от 96 до 120
пикселей/дюйм. Для этого надо найти свойство или метод у компонента
Memo, позволяющего провести такой расчет, например,аналог Form.Canvas.TextWidth.
Однако я ничего не нашел.
Без автонастройки текст либо не помещается в габарит Memo, либо справа
остается слишком широкое пустое пространство.
Игорь Степанов
SMT (2005-01-04 14:48:00) [1]Уважаемые мастера,
Большое спасибо за помощь. В моем случае ошибка заключалась именно в том, что у формы Form1.Canvas.Font были другие параметры, чем у Memo1.Font. Когда шрифт в Canvas получил в точности параметры шрифта в memo, Form1.Canvas.TextWidth дало правильные значения. Таким образом, проблема закрыта. теперь у меня размеры Memo1 и, соответственно, формы не меняются при установке значения логических пикселей от 96 до 120 pixels/inch.
С уважением и наилучшими пожеланиями,
Игорь Степанов
KSergey (2005-01-04 10:25:00) [2]Таки забыл приписать:
var
MemoRect: TRect;
KSergey (2005-01-04 10:24:00) [3]По поводу получения ширины текста на 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 думаю даст как раз подходящую поправку.
Дурдом (2005-01-03 13:33:00) [4]Длина строки в пикселах определяется через АПИ GetTextExtentPoint32
Посмотрите, в SDK есть её описание.
Anatoly Podgoretsky (2005-01-03 12:57:00) [5]У формы и у мемо может быть разный шрифт
KilkennyCat (2005-01-03 12:55:00) [6]
> saNat © (03.01.05 12:42) [1]
да, когда-то тоже была проблема, тоже применил 6 пикселов.
saNat (2005-01-03 12:42:00) [7]Когда я делал выравнивание по ширине у Memo, то для определения длины строки использовал метод канвы формы Form.Canvas.TextWidth. Хотя была проблема, например, при длине текста 99 пикселей и клиентской ширине Мемо 100 пикселей. Текст все равно переносился. Я решил, что это из-за 3D рамки и делал отступ порялка 6 пикселей.
С уважением, ЕВА