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

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

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

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

Добавлено: 09 Июль 2010, 2:48
StillZero
Разве я не прав?
обычно есть два пути решения проблемы... через некоторое время находится третий :)

на сейчас:

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

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

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

Добавлено: 14 Июль 2010, 13:42
kreator
Идея такая. Если мы пишем BUTTON{PROP:ICON} = '~stop.ico', то есть ресурс в нашем exeшнике с данной иконкой. Надо покапать можно ли заменить этот ресурс в exeшнике на наш из BLOB, причем в динамике. И еще, а в чем кривизна, если Image контрол повесить на кнопку?

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

Добавлено: 14 Июль 2010, 16:45
Admin
kreator писал(а):Идея такая. Если мы пишем BUTTON{PROP:ICON} = '~stop.ico', то есть ресурс в нашем exeшнике с данной иконкой. Надо покапать можно ли заменить этот ресурс в exeшнике на наш из BLOB, причем в динамике. И еще, а в чем кривизна, если Image контрол повесить на кнопку?
Это можно сделать... но по сути опять будет работа через диск... тогда тупо можно скидывать ICO в TEMP каталог. Так что не вариант.

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

Добавлено: 15 Июль 2010, 20:52
WadimZapara
kreator писал(а):Идея такая. Если мы пишем BUTTON{PROP:ICON} = '~stop.ico', то есть ресурс в нашем exeшнике с данной иконкой. Надо покапать можно ли заменить этот ресурс в exeшнике на наш из BLOB, причем в динамике.
Вот и я думаю - возможно ли к образу нашей программы в памяти добавить именованный ресурс (типа ~temp01-02.ico)...
kreator писал(а):И еще, а в чем кривизна, если Image контрол повесить на кнопку?
Да как-то привык писать программы минимальные: 1) по скорости, 2) по занимаемому дисковому пространству, 3) по требуемому объёму оперативной памяти
Admin писал(а):Это можно сделать... но по сути опять будет работа через диск...
Почему и с какой стати через диск ? :shock:

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

Добавлено: 16 Июль 2010, 0:17
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 
   );
Первым параметром хэндл файла... Не думаю что это в памяти делается.
Копать дальше однако...

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

Добавлено: 16 Июль 2010, 13:14
kreator
Полазил по интернету - есть такая программа Resource Haker (http://www.angusj.com/resourcehacker/). По описанию - позволяет вытащить и заменить ресурсы exe-шника (ico, bmp, res ...). Получается, что возможно в динамике менять одну иконку. Там даже есть некие исходники (вроде для дельфи).

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

Добавлено: 16 Июль 2010, 13:31
kreator
В догонку еще ссылка - http://forum.xakep.ru/m_1721437/tm.htm.

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

Добавлено: 16 Июль 2010, 17:01
Admin
Друзья... Менять в динаме иконку в EXE файле расположенном на диске то же самое что слить горку иконок в TEMP каталог. Это не выход. И вообще по моему проблема в контексте Клариона высосана из ... Лей на диск и все дела.
Не нравится?
"Лопату" в руки и копать API :)

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

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

MSDN (API) рыл уже много, но желаемого не нашёл. :(
ВСЕМ СПАСИБО.