Показать сообщение отдельно
  #9  
Старый 18.03.2013, 14:52
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Можно сделать намного легче. Прикрепил юнит, пользуйтесь на здоровье.
Код:
uses Tray;
...
var
  TaskBarCreated : Boolean;
const 
  WM_TRAY = WM_USER + 1;
...
function WindowProc(Wnd: HWND; Msg, wParam, lParam: Integer): Integer; stdcall;
begin
  Result := 0;

  case Msg of
    WM_SYSCOMMAND:
    begin
      case LoWord(wParam) of
        // При сворачивании программы
        SC_MINIMIZE:
        begin
          TaskBarCreated := TaskBarAddIcon(Wnd, ID_ICON, WC.hIcon, WM_TRAY, 'Hello!');
          ShowWindow(Wnd, SW_MINIMIZE);
          ShowWindow(Wnd, SW_HIDE);
        end;

        // При восстановлении окна
        SC_RESTORE:
        begin
          if TaskBarCreated then
          begin
            TaskBarDeleteIcon(Wnd, ID_ICON);
            TaskBarCreated := False;
            ShowWindow(Wnd, SW_SHOWNORMAL)
          end
        end;
      end
    end;

    WM_TRAY:
    begin
      case LoWord(lParam) of
        WM_LBUTTONDBLCLK:
        begin
          SetForegroundWindow(Wnd);
          SendMessage(Wnd, WM_SYSCOMMAND, SC_RESTORE, 0);
        end;
      end
    end;

    WM_DESTROY:
    begin
      if TaskBarCreated then
        TaskBarDeleteIcon(Wnd, ID_ICON);
      PostQuitMessage(0);
      Exit
    end
  end;
  Result := DefWindowProc(Wnd, Msg, wParam, lParam)
end;
В юните есть еще функция для вывода хинта с области уведомления.
Вложения
Тип файла: rar Tray.rar (1.2 Кбайт, 76 просмотров)
Ответить с цитированием