Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.05.2009, 22:55
DeepPurple DeepPurple вне форума
Прохожий
 
Регистрация: 27.05.2009
Сообщения: 0
Репутация: 10
По умолчанию необходимо разобраться в действиях

мне необходимо разобраться что для чего и как действует( а главное что значит)
Код:
Код:
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  
Старый 28.05.2009, 10:15
Grunch Grunch вне форума
Новичок
 
Регистрация: 08.04.2008
Адрес: Краснодар
Сообщения: 52
Репутация: 10
По умолчанию

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


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter