Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-69002
alf_
2002-09-30 05:31
2002.10.21
помогите плз


14-68941
Cr@sh
2002-09-26 19:33
2002.10.21
Отстают системные часы.


14-68918
copyr25
2002-09-26 14:42
2002.10.21
---|Ветка была без названия|---


1-68808
atmospheric
2002-10-10 00:16
2002.10.21
Выключение windows 2000


1-68842
User_OKA
2002-10-10 07:25
2002.10.21
Остановка цикла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский