PostQuitMessage(0);
Exit;
end;
end;
WindowProc := DefWindowProc(Window, AMessage, WParam, LParam);
end;
{****** Регистрация класса окна *******}
function WinRegister: Boolean;
{------ Назначение: Заполняет структуру для создания класса окна }
{------ TWndClass = packed record ------}
{------ style: UINT; - стиль окна ------}
{------ lpfnWndProc: TFNWndProc; - ссылка на оконную функцию------}
{------ cbClsExtra: Integer; - расширенные атрибуты класса ------}
{------ cbWndExtra: Integer; - расширенные атрибуты окна ------}
{------ hInstance: HINST; - Уникальный ------}
{------ hIcon: HICON; - ссылка на Icon ------}
{------ hCursor: HCURSOR; - ссылка на курсор ------}
{------ hbrBackground: HBRUSH; - кисть ------}
{------ lpszMenuName: PAnsiChar; - меню ------}
{------ lpszClassName: PAnsiChar; - имя класса(должно быть уникальным)}
{------ end; ------}
var
WndClass: TWndClass;
begin
WndClass.Style := cs_hRedraw or cs_vRedraw;
WndClass.lpfnWndProc := @WindowProc;
WndClass.cbClsExtra := 0;
WndClass.cbWndExtra := 0;
WndClass.hInstance := HInstance;
WndClass.hIcon := LoadIcon(0, idi_Application);
WndClass.hCursor := LoadCursor(0, idc_Arrow);
{ Цвет кисти устанавливается как цвет окна по умолчанию в Windows }
WndClass.hbrBackground := HBrush(Color_Window);
WndClass.lpszMenuName := nil;
WndClass.lpszClassName := AppName;
Result := RegisterClass(WndClass) <> 0;
end;
{ Создание класса окна }
function WinCreate: HWnd;
var
hWindow: HWnd;
begin
hWindow := CreateWindow(AppName, 'Hello, Windows!!',
ws_OverlappedWindow, cw_UseDefault, cw_UseDefault,
cw_UseDefault, cw_UseDefault, 0, 0, HInstance, nil);
if hWindow <> 0 then begin
{ Изображение окна }
ShowWindow(hWindow, CmdShow);
{ Перерисовка внутри окна }
UpdateWindow(hWindow);
end;
Result := hWindow;
end;
var
AMessage: TMsg;
hWindow: HWnd;
begin
{ Попытка зарегистрировать окно}
if not WinRegister then begin
MessageBox(0, 'Регистрация прервана', nil, mb_Ok);
Exit;
end;
{ Попытка создать окно}
hWindow := WinCreate;
if hWindow = 0 then begin
MessageBox(0, 'Не удалось создать окно', nil, mb_Ok);
Exit;
end;
{ Цикл обработки сообщений }
while GetMessage(AMessage, 0, 0, 0) do begin
TranslateMessage(AMessage);
DispatchMessage(AMessage);
end;
Halt(AMessage.wParam);
end.
program Windowk;
uses
Windows, Messages ,Vclcom;
const
AppName = 'First';
function WindowProc(Window: HWnd; AMessage, WParam,
LParam: Longint): Longint; stdcall; export;
procedure KeyMouse_OnChar(hWindow:HWnd; var Msg:TWMChar);
var
S:string;
DC:HDC;
begin
DC:=GetDC(hWindow);
S:='klav';
{S:= Format ('WM_CHAR==Ch = %S cRepeat =%d Scan =%d' ,
[(Char(msg.CharCode),msg.cRepeat,Msg.ScanCode]) ;}
SetBkColor(DC,GetSysColor(COLOR_3DFACE));
TextOut(DC,20,20,PChar(S),Length(S));
ReleaseDC(hWindow,DC);
end;
procedure KeyMouse_OnDestroy(hWindow:HWnd; var Msg:TWMDestroy);
begin
PostQuitMessage(0);
end;
var
AMsg: TMessage;
begin
AMsg.Msg:=AMessage;
AMsg.WParam:=WParam;
AMsg.LParam:=LParam;
AMsg.Result := 0;
case AMessage of
wm_Char: KeyMouse_OnChar(Window, TWMChar(AMsg));
wm_Destroy: KeyMouse_OnDestroy(Window, TWMDestroy(AMsg));
else
WindowProc:=DefWindowProc(Window,AMessage, WParam,LParam);
Exit;
end;
Result:=AMsg.Result ;
end;
function WinRegister: Boolean;
var
WndClass: TWndClass;
begin
WndClass.Style := cs_hRedraw or cs_vRedraw;
WndClass.lpfnWndProc := @WindowProc;
WndClass.cbClsExtra := 0;
WndClass.cbWndExtra := 0;
WndClass.hInstance := HInstance;
WndClass.hIcon := LoadIcon(0, idi_Application);
WndClass.hCursor := LoadCursor(0, idc_Arrow);
WndClass.hbrBackground := HBrush(Color_Window);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.