Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
6-1096741145
Ezhik
2004-10-02 22:19
2005.01.16
Server and Client Socket


3-1103018638
Руслана
2004-12-14 13:03
2005.01.16
Подскажите по DBGridEh


1-1104480659
Тимур
2004-12-31 11:10
2005.01.16
Проблемы с явной загрузкой библиотеки


14-1104325636
alless
2004-12-29 16:07
2005.01.16
Трабл: Install Delphi 6


14-1103735684
Kolan
2004-12-22 20:14
2005.01.16
C наступающим ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский