![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#2
|
|||
|
|||
![]() Если в чем-то не прав, надеюсь меня поправят, но по-моему все выглядит так:
В винде инициатором почти любых действий являются сообщения "Message"ы. Вот тут: Код:
const WM_CLICKBN=WM_USER+1; Здесь: Код:
public procedure ButtonClick(Sender: TObject); procedure WMCLICKBN(var M: TMessage); message WM_CLICKBN; Собственно, единственное что делает Код:
procedure TForm1.ButtonClick(Sender: TObject); begin PostMessage(Form1.Handle,WM_CLICKBN,Integer(Sender),0); end; Когда окно получает сообщение WM_CLICKBN, вызывается процедура WMCLICKBN которая, вроде, делает следующее: Код:
bn := TButton(M.WParam); if not (bn is TButton) then Exit; Дальше, судя по всему, имеется некий массив BA с кнопками, который мы просматриваем в поисках той самой кнопки нажатие на которую инициировало посылку сообщения WM_CLICKBN. После чего весь хвост массива после найденной кнопки сдвигается влево на одну позицию (соответственно затирая кнопку которую нажали) Если я правильно понял, все это для удобного удаления в рантайме объектов созданных также в рантайме. |