Вверх ↑
Этот топик читают: Гость
Ответов: 117
Рейтинг: 9
#1: 2016-05-02 19:06:43 ЛС | профиль | цитата
В методе doMT_LoadExtIcon, переменной idx назначается тип word (строка 490),
хотя в описании функции ExtractIconEx, где она используется, предполагается integer.
В связи с этим функция не может получить правильную иконку из ресурса, если используется отрицательный индекс.
Например тип файла .cat использует иконку из файла c:\windows\system32\cryptui.dll,-3418

Еще в этом методе есть проверка существования файла (строка 511), которая не находит файл, если он не имеет полного пути,
но находится в системном каталоге. Соответственно получение иконки не происходит, хотя функция ExtractIconEx спокойно может извлечь иконку.
В реестре для типа фалов .cat записано cryptui.dll,-3418

code_37247.txt
То же касается и компонента StringTableMT в методе doMT_LoadExtIcon
карма: 0

1
файлы: 1code_37247.txt [1.4KB] [677]
Голосовали:3042
Ответов: 1926
Рейтинг: 172
#2: 2016-05-07 22:21:50 ЛС | профиль | цитата
AZot писал(а):
В методе doMT_LoadExtIcon, переменной idx назначается тип word (строка 490),
хотя в описании функции ExtractIconEx, где она используется, предполагается integer.
В связи с этим функция не может получить правильную иконку из ресурса, если используется отрицательный индекс.


Подтверждаю. И мне тоже интересно, почему так (word вместо integer). Не лучше ли исправить?

AZot, а для тебя вот какие решения:
1. Задать индекс через положительное число
2. Чтобы поиск работал без указания пути, надо задать текущую папку вот так:
Add(MainForm,12177415,98,203)
{
Position=1
link(onCreate,2765331:doEvent1,[])
}
Add(WorkIconsManager,15999030,434,329)
{
IconToBmp=0
Point(doMT_LoadExtIcon)
Point(onExtIcon)
Point(IconsFileName)
link(onExtIcon,8957580:doLoad,[])
}
Add(Image,8957580,490,336)
{
Left=250
Top=80
Width=48
Height=48
ViewStyle=0
}
Add(DoData,7058606,294,343)
{
link(onEventData,10214300:doWork2,[])
link(Data,9938002:Text,[])
}
Add(HubEx,10214300,336,343)
{
link(onEvent,11851668:doMT,[])
}
Add(MT_String,11851668,371,336)
{
Delimeter=","
link(onResult,15999030:doMT_LoadExtIcon,[])
}
Add(Edit,7935191,294,175)
{
Left=10
Top=40
Width=225
Text="c:\windows\system32\cryptui.dll,8"
link(onChange,12875447:doWork1,[(340,181)])
}
Add(WorkIconsManager,7895117,434,210)
{
IconToBmp=0
Point(doMT_LoadExtIcon)
Point(onExtIcon)
Point(IconsFileName)
link(onExtIcon,12048265:doLoad,[])
}
Add(Image,12048265,490,217)
{
Left=250
Top=25
Width=48
Height=48
ViewStyle=0
}
Add(DoData,4136939,294,224)
{
link(onEventData,12875447:doWork2,[])
link(Data,7935191:Text,[])
}
Add(HubEx,12875447,336,224)
{
link(onEvent,9010979:doMT,[])
}
Add(MT_String,9010979,371,217)
{
Delimeter=","
link(onResult,7895117:doMT_LoadExtIcon,[])
}
Add(Hub,2765331,210,217)
{
OutCount=3
link(onEvent1,4182595:doData,[(242,223)(242,125)])
link(onEvent2,4136939:doData,[])
link(onEvent3,7058606:doData,[(242,237)(242,349)])
}
Add(Edit,9938002,294,294)
{
Left=10
Top=95
Width=225
Text="cryptui.dll,8"
link(onChange,10214300:doWork1,[(340,300)])
}
Add(Dir,340763,308,112)
{
}
Add(DoData,4182595,259,119)
{
Data=String(c:\windows\system32\)
link(onEventData,340763:doCurrentDir,[])
}


карма: 9
1
Голосовали:RAWY
Ответов: 39
Рейтинг: 2
#3: 2016-05-09 06:27:59 ЛС | профиль | цитата
3042, спасибо за помощь!

В моей программке я получаю иконку по типу файла из реестра, а там уже указанно и с минусом и без полных путей.
Я взял эту функцию себе в InlineCode и сделал необходимые правки - так, что у меня работает как мне надо.

карма: 1

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#4: 2016-05-10 00:17:04 ЛС | профиль | цитата
3042 писал(а):
И мне тоже интересно, почему так (word вместо integer)

А вот черт его знает. Исправил.

(Наконец-то добрался до форума, а то че-то две недели не мог выйти. Спасибо Nic-y, подсказал новый IP)
карма: 22

1
Голосовали:3042
Ответов: 1926
Рейтинг: 172
#5: 2016-05-11 20:19:54 ЛС | профиль | цитата
[offtop]У меня на hiasm.net не получается выйти, этот домен больше не работает? С hiasm.com всё нормально, но на самом сайте многие ссылки на hiasm.net, например форум. Что же происходит?[/offtop]
карма: 9
0
Разработчик
Ответов: 26151
Рейтинг: 2127
#6: 2016-05-11 23:22:45 ЛС | профиль | цитата
[offtop]Я перенаправил hiasm.net туда же, куда и hiasm.com[/offtop]
карма: 22

0
Ответов: 2265
Рейтинг: 676
#7: 2018-08-14 00:50:11 ЛС | профиль | цитата
У меня вылетает ошибка при попытке записать в файл список иконок, если менеджер иконок пуст.

Add(MainForm,2953706,112,308)
{
Width=427
Height=316
Position=1
Point(onClose)
}
Add(WorkIconsManager,12324961,399,315)
{
IListFileName="icons"
IconsManager="myIcons"
Point(doLoadIList)
Point(doSaveIList)
}
Add(IconsManager,4808505,399,196)
{
Name="myIcons"
Icons=[]
}
Add(Button,8131368,266,329)
{
Left=190
Top=125
link(onClick,12324961:doSaveIList,[])
}
nesco, предлагаю добавить проверку на пустоту и изменить строку 280 в процедуре SaveIListToFile с:

   if Ilist = nil then Exit;
на:

   if (Ilist = nil) or (IList.Count = 0) then Exit;
карма: 11

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#8: 2018-08-14 02:42:22 ЛС | профиль | цитата
sla8a писал(а):
предлагаю добавить проверку на пустоту

Надо править, но я пока не могу, на данный момент у меня нет доступа на SVN.
карма: 22

0
Ответов: 2265
Рейтинг: 676
#9: 2018-08-14 11:53:11 ЛС | профиль | цитата
nesco, а если не секрет, то по какой причине нет доступа?

И еще может кто сможет объяснить, такой момент. Вот к примеру пустой (не заполненный данными) компонент StrList (Список строк) при doSave создает пустой файл (0 байт). И пробежавшись по компонентам получается так что компоненты работающие с текстом создают пустые файлы (StringTable даже 2-х байтый), а остальные (навскидку, проверил не все) работающие с массивами (к примеру IntegerArray, BitmapArray) не создают пустой файл при пустом компоненте.
Так вот как правильно (логичнее) в программировании, должен создаваться пустой файл или нет?
(вопрос относится и к WorkIconsManager)
карма: 11

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#10: 2018-08-14 12:20:56 ЛС | профиль | цитата
sla8a писал(а):
а если не секрет, то по какой причине нет доступа?

Мне пришлось переставлять системы и дома, и на работе. А хард с паролями приказал долго жить. Где-то на флешке есть, но флешку найти пока не могу, где-то в коробках лежит по причине домашнего ремонта. Попробую еще поискать на работе. А дома наверное уж не буду ставить, не хочу засирать свежую систему разными черепахами.
карма: 22

0
Разработчик
Ответов: 26151
Рейтинг: 2127
#11: 2018-08-14 13:37:42 ЛС | профиль | цитата
Вроде вспомнил пароль. Проверь исправления.
карма: 22

0
Ответов: 1926
Рейтинг: 172
#12: 2018-08-14 19:30:27 ЛС | профиль | цитата
sla8a писал(а):
И еще может кто сможет объяснить, такой момент. Вот к примеру пустой (не заполненный данными) компонент StrList (Список строк) при doSave создает пустой файл (0 байт). И пробежавшись по компонентам получается так что компоненты работающие с текстом создают пустые файлы (StringTable даже 2-х байтый), а остальные (навскидку, проверил не все) работающие с массивами (к примеру IntegerArray, BitmapArray) не создают пустой файл при пустом компоненте.
Так вот как правильно (логичнее) в программировании, должен создаваться пустой файл или нет?


А пустой (без текста) документ Word тоже сохраняется в пустой файл? А пустой звук WAV?
Не всё так просто, в файле есть ещё заголовки разные и пр., к-ые появляются даже при пустых основных данных.
карма: 9
0
Ответов: 2265
Рейтинг: 676
#13: 2018-08-14 19:59:39 ЛС | профиль | цитата
nesco, спасибо, у меня работает.

3042, может не так выразился, под пустым файлом я имел ввиду не 0 байт, а просто файл без данных.
Вопрос не в длине файла. Вопрос в том что программы создают пустые (без данных) файлы. Понятно что в зависимости от расширения файла, в нем кроме данных есть еще и заголовки и прочие данные. Вот к примеру с wav файлом, открыл стандартную программу винды Звукозапись и нажал сохранить как и пожалуйста пустой wav файл. Да он не 0 байт, но он создался. Тот же блокнот создаст пустой файл txt (тут уже будет 0 байт). Word тоже создаст пустой doc файл (тут уже несколько килобайт).

Так вопрос в том что некоторые компоненты создают пустые файлы (если не были введены данные), а некоторые нет (нет данных, нет реакции на doSave, нет файла (пусть и не 0 байт).
Вот как пример к вопросу:
Add(MainForm,2953706,217,252)
{
Width=443
Height=408
Position=1
}
Add(IntegerArray,6055751,448,315)
{
IntArray=[]
}
Add(Button,12963300,294,315)
{
Left=155
Top=190
Width=150
Caption="Не сохранит файл"
link(onClick,15396761:doExecute,[])
}
Add(SDialog,15396761,357,315)
{
StartDir="d:\"
FileName="tempIntegerArray.txt"
link(onExecute,6055751:doSave,[])
}
Add(StrList,5107697,448,203)
{
}
Add(Button,11653613,294,238)
{
Left=155
Top=155
Width=150
Caption="Сохранит файл"
link(onClick,11578668:doExecute,[])
}
Add(SDialog,11578668,357,238)
{
StartDir="d:\"
FileName="tempStrList.txt"
link(onExecute,5107697:doSave,[])
}

Редактировалось 2 раз(а), последний 2018-08-14 20:00:48
карма: 11

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)