![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Richedit (центрировать по вертикали) [D6, WinXP]
Eug201 © (2002-09-06 10:40:00)Погомите, please!!!!
Срочно нужно решить проблему - время поджимает - не могу ничего придумать :(((
Вывожу текст в Richedit - только для просмотра. Нужно сделать так: если полоса вертикальной прокрутки не показывается - т.е. весь текст влазит в Richedit, то текст нужно отцентрировать по вертикали. В тексте живут разные шрифты и объекты.
Help!!
Alx2 (2002-09-09 09:06:00) [1]>Eug201 © (06.09.02 15:32)
>Да для начала приблизительно: вставлять пустые строки перед
>текстом,
Природа не любит пустоты :)
Используй сообщения Em_SetRect, Em_GetRect для центровки.
С их помощью красиво центруется (или центрируется?)
Чтобы определить весь ли текст помещается в видимой области, а также определить размеры этой области, можно попробовать сообщение EM_GETFIRSTVISIBLELINE - для определения индекса первой видимой строки и пару EM_CHARFROMPOS/EM_POSFROMCHAR ( EM_CHARFROMPOS - с координатами нижнего правого угла прямоугольника, полученного с помощью em_getrect) - для определениия координаты нижней границы текста (она получается вызовом EM_POSFROMCHAR с параметром вернувшимся из EM_CHARFROMPOS и увеличенным на высоту соответсвующей строки).
Eug201 (2002-09-06 15:32:00) [2]To Alx2: попробовал GetWindowLong(...) Спасибо!!!
Eug201 (2002-09-06 15:26:00) [3]Вот еще с какой проблемой столкнулся: если строка пустая - то EM_GETCHARFORMAT высоту, естесвенно не выдает, а высота завист от размера шрифта :(( Но я пока просто заменяю на пробел. Может кто подскажет чего?
Alx2 (2002-09-06 14:19:00) [4]>Наерное надо узнать, показал-ли он скроллбар.
Это просто:
Var Style : Integer;
begin
Style := GetWindowLong(RichEdit1.Handle,GWL_Style);
if Style and WS_VSCROLL<>0 then
ShowMessage("Есть вертикальный скроллбар");
end;
Eug201 (2002-09-06 13:53:00) [5]To Alx2: Да для начала приблизительно: вставлять пустые строки перед текстом, в вообще-то, наверное надо будет из окошка richedit"а получить картинку, а потом ее отцентрировать. Может подскажешь, как проверить, влазит текст в richedit или нет? Без подсчета высоты. Наерное надо узнать, показал-ли он скроллбар.
Alx2 (2002-09-06 13:09:00) [6]>Eug201 © (06.09.02 12:30)
>To Alx2: мне нужно по вертикали :(
Извини, невнимательно читал.
>Это правильно?
Похоже.
А как собрался центрировать?
Eug201 (2002-09-06 12:30:00) [7]To Alx2: мне нужно по вертикали :(
Вообщем, если я правильно понял:
PPI_Y:=GetDeviceCaps(frmMain.Canvas.Handle,LOGPIXELSY);
..
//получаем высоту
SendMessage(reQuestionText.Handle,EM_GETCHARFORMAT,1,LParam(@MCharFormat));
LineHeight:=MCharFormat.yHeight;
..
//переводим из твипсов в пиксели
Text_Height:=Trunc(PPI_Y/1440*LineHeight);
Это правильно?
Alx2 (2002-09-06 11:34:00) [8]А стиль ES_Center не помогает?
Anatoly Podgoretsky (2002-09-06 10:54:00) [9]По моему ты выдумаваешь для себя лишнюю проблемую
По умолчанию в 1 дюйме 72 пункта, это типографские системы измерения, а 1 твипс = 20 пунктов
Дальше просто узнаешь количество пикселей на дюйм и пересчитываешь
Eug201 (2002-09-06 10:43:00) [10]Сейчас разбираюсь с EM_GETCHARFORMAT, чтобы расчитать высоту буковок, но он выдает все в твипсах! А размеры-то компонентов обычно в пикселях :(
Как мне из твипсов перевести в пиксели? Пока не нашел :((
twip
A unit of measurement, implemented as 1/20 of a point, or 1/1440 of an inch. There are 567 twips to a centimeter. Twips are screen-independent measurements. See also point. Contrast pixel.