Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение WadimZapara »

StillZero писал(а):...лучше все таки на диск блин писать, один хрен tps тоже на диске хранится, так какая блин разница, не могу понять, писать в windows temp в свою папку, потом грохать, к примеру.... :)
TPS единственный и пустой.
При описанной технологии
1) иконок может быть неизвестно сколько,
2) они могут изменяться в MSSQL в непредсказуемое время
То есть придётся при каждом вызове модуля, отображающего кнопки сервисов, все иконки перезаписывать на диск заново.
Отсюда вывод: файловые операции - это долго - при большом количестве их будут тормоза при загрузке окна, так как потребуется сначала иконки
А) считать из SQL, Б) записать на диск, В) после генерации объектов окна - окну считать эти иконки с диска.
Разве я не прав?
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
StillZero
Ветеран
Сообщения: 458
Зарегистрирован: 06 Июль 2005, 2:17
Откуда: Хабаровск
Поблагодарили: 1 раз
Контактная информация:

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение StillZero »

Разве я не прав?
обычно есть два пути решения проблемы... через некоторое время находится третий :)

на сейчас:

1. простой вариант сохранения на диск, стабильно работающий, простой в понимании, минус... скорее всего надо будет из программы выходить, чтобы НОВЫЕ иконки увидеть. Если я правильно понял, т.е. типо кнопки создаются в динаме, и какая жаль, что они без иконок... единожды ИМХО надо грузить иконки перед заходом в программу, изменилось что-то, вышли и зашли, не очень красиво, но, думаю, что никто не умрет

2. можно создать свою кнопку на WinAPI, там можно относительно легко нарисовать на ней иконку по хэндлу, потом обрабатывать события на этой кнопке. Если кнопка на тулбаре, чуть проще это сделать (переход по таб не надо отслеживать), если на окне, чуть посложнее. Перерисовывать кларину кнопку не вижу особого смысла, это ты свои КулБаттонс напишешь. Времени на этот способ уйдет мама дорогая. Код будет сложным и через пол года, там сам черт ногу сломит. А выхлоп? ... я перерисовываю кларину кнопку на тулбаре в xReportPreview, по моему без всяких паролей с исходными текстами http://www.clarionlife.net/component/op ... Itemid,26/ ... но не рекомендую :)
по аэродрому...
kreator
✯ Ветеран ✯
Сообщения: 5163
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение kreator »

Идея такая. Если мы пишем BUTTON{PROP:ICON} = '~stop.ico', то есть ресурс в нашем exeшнике с данной иконкой. Надо покапать можно ли заменить этот ресурс в exeшнике на наш из BLOB, причем в динамике. И еще, а в чем кривизна, если Image контрол повесить на кнопку?
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение Admin »

kreator писал(а):Идея такая. Если мы пишем BUTTON{PROP:ICON} = '~stop.ico', то есть ресурс в нашем exeшнике с данной иконкой. Надо покапать можно ли заменить этот ресурс в exeшнике на наш из BLOB, причем в динамике. И еще, а в чем кривизна, если Image контрол повесить на кнопку?
Это можно сделать... но по сути опять будет работа через диск... тогда тупо можно скидывать ICO в TEMP каталог. Так что не вариант.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение WadimZapara »

kreator писал(а):Идея такая. Если мы пишем BUTTON{PROP:ICON} = '~stop.ico', то есть ресурс в нашем exeшнике с данной иконкой. Надо покапать можно ли заменить этот ресурс в exeшнике на наш из BLOB, причем в динамике.
Вот и я думаю - возможно ли к образу нашей программы в памяти добавить именованный ресурс (типа ~temp01-02.ico)...
kreator писал(а):И еще, а в чем кривизна, если Image контрол повесить на кнопку?
Да как-то привык писать программы минимальные: 1) по скорости, 2) по занимаемому дисковому пространству, 3) по требуемому объёму оперативной памяти
Admin писал(а):Это можно сделать... но по сути опять будет работа через диск...
Почему и с какой стати через диск ? :shock:
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение Admin »

WadimZapara писал(а):
Admin писал(а):Это можно сделать... но по сути опять будет работа через диск...
Почему и с какой стати через диск ? :shock:
На сколько я понял имена и количество ресурсов определяются на момент компиляции программы. Далее мы можем только изменять их. К примеру функцией

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

BOOL UpdateResource(
    HANDLE hUpdate,	// update-file handle 
    LPCTSTR lpType,	// address of resource type to update 
    LPCTSTR lpName,	// address of resource name to update  
    WORD wLanguage,	// language identifier of resource 
    LPVOID lpData,	// address of resource data 
    DWORD cbData 	// length of resource data, in bytes 
   );
Первым параметром хэндл файла... Не думаю что это в памяти делается.
Копать дальше однако...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
kreator
✯ Ветеран ✯
Сообщения: 5163
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение kreator »

Полазил по интернету - есть такая программа Resource Haker (http://www.angusj.com/resourcehacker/). По описанию - позволяет вытащить и заменить ресурсы exe-шника (ico, bmp, res ...). Получается, что возможно в динамике менять одну иконку. Там даже есть некие исходники (вроде для дельфи).
We are hard at work… for you. :)
kreator
✯ Ветеран ✯
Сообщения: 5163
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение kreator »

В догонку еще ссылка - http://forum.xakep.ru/m_1721437/tm.htm.
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение Admin »

Друзья... Менять в динаме иконку в EXE файле расположенном на диске то же самое что слить горку иконок в TEMP каталог. Это не выход. И вообще по моему проблема в контексте Клариона высосана из ... Лей на диск и все дела.
Не нравится?
"Лопату" в руки и копать API :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Как Button{PROP:ICON} = ? ИЗ ПАМЯТИ

Сообщение WadimZapara »

Растёт уверенность, что Admin и StillZero правы.
И, видно, надо ограничиться тем, что уже сделано: прозрачная кнопка и под ней картинка = получается эффект иконки. (также советовал и YuFil)

MSDN (API) рыл уже много, но желаемого не нашёл. :(
ВСЕМ СПАСИБО.
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Ответить