Виртуальная библиотека Delphi - [35]

Шрифт
Интервал

>// Базовый класс для объектов TLiteWindow, TLiteDialog, TLiteDialogBox

>////////////////////////////////////////////////////////////////////////////////

>type

>  TLiteFrame = class(TObject)

>  private

>    FWndCallback: Pointer;

>    FWndHandle  : THandle;

>    FWndParent  : THandle;

>    function    WindowCallback(hWnd: HWnd; Msg,

>WParam, LParam:Longint):Longint; stdcall;

>  protected

>    procedure   WindowProcedure(var Msg: TMessage); virtual;

>  public

>    property    WndHandle: THandle read FWndHandle;

>    property    WndCallback: Pointer read FWndCallback;

>  public

>    constructor Create(AWndParent: THandle); virtual;

>    destructor  Destroy; override;

>  end;

Декларация оконного класса TLiteWindow

Создание уникального класса окна и создание окна. Возможность субклассинга стороннего окна.

>////////////////////////////////////////////////////////////////////////////////

>// TLiteWindow

>// _______________________________________________

>// Оконный класс

>////////////////////////////////////////////////////////////////////////////////

>type

>  TLiteWindow = class(TLiteFrame)

>  private

>    FWndParams  : TWindowParams;

>    FWndSubclass: Pointer;

>  protected

>    procedure   CreateWindowParams(

>var WindowParams: TWindowParams); virtual;

>  public

>    procedure   DefaultHandler(var Msg); override;

>    constructor Create(AWndParent: THandle); override;

>    constructor CreateSubclassed(AWnd: THandle); virtual;

>    destructor  Destroy; override;

>  end;

Декларация диалогового класса TLiteDialog

Загрузка шаблона диалога и создание диалога.

>////////////////////////////////////////////////////////////////////////////////

>// TLiteDialog

>// _______________________________________________

>// Диалоговый класс

>////////////////////////////////////////////////////////////////////////////////

>type

>  TLiteDialog = class(TLiteFrame)

>  private

>    FDlgParams  : TDialogParams;

>  protected

>    procedure   CreateDialogParams(var DialogParams: TDialogParams); virtual;

>  public

>    procedure   DefaultHandler(var Msg); override;

>    constructor Create(AWndParent: THandle); override;

>    destructor  Destroy; override;

>  end;

Декларация модального диалогового класса TLiteDialogBox

Загрузка шаблона диалога и создание диалога. Модальный показ диалога.

>////////////////////////////////////////////////////////////////////////////////

>// TLiteDialogBox

>// ______________________________________________

>// Модальный диалоговый класс

>////////////////////////////////////////////////////////////////////////////////

>type

>  TLiteDialogBox = class(TLiteFrame)

>  private

>    FDlgParams  : TDialogParams;

>  protected

>    procedure   CreateDialogParams(var DialogParams: TDialogParams); virtual;

>  public

>    procedure   DefaultHandler(var Msg); override;

>  public

>    function    ShowModal: Integer;

>  end;

Реализация базового класса TLiteFrame

>implementation


>////////////////////////////////////////////////////////////////////////////////

>// TLiteFrame

>// ___________________________________________________

>// Инициализация / финализация

>////////////////////////////////////////////////////////////////////////////////


>////////////////////////////////////////////////////////////////////////////////

>// Конструктор

>////////////////////////////////////////////////////////////////////////////////

>constructor TLiteFrame.Create(AWndParent: THandle);

>begin

>  inherited Create;

>  // Запоминаем дескриптор родительского окна

>  FWndParent := AWndParent;

>  // Создаем место под блок обратного вызова

>  FWndCallback := VirtualAlloc(nil,12,MEM_RESERVE or

>MEM_COMMIT,PAGE_EXECUTE_READWRITE);

>  // Формируем блок обратного вызова

>  asm

>    mov  EAX, Self

>    mov  ECX, [EAX].TLiteFrame.FWndCallback    

>    mov  word  ptr [ECX+0], $6858               // pop  EAX

>    mov  dword ptr [ECX+2], EAX                 // push _Self_

>    mov  word  ptr [ECX+6], $E950               // push EAX

>    mov  EAX, OFFSET(TLiteFrame.WindowCallback)

>    sub  EAX, ECX

>    sub  EAX, 12

>    mov  dword ptr [ECX+8], EAX                 // jmp  TLiteFrame.WindowCallback

>  end;

>end;


>////////////////////////////////////////////////////////////////////////////////

>// Деструктор

>////////////////////////////////////////////////////////////////////////////////

>destructor TLiteFrame.Destroy;

>begin

>  // Уничтожаем структуру блока обратного вызова

>  VirtualFree(FWndCallback, 0, MEM_RELEASE);

>  // Уничтожение по умолчанию

>  inherited;

>end;


>////////////////////////////////////////////////////////////////////////////////

>// TLiteFrame

>// ___________________________________________________________

>// Функции обработки сообщений

>////////////////////////////////////////////////////////////////////////////////


>////////////////////////////////////////////////////////////////////////////////

>// Функция обратного вызова для получения оконных сообщений

>////////////////////////////////////////////////////////////////////////////////

>function TLiteFrame.WindowCallback(hWnd: HWnd;

>Msg, WParam, LParam: Integer): Longint;

>var

>  WindowMsg : TMessage;

>begin

>  // Запоминаем дескриптор окна, если это первый вызов

>// оконной процедуры

>  if FWndHandle = 0 then FWndHandle := hWnd;

>  // Формируем сообщение


Еще от автора Неизвестный Автор
Галчонок

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


Призраки ночи

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


Закат  вечности

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


mmmavro.org | День 131, Победа

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


Песнь о Нибелунгах

…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.


mmmavro.org | День 132, Поэт

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


Рекомендуем почитать
Графика DirectX в Delphi

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


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.