Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.29;
Скачать: CL | DM;

Вниз

Как снять метрики (размеры) элементов 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 вся ветка

Текущий архив: 2009.11.29;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
1-1226654376
anonim
2008-11-14 12:19
2009.11.29
FormStyle


2-1255599480
ford
2009-10-15 13:38
2009.11.29
Получить последнюю папку из пути


15-1254136426
картман
2009-09-28 15:13
2009.11.29
Паттерн наблюдатель


2-1255585631
Маркабес
2009-10-15 09:47
2009.11.29
Как составить SQL запрос


2-1255072442
novai
2009-10-09 11:14
2009.11.29
Работа с указателями