Главная страница
    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.004 c
2-1255523378
Сергей
2009-10-14 16:29
2009.11.29
Показать строку в StringGrid


1-1225831632
lemur
2008-11-04 23:47
2009.11.29
Поиск слова в RichEdit


15-1254515407
Юрий
2009-10-03 00:30
2009.11.29
С днем рождения ! 3 октября 2009 суббота


2-1255596140
Маркабес
2009-10-15 12:42
2009.11.29
SQL


15-1254238851
Суслик_
2009-09-29 19:40
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский