program Window;
uses
  Windows, Messages;
{$R *.res}
var
  hMainWnd: HWND;
  mess: MSG;

//Функция обработки сообщений
function WindowFunc(hWnd:HWND; msg:UINT;
                    wParam:WPARAM; lParam:LPARAM):LRESULT; stdcall;
var
  ps: PAINTSTRUCT;
begin
  case msg of
    WM_CLOSE:
      if (hWnd = hMainWnd) then
        PostQuitMessage(0);   //При закрытии окна - выход
    WM_PAINT:
    begin
      //Перерисовка содержимого окна
      BeginPaint(hWnd, ps);
      TextOut(ps.hdc, 10, 10, 'Текст в окне', 12);
      EndPaint(hWnd, ps);
    end;
  else
  begin
    //Обработка по умолчанию
    WindowFunc := DefWindowProc(hWnd, msg, wParam, lParam);
    Exit;
  end;
  end;

  WindowFunc := S_OK; //Сообщение обработано
end;

function RegisterWindow():Boolean;
var
  wcx: WNDCLASSEX;
begin
  ZeroMemory(Addr(wcx), SizeOf(wcx));
  //Формирование информации о классе окна
  wcx.cbSize := SizeOf(wcx);
  wcx.hInstance := GetModuleHandle(nil);
  wcx.hIcon := LoadIcon(0, IDI_ASTERISK);           //Стандартная иконка
  wcx.hIconSm := wcx.hIcon;
  wcx.hCursor := LoadCursor(0, IDC_ARROW);          //Стандартный курсор
  wcx.hbrBackground := GetStockObject(WHITE_BRUSH); //Серый цвет фона
  wcx.style := 0;

  //..самые важные параметры
  wcx.lpszClassName := 'MyWindowClass'; //Название класса
  wcx.lpfnWndProc := Addr(WindowFunc);  //Адрес функции обработки сообщений

  //Регистрация класса окна
  RegisterWindow := RegisterClassEx(wcx) <> 0;
end;

begin
  //Создание окна
  if not RegisterWindow() then Exit;
  hMainWnd := CreateWindow(
    'MyWindowClass', //Имя класса окна
    'Главное окно',  //Заголовок окна
    WS_VISIBLE or WS_OVERLAPPEDWINDOW,//Стиль окна (перекрывающееся,видимое)
    CW_USEDEFAULT,   //Координата X по умолчанию
    CW_USEDEFAULT,   //Координата Y по умолчанию
    CW_USEDEFAULT,   //Ширина по умолчанию
    CW_USEDEFAULT,   //Высота по умолчанию
    HWND(nil),        //Нет родительского окна
    HMENU(nil),       //Нет меню
    GetModuleHandle(nil),
    nil);

  //Запуск цикла обработки сообщений
  while (Longint(GetMessage(mess, HWND(nil), 0, 0)) <> 0)
  do begin
    TranslateMessage(mess);
    DispatchMessage(mess);
  end;
end.


