Страница 1 из 1

Смена шкурки приложения

Добавлено: 09 Ноябрь 2014, 19:47
Игорь Столяров
Привет всем !

Хотелось бы реализовать в приложении возможность смены "шкурки" (оформления).
С цветовым оформлением - более или менее все понятно .... а вот с иконками вопрос открытый.
Т.е. есть, например, несколько наборов иконок (а в идеале - открытый список иконок, который может изменять пользователь).
Выбирается нужный набор и во всех окнах происходит замена иконок. Первое, что приходит в голову:

Код: Выделить всё

  Open(Window)  
  Loop Loc:Field = FirstField() to LastField() by 1
    If Loc:Field{PROP:Type} = Create:Button
       If     Upper(Loc:Field{Prop:Icon}) = '~NABOR01_01.ICO' then Loc:Field{Prop:Icon} = '~NABOR02_01.ICO'
       elsIf Upper(Loc:Field{Prop:Icon}) = '~NABOR01_02.ICO' then Loc:Field{Prop:Icon} = '~NABOR02_02.ICO'
       ....
       end
    end
или что-то в этом этом стиле ...
Но как-то тупо и не решает всех вопросов (например замену иконок в CheckBox при нажатии).

А можно как-то долезть до списка хранения иконок в EXE/DLL и там сделать переадресацию на другую коллекцию ?

Re: Смена шкурки приложения

Добавлено: 10 Ноябрь 2014, 19:17
kreator
Вот такая идея. Хранить наборы в разных dll. Иконки вытаскивать через 'icons1.dll[1]'. Развиваем дальше - нужно иметь переменную, отвечающую за этот файл, при изменении пользователем меняется переменная, перерисовка окна по reset или что там.

Re: Смена шкурки приложения

Добавлено: 10 Ноябрь 2014, 22:23
gopstop2007
kreator писал(а):Вот такая идея. Хранить наборы в разных dll. Иконки вытаскивать через 'icons1.dll[1]'. Развиваем дальше - нужно иметь переменную, отвечающую за этот файл, при изменении пользователем меняется переменная, перерисовка окна по reset или что там.
дополню, не надо переменной, достаточно иметь кучку одинаковых длл с разными иконками отличающимися только названиями длл, и при необходимости длл переименовать на длл по умолчанию, а длл по умолчанию на архив и всё ;)

Re: Смена шкурки приложения

Добавлено: 10 Ноябрь 2014, 22:34
Игорь Столяров
Идея интересная, хотя и незнакомая ... ;) Есть два вопроса.

1. Как упорядочить иконки внутри DLL ?
Нужно ведь, что бы например, иконка "Печать отчета" в разных DLL файлах было строго под одним и тем же номером ...

2. Как обращать из Clarion к таким иконкам ? Что-то вроде: ?Button{Prop:Ico} = icons1.dll[1] ?!
И тогда в дизайнере, эти иконки не доступны ?

Re: Смена шкурки приложения

Добавлено: 11 Ноябрь 2014, 16:04
kreator
В дизайнере, скорее всего, не доступны. Надо подсовывать. А в dll они записываются по алфавиту, я проверил.

Re: Смена шкурки приложения

Добавлено: 11 Ноябрь 2014, 20:15
gopstop2007
Игорь Столяров писал(а):Идея интересная, хотя и незнакомая ... ;) Есть два вопроса.

1. Как упорядочить иконки внутри DLL ?
Нужно ведь, что бы например, иконка "Печать отчета" в разных DLL файлах было строго под одним и тем же номером ...
а зачем? в "шкурках" - длл-ках названия иконок одинаковые, содержимое разное :wink:

Re: Смена шкурки приложения

Добавлено: 12 Ноябрь 2014, 11:01
kreator
gopstop2007 писал(а):а зачем? в "шкурках" - длл-ках названия иконок одинаковые, содержимое разное :wink:
Так ведь по названию в длл-ке не достучаться.

Re: Смена шкурки приложения

Добавлено: 12 Ноябрь 2014, 16:23
gopstop2007
kreator писал(а):
gopstop2007 писал(а):а зачем? в "шкурках" - длл-ках названия иконок одинаковые, содержимое разное :wink:
Так ведь по названию в длл-ке не достучаться.
может я чего не понял ;), как вариант:
1. a.ico, b.ico, c.ico
2. создаем dll с указанными иконками (A.dll)
3. заменяем a.ico, b.ico, c.ico иконки на "иконки-шкурки" на с такими же названиями
4. смотрим п.2 (B.dll)
5. в итоге у нас две одинаковые dll-ки A.dll и B.dll с разными по изображению, но с одинаковыми по названиям иконками
6. при работе в программе c A.dll
7. заменяем - переименовываем A.dll -> Orig.dll
8. заменяем - переименовываем B.dll -> A.dll
Присваивание иконок вроде по алфавиту. :)

Re: Смена шкурки приложения

Добавлено: 12 Ноябрь 2014, 16:47
kreator
С заменами понятно. Я говорю, что в программе можно только так - ?Button{Prop:Ico} = 'a.dll[1]'. По барабану какое-то там название. Может иконки имеют названия типа "add_red.ico", "add_blue.ico". Зачем в таком случае их переименовывать, если они лягут и так как надо.

Re: Смена шкурки приложения

Добавлено: 12 Ноябрь 2014, 17:16
gopstop2007
add.ico в a.dll и add.ico в b.dll - вроде проще вариант, только подмена dll, хотя на вкус и цвет... Решать Игорю Столярову :)