Вверх ↑
Этот топик читают: Гость
Ответов: 407
Рейтинг: 57
#1: 2023-01-17 20:07:38 ЛС | профиль | цитата
Добрый день!
Столкнулся с такой проблемой: в windows 11 у пользователя не корректно отображается шрифт ms sans serif использованный мной во всех визуальных контролах программы. Манипуляции в самой операционной системе описанные на просторах интернета ни к чему не привели. Пользователь просит заменить шрифт в программе. Во первых это трудоёмкий процесс, т.к. в программе очень много визуальных элементов и вкладок, а во вторых нет гарантии, что у него с другим шрифтом не будет такой же проблемы. Прошу подсказать как можно быстро заменить шрифт во всех визуальных элементах (если это возможно конечно)? И, возможно ли реализовать в программе оперативное изменение шрифта? В программе очень много вкладок и протянуть связи к каждому элементу проблематично, а менеджер шрифтов работает с конкретным элементом.

P.S. Попробовал заменой в текстовом редакторе изменить в файле sha, но таким способом не во всех местах заменяет.

Редактировалось 1 раз(а), последний 2023-01-17 20:32:28
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4596
Рейтинг: 738
#2: 2023-01-17 21:36:32 ЛС | профиль | цитата
Нужно прописать в файле WinControl.ini значение по умолчанию для свойства Font.
Я делал, но сейчас не подскажу конкретно что надо писать.
В результате новое значение будет прописываться во всех элементах в каждой схеме, что мне не понравилось.

А возможно я прописывал не в ini, а в Codegen.dpr с перекомпиляцией кодогенератора.
карма: 26

0
Ответов: 2101
Рейтинг: 661
#3: 2023-01-17 22:45:42 ЛС | профиль | цитата
Poputchik писал(а):
И, возможно ли реализовать в программе оперативное изменение шрифта?

Как вариант: Изменение свойств интерфейса

А свойство:
ParentFont=Использовать шрифт родительского компонента
не подходит?


Poputchik писал(а):
Попробовал заменой в текстовом редакторе изменить в файле sha, но таким способом не во всех местах заменяет.
Что меняли?
Как вариант:
1. Открыть sha как строки.
2. В цикле перебрать все строки.
3. Если строка начинается с "Add(" (пробелы в урну).
4. По названию элемента (тот что за Add) открываем ini файл (из папки conf).
5. Если в ключе Inherit есть упоминание WinControl.
6. То добавить строку от найденой через одну (после строки "{") с данными шрифта Font=[Courier New,10,15,8421376,204].
7. Сохранить отредактированные строки как sha файл.
Это по памяти. Схему сделать пару минут. Если есть упоминания о Font, то удалить эти строки. При желании можно дополнить схему так, чтоб к примеру кнопкам отдельный шрифт задавался.

Редактировалось 4 раз(а), последний 2023-01-17 22:52:20
карма: 10

0
Ответов: 407
Рейтинг: 57
#4: 2023-01-17 23:58:57 ЛС | профиль | цитата
sla8a,
А свойство:
ParentFont=Использовать шрифт родительского компонента
не подходит?

Это свойство меняет не только имя шрифта во всех дочерних элементах, но и размер, цвет, начертание. Т.е. в тех местах где шрифт был подчёркнутый или жирный, перестанет быть таковым по образцу родительского компонента.
Как вариант: Изменение свойств интерфейса

Спасибо. Попробую.
карма: 0

0
Ответов: 5200
Рейтинг: 582
#5: 2023-01-18 16:51:05 ЛС | профиль | цитата
Poputchik, мне даже немного стыдно за коллег. ~10-15 минут работы.
Удачи.
Add(MainForm,2953706,21,105)
{
Width=447
Height=289
}
Add(InlineCode,2413504,210,105)
{
WorkPoints=#9:doSetFont|
DataPoints=#8:FontName|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|5:uses |18: kol,Share,Debug;|2: |4:type|28: THiAsmClass = class(TDebug)|10: private|21: fCount: integer;|9: public|25: FontName: THI_Event;|56: procedure doSetFont(var _Data: TData; Index: word);|63: procedure ChangeFont(Control: Pcontrol; FontName: string);|5: end;|1: |14:implementation|1: |0:|70:procedure THiAsmClass.ChangeFont(Control: Pcontrol; FontName: string);|3:var|15: i,J: Integer;|5:begin|1: |38: with Control{$ifndef F_P}^{$endif} do|6: begin|32: if Boolean(childcount) then|35: for i:=0 to childcount-1 do |46: ChangeFont(Children[i],FontName); |18: |36: Font.FontName := FontName; |12: Inc(J);|16: Invalidate;|5: end;|4:end;|0:|32:procedure THiAsmClass.doSetFont;|5:begin|45: ChangeFont(Applet,ToStringEvent(FontName));|4:end;|0:|0:|4:end.|
link(FontName,7596005:CurrentFont,[])
}
Add(Button,16680948,140,105)
{
Left=15
Top=20
Width=95
Height=25
Caption="SetFont"
link(onClick,2413504:doSetFont,[])
}
Add(CheckBox,14975391,399,98)
{
Left=15
Top=95
Width=135
}
Add(Label,4014553,294,98)
{
Left=15
Top=130
Width=75
Height=30
}
Add(Label,13693552,301,105)
{
Left=650
Top=185
}
Add(TabControl,189096,462,98)
{
Left=185
Top=65
Width=225
Height=165
Tabs=#4:Tab1|4:Tab2|4:Tab3|
}
Add(RadioButton,4265492,343,98)
{
Left=10
Top=160
Width=120
}
Add(RadioButton,10613459,350,105)
{
Left=10
Top=185
Width=100
}
Add(RadioButton,12065986,357,112)
{
Left=10
Top=210
Width=105
}
Add(CheckBox,4391279,406,105)
{
Left=15
Top=65
Width=135
}
Add(FontBox,7596005,210,49)
{
Left=185
Top=20
Width=225
Height=24
}
Add(ChildForm,5104836,77,105)
{
}
BEGIN_SDK
Add(EditMulti,11723669,21,21)
{
Width=342
}
Add(MainForm,2213628,35,105)
{
Left=35
Top=105
Width=434
Height=246
}
Add(CheckBox,6809980,224,91)
{
Left=15
Top=55
Width=135
}
Add(Label,6717500,119,91)
{
Left=15
Top=90
Width=75
Height=30
}
Add(Label,8158636,126,98)
{
Left=650
Top=185
}
Add(TabControl,2390883,287,91)
{
Left=185
Top=25
Width=225
Height=165
Tabs=#4:Tab1|4:Tab2|4:Tab3|
}
Add(RadioButton,1750151,168,91)
{
Left=10
Top=120
Width=120
}
Add(RadioButton,5077282,175,98)
{
Left=10
Top=145
Width=100
}
Add(RadioButton,7021213,182,105)
{
Left=10
Top=170
Width=105
}
Add(CheckBox,12738120,231,98)
{
Left=15
Top=25
Width=135
}
END_SDK


Редактировалось 3 раз(а), последний 2023-01-18 17:02:26
карма: 4
3
Голосовали:Poputchik, tig-rrr, 3042
Ответов: 407
Рейтинг: 57
#6: 2023-01-18 20:00:11 ЛС | профиль | цитата
andrestudio, Спасибо! Здоровски работает, действительно можно использовать и при компиляции delphi и FPC, единственное ограничение это Rush-Контролы, на них он не совсем корректно действует.
карма: 0

0
Ответов: 5200
Рейтинг: 582
#7: 2023-01-18 20:13:24 ЛС | профиль | цитата
Poputchik писал(а):
единственное ограничение это Rush-Контролы

Poputchik, ну уж не обессудте сударь. Я их не использую (есть свои альтернативные)
карма: 4
0
Ответов: 1912
Рейтинг: 171
#8: 2023-01-19 07:22:01 ЛС | профиль | цитата
andrestudio, а зачем там
Inc(J);
?
карма: 9
0
Ответов: 5200
Рейтинг: 582
#9: 2023-01-19 18:30:59 ЛС | профиль | цитата
Ну не причесал после оптимизации как и fCount.
Так то дарёному коню в зубы не смотрят
Мог бы просто пройти мимо, и читать дальше различные перлы по этой проблеме
карма: 4
0
Ответов: 1912
Рейтинг: 171
#10: 2023-01-20 10:22:33 ЛС | профиль | цитата
Да ладно, я ж плюсанул
карма: 9
0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)