|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
необходимо разобраться в действиях
мне необходимо разобраться что для чего и как действует( а главное что значит)
Код: Код:
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; ...................... procedure TForm1.WMCLICKBN(var M: TMessage); var bn: TButton; i: Integer; begin bn := TButton(M.WParam); if not (bn is TButton) then Exit; for i := 0 to High(BA)-1 do begin if BA[i]=bn then begin Move(BA[i+1],BA[i],SizeOf(TButton)*(High(BA)-i)); Break; end; end; SetLength(BA,High(BA)); FreeAndNil(bn); end; PostMessage(Form1.Handle,WM_CLICKBN ,Integer(Sender),0); и как он работает(насколько я знаю это перехватчик сообщений но хотелось бы поподробней) хотелось бы узнать что значит каждый параметр в данной строчке, зачем( и что делает) procedure WMCLICKBN(var M: TMessage); message WM_CLICKBN; и зачем заводится константа( да еще и равная какой то другой константе которая не обьявлена). PS да, я знаю, что хелп всем поможет, но к сожалению не силен в английском. |
#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. После чего весь хвост массива после найденной кнопки сдвигается влево на одну позицию (соответственно затирая кнопку которую нажали) Если я правильно понял, все это для удобного удаления в рантайме объектов созданных также в рантайме. |