Тема: AHK: Class Gui ObjBindMethod блокирует деструктор __Delete
По всей видимости если применить ObjBindMethod к методу того же объекта, то он блокирует деструктор класса.
Вот код, который иллюстрирует проблему:
#SingleInstance force
gui1 := new myClass("gui1")
gui1.Show(100, 200)
gui2 := new myClass("gui2")
gui2.Show(100, 300)
Sleep, 4000
; уничтожение объектов
gui1 := {}
gui2 := 1
class myClass
{
__New(name)
{
this.name := name
Gui, % this.name . ": New"
Gui, % this.name . ": Add", Text,, % "this is Gui named: " . this.name
; OnMessage( 0x200, ObjBindMethod(this, "onMouseMove") ) ; если расскомментировать, хрен ты удалишь обьект
}
Show(x := "Center", y := "Center")
{
Gui, % this.name . ": Show", % "x" . x . "y" . y, NA
}
__Delete()
{
Gui, % this.name . ": Destroy"
Msgbox, % "destroy " . this.name
}
onMouseMove( wparam, lparam, msg, hwnd ) ; добавляет возможность перетаскивать мышкой в любом месте интерфейса
{
if wparam = 1 ; LButton
PostMessage, 0xA1, 2,,, A ; WM_NCLBUTTONDOWN
}
}
Esc::ExitApp
Вероятно требуется какая-то хитрость, но я пока не могу понять какая.