Page 1 of 1

как сделать кнопку диалога неактивной?

Posted: Tue 22 Sep, 2015 06:48
by fps
Хочу сделать макрос, который бы не давал удалить файлы с атрибутом ReadOnly.
Сделал вот такое (большая часть кода - копипаста из какакого-то скрипта с форума):
  1. Event
  2.  
  3.  {
  4.  
  5.   description="Hack AskDeleteRoDialog"; group="DialogEvent"; action=function(ev,arg)
  6.  
  7.    if ev==far.Flags.DE_DEFDLGPROCINIT and arg.Msg==far.Flags.DN_INITDIALOG then
  8.  
  9.     local dlgInf= arg.hDlg:send(far.Flags.DM_GETDIALOGINFO);
  10.  
  11.     if dlgInf then
  12.  
  13.  
  14.  
  15.      if dlgInf.Id==win.Uuid("8D4E84B3-08F6-47DF-8C40-7130CD31D0E6") then -- DeleteAskDeleteROId
  16.  
  17.       mf.postmacro(function()
  18.  
  19.        Keys("Right Right"); -- Skip as default action for RO files
  20.  
  21.       end)
  22.  
  23.      end
  24.  
  25.  
  26.  
  27.     end
  28.  
  29.    end
  30.  
  31.   end;
  32.  
  33.  }
Работает. Делает кнопкой по умолчанию "Skip"
А как бы еще сделать неактивными, "серыми" первые две кнопки диалога (Delete и All)?

как сделать кнопку диалога неактивной?

Posted: Tue 22 Sep, 2015 07:00
by Shmuel

Code: Select all

Keys("Right Right"); -- Skip as default action for RO files
arg.hDlg:send(far.Flags.DM_ENABLE,6,0);
arg.hDlg:send(far.Flags.DM_ENABLE,7,0);

как сделать кнопку диалога неактивной?

Posted: Tue 22 Sep, 2015 07:05
by fps
То, что надо. Спасибо.

как сделать кнопку диалога неактивной?

Posted: Tue 22 Sep, 2015 08:12
by Shmuel
Можно обойтись и без mf.postmacro:

Code: Select all

arg.hDlg:send(far.Flags.DM_SETFOCUS,8,0)
arg.hDlg:send(far.Flags.DM_ENABLE,6,0)
arg.hDlg:send(far.Flags.DM_ENABLE,7,0)

как сделать кнопку диалога неактивной?

Posted: Tue 22 Sep, 2015 08:44
by fps
Спасибо. Так еще лучше.

Странный побочный эффект после срабатывания макроса(или баг):
если в этом диалоге понажимать Tab, то "курсор" останавливается на последней кнопке (Cancel).
Причем поведение Shift+Tab остается прежним - "курсор" перемещает циклически как и раньше.

Если отключать только вторую кнопку (All), то зацикливание не портится.

как сделать кнопку диалога неактивной?

Posted: Tue 22 Sep, 2015 08:59
by Shmuel
fps wrote: Странный побочный эффект после срабатывания макроса(или баг):
Да, я это тоже заметил. Похоже на баг.