Пустой список DI_LIST-а, если исходном списке все строки - LIF_HIDDEN Topic is solved

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

Пустой список DI_LIST-а, если исходном списке все строки - LIF_HIDDEN

Post by buniak_a_h »

Здравствуйте, уважаемые знатоки!
Столкнулся со странностью и нелогичностью.
1. Первая ситуация.
Имеется элемент DI_LISTBOX. Изначально в параметре List (Item[6]) - 4 элемента: первая строка видна, остальные - с флагом LIF_HIDDEN (скрытые).
Если запросить элемент у движка (команда DM_GETDLGITEM) и посмотреть 6-й элемент, то там 4 строки (как и ожидается); все, кроме первой, с ключом LIF_HIDDEN.
2. Вторая ситуация: то же самое, но в исходном массиве строк нет ни одной видимой. Либо вообще без первой строкиЮ либо её указать тоже с флагом LIF_HIDDEN.
Теперь если запросить то же самое, то "внутренний" список (item[6]) - пустой!!!
Мне кажется это неправильным: ведь в процессе работы диалога могут измениться условия, по которым определяется видимость строк. В первом случае любую невидимую строку можно сделать видимой. Но если изначально не было ни одной видимой строки, то это уже навсегда (ну, если только нет доступа к сохранённому исходному массиву)
Для экспериментов даю маленький скрипт:
  1. local F = far.Flags
  2. local List = {
  3.      {Text='Line-0'; Flags=(far.Message("Первая строка видна?","",";YesNo") == 1 and F.LIF_NONE or F.LIF_HIDDEN)},
  4.      {Text='Line-1'; Flags=F.LIF_HIDDEN},
  5.      {Text='Line-2'; Flags=F.LIF_HIDDEN},
  6.      {Text='Line-3'; Flags=F.LIF_HIDDEN}}
  7.  
  8. local DlgItems = {
  9.  {  "DI_DOUBLEBOX";  1;  1;  50;  25;  0;};
  10.  {  "DI_LISTBOX";  2;  2;  48;  20;  List; };
  11.  {  "DI_BUTTON";   5;  22;  0;  0;  0;  0;  0;  bor(F.DIF_BTNNOCLOSE, F.DIF_FOCUS);  "&1. Показать";};
  12. }
  13. local function DlgProc(hDlg,Msg,Param,Param2)
  14.  if Msg == F.DN_BTNCLICK then
  15.   local item = hDlg:send('DM_GETDLGITEM',2)
  16.   far.Show('#List='..#item[6])
  17.  end
  18. end
  19. far.Dialog('', -1,-1,52,26,nil, DlgItems, nil, DlgProc)
Shmuel
Posts: 6194
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 337 times

Пустой список DI_LIST-а, если исходном списке все строки - LIF_HIDDEN

Post by Shmuel »

Это сломалось в Far.exe, в одном из билдов диапазона 4974 - 4984.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Пустой список DI_LIST-а, если исходном списке все строки - LIF_HIDDEN

Post by zg »

это в 4976 сломалось, всё будет в ближайшее время.
buniak_a_h
Posts: 2286
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 139 times
Been thanked: 245 times
Contact:

Пустой список DI_LIST-а, если исходном списке все строки - LIF_HIDDEN

Post by buniak_a_h »

Спасибо! А то я уж думал, что оптимизация такая …
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 158 times
Contact:

Пустой список DI_LIST-а, если исходном списке все строки - LIF_HIDDEN

Post by zg »

5654.
Post Reply

Return to “Нужна помощь”