Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Определение ширины строки в пикселах для компонента 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.046 c
3-1103103598
alex145
2004-12-15 12:39
2005.01.16
Количество строк


14-1103232581
Lancelot
2004-12-17 00:29
2005.01.16
Учусь в автошколе


14-1104385235
Маг Похмеляйнен
2004-12-30 08:40
2005.01.16
LOL - Поединок в стиле Matrix


11-1085755191
Grey
2004-05-28 18:39
2005.01.16
AutoSize...


9-1095652133
Fynjy1984
2004-09-20 07:48
2005.01.16
OpenGL - координаты