@AlexCatze, не могу представить зачем нужно событие перерисовки элемента. Ну допустим, я хочу просто посчитать сколько раз была отрисована та или иная кнопка. Лучше сделать это не влезая в метод TComponent:draw, поскольку TComponent:draw вызывается абсолютно для всех компонентов, а меня интересует только одна кнопка. Это делается при помощи магии ООП, называемой полиморфизм. Вот пример кода:
Btn1=Form1:addButton(65,21,"Кнопка") -- создаем кнопку
Cnt1=Form1:addLabel(10,5,0) -- создадим метку со счетчиком событий
function Btn1.onDraw() -- определяем событие onDraw для кнопки Btn1,
Cnt1.caption=Cnt1.caption+1 -- которое увеличивает счетчик
Cnt1:redraw() -- и перерисовывает метку
end
function Btn1:draw() -- переопределяем метод draw для кнопки Btn1, в котором
TButton.draw(self) -- вызываем родительский метод
if self.onDraw then self.onDraw() end -- и если надо, обработчик события onDraw
end
В этом случае выполнять проверку if self.onDraw не обязательно, поскольку переопределенный метод draw работает только для кнопки Btn1. А метод TComponent:draw остается без изменений.
Но поковыряться в библиотеке forms таки придется. Дело в том, что объект TButton является локальным и недоступен во внешних модулях.
Просто убери слово local в этой строке:
------------------Button----------------
local TButton=setmetatable({W=10, H=1, color=0x606060, type=function() return "Button" end},TComponent)