Главная страница
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.032 c
3-1103125117
sashok
2004-12-15 18:38
2005.01.16
Помогите с фильтрацией в DBGrid


14-1104075811
ПЕтя
2004-12-26 18:43
2005.01.16
1С Ппредприятие


1-1104212473
N0thing
2004-12-28 08:41
2005.01.16
Как получить код символа?


4-1101555113
Djo
2004-11-27 14:31
2005.01.16
работа с программами


14-1104219018
NewDelpher
2004-12-28 10:30
2005.01.16
Солдаты Великой Отечественной