Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  4 625

•  TDictionary Custom Sort  6 627

•  Fast Watermark Sources  6 405

•  3D Designer  9 351

•  Sik Screen Capture  6 738

•  Patch Maker  7 124

•  Айболит (remote control)  7 131

•  ListBox Drag & Drop  5 989

•  Доска для игры Реверси  97 568

•  Графические эффекты  7 323

•  Рисование по маске  6 611

•  Перетаскивание изображений  5 483

•  Canvas Drawing  5 859

•  Рисование Луны  5 581

•  Поворот изображения  5 092

•  Рисование стержней  3 658

•  Paint on Shape  2 891

•  Генератор кроссвордов  3 789

•  Головоломка Paletto  3 042

•  Теорема Монжа об окружностях  3 855

•  Пазл Numbrix  2 536

•  Заборы и коммивояжеры  3 248

•  Игра HIP  2 215

•  Игра Go (Го)  2 148

•  Симулятор лифта  2 527

•  Программа укладки плитки  2 168

•  Генератор лабиринта  2 664

•  Проверка числового ввода  2 319

•  HEX View  2 652

•  Физический маятник  2 283

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Отловить сообщение в компоненте



Кот схватил мышку за хвост...
... и своротил со стола комп!


{*************************************************************************}

{ 
  TApplication besitzt eine Methode HookMainWindow. 
  Damit kann man in die Windows Prozedur (WndProc) "einhaken" und Nachrichten, 
  welche an die Applikation geschickt werden, abfangen und behandeln. 

  HookMainWindow is wie folgt deklariert: 
} 

procedure HookMainWindow(Hook : TWindowHook); 

{ Und der Parameter TWindowHook (Methoden Pointer) so: } 

type 
  TWindowHook = function(var Message : TMessage) : Boolean of object; 
 

{*************************************************************************} 

unit MessageReceiver; 

interface 

uses 
  Windows, Messages, SysUtils, Classes, Forms, Dialogs; 

type 
  TOnReceiveUserMessage = procedure(Msg: Cardinal; wParam, lParam: Integer; 
    var Handled: Boolean) of object; 
  TOnReceiveOtherMessage = procedure(var Handled: Boolean) of object; 

  TMessageReceiver = class(TComponent) 
  private 
    { Private declarations } 
    FHooked: Boolean; 

    FOnReceiveUserMessage: TOnReceiveUserMessage; 
    FOnDateTimeChange: TOnReceiveOtherMessage; 

    function MessageHook(var Msg: TMessage): Boolean; 
  protected 
    function DoDateTimeChange(Msg: TMessage): Boolean; dynamic; 
    function DoUserMessage(Msg: TMessage): Boolean; dynamic; 
  public 
    { Public declarations } 
    constructor Create(AOwner: TComponent); override; 
    destructor Destroy; override; 
  published 
    { Published declarations } 
    property OnDateTimeChange: TOnReceiveOtherMessage 
      read FOnDateTimeChange write FOnDateTimeChange; 
    property OnReceiveUserMessage: TOnReceiveUserMessage 
      read FOnReceiveUserMessage write FOnReceiveUserMessage; 
  end; 
   
procedure Register; 

implementation 

procedure Register; 
begin 
  RegisterComponents('System', [TMessageReceiver]); 
end; 

function TMessageReceiver.MessageHook(var Msg: TMessage): Boolean; 
begin 
  Result := False; 
  // User defined messages 
  if (Msg.Msg >= WM_USER) then 
    Result := DoUserMessage(Msg) 
  else 
    // Other messages 
    case Msg.Msg of 
      WM_TIMECHANGE: Result := DoDateTimeChange(Msg); 
      // ... 
    end; 
end; 

function TMessageReceiver.DoDateTimeChange(Msg : TMessage): Boolean; 
begin 
  Result := False; 
  if Assigned(FOnDateTimeChange) then 
    FOnDateTimeChange(Result); 
end; 

function TMessageReceiver.DoUserMessage(Msg: TMessage): Boolean; 
begin 
  Result := False; 
  if Assigned(FOnReceiveUserMessage) then 
    FOnReceiveUserMessage(Msg.Msg, Msg.wParam, Msg.LParam, Result); 
end; 

constructor TMessageReceiver.Create(AOwner: TComponent); 
begin 
  inherited Create(AOwner); 
  FHooked := False; 
  if not (csDesigning in ComponentState) then 
  begin 
    Application.HookMainWindow(MessageHook); 
    FHooked := True; 
  end; 
end; 

destructor TMessageReceiver.Destroy; 
begin 
  if FHooked then Application.UnhookMainWindow(MessageHook); 
  inherited Destroy; 
end; 

end.








Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте