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

Многоразовая обработка сообщения

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

Многоразовая обработка сообщения



unit PostForm;

interface

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

type
  TFormManyMess = class(TForm)
    LBox: TListBox;
    Button1: TButton;
    ButtonPost: TButton;
    ButtonSend: TButton;
    ButtonPerform: TButton;
    ButtonMouseDown: TButton;
    ButtonOnMouseDown: TButton;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ButtonPostClick(Sender: TObject);
    procedure ButtonSendClick(Sender: TObject);
    procedure ButtonPerformClick(Sender: TObject);
    procedure ButtonMouseDownClick(Sender: TObject);
    procedure ButtonOnMouseDownClick(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;

procedure TFormManyMess.ButtonPostClick(Sender: TObject);
begin
  LBox.Items.Add (' --- PostMessage ---');
  PostMessage (Handle, wm_lButtonDown,
    0, MakeLong (10, 10));
  PostMessage (Handle, wm_lButtonUp,
    0, MakeLong (10, 10));
end;

procedure TFormManyMess.ButtonSendClick(Sender: TObject);
begin
  LBox.Items.Add (' --- SendMessage ---');
  SendMessage (Handle, wm_lButtonDown,
    0, MakeLong (10, 10));
  SendMessage (Handle, wm_lButtonUp,
    0, MakeLong (10, 10));
end;

procedure TFormManyMess.ButtonPerformClick(Sender: TObject);
begin
  LBox.Items.Add (' --- Perform ---');
  Perform (wm_lButtonDown,
    0, MakeLong (10, 10));
  Perform (wm_lButtonUp,
    0, MakeLong (10, 10));
end;

procedure TFormManyMess.ButtonMouseDownClick(Sender: TObject);
begin
  LBox.Items.Add (' --- MouseDown ---');
  MouseDown (mbLeft, [], 10, 10);
end;

procedure TFormManyMess.ButtonOnMouseDownClick(Sender: TObject);
begin
  LBox.Items.Add (' --- OnMouseDown ---');
  OnMouseDown (self, mbLeft, [], 10, 10);
end;

end.

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

Этот проект Delphi демонстрирует обработку множества сообщений мыши в приложении форм. Проект состоит из единицы под названием PostForm, которая содержит основной класс формы, TFormManyMess. Этот класс обрабатывает различные события и сообщения, связанные с мышью.

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

  1. Класс TFormManyMess наследуется от TForm.
  2. Он имеет несколько кнопок (Button1, ButtonPost, ButtonSend и т.д.) и список (LBox) для отображения сообщений.
  3. Форма имеет три процедуры событий: FormMouseDown, Button1Click и FormCreate. Эти процедуры обрабатывают клики мыши, клики кнопок и создание формы соответственно.

Основные функции этого проекта:

  • Обработка множества сообщений мыши с помощью процедуры WndProc, которая переопределяет стандартную процедуру окна.
  • Захват событий мыши с помощью процедур WmLButtonDown, MouseDown и ApplicationMessage.
  • Отправка и постинг сообщений мыши с помощью процедур PostMessage, SendMessage и Perform.

Чтобы запустить этот проект:

  1. Создайте новый проект Delphi и добавьте единицу PostForm в него.
  2. Скомпилируйте и запустите проект.
  3. Нажмите на кнопки или переместите мышь над формой, чтобы увидеть, как список сообщений будет пополняться.

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

Многоразовая обработка сообщения в 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-06-16 01:14:40/0.0032808780670166/0