Cтранные желания...

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Hello ClaList,

Я понимаю, что нончне на дворе самый актуальный вопрос для многих - глюки C6, но жизнь-то продолжается...
И как у меня часто бывает - возникает сабж : )

А именно нужно выводить в трее динамичекси создаваемые цветные иконки - точнее текствую инфу.
Так вот собственно вопрос - кому-нибудь удавалось используя CreateIcon получить _цветные_ иконки? Или используя CreateIconIndirect получить наложение текста на имеющуся цветную подложку в виде Bitmap-а, "созданного" по некой фоновой иконке.
Максимум чего мне удалось добиться - черно белоые иконки при использовании CreateIcon и опять же черно-белый текст (используется 0-й и 1-й элементы стандартной палитры) при использовании CreateIconIndirect.

--
Best regards,
Vadym mailto:vadim@softcreator.com
ICQ: 82308757

(Добавление)
И как у меня часто бывает - возникает сабж :)
Интересно, какая связь у сабжа с глюками с6 ? ;)
Максимум чего мне удалось добиться - черно белоые иконки при использовании CreateIcon и опять же черно-белый текст (используется 0-й и 1-й элементы стандартной палитры) при использовании CreateIconIndirect.
Да.
CreateIconFromResource, где в качестве массива подсовывается сгенеренная икона вместе с палитрой.

--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: +380 572 177977
WEB: http://enigmasoft.com.ua
e-mail: clalist@enigmasoft.com.ua
ICQ: 12253836

Я в свое время для таких целей просто создавал заранее набор иконок, а остальное в tooltip

------------------------------------------------------------
Igor Gubin (igor@quantor.com)
Quantor-Soft Metal
Phone/Fax: (+7 095) 234 4905
WEB: http://www.metaldata.info
http://www.metaldata.ru

угу - цифры от 1 до 100 на фоне четырех разных цветов... скучно и тупо... сейчас так и сделано - только без цифр, просто полоски-индикторы. И то 14*4 = 56 иконки - задрался их рисовать и включать в проект :-(

--
Best regards,
Vadym

"Час позора, на всю оставшуюся жизнь - инженер."
Сделано один раз, а дальше нет никакой головной боли.
(Сделай подгружаемый проект и стандартную библиотеку)

------------------------------------------------------------
Igor Gubin

(Добавление)

ну люблю я шоб было красиво :)
а это решение тупое, то, что у меня сделано - мне не нравится как программисту. Тебе же знакомо "...с чувством глубокого удовлетворения..."? ;)
Так вот - нету его от данного решения... :(
Интересно, какая связь у сабжа с глюками с6 ? ;)
Да просто навеяло... :)
Связи никакой. Просто для меня глюки C6 - проблема довольно абстрактная, а вот текст в иконках - практическая :D
CreateIconFromResource, где в качестве массива подсовывается сгенеренная икона вместе с палитрой.
А немного поподробнее можно? /* застенчиво шаркая ножкой */ :-)
Допустим есть подлинкованная иконка-фон.
Грузим ее цепочкой FindResource -> LoadResource
Теперь между загруженной мапой иконки и вызовом CreateIconFromResource
нам нужно впердолить текст на этот имедж.
Скажем для отрисовки текста на дефолтовом фоне и создание при это м
иконки я делал следующее (опускаю незначащие детали):

string = '100'
ScreenDC = GetDC(0)
MemDC = CreateCompatibleDC(ScreenDC)

iconinfo.hbmColor = CreateCompatibleBitmap(ScreenDC,16,16)
iconinfo.hbmMask = CreateCompatibleBitmap(MemDC,16,16)
ReleaseDC(0,ScreenDC)

hOldBm = SelectObject(MemDC,iconinfo.hbmMask);
PatBlt(MemDC,0,0,16,16,BLACKNESS)

SelectObject(MemDC,iconinfo.hbmColor)
TextOut(MemDC,0,0,string,LEN(string))

SelectObject(MemDC,OldBm)
DeleteDC(MemDC)

iconinfo.fIcon = True
Loc:usgIconHandle = CreateIconIndirect(iconinfo)

DeleteObject(iconinfo.hbmColor)
DeleteObject(iconinfo.hbmMask)

А что я должен делать в данном случае?
Можешь привести хоть немного живого код (сишного к примеру)?

--
Best regards,
Vadym

Сишный код могу, но все намного проще :)
Я делал 16-цветные иконки 16*16 и 32*32.
Рисуешь в любом редакторе иконок прозрачные иконки указанного размера. Берешь файл со смещения 0x16, переводишь в текстовое описание этого буфера, для клары что-то навроде

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

icon16x16 group
       ushort(00028h)
       ushort(00000h)
       ...
    end
В рантайме копируешь этот буфер во временный, прямо по нему русуешь че-тебе-надо, и кормишь винде:

#define MyIcon(I) CreateIconFromResource((LPBYTE)&I, sizeof(I),TRUE,0x00030000)

HANDLE hIcon16x16 = MyIcon(icon16x16_tmp);
где
char icon16x16_tmp[sizeof(icon16x16)];
а icon16x16 - это твой константный массив/группа.

Тупо, зато универсально :)

--
Best regards,
Maxim Yemelyanov
Написал: ClaList(2)
Гость

Сообщение Гость »

Тупо, зато универсально :)
Спасибо за идею - попробую на этой базе - но немного иначе :-)

--
Best regards,
Vadym

Поделись потом методикой, может ты чего поинтереснее предложишь :)

--
Best regards,
Maxim Yemelyanov

(Добавление)
а это решение тупое, то, что у меня сделано - мне не нравится как программисту. Тебе же знакомо "...с чувством глубокого удовлетворения..."? ;)
Так вот - нету его от данного решения... :(
Как тебе сказать...
Я все прекрасно понимаю, но иногда проще использовать простые решения (за недостатком времени).
Я тогда не стал мучаться, а втупую сделал пару десятков иконок.
Когда все сделаешь - выложи в эху и мы с великой радостью воспользуемся.

------------------------------------------------------------
Igor Gubin

(Добавление)
Максимум чего мне удалось добиться - черно белоые иконки при использовании CreateIcon и опять же черно-белый текст (используется 0-й и 1-й элементы стандартной палитры) при использовании CreateIconIndirect.
Ну если изменения иконки в принципе удалось добиться, значит дело отрисовке цветов.
Скажем для отрисовки текста на дефолтовом фоне и создание при этом иконки я делал следующее (опускаю незначащие детали):
Дык, а я не увидел в твоем коде какой-либо работы с цветами (кисти CreateSolidBrush/SelectObject/DeleteObject, ,
каранташи CreatePen/SelectObject/DeleteObject, закраски прямоугольников FillRect). Или это детали? ;)
...
DeleteObject(iconinfo.hbmColor)
DeleteObject(iconinfo.hbmMask)
Ну, получим _черное_ число 100 на _черном_ фоне шрифтом System, то есть все по умолчанию..

Есть еще такой неприятный момент, который надо иметь в виду, иконки в трее на Windows ниже XP, возможны только 16
цветные.

Удачи!
__________________________________
Владимир Якимченко (IСQ 16 993 194)
Написал: ClaList(2)
Гость

Сообщение Гость »

Я все прекрасно понимаю, но иногда проще использовать простые решения (за недостатком времени).
Проще - не всегда лучше :)
Я пишу прогу для себя, для своего ноута. Но если она паче чаяния попадет в чужие руки и народ заглянув редактором ресурсов вовнурть увидит сотни иконок - мне будет стыдно за свое лоховство.
Но первоначально я сделал именно множество иконок... :)
Я тогда не стал мучаться, а втупую сделал пару десятков иконок.
У тебя пара дестяков - у мне нужно было как минимум 14*4 = 56 штук (что и было проделано первоначально). Но в идеале нужно 100*4 = 400 - а это уже малосерьезно, типичное школярство.
Когда все сделаешь - выложи в эху и мы с великой радостью воспользуемся.
Ну все пока не сделал - но это 56 иконок заменил на отрисовку "градиентного" фона в зависимости от прцентов - одна иконка с окантовкой, подрузка ее как ресурса из тела exe и работа по разукрашиванию ее - все работает.
Если интересует текущее состояние - могу сегодня-завтра (кое-что самому пока не нравится) выслать.
Но в планах все же процедуры отрисовки процентов в иконке...

--
Best regards,
Vadym
У тебя пара дестяков - у мне нужно было как минимум 14*4 = 56 штук (что и было проделано первоначально). Но в идеале нужно 100*4 = 400 - а это уже малосерьезно, типичное школярство.
Да, это уже можно понять. Рисовать столько - изврат.
Хотя в свое время я на школьной (ака городской) олимпиаде решил одну комбинаторную задачу методом тупого перебора (24 листа мелкого текста). Башка уже не работала и я решил по простому. И стыдно мне не было (выяснилось, что её никто кроме меня не решил - искали как красиво).
Если интересует текущее состояние - могу сегодня-завтра (кое-что самому пока не нравится) выслать.
1. Ждем с нетерпением.
2. Я тут сматываюсь на неделю Украину ( туда где рвутся боеприпасы :) ). И, если не трудно, продублируй мне на E-mail igorhome@dinfo.ru (боюсь пропустить в рассылке).
Но в планах все же процедуры отрисовки процентов в иконке...
Клавиатуру тебе в руки. Но если не прочь принять совет: не делай этого. Иконка в трее очень маленькая и текст будет плохочитаем. Лучше пиши проценты во всплывающей подсказке. Если я не забыл, то тут только обработка заголовка окна (на случай иконки и открытости).

------------------------------------------------------------
Igor Gubin
Я тут сматываюсь на неделю Украину ( туда где рвутся боеприпасы :) ). И, если не трудно, продублируй мне на E-mail igorhome@dinfo.ru (боюсь пропустить в рассылке).
Да в конфу думаю что смысл нет слать - тема неинтересная для подавляющего большинтсва програмеров. Кину лично и потом возможно на ClarionLife передам.
Только предупреждаю вышлю сырцы проги (она небольшая) целиком, ничего выкусывать и делать демку не буду ;)
Клавиатуру тебе в руки. Но если не прочь принять совет: не делай этого. Иконка в трее очень маленькая и текст будет плохочитаем.
2 цифры смотрятся нормально. 3 - уже фигово :(
Это без знака процента ессесено.
Но процент заряда равный 100 для батарей ноута встерчается нечасто - так что думаю что не будет критично :-)
Лучше пиши проценты во всплывающей подсказке. Если я не забыл, то тут только обработка заголовка окна (на случай иконки и открытости).
Там и так это пишется - и разное другое тоже. Но цимус как рахз дать более наглядную картинку без тыкания в иконку крысой. Градинет, конечно, хорошо - но хочется еще большей информативности ;)
Дык, а я не увидел в твоем коде какой-либо работы с цветами (кисти CreateSolidBrush/SelectObject/DeleteObject, , каранташи CreatePen/SelectObject/DeleteObject, закраски прямоугольников FillRect). Или это детали? ;)
Угу - неработающие детали ;)
Ну, получим _черное_ число 100 на _черном_ фоне шрифтом System, то есть все по умолчанию..
Нет - получим серое числдо на черном фоне. Как варинат - черное число на сером фоне.
Ну да ладно - от идеи использовать TextOut я уже отказался - буду рисовать вручную числа - более универсальное решение (хотя и более муторное - создать битмапы для цифр)
Есть еще такой неприятный момент, который надо иметь в виду, иконки в трее на Windows ниже XP, возможны только 16 цветные.
Я в крсе - но больше и не нужно - я не собираюсь рисовать там "Мишек в лесу" :-)

--
Best regards,
Vadym
Только предупреждаю вышлю сырцы проги (она небольшая) целиком, ничего
выкусывать и делать демку не буду ;)
Обижаешь... Нужный кусок уж как-нибудь вытащим.
Но процент заряда равный 100 для батарей ноута встерчается нечасто - так что думаю что не будет критично :)
Зачем тебе это? Если не секрет. Тебе что стандартных средств ноутбука для отображения заряда не хватает или просто хочется поиграть мускулами?

------------------------------------------------------------
Igor Gubin
Зачем тебе это? Если не секрет. Тебе что стандартных средств ноутбука для отображения заряда не хватает или просто хочется поиграть мускулами?
Стандартно я не вижу процент заряда - только режим подключены к сети, работаем на аккумуляторе и индикацию критического уровень разряда.
Только подведя крысу к иконке можно увидеть процент и прогнозируемое время.
А я хочу иметь эту инфу перед глазами.
Ну и еще кое-то планирую добавить туда...

P.S. А игра мускулами носит другое название (немного созвучное с
культуризмом) ;)


--
Best regards,
Vadym
2 цифры смотрятся нормально. 3 - уже фигово :(
2 - нормально, но фон будет мешать. Лучше переключать цифры/термометр.
Там и так это пишется - и разное другое тоже. Но цимус как рахз дать более наглядную картинку без тыкания в иконку крысой. Градинет, конечно, хорошо - но хочется еще большей информативности ;)
Погляди на часики напоминалку 1-st Clock. Она умеет много чего в трее выводить. В.т.ч.загрузку проца и памяти, но пользует не квадратную икону, а прямоугольное окно. Вот такая штука наверно многим была бы полезна. Собс-но там похоже обычное окно без границ, которое умеет встраиваться в трей.

WBR, Nick Tsigouro. MailTo:Nick@arsis.ru
2 - нормально, но фон будет мешать. Лучше переключать цифры/термометр.
Ну можно и так... Выводиь цифры разным цветом на стандартном фоне.
Там и так это пишется - и разное другое тоже. Но цимус как рахз дать более наглядную картинку без тыкания в иконку крысой. Градинет, конечно, хорошо - но хочется еще большей информативности ;)
Погляди на часики напоминалку 1-st Clock. Она умеет много чего в трее выводить. В.т.ч.загрузку проца и памяти, но пользует не квадратную икону, а прямоугольное окно. Вот такая штука наверно многим была бы полезна. Собс-но там похоже обычное окно без границ, которое умеет встраиваться в трей.
Я использую аналогичную прогу - Chameleon Clock. Но вот как оно фунциклирует - как можно загнать свое окно в трей-область (или откусить кусок панели) - я не в курсе, нужно пошукать инфу...

--
Best regards,
Vadym

Написал: ClaList(2)
Гость

Сообщение Гость »

Я использую аналогичную прогу - Chameleon Clock. Но вот как оно фунциклирует - как можно загнать свое окно в трей-область (или откусить кусок панели) - я не в курсе, нужно пошукать инфу...
на http://www.source.ru есть какие-то примерчики, раньше скачивал и смотрел кажется http://www.sources.ru/cpp/cpp_cmetericon.shtml

на Visual Basic'e
есть форма в трее
http://www.sources.ru/vb/vb_put_form_in_systray.shtml
прогресс бар в трее
http://www.sources.ru/vb/vb_progressbar ... tray.shtml
--
Благодарень за терпение и понимание,
Ravenous mailto:gottmituns@mail.ru
Ну это приблизительно то, что я делал, только иная цель - генерация иконок с разноцветным бары в трее - этап пройденный уже :)
на Visual Basic'e есть форма в трее
http://www.sources.ru/vb/vb_put_form_in_systray.shtml
А вот это интересней - идея в целом понятна, буду экспериментировать (поскольку васиковый код читаю с трудом - на чистой интуиции и тамошний код мне мало чем поможет).
прогресс бар в трее http://www.sources.ru/vb/vb_progressbar ... tray.shtml
Замена всего трея на прогрессор - малость не то, но базовая идея аналогична предыдуйщей реализации.

В любом случае - спасибо на информацию!

--
Best regards,
Vadym

(Добавление)
Башка уже не работала и я решил по простому. И стыдно мне не было (выяснилось, что её никто кроме меня не решил - искали как красиво).
Ну, им - "шашечки", а ты - проехал ;)
Иконка в трее очень маленькая и текст будет плохочитаем. Лучше пиши проценты во всплывающей подсказке. Если я не забыл, то тут только обработка заголовка окна (на случай иконки и открытости).
В какой-то мелкой софтинке я видел примерно такое: иконка в трее -
"мини-прогресс-бар", грубый, просто для "оценить", а проценты чего-то там, и
ещё туча "показателей" - в тултипе.
Такое не пойдёт?

А цифирь на самой иконке - и вправду мелковато будет...

--
С уважением,
Степанец Александр Валентинович.
Такое не пойдёт?
Такое уже есть сейчас.
А цифирь на самой иконке - и вправду мелковато будет...
2 цифры очень хорошо смотрятся. Пример - MotherBoard Monitor в трее кажет температуры.
А 3 цифры - уже мелоковато, трудно сделать смотрибельными.

--
Best regards,
Vadim
Я пишу прогу для себя, для своего ноута. Но если она паче чаяния попадет в чужие руки и народ заглянув редактором ресурсов вовнурть
Какой народ? Ну я загляну(привычка). Но я же знаю, что для нас значит В.C.=ШВС

P.S. Я не участвовал в подписке на перевод доки для С6, а вот за
перевод ШВС на С6 я бы точно не поскупился.

"Человечество - клуб для избранных."(не помню кто из классиков)

Перефразируем:
Clarion - клуб для избранных


--
Best regards,
morkovin mailto:morkovin@interdacom.ru
Волгоград

(Добавление)

Добрый день,Vadym Synyavskyy!

Похоже не хватает только рисования самого изображения иконки
iconinfo.hbmColor = CreateCompatibleBitmap(ScreenDC,16,16)
iconinfo.hbmMask = CreateCompatibleBitmap(MemDC,16,16)
Здесь BitMap'ы создаются цветные, уже закрашенные в черный цвет
PatBlt(MemDC,0,0,16,16,BLACKNESS)
^Это можно и не делать
SelectObject(MemDC,iconinfo.hbmColor)
Здесь надо бы нарисовать что-нибудь цветное
HBRUSH hBrush = CreateSolidBrush(0x000000ff); // красный
FillRect(MemDC, & rect, hBrush);
DeleteObject(hBrush);

Для прозрачного фона у текста:
SetBkMode(MemDC, TRANSPARENT);
Осталось сделать SetTextColor:
SetTextColor(MemDC,0x00ff0000) // синий

С уважением, Андрей Истомин
Написал: ClaList(2)
Ответить