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

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 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.  
  3. local List = {
  4.  
  5.      {Text='Line-0'; Flags=(far.Message("Первая строка видна?","",";YesNo") == 1 and F.LIF_NONE or F.LIF_HIDDEN)},
  6.  
  7.      {Text='Line-1'; Flags=F.LIF_HIDDEN},
  8.  
  9.      {Text='Line-2'; Flags=F.LIF_HIDDEN},
  10.  
  11.      {Text='Line-3'; Flags=F.LIF_HIDDEN}}
  12.  
  13.  
  14.  
  15. local DlgItems = {
  16.  
  17.  {  "DI_DOUBLEBOX";  1;  1;  50;  25;  0;};
  18.  
  19.  {  "DI_LISTBOX";  2;  2;  48;  20;  List; };
  20.  
  21.  {  "DI_BUTTON";   5;  22;  0;  0;  0;  0;  0;  bor(F.DIF_BTNNOCLOSE, F.DIF_FOCUS);  "&1. Показать";};
  22.  
  23. }
  24.  
  25. local function DlgProc(hDlg,Msg,Param,Param2)
  26.  
  27.  if Msg == F.DN_BTNCLICK then
  28.  
  29.   local item = hDlg:send('DM_GETDLGITEM',2)
  30.  
  31.   far.Show('#List='..#item[6])
  32.  
  33.  end
  34.  
  35. end
  36.  
  37. far.Dialog('', -1,-1,52,26,nil, DlgItems, nil, DlgProc)
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

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

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

Post by zg »

это в 4976 сломалось, всё будет в ближайшее время.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

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

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

Post by zg »

5654.
Post Reply

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