Главная » Delphi » Win API » Hello World!

Hello World!

17:40
program HelloWorld;
 
 
uses
  Windows,
  Messages;
 
// Как видите, никаких Forms здесь нет.
 
// Оконная функция - обрабатывает все поступающие окну сообщения.
function WndFunc(Wnd, Msg: DWord; wParam, lParam: integer): integer; stdcall;
var
 DC: HDC;
 PaintStruct: TPaintStruct;
 Rect: TRect;
begin
 case Msg of
   WM_Paint:
     begin                                  // Если поступило сообщение WM_Paint,
       DC := BeginPaint(Wnd, PaintStruct)// то подготовить отрисовку,
       GetClientRect(Wnd, Rect);            // получить клиентскую область и в ее центре отрисовать текст,
       DrawText(DC, 'Hello, World!', -1, Rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
       EndPaint(Wnd, PaintStruct);          // затем сообщить системе, что рисование завершено
       Result := 0                          // и что сообщение WM_Paint обработано.
     end;
   WM_Destroy:
     begin                 // Если поступило сообщение WM_Destroy,
       PostQuitMessage(0); // то послать в очередь потока сообщение WM_Quit
       Result := 0         // и сообщить системе, что WM_Destroy обработано.
     end
   else Result := DefWindowProc(Wnd, Msg, wParam, lParam) // Для других сообщений вызвать стандартную оконную функцию.
 end
end { of WndFunc };
 
const
AppName = 'Project1';
 
var
Msg: TMsg;
WndClass: TWndClassEx;
 
begin { main }
 
// Заполняем запись WndClass и регистрируем в системе класс окна
with WndClass do
begin
  cbSize := SizeOf(WndClass);
  Style := CS_HRedraw or CS_VRedraw;
  lpfnWndProc := @WndFunc;
  hIcon := LoadIcon(0, IDI_Application);
  hCursor := LoadCursor(0, IDC_Arrow);
  hbrBackground := hBrush(Color_Window);
  lpszMenuName := Nil;
  lpszClassName := AppName;
  hIconSm := hIcon
end;
WndClass.hInstance := hInstance;
RegisterClassEx(WndClass);
 
// Создаем и показываем окно заданного класса
CreateWindowEx(0, AppName, AppName, WS_OverlappedWindow or WS_Visible,
  CW_UseDefault, CW_UseDefault, CW_UseDefault, CW_UseDefault, 0, 0, hInstance, Nil);
 
// Цикл обработки сообщений (работает, пока не поступит сообщение WM_Quit).
while GetMessage(Msg, 0, 0, 0) do // Выбрать сообщение из очереди потока
begin                             // и, если это сообщение не WM_Quit, то
  TranslateMessage(Msg);          // преобразовать сообщение клавиатуры
  DispatchMessage(Msg)            // и вызвать функцию окна Msg.hWnd
end;
 
// Передаем системе код завершения программы
Halt(Msg.wParam)
end.