Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Создание формы и кнопки на чистом API

Delphi , Синтаксис , API реализация

Создание формы и кнопки на чистом API


Разговаривают в троллейбусе два студента-хаккера:
- У меня вчера вечером мать сдохла. Я с ней всю ночь протрахался, а она так и не ожила...
Старушка по соседству:
- ВО ИЗВЕРГИ!!!


program Plain2;

uses
  Windows,
  Messages;

const
  id_Button = 100;

function PlainWinProc (hWnd: THandle; nMsg: UINT;
  wParam, lParam: Cardinal): Cardinal; export; stdcall;
var
  Rect: TRect;
begin
  Result := 0;
  case nMsg of
    wm_Create:
      // create button
      CreateWindowEx (0, // extended styles
        'BUTTON', // predefined class
        '&Click here', // caption
        ws_Child or ws_Visible or ws_Border
          or bs_PushButton, // styles
        0, 0, // position: see wm_Size
        200, 80, // size
        hwnd, // parent
        id_Button, // identifier (not a menu handle)
        hInstance, // application id
        nil); // init info pointer
    wm_Size:
    begin
      // get the size of the client window
      GetClientRect (hWnd, Rect);
      // move the button window
      SetWindowPos (
        GetDlgItem (hWnd, id_Button), // button handle
        0, // zOrder
        Rect.Right div 2 - 100,
        Rect.Bottom div 2 - 40,
        0, 0, // new size
        swp_NoZOrder or swp_NoSize);
    end;
    wm_Command:
      // if it comes from the button
      if LoWord (wParam) = id_Button then
        // if it is a click
        if HiWord (wParam) = bn_Clicked then
          MessageBox (hWnd, 'Button Clicked',
            'Plain API 2', MB_OK);
    wm_Destroy:
      PostQuitMessage (0);
    else
      Result := DefWindowProc (hWnd, nMsg, wParam, lParam);
  end;
end;

procedure WinMain;
var
  hWnd: THandle;
  Msg: TMsg;
  WndClassEx: TWndClassEx;
begin
  // initialize the window class structure
  WndClassEx.cbSize := sizeOf (TWndClassEx);
  WndClassEx.lpszClassName := 'PlainWindow';
  WndClassEx.style := cs_VRedraw or cs_HRedraw;
  WndClassEx.hInstance := HInstance;
  WndClassEx.lpfnWndProc := @PlainWinProc;
  WndClassEx.cbClsExtra := 0;
  WndClassEx.cbWndExtra := 0;
  WndClassEx.hIcon := LoadIcon (hInstance,
    MakeIntResource ('MAINICON'));
  WndClassEx.hIconSm  := LoadIcon (hInstance,
    MakeIntResource ('MAINICON'));
  WndClassEx.hCursor := LoadCursor (0, idc_Arrow);;
  WndClassEx.hbrBackground := GetStockObject (white_Brush);
  WndClassEx.lpszMenuName := nil;
  // register the class
  if RegisterClassEx (WndClassEx) = 0 then
    MessageBox (0, 'Invalid class registration',
      'Plain API', MB_OK)
  else
  begin
    hWnd := CreateWindowEx (
      ws_Ex_OverlappedWindow, // extended styles
      WndClassEx.lpszClassName, // class name
      'Plain API Demo', // title
      ws_OverlappedWindow, // styles
      cw_UseDefault, 0, // position
      cw_UseDefault, 0, // size
      0, // parent window
      0, // menu
      HInstance, // instance handle
      nil); // initial parameters
    if hWnd = 0 then
      MessageBox (0, 'Window not created',
        'Plain API', MB_OK)
    else
    begin
      ShowWindow (hWnd, sw_ShowNormal);
      while GetMessage (Msg, 0, 0, 0) do
      begin
        TranslateMessage (Msg);
        DispatchMessage (Msg);
      end;
    end;
  end;
end;

begin
  WinMain;
end.

Загрузить исходный код проекта

Программа на Delphi, созданная с использованием Plain API (Windows API), которая создает простой окно с кнопкой. Вот разбивка кода:

PlainWinProc Это функция обработки оконных сообщений, которая проверяет различные сообщения Windows, такие как wm_Create, wm_Size и wm_Command. Для каждого сообщения она выполняет конкретные действия, такие как создание кнопки или обрабатывает клик по кнопке.

  • В wm_Create она создает кнопку с надписью "Click here" с помощью функции CreateWindowEx.
  • В wm_Size она получает размер клиентского окна и перемещает кнопку в конкретное положение (центрально горизонтально и вертикально).
  • В wm_Command она проверяет, если сообщение пришло от кнопки. Если так, она выводит сообщение с текстом "Button Clicked".

WinMain Это основной входной точкой программы. Она инициализирует структуру класса окна, регистрирует класс, создает окно с помощью функции CreateWindowEx и отображает окно.

  • Она определяет переменную TWndClassEx WndClassEx, чтобы хранить информацию о классе окна.
  • Она настраивает различные свойства, такие как заголовок окна, стиль, иконку, курсор и фоновую кисть.
  • Она регистрирует класс окна с помощью функции RegisterClassEx.
  • Если регистрация неудачна, она выводит сообщение об ошибке.
  • Она создает окно с указанным именем класса, заголовком и размером с помощью функции CreateWindowEx.
  • Если создание неудачно, она выводит еще одно сообщение об ошибке.
  • Наконец, она отображает окно с помощью функции ShowWindow.

Замечания

  • Эта программа использует синтаксис Delphi и библиотеки (Windows и Messages).
  • Plain API используется для создания простого окна с кнопкой.
  • Код написан в старом стиле, с длинными именами переменных и явным кастингом типов.
  • Нет комментариев или документации, чтобы объяснить цель каждого части кода.

В целом, это программа демонстрирует, как создать базовое окно с кнопкой с помощью Plain API.

Создание формы и кнопки на чистом API: в статье описано создание оконной приложения с использованием функций Windows API, а также создание кнопки и обработка события ее клика.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: API реализация ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 10:36:49/0.005608081817627/1