program ControlsFont;
uses
  Windows, Messages,
  Controls in 'Controls.pas';
  {$R *.res}
var
  hMainWnd: HWND;
  hInst: Cardinal;
  mess: MSG;

//Функция обраного вызова для, выдываемая при перечислении окон (только
//для установки шрифта)
function EnumFunc(wnd: HWND; param: LPARAM):BOOL; stdcall;
begin
  SendMessage(wnd, WM_SETFONT, WPARAM(param), LPARAM(TRUE));
  EnumFunc := TRUE; //Продолжать перечисление
end;

//Функция обработки сообщений
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_SETFONT:
      //Устанока шрифта элементов управления
      EnumChildWindows(hWnd, Addr(EnumFunc), wParam);
  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 := hInst;
  wcx.hIcon := LoadIcon(0, IDI_ASTERISK);       //Стандартная иконка
  wcx.hIconSm := wcx.hIcon;
  wcx.hCursor := LoadCursor(0, IDC_ARROW);      //Стандартный курсор
  wcx.hbrBackground := COLOR_BTNFACE + 1;            //Стандартный для окна цвет
  wcx.style := 0;
  wcx.cbClsExtra := 0;
  wcx.cbWndExtra := 0;

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

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

var
  ctrl: HWND;
  font: HFONT;

begin
  hInst :=   GetModuleHandle(nil);

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

  //Инициализация модуля Controls для работы с главным окном
  Controls.hParentWnd := hMainWnd;
  Controls.hAppInst := hInst;

  //Шрифт для элементов управления
  font := CreateFont(16, 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET,
                      OUT_CHARACTER_PRECIS, CLIP_DEFAULT_PRECIS,
                      DEFAULT_QUALITY, DEFAULT_PITCH, 'Courier new');

  //Создание элементов управления
{  ctrl := CreateButton(20, 30, 70, 30, 1001, 'Кнопка 1');
  SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

  ctrl := CreateButton(100, 30, 70, 30, 1002,'Кнопка 2');
  SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

  ctrl := CreateCheck(210, 30, 180, 20, 2001, 'Флажок 1');
  SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

  ctrl := CreateCheck(210, 60, 180, 20, 2001, 'Флажок 2', True);
  SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

  ctrl := CreateOption(210, 100, 180, 20, 3001, 'Переключатель 1', True);
  SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

  ctrl := CreateOption(210, 130, 180, 20, 3002, 'Переключатель 2', False, True);
  SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);

  ctrl := CreateOption(210, 160, 180, 20, 3003, 'Переключатель 3', True);
  SendMessage(ctrl, WM_SETFONT, HFONT(font), 1);
 }
  CreateButton(20, 30, 70, 30, 1001, 'Кнопка 1');
  CreateButton(100, 30, 70, 30, 1002,'Кнопка 2');
  CreateCheck(210, 30, 180, 20, 2001, 'Флажок 1');
  CreateCheck(210, 60, 180, 20, 2001, 'Флажок 2', True);
  CreateOption(210, 100, 180, 20, 3001, 'Переключатель 1', True);
  CreateOption(210, 130, 180, 20, 3002, 'Переключатель 2', False, True);
  CreateOption(210, 160, 180, 20, 3003, 'Переключатель 3', True);

  //Установка шрифта элементов управления
  EnumChildWindows(hMainWnd, Addr(EnumFunc), font);

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



