{ Copyright (c) 1996 by Charlie Calvert Modifications by Florian Klaempfl Standard Windows API application written in Object Pascal. No VCL code included. This is all done on the Windows API level. } {$APPTYPE GUI} {$MODE DELPHI} program WinHello; uses Windows; const AppName = 'WinHello'; ID_FILE_NEW = 100; ID_FILE_OPEN = 101; ID_FILE_SAVEAS = 102; type TlBarBtn = TTBBUTTON; var hTool : hwnd; TlBarBtns : Array [0 .. 5] of TlBarBtn; tbab : TBADDBITMAP; function WindowProc(Window: HWnd; AMessage: UINT; WParam : WPARAM; LParam: LPARAM): LRESULT; stdcall; export; var dc : hdc; ps : paintstruct; r : rect; begin WindowProc := 0; case AMessage of wm_Destroy: begin PostQuitMessage(0); Exit; end; end; WindowProc := DefWindowProc(Window, AMessage, WParam, LParam); end; { Register the Window Class } function WinRegister: Boolean; var WindowClass: WndClass; begin WindowClass.Style := cs_hRedraw or cs_vRedraw; WindowClass.lpfnWndProc := WndProc(@WindowProc); WindowClass.cbClsExtra := 0; WindowClass.cbWndExtra := 0; WindowClass.hInstance := system.MainInstance; WindowClass.hIcon := LoadIcon(0, idi_Application); WindowClass.hCursor := LoadCursor(0, idc_Arrow); WindowClass.hbrBackground := GetStockObject(WHITE_BRUSH); WindowClass.lpszMenuName := nil; WindowClass.lpszClassName := AppName; Result := RegisterClass(WindowClass) <> 0; end; { Create the Window Class } function WinCreate: HWnd; var hWindow: HWnd; begin hWindow := CreateWindow(AppName, 'Hello world program', ws_OverlappedWindow, cw_UseDefault, cw_UseDefault, 300, 170, 0, 0, system.MainInstance, nil); hTool := CreateWindowEx(0, TOOLBARCLASSNAME, 0, WS_CHILD or WS_VISIBLE, 0, 0, 0, 0, hWindow, 0, system.maininstance, nil); SendMessage(hTool, TB_BUTTONSTRUCTSIZE, WPARAM(sizeof(TBBUTTON)), 0); tbab.hInst := HINST_COMMCTRL; tbab.nID := IDB_STD_SMALL_COLOR; SendMessage(hTool, TB_ADDBITMAP, 0, LPARAM(@tbab)); ZeroMemory(@TlBarBtns, sizeof(TlBarBtns)); TlBarBtns[0].iBitmap := STD_FILENEW; TlBarBtns[0].fsState := TBSTATE_ENABLED; TlBarBtns[0].fsStyle := TBSTYLE_BUTTON; TlBarBtns[0].idCommand := ID_FILE_NEW; TlBarBtns[1].iBitmap := STD_FILEOPEN; TlBarBtns[1].fsState := TBSTATE_ENABLED; TlBarBtns[1].fsStyle := TBSTYLE_BUTTON; TlBarBtns[1].idCommand := ID_FILE_OPEN; TlBarBtns[2].iBitmap := STD_FILESAVE; TlBarBtns[2].fsState := TBSTATE_ENABLED; TlBarBtns[2].fsStyle := TBSTYLE_BUTTON; TlBarBtns[2].idCommand := ID_FILE_SAVEAS; SendMessage(hTool, TB_ADDBUTTONS, sizeof(TlBarBtns) div sizeof(TBBUTTON), LPARAM(@TlBarBtns)); if hWindow <> 0 then begin ShowWindow(hWindow, CmdShow); ShowWindow(hWindow, SW_SHOW); UpdateWindow(hWindow); end; Result := hWindow; end; var AMessage: Msg; hWindow: HWnd; begin if not WinRegister then begin MessageBox(0, 'Register failed', nil, mb_Ok); Exit; end; hWindow := WinCreate; if longint(hWindow) = 0 then begin MessageBox(0, 'WinCreate failed', nil, mb_Ok); Exit; end; while GetMessage(@AMessage, 0, 0, 0) do begin TranslateMessage(AMessage); DispatchMessage(AMessage); end; Halt(AMessage.wParam); end.