Вверх ↑
Этот топик читают: Гость
Ответов: 9906
Рейтинг: 351
#31: 2007-04-21 18:26:04 ЛС | профиль | цитата
iarspider, выкладывай блин
Начнем со стиля "доверяй, но проверяй" (а данном конкретном случае)
По ходу дела скорректируем (методом переговоров), если будет необходимость.

Только первая просьба - хотя бы в два раза по реже, на один элемент, конечно.
карма: 9

0
Разработчик
Ответов: 26073
Рейтинг: 2122
#32: 2007-04-21 18:45:24 ЛС | профиль | цитата
iarspider писал(а):
* По doAdd принимать не только строку, но и MT-пару [строка; dword для массива Value]
* По onClick соответственно выдавать такую же МТ-пару

А в чем проблема, собственно?

[size=-2]------ Добавлено в 18:45
Galkov, извини, что влез. Может и не надо бы.
карма: 22

0
Ответов: 5446
Рейтинг: 323
#33: 2007-04-21 22:07:23 ЛС | профиль | цитата
nesco, проблема собственно в том, как считать MT-поток и как его сформировать. Ты вроде разбирался с этим - так помоги!

[size=-2]------ Добавлено в 22:07
Galkov, я бы и рад, но на выходных не могу никак - тут proxy не дружит с черепахой
Хорошо, в понедельник, если не забуду, выложу.
карма: 1

0
Разработчик
Ответов: 26073
Рейтинг: 2122
#34: 2007-04-22 02:08:54 ЛС | профиль | цитата
iarspider, тебе нужен dword как dword, или как Real пойдет? И если считаем, куда писать эти данные?

[size=-2]------ Добавлено в 22:22
По onClick считывать надо CurItem, правильно я понял? Если не трудно кинь маленький примерчик, на котором можно будет отработать поток. Компонент, насколько я понял, выше по топику находится. Учти, что в таком случае они будут добавляться синхронно.

[size=-2]------ Добавлено в 02:08
iarspider, что-то не нашел твою версию ListBox'a, так что выкладывай (и на SVN тоже нет).
карма: 22

0
Ответов: 5446
Рейтинг: 323
#35: 2007-04-22 09:42:51 ЛС | профиль | цитата
nesco, коды прицепляю.

1. тебе нужен dword как dword, или как Real пойдет? dword ближе к integer вроде...
И если считаем, куда писать эти данные? Вызывать _val_arr_set для Index=CurItem, Value=[2й элемент из MT либо _prop_Default]
2. По onClick считывать надо CurItem, правильно я понял? - Правильно.
3. Примерчик... Ну, примерно такой:
code_1337.txt

Учти, что в таком случае они будут добавляться синхронно. - Так и задумано. Ещё вот что надо: свойство, содержащее default-значение для записи в ValueArray если по doAdd был только 1 параметр. Это для совместимости.
карма: 1

0
файлы: 2code_1337.txt [1.6KB] [442], hiListBox_new.zip [4KB] [307]
Разработчик
Ответов: 26073
Рейтинг: 2122
#36: 2007-04-22 13:20:25 ЛС | профиль | цитата
iarspider, предупреждаю -- для размеров файлов массив не подойдет. Нужен -- int64 или doubledword.

[size=-2]------ Добавлено в 13:20
Да и по сортировке, что делать будем? Индексы списка поменяются не синхронно с индексами массива.
карма: 22

0
Ответов: 5446
Рейтинг: 323
#37: 2007-04-22 13:31:47 ЛС | профиль | цитата
nesco,
предупреждаю -- для размеров файлов массив не подойдет ну и фиг с ним, это я просто первый пришедший в голову пример собрал. Можешь вместо размера аттрибуты класть - для них вроде размера хватает?

Да и по сортировке, что делать будем? Индексы списка поменяются не синхронно с индексами массива.

Какого списка и какого массива? Массив Values - он не нами ведётся, а Вендой (тм), через 2 сообщения LB_GETITEMDATA и LB_SETITEMDATA. Сортировка, вроде же, виндой делается, так что об этом нам и думать не надо - венда сама правильным образом расставит все Values .
карма: 1

0
Разработчик
Ответов: 26073
Рейтинг: 2122
#38: 2007-04-22 14:29:11 ЛС | профиль | цитата
iarspider, я заметил, что у тебя ReadInteger в массиве стоит, это -- dword со знаковым битом.
Тебе нужен чистый dword или integer со знаком.

Сейчас попробую прицепить данные.

[size=-2]------ Добавлено в 13:57
Еще фигня выяснилась, метод Add перехватывает Parent, и что теперь заграбить его себе?

[size=-2]------ Добавлено в 13:58
Насчет запросов я понял -- это обращения к одному и тому же списку.

[size=-2]------ Добавлено в 14:29
А что будем делать со строкой сверху?
карма: 22

0
Ответов: 5446
Рейтинг: 323
#39: 2007-04-22 14:59:45 ЛС | профиль | цитата
nesco, так как типа "dword" в хайасме (т.е. в TData) нет, то пусть будет signed integer.


Еще фигня выяснилась, метод Add перехватывает Parent, и что теперь заграбить его себе?


Загребаем. Сейчас гляну, какое там сообщение посылается...


А что будем делать со строкой сверху?


Давай так: добавим сверху точку для "данных", и с неё при добавлении читаем (соблюдая стандартный порядок чтения ).
карма: 1

0
Разработчик
Ответов: 26073
Рейтинг: 2122
#40: 2007-04-22 16:01:37 ЛС | профиль | цитата
iarspider, вот держи проверяй, у меня, вроде, работает. code_1338.txt

[size=-2]------ Добавлено в 16:01
nesco писал(а):
добавим сверху точку для "данных"

Точку для данных, покак, не сделал. Оставил только Str. Данные для записи по-умолчанию -- DefaultAVal
карма: 22

0
файлы: 1code_1338.txt [1.6KB] [494]
Ответов: 5446
Рейтинг: 323
#41: 2007-04-22 16:51:45 ЛС | профиль | цитата
nesco, угу, но только если Sort включить - йухня получается... Но это лечится достаточно просто:

-> WinList.pas


function Add(const Text:string):integer; virtual;
//...
function THIWinList.Add(const Text: string):Integer;
begin
Result := Control.Add(Text);
end;

-> THiListBox.pas

// _work_doAdd
idx:integer;
// ...
if _prop_AddType = 0 then begin
idx := Add(s);
if _prop_SelectAdd then Control.CurIndex := idx;
dtInteger(di, idx);
end
else begin
idx := Control.Insert(0,s);
if idx = -1 then Control.Text := s + #13#10 + Control.Text;
if _prop_SelectAdd then Control.CurIndex := idx;
dtInteger(di, idx);
end;

[size=-2]------ Добавлено в 16:51
Суть: если включен Sort, то нет никакой гарантии, что после добавления строки она встанет на
указанное нами место (0 или Control.Count - 1). Это учёл г-н Кладов - у него Control.Add возвращает индекс добавленной строки (который, в свою очередь, возвращает Perform).

В кодах от Dilma этот индекс вообще игнорировался
карма: 1

0
Разработчик
Ответов: 26073
Рейтинг: 2122
#42: 2007-04-22 20:23:17 ЛС | профиль | цитата
iarspider, надо, чтобы Galkov WinList пофиксил.

[size=-2]------ Добавлено в 17:05
iarspider, надо, чтобы Galkov WinList пофиксил.
iarspider писал(а):
Это учёл г-н Кладов - у него Control.Add возвращает индекс добавленной строки (который, в свою очередь, возвращает Perform).

Это я встречал, но на ум что-то не пришло сразу. Хотя, подсознательно, doSort В голове плавал.

[size=-2]------ Добавлено в 20:23
iarspider, вот, добавил точку Value, переделал код под фиксинг (и еще пару условий). На стандартнм WinList'e не проверял.
карма: 22

0
файлы: 1hiListBox_new_MT2.zip [4.5KB] [367]
Ответов: 5446
Рейтинг: 323
#43: 2007-04-22 21:50:35 ЛС | профиль | цитата
nesco, всё вроде нормально. Огромное спасибо за помощь!

Galkov, вопрос: Как я понимаю, ничего не должно сломаться от того, что теперь THIWinList.Add не procedure, а function? Если возражений против правки WinList не будет, то в обед сделаю commit.
карма: 1

0
Разработчик
Ответов: 26073
Рейтинг: 2122
#44: 2007-04-22 22:18:59 ЛС | профиль | цитата
iarspider, единственое, что не так, так это то, что при наличии не нулевого DefaultAVal значение считывается не в начале, а в конце. Это отличается от умолчания в HiAsm'e, где не нулевые свойства считываются в начале.

[size=-2]------ Добавлено в 22:18
Еще все хорошо проверь не с MT-потоками, а с обычными данными. Должна быть полная совместимость.
карма: 22

0
Ответов: 5446
Рейтинг: 323
#45: 2007-04-23 14:07:48 ЛС | профиль | цитата
За-commit-ил.
карма: 1

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