Create a form using Win API only (Views: 711)
Problem/Question/Abstract: How can I create a form without using the Forms unit? Answer: program InputAPI; uses Windows, Messages; var WinClass: TWndClassA; Inst, Handle, Button1, Button2: Integer; Msg: TMsg; hFont: Integer; { Custom WindowProc function } function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall; begin Result := DefWindowProc(hWnd, uMsg, wParam, lParam); { Checks for messages } if uMsg = WM_DESTROY then Halt; end; begin { Register Custom WndClass } Inst := hInstance; with WinClass do begin style := CS_CLASSDC or CS_PARENTDC; lpfnWndProc := @WindowProc; hInstance := Inst; hbrBackground := color_btnface + 1; lpszClassname := 'Test'; hCursor := LoadCursor(0, IDC_ARROW); end; RegisterClass(WinClass); { Create Main Window } Handle := CreateWindowEx(WS_EX_WINDOWEDGE or WS_EX_CONTROLPARENT, 'Test', 'TestWindow', WS_VISIBLE or WS_CAPTION or WS_SYSMENU, 300, 200, 300, 100, 0, 0, Inst, nil); { Create a button } Button1 := CreateWindow('Button', 'Ok', WS_VISIBLE or WS_CHILD or WS_TABSTOP or BS_PUSHLIKE or BS_TEXT, 50, 20, 75, 25, handle, 0, Inst, nil); Button2 := CreateWindow('Button', 'Cancel', WS_VISIBLE or WS_CHILD or WS_TABSTOP or BS_PUSHLIKE or BS_TEXT, 150, 20, 75, 25, handle, 0, Inst, nil); { Create Font Handle } hFont := CreateFont(-15, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif'); { Change fonts } if hFont <> 0 then begin SendMessage(Button1, WM_SETFONT, hFont, 0); SendMessage(Button2, WM_SETFONT, hFont, 0); end; SetFocus(Button1); UpdateWindow(Handle); { Message Loop } while (GetMessage(Msg, 0, 0, 0)) do if not IsDialogMessage(handle, msg) then begin TranslateMessage(msg); DispatchMessage(msg); end; end. |