Вверх ↑
Этот топик читают: Гость
Ответов: 5446
Рейтинг: 323
#16: 2007-04-09 14:06:27 ЛС | профиль | цитата
Dilma, "раньше" - это до моей правки
карма: 1

0
Ответов: 9906
Рейтинг: 351
#17: 2007-04-09 14:06:51 ЛС | профиль | цитата
Чего народ недоумение изображает - не пойму никак

1) в стандартных броузерах мульти-выделение так и делается: клик именно меняет выделение, т.е., если уже выделено - снимает его. И вроде не смотрится странным...
2) выделил все, и снял выделение с парочки ненужных - чего плохого-то ???
карма: 9

0
Разработчик
Ответов: 26149
Рейтинг: 2127
#18: 2007-04-09 14:12:19 ЛС | профиль | цитата
Galkov, и работает все это с CTRL. Это же -- стандартный метод.
карма: 22

0
Ответов: 5446
Рейтинг: 323
#19: 2007-04-09 14:16:51 ЛС | профиль | цитата
Кстати - в штатном (SVN) ListBox-е при включенном MultiSelect ни Ctrl, ни Shift жать не надо
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#20: 2007-04-09 16:43:14 ЛС | профиль | цитата
если озвученный тут фиксинг по поводу doSelect относился исключительно к режиму MultiSelect, то правка уместна.
карма: 27
0
Ответов: 5446
Рейтинг: 323
#21: 2007-04-09 19:28:09 ЛС | профиль | цитата
Dilma, если вопрос о переключении выделения по doSelect, то именно так.
карма: 1

0
Ответов: 9906
Рейтинг: 351
#22: 2007-04-10 11:45:23 ЛС | профиль | цитата
iarspider, правил "на лету" - проверь функциональность пожалуйста
карма: 9

0
Ответов: 5446
Рейтинг: 323
#23: 2007-04-10 17:07:05 ЛС | профиль | цитата
Вроде код правильный (даже правильнее моего ;)), но ini почему-то старые...
карма: 1

0
Ответов: 9906
Рейтинг: 351
#24: 2007-04-10 17:50:46 ЛС | профиль | цитата
Просто позабыл закоммитить. И не только твои - вечером значит (часа через три)
карма: 9

0
Ответов: 16884
Рейтинг: 1239
#25: 2007-04-10 19:17:52 ЛС | профиль | цитата
При MultiSelect=False работает, при MultiSelect=True нет. Или, как говорят на форуме: Что неправильно?
code_1260.txt

[size=-2]------ Добавлено в 19:17
И все ж таки, если б работала в окне ListBox ПКМ было бы лучше.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_1260.txt [780B] [529]
Ответов: 5446
Рейтинг: 323
#26: 2007-04-15 15:28:44 ЛС | профиль | цитата
Tad, а чего тут удивительного? Фишка вот в чём: для doSelectString используется следующий код:


procedure THIListBox._work_doSelectString;
begin
SendMessage(Control.Handle,LB_SELECTSTRING,-1,integer(PChar(ToString(_Data))));
end;

Далее, заглядываем в Init:

   if _prop_MultiSelect then
Include(Fl,loMultiSelect);
Замечу, что наш loMultiSelect есть аналог сишного LBS_MULTIPLESEL

А теперь почитаем, что дядя Билли пишет про LB_SELECTSTRING


Remarks

The list box is scrolled, if necessary, to bring the selected item into view.

Do not use this message with a list box that has the LBS_MULTIPLESEL or the LBS_EXTENDEDSEL styles.


То еть мы не имеем права при MultiSelect=true посылать это сообщение...


Galkov, добавь в фиксы, чтоли...

[size=-2]------ Добавлено в 15:28
Galkov, ещё фиксы:

1. Заполнение массива ItemSelected по doSelectAll
2. В doSelect выполняем
 Control.CurIndex := -1 [/code] только для не-multiselect случая
3. Реализация doSelectString для multiselect случая

diff прилагается...

Кстати, ничего что я выкладываю diff-ы?? Или может лучше правленые файлы с пометками вида
//!!![/code], или upd-файлы для KOL-овского Updater-а?
карма: 1

0
файлы: 1hiListBox.zip [614B] [347]
Ответов: 9906
Рейтинг: 351
#27: 2007-04-15 20:26:35 ЛС | профиль | цитата
Может подождать когда еще фиксы созреют
В принципе, я не спешу никуда....
карма: 9

0
Ответов: 5446
Рейтинг: 323
#28: 2007-04-15 21:18:04 ЛС | профиль | цитата
Galkov, можно и подождать. Только неизвестно, сколько придётся ждать... Это обновление требуется для правильной работы XEDB версии 0.5.3.


А что по поводу формата выкладывания исправлений - каким в будущем пользоваться?
Вроде по наглядности diff примерно сравним с выкладыванием pas-файлов и сильно проигрывает upd-файлам.

Да, если кто не знал: "применять" изменения из diff можно с помощью утилиты patch, входящей в набор MSys, а создавать - утилитой patch из того же набора
карма: 1

0
Ответов: 9906
Рейтинг: 351
#29: 2007-04-15 21:27:41 ЛС | профиль | цитата
Ну блин, а чего ты мне мозги пудришь, если тебе права ДАДЕНЫ
Стилистику я и потом поправлю (если допечет)
А если появятся конфликтные вопросы - будем обсуждать, и приходить к консенсусу
Делов-то...

Безо всяких там "испорченных" телефонов
карма: 9

0
Ответов: 5446
Рейтинг: 323
#30: 2007-04-21 17:33:06 ЛС | профиль | цитата
Galkov, я сюда фиксы выкладываю исключительно с целью спросить - мона или нет? Ибо был разговор некоторое время назад, что дескать файлы на SVN надо только с согласия тебя/Дилмы трогать...



Пока не забыл: ещё фиксы. По сути, обёртка над LB_SETITEMDATA+LB_GETITEMDATA.

Часть 1. Декларация:

    procedure _val_arr_set(var Item:TData; var Val:TData);
function _val_arr_get(Var Item:TData; var Val:TData):boolean;
function _val_arr_count:integer;
//...
procedure _var_ValueArray(var _Data:TData; Index:word);

Часть 2. Имплементация

procedure THIListBox._val_arr_set;
var ind:integer;
begin
ind := ToIntIndex(Item);
if(ind >=0 )and(ind < Control.Count)then
Control.Perform(LB_SETITEMDATA, ind, ReadInteger(Val, NULL, 0));
end;

function THIListBox._val_arr_get;
var ind:integer;
begin
ind := ToIntIndex(Item);
Result := (ind >=0 )and(ind < Control.Count);
if Result then
dtInteger(Val,integer(Control.Perform(LB_GETITEMDATA, ind, 0)));
end;

function THIListBox._val_arr_count;
var i:smallint;
begin
Result := Control.Count;
end;

procedure THIListBox._var_ValueArray;
begin
if ValArr = nil then
ValArr := CreateArray(_val_arr_set,_val_arr_get,_val_arr_count,nil);
dtArray(_Data,ValArr);
end;

Это черновой вариант кода. Что хотел бы сделать, да не умею :
* По doAdd принимать не только строку, но и MT-пару [строка; dword для массива Value]
* По onClick соответственно выдавать такую же МТ-пару
карма: 1

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