Выбрать главу

  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

// ____________________________________________

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

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

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

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

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

constructor TLiteDialog.Create(AWndParent: THandle);

begin

  inherited;

  // Формируем параметры диалога

  CreateDialogParams(FDlgParams);

  // Создаем диалог

  with FDlgParams do

    CreateDialogParam(hInstance, Template, WndParent, WndCallback, 0);

end;

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

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

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

destructor TLiteDialog.Destroy;

begin

  // Уничтожаем диалог

  if IsWindow(FWndHandle) then DestroyWindow(FWndHandle);

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

  inherited;

end;

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

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

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

procedure TLiteDialog.CreateDialogParams(var DialogParams: TDialogParams);

begin

  DialogParams.WndParent := FWndParent;

  DialogParams.Template  := '';

end;

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

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

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

procedure TLiteDialog.DefaultHandler(var Msg);

begin

  // Возвращаемые значения по умолчанию

  with TMessage(Msg) do

    if Msg = WM_INITDIALOG then Result := 1

                           else Result := 0;

end;

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

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

// TLiteDialogBox

// _________________________________________________________

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

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

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

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

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

procedure TLiteDialogBox.CreateDialogParams(

var DialogParams: TDialogParams);

begin

  DialogParams.WndParent := FWndParent;

  DialogParams.Template  := '';

end;

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

// Активизация модального диалога

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

function TLiteDialogBox.ShowModaclass="underline" Integer;

begin

  // Формируем параметры диалога

  CreateDialogParams(FDlgParams);

  // Показываем диалог

  with FDlgParams do

    Result := DialogBoxParam(hInstance, Template, WndParent,

WndCallback, 0);

end;

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

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

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

procedure TLiteDialogBox.DefaultHandler(var Msg);

begin

  // Возвращаемые значения по умолчанию

  with TMessage(Msg) do

    if Msg = WM_INITDIALOG then Result := 1

                           else Result := 0;

end;

end.

5. Пример программы на основе библиотеки WinLite

В прилагаемом примере, построенном на основе разработанной автором библиотеки API-программирования WinLite, рассматриваются следующие проблемы:

• создание и показ окон;

• создание и показ диалогов;

• загрузка ресурсов;

• работа с трэем;

• активизация приложения по нажатию глобальной "горячей" клавиши;

• "прилипание" окна к границам рабочей области экрана;

• реализация графики OpenGL;

• субклассинг стандартных элементов управления;

• буферизация вывода в окно для устранения мерцания;

• создание дополнительного потока и передача сообщений между потоками;

• установка таймера.

KOL

KOL — Key Objects Library – это библиотека объектов для программирования в среде Delphi. Предоставляется бесплатно, с исходными текстами.