Форум: "WinAPI";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];
ВнизRichedit (центрировать по вертикали) Найти похожие ветки
← →
Eug201 (2002-09-06 10:40) [0]Погомите, please!!!!
Срочно нужно решить проблему - время поджимает - не могу ничего придумать :(((
Вывожу текст в Richedit - только для просмотра. Нужно сделать так: если полоса вертикальной прокрутки не показывается - т.е. весь текст влазит в Richedit, то текст нужно отцентрировать по вертикали. В тексте живут разные шрифты и объекты.
Help!!
← →
Eug201 (2002-09-06 10:43) [1]Сейчас разбираюсь с 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.
← →
Anatoly Podgoretsky (2002-09-06 10:54) [2]По моему ты выдумаваешь для себя лишнюю проблемую
По умолчанию в 1 дюйме 72 пункта, это типографские системы измерения, а 1 твипс = 20 пунктов
Дальше просто узнаешь количество пикселей на дюйм и пересчитываешь
← →
Alx2 (2002-09-06 11:34) [3]А стиль ES_Center не помогает?
← →
Eug201 (2002-09-06 12:30) [4]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 13:09) [5]>Eug201 © (06.09.02 12:30)
>To Alx2: мне нужно по вертикали :(
Извини, невнимательно читал.
>Это правильно?
Похоже.
А как собрался центрировать?
← →
Eug201 (2002-09-06 13:53) [6]To Alx2: Да для начала приблизительно: вставлять пустые строки перед текстом, в вообще-то, наверное надо будет из окошка richedit"а получить картинку, а потом ее отцентрировать. Может подскажешь, как проверить, влазит текст в richedit или нет? Без подсчета высоты. Наерное надо узнать, показал-ли он скроллбар.
← →
Alx2 (2002-09-06 14:19) [7]>Наерное надо узнать, показал-ли он скроллбар.
Это просто:
Var Style : Integer;
begin
Style := GetWindowLong(RichEdit1.Handle,GWL_Style);
if Style and WS_VSCROLL<>0 then
ShowMessage("Есть вертикальный скроллбар");
end;
← →
Eug201 (2002-09-06 15:26) [8]Вот еще с какой проблемой столкнулся: если строка пустая - то EM_GETCHARFORMAT высоту, естесвенно не выдает, а высота завист от размера шрифта :(( Но я пока просто заменяю на пробел. Может кто подскажет чего?
← →
Eug201 (2002-09-06 15:32) [9]To Alx2: попробовал GetWindowLong(...) Спасибо!!!
← →
Alx2 (2002-09-09 09:06) [10]>Eug201 © (06.09.02 15:32)
>Да для начала приблизительно: вставлять пустые строки перед
>текстом,
Природа не любит пустоты :)
Используй сообщения Em_SetRect, Em_GetRect для центровки.
С их помощью красиво центруется (или центрируется?)
Чтобы определить весь ли текст помещается в видимой области, а также определить размеры этой области, можно попробовать сообщение EM_GETFIRSTVISIBLELINE - для определения индекса первой видимой строки и пару EM_CHARFROMPOS/EM_POSFROMCHAR ( EM_CHARFROMPOS - с координатами нижнего правого угла прямоугольника, полученного с помощью em_getrect) - для определениия координаты нижней границы текста (она получается вызовом EM_POSFROMCHAR с параметром вернувшимся из EM_CHARFROMPOS и увеличенным на высоту соответсвующей строки).
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.10.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c