Показать сообщение отдельно
  #14  
Старый 13.11.2015, 11:39
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию Код проверен на работоспособность в Delphi 2010

Код:
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.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием