![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. После чего весь хвост массива после найденной кнопки сдвигается влево на одну позицию (соответственно затирая кнопку которую нажали) Если я правильно понял, все это для удобного удаления в рантайме объектов созданных также в рантайме. |