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

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

>  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

>  begin

>    // Уничтожаем класс окна

>    UnregisterClass(FWndParams.WindowClass.lpszClassName, hInstance);

>    // Уничтожаем окно

>    if IsWindow(FWndHandle) then DestroyWindow(FWndHandle);

>  end

>  else

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

>    SetWindowLong(FWndHandle, GWL_WNDPROC, DWord(FWndSubclass));

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

>  inherited;

>end;


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

>// Формирование параметров окна по умолчанию

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

>procedure TLiteWindow.CreateWindowParams(

>var WindowParams: TWindowParams);

>var

>  WndClassName : string;

>begin

>  // Формируем имя класса

>  Str(DWord(Self), WndClassName);

>  WndClassName := ClassName+':'+WndClassName;

>  // Заполняем информацию о классе окна

>  with FWndParams.WindowClass do

>  begin

>    style         := CS_DBLCLKS;

>    lpfnWndProc   := WndCallback;

>    cbClsExtra    := 0;

>    cbWndExtra    := 0;

>    lpszClassName := PChar(WndClassName);

>    hInstance     := hInstance;

>    hIcon         := LoadIcon(0, IDI_APPLICATION);

>    hCursor       := LoadCursor(0, IDC_ARROW);

>    hbrBackground := COLOR_BTNFACE + 1;

>    lpszMenuName  := '';

>  end;

>  // Заполняем информацию об окне

>  with FWndParams do

>  begin

>    WndParent := FWndParent;

>    Caption := 'Lite Window';

>    Style   := WS_OVERLAPPEDWINDOW or WS_VISIBLE;

>    ExStyle := 0;

>    X       := Integer(CW_USEDEFAULT);

>    Y       := Integer(CW_USEDEFAULT);

>    Width   := Integer(CW_USEDEFAULT);

>    Height  := Integer(CW_USEDEFAULT);

>    WndMenu := 0;

>    Param   := nil;

>  end;

>end;


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

>// TLiteWindow

>// ______________________________________________

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

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


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

>// Обработчик сообщений по умолчанию

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

>procedure TLiteWindow.DefaultHandler(var Msg);

>begin

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

>  if FWndSubclass = nil then

>    // Вызываем системную функцию обработки сообщений

>    with TMessage(Msg) do

>      Result := DefWindowProc(FWndHandle, Msg, WParam, LParam)

>  else

>    // Вызываем старую оконную функцию обработки сообщений

>    with TMessage(Msg) do

>      Result := CallWindowProc(FWndSubclass, FWndHandle, Msg,

>WParam, LParam);

>end;

Реализация диалогового класса TLiteDialog

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

>// TLiteDialog

>// ____________________________________________

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

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


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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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