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

•  DeLiKaTeS Tetris (Тетрис)  151

•  TDictionary Custom Sort  3 331

•  Fast Watermark Sources  3 081

•  3D Designer  4 840

•  Sik Screen Capture  3 334

•  Patch Maker  3 547

•  Айболит (remote control)  3 652

•  ListBox Drag & Drop  3 007

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

•  Графические эффекты  3 936

•  Рисование по маске  3 242

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

•  Canvas Drawing  2 745

•  Рисование Луны  2 573

•  Поворот изображения  2 180

•  Рисование стержней  2 168

•  Paint on Shape  1 568

•  Генератор кроссвордов  2 233

•  Головоломка Paletto  1 767

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

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 056

•  Игра HIP  1 281

•  Игра Go (Го)  1 228

•  Симулятор лифта  1 473

•  Программа укладки плитки  1 216

•  Генератор лабиринта  1 546

•  Проверка числового ввода  1 363

•  HEX View  1 496

•  Физический маятник  1 358

 
скрыть


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-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

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