Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];

Вниз

Как снять метрики (размеры) элементов Radio button а,   Найти похожие ветки 

 
тимохов   (2008-10-09 15:49) [0]

Здравствуйте.

Есть задача выставлять ширину RadioButton"а в runtime, т.к. текст заранее (т.е. в designtime) не известен.

Как узнать сколько занимает места по горизонтали RadioButton с учетом белого кружочка для точки? Т.е. как расчитать ширину, чтобы тект полностью влезал?

Например для размеров стрелов в ScrollBar"е есть GetSystemMetrix. Есть ли что-то подобное для RadioButton"а?


 
Eraser ©   (2008-10-09 22:01) [1]

есть такие методы Canvas.TextWidth и Canvas.TextHeight.

ширина_кружка_от_радиобатона := радио.Width - (Canvas.TextWidth(радио.Text));
думаю что то вроде того, только с тем какой именно кэнвас надо определиться.


 
Eraser ©   (2008-10-09 22:04) [2]

> только с тем какой именно кэнвас надо определиться.

точнее тут проще будет работать напрямую через API функции, предварительно получив HDC.


 
тимохов   (2008-10-09 22:16) [3]

Кхе-кхе.

Собсно в твоем уравнении 2 неизвесных - ширин_кружка и радио.width.

Мне как раз нужно выставить общую ширину.

Я в общем уже понял, что задача не является решаемой строго.


 
Eraser ©   (2008-10-09 22:26) [4]

> [3] тимохов   (09.10.08 22:16)

мда, что то я не приметил, что ширина не автоматом выставляется у радиобатонов.
тогда делать примерно и с запасом )


 
guav ©   (2008-10-09 22:37) [5]

Для чекбокса эмпирически (проверкой на разных ОС, dpi, шрифтах, темах) получено следующее:
Ширина = 17 + ширина пробела + ширина текста.

Текст врапится или нет - в зависимости от стиля окна.
Подозреваю для радиобаона так же.


 
тимохов   (2008-10-09 23:37) [6]

Я в общем уже понял, что это эмпирика :(

Вообще странно, почему создатели виндовс не засунули эту инфу в getsystemmetrics.


 
guav ©   (2008-10-10 00:05) [7]

Я думаю, что для тем таки засунули, там куча разных метрик. Что касается контролов до тем, то там многие размеры хард-кодятся уже давно и вряд ли они поменяются (типа, размер самой копки чекбокса/радиобаттона - 13х13)
Не советую сильно заморачиваться. Код использующий меджик "17 плюс ширина пробела" работает точно.
Чтобы совсем успокоится, можно например глянуть что с этими чекбоксами делают в TCheckListBox.DrawCheck из CheckLst при рисовании без тем с Flat = true. Там рисуют плоскую рамку прямо поверх стандартной, зная что стандартная занимает 2 пикселя.


 
тимохов   (2008-10-10 00:11) [8]

Я вообще никогда не заморачивался по этому поводу - у меня всегда была константа 25 (пробел я не учитывал). Но тут, когда пришлось в очередной раз писать рантайм (а я только им и пользуюсь в 95 процентов случаев - дизайнтайм использую только для простейших форм, присутствующих в единственном экземпляре) я подумал, что как-то это по новичковски выглядит использовать константу. Порыл МСДН, друзей поспрошал.

В общем остался на импирике. Только метрики немного изменились (17+пробел)

Ок. Спасибо за подтверждение своей правоты


 
Германн ©   (2008-10-10 01:22) [9]


> тимохов   (10.10.08 00:11) [8]

А я очень часто использую лэйблы для капшонов радиобатонов и чекбоксов. Очень удобно в отличии от стандартного капшона. ИМХО.
:)
Только вот с "темами" я не пробовал.


 
guav ©   (2008-10-10 09:35) [10]

> [9] Германн ©   (10.10.08 01:22)

И клик по лейблу работает ? И Focus Rect рисуется ? И с темами при наведении курсора на лейбл чекбокс подсвечивается ? И клавиатурный акселератор привязывается ? Нет, отдельный лейбл не удобно.

про 17 плюс пробел показать легко: включить WordWrap, тогда для любого шрифта, etc враппинга не будет, но он проявится, если заменить 17 на 16.

PS: А ещё можно GUI на HTML делать, тогда высчитывать пикселя самому не надо, и для "динамики" подходит хорошо. Пробовал не в делфи правда http://www.terrainformatica.com/htmlayout/


 
Германн ©   (2008-10-11 00:46) [11]


> guav ©   (10.10.08 09:35) [10]
>
> > [9] Германн ©   (10.10.08 01:22)
>
> И

"И" работают. Те, которые я считаю нужными. Про "темы" я уже сказал.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.11.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
15-1254169806
Юрий
2009-09-29 00:30
2009.11.29
С днем рождения ! 29 сентября 2009 вторник


1-1227031341
IgorT
2008-11-18 21:02
2009.11.29
Не могу открыть 5-мбайтный ини файл с помощью - TMemIniFile


15-1253984448
@!!ex
2009-09-26 21:00
2009.11.29
Я разобрал ноутбук... как его собрать??


2-1255588435
RDen
2009-10-15 10:33
2009.11.29
LIKE в ADOQuery без учёта регистра


1-1226863029
demon
2008-11-16 22:17
2009.11.29
Как инсталировать шрифт в систему?





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