program Project1;
uses
ActiveX, ShlObj, Windows, Messages;
var
WndClass: TWndClass;
AMsg: TMsg;
AWnd: HWND;
WMTaskbarButtonCreated: Cardinal;
edt: HWND;
tbk: ITaskbarList4;
procedure InitTaskbarList(hwnd: HWND);
var
tb: array [0..1] of TThumbButton;
begin
CoCreateInstance(CLSID_TaskbarList, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, ITaskbarList4, tbk);
tbk.HrInit;
tbk.SetProgressState(hwnd, TBPF_INDETERMINATE);
tb[0].dwMask:=THB_ICON or THB_TOOLTIP or THB_FLAGS;
tb[0].iId:=1;
tb[0].iBitmap:=0;
tb[0].hIcon:=LoadIcon(0, IDI_INFORMATION);
tb[0].szTip:='Info';
tb[0].dwFlags:=THBF_NOBACKGROUND;
tb[1].dwMask:=THB_ICON or THB_TOOLTIP or THB_FLAGS;
tb[1].iId:=2;
tb[1].iBitmap:=0;
tb[1].hIcon:=LoadIcon(0, IDI_ERROR);
tb[1].szTip:='Close';
tb[1].dwFlags:=THBF_NOBACKGROUND;
tbk.ThumbBarAddButtons(hwnd, 2, @tb[0]);
end;
function WindowProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
buf: array [0..$ff] of Char;
begin
case uMsg of
WM_CREATE: WMTaskbarButtonCreated:=RegisterWindowMessage('TaskbarButtonCreated');
WM_COMMAND: begin
if (HIWORD(wParam)=BN_CLICKED) and (LOWORD(wParam)=2015) then
begin
GetWindowText(edt, @buf[0], $100);
MessageBox(hwnd, @buf, WndClass.lpszClassName, MB_OK);
end;
if (HIWORD(wParam)=THBN_CLICKED) and (LOWORD(wParam)=2) then PostQuitMessage(0);
if (HIWORD(wParam)=THBN_CLICKED) and (LOWORD(wParam)=1) then MessageBox(hwnd, 'Hello!', WndClass.lpszClassName, MB_OK);
end;
WM_CLOSE: PostQuitMessage(0);
end;
if uMsg=WMTaskbarButtonCreated then InitTaskbarList(hwnd);
Result:=DefWindowProc(hwnd, uMsg, wParam, lParam);
end;
begin
OleInitialize(nil);
ZeroMemory(@WndClass, SizeOf(TWndClass));
WndClass.style:=CS_VREDRAW or CS_HREDRAW;
WndClass.lpfnWndProc:=@WindowProc;
WndClass.hInstance:=HInstance;
WndClass.hIcon:=LoadIcon(0, IDI_APPLICATION);
WndClass.hCursor:=LoadCursor(0, IDC_ARROW);
WndClass.hbrBackground:=COLOR_BTNFACE+1;
WndClass.lpszClassName:='TMyClassName';
RegisterClass(WndClass);
AWnd:=CreateWindow(WndClass.lpszClassName, 'MyClassName',
WS_OVERLAPPEDWINDOW or WS_VISIBLE,
Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), 300, 200,
0, 0, HInstance, nil);
CreateWindow('STATIC', 'Static:',
WS_CHILD or WS_VISIBLE,
10, 10, 100, 25,
AWnd, 0, HInstance, nil);
edt:=CreateWindowEx(WS_EX_CLIENTEDGE, 'EDIT',
'Edit',
WS_CHILD or WS_VISIBLE or ES_AUTOHSCROLL,
10, 45, 100, 25,
AWnd, 0, HInstance, nil);
CreateWindow('BUTTON', 'Button',
WS_CHILD or WS_VISIBLE,
10, 80, 100, 25,
AWnd, 2015, HInstance, nil);
while GetMessage(AMsg, 0, 0, 0) do
begin
TranslateMessage(AMsg);
DispatchMessage(AMsg);
end;
DestroyWindow(AWnd);
UnregisterClass(WndClass.lpszClassName, HInstance);
tbk:=nil;
OleUninitialize;
end.