Rambler's Top100

Твой мир ПРОграммирования-Delphi, Pascal, C++

Объявление

Если это Ваш первый визит на форум, то советуем зарегистрироваться. Зарегистрированные пользователи могут задавать вопросы и просматривать темы со скрытым текстом. Чтобы зарегистрироваться, нажмите Регистрация.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Твой мир ПРОграммирования-Delphi, Pascal, C++ » Общие вопросы Delphi » Оюработка сообщений в Delphi. Часть 1.


Оюработка сообщений в Delphi. Часть 1.

Сообщений 1 страница 8 из 8

1

Обработка сообщений в Delphi- их значение и применение. Часть 1.

Здравствуйте.
Сообщение(message)- извещение о некотором событии, которое произошло. Система windows посылает его в адрес приложения, которое в свою очередь его и обрабатывает.  Например, в случае перерисовки окна вызывается событие wm_paint, в случае потери фокуса списком вызывается сообщение  cbn_killfocus.
Delphi использует специальный тип данных для представления сообщений Windows- TMsg. TMsg представляет из себя запись вот такой конструкции:

0

2

Смысл содержания сообщения

Hwnd- 32 битный дескриптор окна, которому предназначено сообщение. Это окно может быть любым экранным обьектом- окном ввода, диалоговым окном ит.д.
message- константа, которая уже определена Windows, либо описана программистом.
WParam -32 бита дополнительной информации. Обычно используется для содержания некоторой константы, элемента управления, связанного с этим сообщением, либо идентификатора окна.

0

3

Обработка сообщений.
Надо сказать, что Delphi значительно упрощает жизнь программисту. В ее состав входят компоненты, которые позволяют творить чудеса, в частности многие из них умеют обрабатывать стандартные сообщения, что делает жизнь намного проще.
Пример- перерисовка в stringgrid или скроллинг в memo.
Конечно, многие из них не умеют реагировать на нужные сообщения или же реагируют не так как надо программисту в его программе. И вот тут как раз появляется необходимость отлавливать нужные сообщения в программе.
В первой части мы разберем метод создания потомка от компонента, который зарегистрирован в Delphi.
Давайте, придумаем какую-нибудь интересную задачу. Например, давайте научимся растягивать Listbox, растягивая форму и научимся изменять состояние динамически создаваемых кнопок, двигая мышь над Listbox-ом.

0

4

Итак, задача сформулирована. Теперь- реализация.
В начале, нам необходимо описать потомка Listbox, переопределить сообщение по растягиванию формы, создать потомка от TButton и создать собственный тип сообщений.
Type
TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure WMSIZING (var message: TMessage); message WM_SIZING;//процедура, в которой мы переопределим сообщение  WM_SIZING, предназначенное для нашей формы.
  private
    { Private declarations }
  public
    { Public declarations }
  end;

0

5

TMYButton = class(TButton)// наша кнопка с расширенными функциями.
  private

public
end;

Создадим 2 сообщения нашего типа:
var mess,unmess:tmymess;
Также создадим массив из 5 динамически создаваемых кнопок.
Теперь определим сообщения:
procedure TForm1.FormCreate(Sender: TObject);
begin
mess.WParam:=1;//активное состояние кнопок

unmess.WParam:=0;//неактивное состояние кнопок

end;

0

6

Дальше обрабатываем сообщения:

procedure TMylist.WMVscroll(var message: TMessage);
begin
inherited;
form1.caption:='Вертикальная прокрутка';
end;

0

7

procedure TForm1.WMSIZING(var message: TMessage);
var i:integer;
begin
inherited;
if (list.Width<(form1.width-20)) and (list.Height<(-40+ form1.Height)) then
begin
list.Width:=list.Width+1;
list.Height:=list.Height+1;// условия на то чтобы Listbox не вылезал за пределы формы
end;
if (list.Width+list.Left)= q[1].Left then
begin
for i:=1 to 5 do
q[i].Free;// уничтожение кнопок если Listbox находится непосредственно на них
end;
f:=true;
end;

0

8

Ну вот, в принципе, и все. Если что-то не понятно, то можете посмотреть в исходниках.

0


Вы здесь » Твой мир ПРОграммирования-Delphi, Pascal, C++ » Общие вопросы Delphi » Оюработка сообщений в Delphi. Часть 1.