Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26061
Рейтинг: 2120
#61: 2008-03-22 04:14:06 ЛС | профиль | цитата
Galkov, да я и не спорю с тем, что он integer юзает, я привел выдержку из KOL'a, в ответ на вот это

Galkov писал(а):
хотя превращение -2 в 65534 - это неграмотно написанные коды:


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

карма: 22

0
Ответов: 9906
Рейтинг: 351
#62: 2008-03-22 04:19:23 ЛС | профиль | цитата
Собственно, то что ты раскопал, это есть ошибка в KOL, как мне представляется
На что надо бы Кладову строго указать...
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#63: 2008-03-22 04:19:35 ЛС | профиль | цитата
Galkov писал(а):
Я тебе с самого начала пример желаемой записи для дерева приводил, или нет
Да помню я это, парсер должен это понимать
Я не понял, вот это --
Galkov писал(а):
при размерности три
Что под этим понимается, чья размерность
карма: 22

0
Ответов: 9906
Рейтинг: 351
#64: 2008-03-22 04:26:02 ЛС | профиль | цитата
Ну, к примеру, мы делаем код для TreeView в рассчете только на две иконки
Запускаем парсер, давая ему на вход массив размерности 2 (два индекса на узел дерева)
И было бы хорошо, что если бы чел совсем позабыл про второй, как в вышеприведенном - все правильно работало бы

Не говоря уже про "позабытые" третий и четвертый...

карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#65: 2008-03-22 11:46:50 ЛС | профиль | цитата
Galkov писал(а):
И было бы хорошо, что если бы чел совсем позабыл про второй, как в вышеприведенном - все правильно работало бы

Те клонировался, а не отсутствовал, я правильно понял Хм... в таком случае немного усложняется алгоритм анализа значений. Но можно метод сделать функцией и возвращать размерность, те количество непрерывных индексов.
На третий и четвертый сугубо нас..., они с минусом так и останутся, а минус для оверлея переделать в 0 не проблема.

------------ Дoбавленo:


Galkov, вот это не совсем правильно


until parse = ';

Сдуру, можно индексов больше написать чем размерность массива, скорее всего, надо так


until (parse = ') or (i > high(IconsIdx));

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

0
Ответов: 9906
Рейтинг: 351
#66: 2008-03-22 12:02:57 ЛС | профиль | цитата
nesco писал(а):
Те клонировался, а не отсутствовал, я правильно понял

Давай так...
Вынося это безобразие в share, мы переходим на более абстрактный уровень
А клонировался, или еще чего делал - это вопросы конкретного элемента
Пока мы видим такой интерфейс: если индекс есть в "списочке" (не важно, то ли его вообще там нет, то ли "пусто" между запятыми) - то он устанавливается, если нет - сохраняется прежним.
Мое-то предложение просто выравнивало два случая: <15>, <15, , , >

Если такое такое нас устраивает для всех элементов, значит вынесение в share - обосновано
Если - нет, значит чего-то мы недодумали, и надо думать еще...
------------ Дoбавленo:

Про оверлеи я еще не все понял...
Но относительнве индексы - это способ заморочить голову абсолютно...
Написано же, что здесь нужна 3-я иконка, значит она третья...
Нет блин, надо еще и морочиться - а какой тут у нас shift ???


карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#67: 2008-03-22 18:50:03 ЛС | профиль | цитата
Тюфу, ну я так и хотел, так и у меня было, так я и задумывал, почему и добавил условие инициализации массива. Вот, пока, мой рабочий вариант:


procedure ParseIconsIdx(var s:string; IconsIdx:TIconsIdx; init:boolean=false);
const _dlm = ',';
var sint, parse:string;
i:integer;
begin
if init then for i:=0 to high(IconsIdx) do IconsIdx[i] := I_SKIP;
if (s = '') or (s[1] <> '<') or (Pos('>',s)=0) then exit;
Delete(s,1,1);
parse := GetTok(s,'>') + _dlm;
Replace(parse, ' ' ,'');
i:=0; repeat
sint := gettok(parse, _dlm);
if sint <> '' then IconsIdx[i] := str2int(sint);
inc(i);
until (parse = '') or (i > high(IconsIdx));
end;


------------ Дoбавленo:


Galkov писал(а):
Нет блин, надо еще и морочиться - а какой тут у нас shift
Ну так я же про это -- shift должен быть внутри компонента, понял.

------------ Дoбавленo:


Galkov, вот скажи, а нельзя ли MakeArrayIcon сделать общим и поместить в Share

------------ Дoбавленo:


Из-за того, что все пришлось привести к одному типу -- integer, то теперь приходится лепить вот такую муть



   ind_0 := Control.TVItemImage[prn];
if (Hiword(ind_0 shl 1) > 0) then ind_0:= ind_0 or $FFFF0000;
if ind_0 < 0 then sind_0 := '' else sind_0 := int2str(ind_0);

А иначе, выдает 65534 вместо -2

карма: 22

0
Ответов: 9906
Рейтинг: 351
#68: 2008-03-22 20:29:14 ЛС | профиль | цитата
1) можно, даже нужно. Можно даже и элемент IconArray состряпать
2) неубедительно пока-что. А уж применение int2str просто настораживает
------------ Дoбавленo:

Твою маман... Kol-овский trimRight (а, следовательно, и просто trim) - глючный
------------ Дoбавленo:

кстати, nesco, открой мне секрет, за каким лядом ты все время в деструкторах делаешь такое

#pas
if Assigned(Obj) then Obj.free;
TObj.free и без тебя разберется Assigned он, или нет
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#69: 2008-03-22 21:19:09 ЛС | профиль | цитата
Galkov писал(а):
TObj.free и без тебя разберется Assigned он, или нет

Да, действительно, надо по-убирать.

Galkov писал(а):
неубедительно пока-что. А уж применение int2str просто настораживает

А как мне еще получить строку из целого, что, есть другой метод конвертации Я привел кусок из метода Savе в TreeViev'e.
И какие твои предложения по этому вопросу

карма: 22

0
Ответов: 9906
Рейтинг: 351
#70: 2008-03-22 21:25:45 ЛС | профиль | цитата
никаких
пока кодов не увижу
а настораживает потому, что уже видел тестовое сравнение с "-1"
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#71: 2008-03-22 21:40:40 ЛС | профиль | цитата
Galkov писал(а):
тестовое сравнение с "-1"

Да не сравнивал я с "-1" ничего, откуда ты это взял, ну не припомню ничерта
Интересно, в каком месте ты это нашел
карма: 22

0
Ответов: 9906
Рейтинг: 351
#72: 2008-03-22 22:16:49 ЛС | профиль | цитата
XPMenus.pas, строка 1075
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#73: 2008-03-22 22:26:18 ЛС | профиль | цитата
У меня и строки-то такой нет, это -- старый юнит.

У меня вот такая строчка в двух местах есть


(fIconByIndex and (fListBitmapIdx.Items[i] = '-1')

Но ведь это пункт StrList'a, а ведь там строки, а не числа.
А ведь еще подумал использовать StrListEx и его поля данных...
карма: 22

0
Ответов: 9906
Рейтинг: 351
#74: 2008-03-22 22:36:55 ЛС | профиль | цитата
1) Это сегодня на SVN
2) Ну да, а просто массив целых чисел - это для лохов...
карма: 9

0
Разработчик
Ответов: 26061
Рейтинг: 2120
#75: 2008-03-22 22:52:26 ЛС | профиль | цитата
Galkov писал(а):
Это сегодня на SVN

Ну там всего 1075 строк, что-то не о том юните говорим. Я SVN обновляю каждый день, и моя версия ничем от отой не отличается.
Да, там есть сравнение с "-1", но строки, да и работает он только при загрузке (да маразм это, маразм, я уже понял).

Galkov писал(а):
Ну да, а просто массив целых чисел - это для лохов...

Извините, дяденька , что-то только сейчас дошло, что можно, и даже, нужно.
Править буду обязательно, но только когда парсер утрясется.
карма: 22

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