Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Несколько методов, обрабатывающих одно сообщение

Delphi , ОС и Железо , Сообщения Windows

Несколько методов, обрабатывающих одно сообщение



unit ManyForm;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TFormManyMess = class(TForm)
    LBox: TListBox;
    Label1: TLabel;
    Button1: TButton;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    procedure WndProc(var Message: TMessage); override;
    procedure DefaultHandler(var Message); override;
    procedure WmLButtonDown (var Message: TWMMouse);
      message wm_lButtonDown;
    procedure MouseDown(Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); override;
    procedure ApplicationMessage (var Msg: TMsg;
      var Handled: Boolean);
  end;

var
  FormManyMess: TFormManyMess;

implementation

{$R *.DFM}

procedure TFormManyMess.FormMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  if Button = mbLeft then
    LBox.Items.Add (Format ('%s in (%d, %d)',
      ['FormMouseDown', X, Y]));
end;

procedure TFormManyMess.WndProc(var Message: TMessage);
begin
  if Message.Msg = wm_LButtonDown then
    LBox.Items.Add (Format ('%s in (%d, %d)',
      ['WndProc', LoWord (Message.LParam),
      HiWord (Message.LParam)]));
  inherited;
end;

procedure TFormManyMess.DefaultHandler(var Message);
begin
  with TMessage (Message) do
    if Msg = wm_LButtonDown then
      LBox.Items.Add (Format ('%s in (%d, %d)',
        ['DefaultHandler', LoWord (LParam),
        HiWord (LParam)]));
  inherited;
end;

procedure TFormManyMess.WmLButtonDown (var Message: TWMMouse);
begin
  LBox.Items.Add (Format ('%s in (%d, %d)',
    ['WmLButtonDown', Message.XPos, Message.YPos]));
  inherited;
end;

procedure TFormManyMess.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    LBox.Items.Add (Format ('%s in (%d, %d)',
      ['MouseDown', X, Y]));
  inherited;
end;

procedure TFormManyMess.ApplicationMessage (var Msg: TMsg;
  var Handled: Boolean);
begin
  if (Msg.Message = wm_LButtonDown) and
      (Msg.hWnd = Handle) then
    LBox.Items.Add (Format ('%s in (%d, %d)',
      ['ApplicationMessage', LoWord (Msg.LParam),
      HiWord (Msg.LParam)]));
  Handled := False;
end;

procedure TFormManyMess.FormCreate(Sender: TObject);
begin
  Application.OnMessage := ApplicationMessage;
end;

procedure TFormManyMess.Button1Click(Sender: TObject);
begin
  LBox.Clear;
end;



end.

Загрузить исходный код проекта

Программа на Delphi, которая обрабатывает несколько событий мыши в одном формате. Проект состоит из одного формата TFormManyMess, который имеет несколько методов для обработки различных типов событий мыши.

Вот разбивка кода:

  1. Метод FormMouseDown вызывается, когда левая кнопка мыши нажата. Он добавляет элемент в список с сообщением "FormMouseDown" и координатами (X, Y) клика.
  2. Метод WndProc переопределен для обработки оконных сообщений. Когда получается сообщение WM_ LBUTTONDOWN, он добавляет элемент в список с сообщением "WndProc" и координатами (X, Y) клика.
  3. Метод DefaultHandler вызывается, когда нет другого обработчика для сообщения. Он проверяет, является ли сообщение WM_ LBUTTONDOWN, и если да, то добавляет элемент в список с сообщением "DefaultHandler" и координатами (X, Y) клика.
  4. Метод WmLButtonDown - отдельное реализация метода WndProc, которая обрабатывает сообщения WM_ LBUTTONDOWN конкретно. Он добавляет элемент в список с сообщением "WmLButtonDown" и координатами (X, Y) клика.
  5. Метод MouseDown переопределен для обработки кликов мыши. Когда левая кнопка нажата, он добавляет элемент в список с сообщением "MouseDown" и координатами (X, Y) клика.
  6. Метод ApplicationMessage вызывается, когда приложению получается оконное сообщение. Он проверяет, является ли сообщение WM_ LBUTTONDOWN, и если да, то проверяет, совпадает ли параметр hWnd с handle формата. Если оба условия истинны, он добавляет элемент в список с сообщением "ApplicationMessage" и координатами (X, Y) клика.
  7. Метод FormCreate настраивает приложение для использования метода ApplicationMessage как обработчика оконных сообщений.
  8. Метод Button1Click вызывается, когда кнопка на формате нажата. Он очищает список.

Проект демонстрирует, как несколько методов могут обрабатывать различные типы событий мыши в одном формате, и как система сообщений Delphi позволяет для.custom обработки оконных сообщений.

В статье рассмотрен пример приложения Delphi, которое обрабатывает одно сообщение методами из различных классов.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Сообщения Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 02:09:33/0.003309965133667/0