центрирование надписи в заголовке формы | |
---|---|
danton1973 Автор Сообщений: 143 Откуда: Пермь Дата регистрации: 10.08.2020 |
Может кто-то решил эту проблему:
Исправлено 1 раз(а). Последнее : danton1973, 30.11.20 12:42 |
Re: центрирование надписи в заголовке формы | |
---|---|
Chemberzhy Сообщений: 13142 Откуда: Измаил Дата регистрации: 28.04.2009 |
Автор замечание учел, я упрёк удалил.
------------------ Что-то с памятью моей стало, всё что было не со мной- помню. Исправлено 1 раз(а). Последнее : Chemberzhy, 30.11.20 16:53 |
Re: центрирование надписи в заголовке формы | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Надо учитывать, что шрифт в заголовке формы не задается свойствами формы. А используются данные шрифта для заголовков окон используемой темы. Отсюда возможно и слишком большой сдвиг. А вообще для произвольного масштабирования такое использование этих функции все равно не даст абсолютную точность. Из-за особых свойств заголовка окна в том числе. Если уж требуется именно абсолютная точность - проще тогда уж отключить заголовок формы и нарисовать свой, сделав его автомасштабируемым, используя для этого стандартные контролы формы. Где все это работает намного лучше. Разве что придется тогда добавлять и возможность перетаскивания всей формы за этот самодельный заголовок - тема о том, как это можно осуществить была тут когда-то, можно найти поиском. В качестве такого заголовка я, когда-то, когда все это еще делал, обычно использовал контейнер, точнее, написанный на его базе класс, куда помещал текст (точнее, даже двух-этажный текст! второй текст нужен был более мелкий), а также на правый край - контролы image с соответствующими картинками закрытия и минимизации-максимизации. В качестве извращения делал даже изменение этих картинок при наведении на них мышки и при клике - как это и происходит с реальными всеми этими кнопками. Таким образом и поведением и даже визуально они ничем не отличались от реальных кнопок закрытия и масштабирования. Вдобавок в этот класс я слева помещал еще один контрол image для подгрузки в него иконки формы. Т.е. контроль над возможностями заголовка был полный. Вплоть до размещения там при необходимости еще и каких-то дополнительных кнопок, что в обычном заголовке для фокспро просто невозможно. Так что, при желании можно сотворить почти все, что угодно. Другой вопрос - насколько оно все надо. Мне например было просто интересно. А можно было в принципе и ничего этого не делать. Как делали и делают почти все - дешево и сердито. Зато быстро и не заморачиваясь. Сделал, сбросил с себя задачу - и иди оно все в баню. Сейчас вот думаю, может это и правильный подход. Все равно никому этого всего не надо. Лишь бы хоть как-то работало. А красиво оно или уродливо, удобно или абы как - всем, для кого делаешь, вообще без разницы. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 30.11.20 15:23 |
Re: центрирование надписи в заголовке формы | |
---|---|
danton1973 Автор Сообщений: 143 Откуда: Пермь Дата регистрации: 10.08.2020 |
Мне всегда казалось, что PADC точно по центру выводит строку. Но тут увидел, что нет: на 30% влево сдвигает. Проверил на соседней машине - тоже самое. Это не критично, но всё же хотелось бы надпись по центру....
|
Re: центрирование надписи в заголовке формы | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
Он никуда ничего не выводит. Он дополняет строку символами. Цитата:Сдвигает не он. Точнее, символьного сдвига вообще нет, есть разная ширина символов пропорционального шрифта. Цитата:Разумеется. Моноширинные шрифты давно в оформлении окон не используются. Цитата:Хотеть не вредно... Но какой смысл ломать операционную систему под себя? Тем более, что заголовок окна выводится совсем не шрифтом окна? Из любви к закатам солнца ручную? ------------------ Лень - это неосознанная мудрость. Исправлено 2 раз(а). Последнее : ssa, 30.11.20 16:35 |
Re: центрирование надписи в заголовке формы | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Поскольку задать Left для заголовка формы нельзя, нужно подобрать (в цикле) ширину выражения PADC(заголовок,m.width) такой, чтобы она соответствовала ширине формы (про ширину, естественно, в пикселях, а не в символах). Хотя, на мой взгляд, четкого центрирования добиться всё равно не получится - результат будет зависеть от конкретных символов в строке заголовка (FONTMETRIC(6, ) - это лишь средняя ширина символов), а также придётся учитывать количество и ширины дополнительных элементов, располагающихся в левой и правой стороне заголовка (то есть углах формы). m.width придется пересчитывать при изменении ширины формы, то есть переопределять заголовок. PS Да, и при большой ширине окна и недлинном заголовке центрирование таким способом, выполненное "в лоб", перестанет работать (заголовок будет оставаться фиксированным слева) из-за ограничения на длину Caption в 255 знаков. (пробелы в пропорциональных шрифтах очень узкие, а дополнение строки пробелами до требуемой ширины станет невозможным). Но ничто не мешает после определения "правильной" ширины строки заголовка обрезать лишние пробелы справа (для центрирования важно лишь правильное количество пробелов слева):
В упрощенном виде (без анализа кнопок в заголовке и типа шрифта заголовка) функция подбора ширины может выглядеть примерно так:
(поскольку такой способ при каких-то ширинах может "обрезать" строку заголовка, я сохранил его исходное значение в свойстве формы thisform.formcaption) PPS Более точно (в отличие от FONTMETRIC) реальную ширину строки можно узнавать через ширину Label с теми же характеристиками шрифта, что и у заголовка формы. Этот "фиктивный" Label можно создавать "на лету" (или прямо в дизайнере) где-то за пределами видимой формы (Label обязательно должен быть Visible!), задавать ему нужный Caption, а после "узнавания" его ширины - удалять. Исправлено 16 раз(а). Последнее : akvvohinc, 30.11.20 18:57 |
Re: центрирование надписи в заголовке формы | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
() интересно, а как эта
|
Re: центрирование надписи в заголовке формы | |
---|---|
pasha_usue Сообщений: 3650 Откуда: Е-бург Дата регистрации: 06.10.2006 |
В Caption задаётся пробел, ловится WM_PAINT, ну и на GetWindowDC дорисовывают что надо. Но с учетом разнообразия типа WinAero, Win10 и прочих издевательств, вариант с полностью своим Caption будет предпочтительнее. |
Re: центрирование надписи в заголовке формы | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Форма это окно. См. GetWindowText, SetWindowText и т.д. |
Re: центрирование надписи в заголовке формы | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Яволь!
|
Re: центрирование надписи в заголовке формы | |
---|---|
ssa Сообщений: 13008 Откуда: Москва Дата регистрации: 23.03.2005 |
В общем-то, стиль оформления окон есть хоть и не исключительная, но таки прерогатива операционной системы и к языкам программирования отношение имеет опосредованное. И возможности кастомизации этого устанавливаются операционкой, а не языками программирования. ------------------ Лень - это неосознанная мудрость. |
Re: центрирование надписи в заголовке формы | |
---|---|
danton1973 Автор Сообщений: 143 Откуда: Пермь Дата регистрации: 10.08.2020 |
Здесь разбиралось forum.foxclub.ru Исправлено 1 раз(а). Последнее : danton1973, 01.12.20 14:16 |
Re: центрирование надписи в заголовке формы | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
Пожалуйста:
|
Re: центрирование надписи в заголовке формы | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Лулгу, порадовался за тебя! Красил зеленым |
Re: центрирование надписи в заголовке формы | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Для кого я это вообще писал в самом начале:
И .FONTNAME, и .FONTSIZE из приведенного вычисления - все это относится к свойствам формы! К шрифту, которым что-то выводится на самой форме. Но никак не к заголовку ее! Т.е. туда просто надо брать данные для шрифта, установленного для заголовков окон системы. А не для шрифта, задаваемого в свойствах формы. Эти шрифты не совпадают! ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: центрирование надписи в заголовке формы | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Ну да. Сам себя не похвалишь... ;) ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: центрирование надписи в заголовке формы | |
---|---|
danton1973 Автор Сообщений: 143 Откуда: Пермь Дата регистрации: 10.08.2020 |
|
Re: центрирование надписи в заголовке формы | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Это смотря что понимать под "работает". Возможно, валиться программа до тех пор, пока длина заголовка не превысит 255, и не будет. Но Help по FONTMETRIC() утверждает: Цитата: И вам уже пару раз написали, что шрифт активного окна и шрифт его заголовка в общем случае совпадать не будут. И чтобы убедиться, что Help прав, достаточно в командном окне выполнить:
Меняйте в этом коде _SCREEN.FontSize и увидите, как "пляшет" заголовок вокруг центра, хотя размер шрифта заголовка не изменился. И кроме того, как я уже писал выше, FONTMETRIC(6) возвращает среднюю ширину символа, а поэтому строки заголовков типа 'ШШШШШШШШШ' и '!', где средняя ширина существенно отличается от FONTMETRIC(6), отцентрированы будут плохо, даже если вы будете пользоваться "правильным" шрифтом. PS О главном - что ваша формула неверна в принципе из-за того, что ширина пробелов существенно меньше чем FONTMETRIC(6), я писать не стал, так как "как сделать правильно" таким способом написал в своем первом сообщении, но очевидно, что вы его либо не поняли, либо проигнорировали. Ну и понятно, что если ширина окна в символах (m.lnFormWidth/FONTMETRIC(6)) равна 100, а ширина строки заголовка в символах равна, например 20, то для правильного центрирования количество пробелов слева должно быть не (100-20), как в вашей формуле, а (100-20)/2 (при моноширинном шрифте). Но шрифт - пропорциональный, и сколько пробелов должно быть слева вы не определили - можно сказать, это количество взято "на глазок". Но 2 раза в сутки даже сломанные часы способны показывать правильное время - также и выбранный вами способ центрирования иногда сможет сработать как вам бы хотелось. Исправлено 3 раз(а). Последнее : akvvohinc, 03.12.20 02:37 |
Re: центрирование надписи в заголовке формы | |
---|---|
danton1973 Автор Сообщений: 143 Откуда: Пермь Дата регистрации: 10.08.2020 |
Да всё я понял. Другого способа ни кто не предложил...
|
Re: центрирование надписи в заголовке формы | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Вместо обилия "thisform" и прочих имен объектов лучше всегда использовать структурные скобки WITH...ENDWITH. Часто это значительно улучшает читаемость и соответственно упрощает понимание кода, сокращая его как в "длину", так и в "ширину":
Также советую стараться "окантовывать" знаки типа "=", "+", "-" и т.п. пробелами - в дальнейшем это также сильно облегчит читаемость своего кода. Иначе слепленные в сплошное месиво выражения глазу сходу будет трудно разбирать. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 03.12.20 08:35 |
© 2000-2024 Fox Club  |