Виртуальная библиотека Delphi

Тут можно читать онлайн Виртуальная библиотека Delphi - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Виртуальная библиотека Delphi
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Виртуальная библиотека Delphi краткое содержание

Виртуальная библиотека Delphi - описание и краткое содержание, автор Неизвестный Автор, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Виртуальная библиотека Delphi - читать онлайн бесплатно полную версию (весь текст целиком)

Виртуальная библиотека Delphi - читать книгу онлайн бесплатно, автор Неизвестный Автор
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

////////////////////////////////////////////////////////////////////////////////

// TLiteFrame

// ____________________________________________________________

// Базовый класс для объектов 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;

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

WindowMsg.Msg := Msg;

WindowMsg.WParam := WParam;

WindowMsg.LParam := LParam;

// Обрабатываем его

WindowProcedure(WindowMsg);

// Возвращаем результат обратно системе

Result := WindowMsg.Result;

end;

////////////////////////////////////////////////////////////////////////////////

// Виртуальная функция для обработки оконных сообщений

////////////////////////////////////////////////////////////////////////////////

procedure TLiteFrame.WindowProcedure(var Msg: TMessage);

begin

// Распределяем сообщения по обработчикам

Dispatch(Msg);

end;

Реализация оконного класса TLiteWindow

////////////////////////////////////////////////////////////////////////////////

// TLiteWindow

// _______________________________________________

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

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

constructor TLiteWindow.Create(AWndParent: THandle);

begin

inherited;

// Формируем параметры окна

CreateWindowParams(FWndParams);

// Регистрируем класс окна

RegisterClass(FWndParams.WindowClass);

// Создаем окно

with FWndParams do

CreateWindowEx(ExStyle, WindowClass.lpszClassName, Caption,

Style, X, Y, Width, Height,

WndParent, WndMenu, hInstance, Param

);

end;

////////////////////////////////////////////////////////////////////////////////

// Конструктор элемента с субклассингом

////////////////////////////////////////////////////////////////////////////////

constructor TLiteWindow.CreateSubclassed(AWnd: THandle);

begin

inherited Create(GetParent(AWnd));

// Сохраняем оконную функцию

FWndSubclass := Pointer(GetWindowLong(AWnd, GWL_WNDPROC));

// Сохраняем дескриптор окна

FWndHandle := AWnd;

// Устанавливаем свою оконную функцию

SetWindowLong(FWndHandle, GWL_WNDPROC, DWord(WndCallback));

end;

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

destructor TLiteWindow.Destroy;

begin

// Наш объект - объект субклассиннга ?

if FWndSubclass = nil then

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Неизвестный Автор читать все книги автора по порядку

Неизвестный Автор - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Виртуальная библиотека Delphi отзывы


Отзывы читателей о книге Виртуальная библиотека Delphi, автор: Неизвестный Автор. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x