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

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
fps
Posts: 163
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 11 times
Been thanked: 3 times

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

Post by fps » Tue 22 Sep, 2015 06:48

Хочу сделать макрос, который бы не давал удалить файлы с атрибутом ReadOnly.
Сделал вот такое (большая часть кода - копипаста из какакого-то скрипта с форума):
Code: [Select all] [Expand/Collapse] [Download] (HackRoDialog.lua)
  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)?

Shmuel
Posts: 5088
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 138 times

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

Post by Shmuel » Tue 22 Sep, 2015 07:00

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);

fps
Posts: 163
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 11 times
Been thanked: 3 times

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

Post by fps » Tue 22 Sep, 2015 07:05

То, что надо. Спасибо.

Shmuel
Posts: 5088
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 138 times

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

Post by Shmuel » Tue 22 Sep, 2015 08:12

Можно обойтись и без 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)

fps
Posts: 163
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 11 times
Been thanked: 3 times

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

Post by fps » Tue 22 Sep, 2015 08:44

Спасибо. Так еще лучше.

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

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

Shmuel
Posts: 5088
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 138 times

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

Post by Shmuel » Tue 22 Sep, 2015 08:59

fps wrote: Странный побочный эффект после срабатывания макроса(или баг):
Да, я это тоже заметил. Похоже на баг.

Post Reply

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