Вверх ↑
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
#1: 2012-09-18 17:48:28 ЛС | профиль | цитата
Собственно субж - как его правильно делать (у каждого пункта - своя иконка)? Я так понимаю, что нужно все три менеджера (Icon, Index, BoxDraw) задействовать...
Кстати, если кто объяснит про IndexManager - что это и зачем - буду благодарен.
карма: 1

0
Разработчик
Ответов: 26302
Рейтинг: 2146
#2: 2012-09-18 17:54:08 ЛС | профиль | цитата
iarspider писал(а):
Я так понимаю, что нужно все три менеджера (Icon, Index, BoxDraw) задействовать...

Пример же в публикаторе лежит -- http://www.hiasm.com/sha/shatools.php?q=5&id=54
------------ Дoбавленo в 17.53:
iarspider писал(а):
Кстати, если кто объяснит про IndexManager - что это и зачем - буду благодарен

Он нужен для того, чтобы выбирать из группы общих иконок только нужные для конкретного бокса. Для каждого бокса может быть выбран свой список индексов иконок, в примере как раз это и показано
карма: 22

0
Ответов: 5446
Рейтинг: 323
#3: 2012-09-18 18:05:09 ЛС | профиль | цитата
nesco, за пример спасибо. Собственно вопрос мой вот в чём: по какому принципу происходит назначение иконок элементам combobox-а? Я так понимаю (на основании экспериментов), что к этому причастен IndexManager.

Особенно интересно, как быть в том случае, когда combobox заполняется "на лету" (при загрузке программы на основании SQL-запроса к БД). Вот тут - схема, над которой я сейчас работаю. Индексы id - не последовательны.
карма: 1

0
Разработчик
Ответов: 26302
Рейтинг: 2146
#4: 2012-09-18 19:19:46 ЛС | профиль | цитата
iarspider писал(а):
по какому принципу происходит назначение иконок элементам combobox-а? Я так понимаю (на основании экспериментов), что к этому причастен IndexManager

Все правильно -- индексу строки соотвествует индекс иконки из IndexManager-а, по этому индексу выбирается иконка из IconManager-a. Вообше-то, IndexManager больше похож на ReIndexManager -- перенаправление одного индекса (строки бокса) в другой (иконки в списке иконок)
iarspider писал(а):
Особенно интересно, как быть в том случае, когда combobox заполняется "на лету"

У IndexManager-а есть доступ к массиву индексов. Но нужная иконка должна уже находиться в IconManager-е
карма: 22

0
Ответов: 5446
Рейтинг: 323
#5: 2012-09-19 15:52:46 ЛС | профиль | цитата
Вроде делаю всё как ты сказал, а в результате фигня какая-то выходит.
Схема: zmin.sha
Картинка:
51bf541c06e0be523effc8cd53542e36.jpg
Т.е. у части элементов иконки вообще нет, а у остальных - чужая иконка. В базе, из которой всё читается, ко всем элементам есть запись с иконкой, и у всех она корректная.
карма: 1

0
файлы: 2zmin.sha [2.3KB] [501], 51bf541c06e0be523effc8cd53542e36.jpg [64.1KB] [715]
Разработчик
Ответов: 26302
Рейтинг: 2146
#6: 2012-09-19 16:04:59 ЛС | профиль | цитата
iarspider писал(а):
Схема

Молодец! А базу я где буду искать
карма: 22

0
Ответов: 5446
Рейтинг: 323
#7: 2012-09-19 16:14:43 ЛС | профиль | цитата
nesco, лови
карма: 1

0
Разработчик
Ответов: 26302
Рейтинг: 2146
#8: 2012-09-19 16:54:52 ЛС | профиль | цитата
iarspider, очень похоже на то, что не все иконки читаются, а только определенные. И насколько я понял, то только симметричные в размере

Можешь проверить вот по этой схеме. Там, где индекс меняется, то там и происходит запись



Add(MainForm,2953706,21,105)
{
Width=659
Height=848
BorderStyle=1
link(onCreate,7782329:doEvent1,[])
}
Add(DS_SQLite,5689151,154,119)
{
Name="db"
FileName="zalchemy.db"
link(onOpen,15872341:doClearIcons,[])
}
Add(DSC_Query,3285587,154,224)
{
SQL="SELECT e.id,n.name,i.ico FROM Elements e JOIN ENames n USING (id) JOIN EIcons i USING (id) WHERE e.known=1;"
DSManager="db"
link(onQuery,13420445:doSeparateMT,[])
link(onError,14874647:doMessage,[(198,244)(198,307)])
}
Add(IconsManager,15872341,329,119)
{
Name="ico"
ImgSize=64
ImgBkColor=-16777201
Icons=[]
Point(EndIdxIcons)
}
Add(Hub,7782329,91,119)
{
link(onEvent1,5689151:doOpen,[])
link(onEvent2,3285587:doQuery,[(129,132)(129,230)])
}
Add(WorkIconsManager,4893883,518,217)
{
IconsManager="ico"
Point(doLoadIcon)
}
Add(FormatStr,4412538,280,224)
{
DataCount=1
Mask="images\%1.ico"
Point(FString)
link(onFString,16619391:doAdd,[])
}
Add(Message,14874647,210,301)
{
}
Add(BoxDrawManager,3828240,154,161)
{
Name="d"
}
Add(ListBox,7834424,574,266)
{
Width=653
Height=815
Align=5
ItemHeight=64
IndexManager="idx"
BoxDrawManager="d"
IconsManager="ico"
}
Add(MT_MultiData,13420445,224,224)
{
From=2
Count=1
link(onData1,4412538:doString,[])
}
Add(Hub,10248737,406,224)
{
OutCount=3
link(onEvent1,4893883:doLoadIcon,[])
link(onEvent3,3548330:doStr,[(434,244)(434,272)])
}
Add(MT_String,3548330,518,266)
{
Delimeter="-"
link(onResult,7834424:doAdd,[])
}
Add(MT_Add,16619391,336,224)
{
link(onAdd,10248737:doEvent1,[])
link(Data,15872341:CountIcons,[])
}

Проверь файлы иконок, которые не меняют индекс, они все несимметричные

И че-то в схеме ты очень извратился с изменением индекса, там все гораздо проще делается
Вот так должно работать при нормальных иконках



Add(MainForm,2953706,35,105)
{
Width=659
Height=848
BorderStyle=1
link(onCreate,7782329:doEvent1,[])
}
Add(DS_SQLite,5689151,154,119)
{
Name="db"
FileName="zalchemy.db"
}
Add(DSC_Query,3285587,154,224)
{
SQL="SELECT e.id,n.name,i.ico FROM Elements e JOIN ENames n USING (id) JOIN EIcons i USING (id) WHERE e.known=1;"
DSManager="db"
link(onQuery,3381577:doEvent1,[])
link(onError,14874647:doMessage,[(198,244)(198,307)])
}
Add(IconsManager,15872341,427,119)
{
Name="ico"
ImgSize=64
ImgBkColor=-16777201
Icons=[]
Point(EndIdxIcons)
}
Add(Hub,7782329,91,119)
{
link(onEvent1,5689151:doOpen,[])
link(onEvent2,3285587:doQuery,[(129,132)(129,230)])
}
Add(WorkIconsManager,4893883,490,217)
{
IconsManager="ico"
Point(doLoadIcon)
link(onChangeImgLst,5541156:doAdd,[])
}
Add(FormatStr,4412538,378,224)
{
DataCount=1
Mask="images\%1.ico"
Point(FString)
link(onFString,16619391:doAdd,[])
}
Add(Message,14874647,210,301)
{
}
Add(BoxDrawManager,3828240,154,161)
{
Name="d"
}
Add(ListBox,7834424,378,301)
{
Width=653
Height=815
Align=5
ItemHeight=64
IndexManager="idx"
BoxDrawManager="d"
IconsManager="ico"
}
Add(MT_MultiData,13420445,322,224)
{
From=2
Count=1
link(onData1,4412538:doString,[])
}
Add(MT_Add,16619391,434,224)
{
link(onAdd,4893883:doLoadIcon,[])
link(Data,15872341:CountIcons,[])
}
Add(IndexManager,8454826,546,119)
{
Name="idx"
Index=[]
}
Add(ArrayRW,5541156,546,203)
{
link(Array,8454826:Indexes,[])
link(Value,15872341:EndIdxIcons,[(566,177)(447,177)])
}
Add(Hub,3381577,259,224)
{
link(onEvent1,13420445:doSeparateMT,[])
link(onEvent2,10656982:doSeparateMT,[(297,237)(297,307)])
}
Add(MT_MultiData,10656982,322,301)
{
From=1
Count=1
link(onData1,7834424:doAdd,[])
}


карма: 22

1
Голосовали:iarspider
Ответов: 5446
Рейтинг: 323
#9: 2012-09-19 18:48:06 ЛС | профиль | цитата
nesco, ты прав - читаются только симметричные. Интересно - это в KOL-е такое ограничение или в Windows?
карма: 1

0
Разработчик
Ответов: 26302
Рейтинг: 2146
#10: 2012-09-19 19:06:20 ЛС | профиль | цитата
iarspider писал(а):
Интересно - это в KOL-е такое ограничение или в Windows?

Насколько я помню, то в KOL-e
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#11: 2012-09-20 16:32:30 ЛС | профиль | цитата
nesco писал(а):
Насколько я помню, то в KOL-e
Сомневаюсь я однако. Глюк похоже в WorkIconsManager.
problem1.png
Все иконки, кроме одной, "несиметричные"
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1problem1.png [112.3KB] [421]
Разработчик
Ответов: 26302
Рейтинг: 2146
#12: 2012-09-20 17:06:58 ЛС | профиль | цитата
Tad писал(а):
Все иконки, кроме одной, "несиметричные"

А где твоя схема
------------ Дoбавленo в 17.02:
Вот этот метод


   Icon.LoadFromFile(fn);
выдает на несимметричных иконках Icon.Handle=0. Это не мой метод, это метод KOL-a.

------------ Дoбавленo в 17.06:
Вот это место в KOL-e, которое не дает загружать несимметричные иконки


        if (IDI.bWidth <> IDI.bHeight) and
(IDI.bWidth * 2 <> IDI.bHeight) or
(IDI.bWidth = 0) {or
(IDI.bReserved <> 0) or (IDI.wPlanes <> 0) or (IDI.wBitCount <> 0)} then
Exit;

И не надо тут ля-ля разводить неразобрашись.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#13: 2012-09-20 17:19:11 ЛС | профиль | цитата
Какая схема - твоя. Просто иконки и индексы загружены вручную.

------------ Дoбавленo в 17.18:
nesco писал(а):
И не надо тут ля-ля разводить неразобрашись.
Ты смотри , а вручную запросто и KOL не мешает.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26302
Рейтинг: 2146
#14: 2012-09-20 17:35:20 ЛС | профиль | цитата
Tad писал(а):
Просто иконки и индексы загружены вручную

Как иконки загружены вручную, через какой компонент
------------ Дoбавленo в 17.34:
Tad писал(а):
а вручную запросто и KOL не мешает

Я так понял, что тут имеется в виду загрузка иконок вручную через cвойство Icons.
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#15: 2012-09-20 17:36:35 ЛС | профиль | цитата
Вручную - это значит без компонента. Редактором массива.
Вот тестовый файл mytest.rar
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1mytest.rar [38.2KB] [179]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)