Форум по Delphi программированию

 



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.06.2020, 21:34
VolodinAS VolodinAS вне форума
Прохожий
 
Регистрация: 16.07.2017
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию Как работает программа, находясь в трее?

Создаю программу, нечто вроде уведомления о том, что меня вызывают в другой кабинет. Чтобы не мешалась - добавил возможность сворачивания в трей.
Каждые 5 секунд программа отправляет запрос на сервер с проверкой статуса (вызвали/не вызвали). При развернутом состоянии - программа выходит на передний план и моргает сообщением, что меня вызывают.
А когда находится в трее, должно выбрасывать BalloonHint с сообщением о том, что меня вызывают, но этого не происходит.
Код:
Код:
JSON := TJsonObject.Parse(Response) as TJsonObject;
    if Assigned(JSON) then
    begin
      try
        //ShowMessage(JSON.ToJSON(False));
        if JSON['amount'].IntValue > 0 then
        begin
          GLOBAL_DOCTORS := JSON['data'].ArrayValue;
          Doctor := GLOBAL_DOCTORS.Items[DOCTOR_INDEX].ObjectValue;
          if Doctor['nurse_call'].IntValue = 1 then
          begin
            if not isTray then {isTray - переменная меняется в зависимости, свернуто ли приложение в трей или нет}
            begin
              SetForegroundWindow(Application.Handle);
              lbl_notify.Caption := lbl_notify_Call;
              tmr_blink.Enabled := True;
              frm.WindowState:=wsNormal;
              frm.FormStyle := fsStayOnTop;
            end else
            begin
              ti_main.BalloonTitle := 'ВАС ВЫЗЫВАЮТ В ПЕРЕВЯЗОЧНЫЙ!';
              ti_main.ShowBalloonHint;
            end;

          end;
  //        ShowMessage(Doctor.ToJSON(False));
        end else
        begin
          Logger(' Список доступных врачей пуст.');
          lbl_chooseDoctor.Caption := 'НЕТ ВРАЧЕЙ';
        end;
      finally
        JSON.Free;
      end;
    end else
    begin
      raise Exception.Create('Файл не содержит JSON-данные');
    end;

В чем может быть ошибка? Или приложение, когда находится в трее, работает как-то иначе?

UPD. Странно... В win10 нет balloonhint? Я так понимаю, его надо заменить пользовательским?
Вот код сворачивания в трей:
Код:
procedure Tfrm.MinimizeForm;
begin
  ti_main.Visible := True;
  ti_main.Hint := ('ОКДО - Уведомления' + #1310 + cb_chooseDoctor.Items[DOCTOR_INDEX]);
  Hide();
  WindowState := wsMinimized;
  isTray := True;
  ti_main.BalloonTitle := 'ВАС ВЫЗЫВАЮТ В ПЕРЕВЯЗОЧНЫЙ!';
  ti_main.ShowBalloonHint;
end;

Хинт не появляется...

Последний раз редактировалось VolodinAS, 15.06.2020 в 21:37.
Ответить с цитированием
  #2  
Старый 16.06.2020, 01:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В Win10 сообщение должно появляться в менеджере уведомлений.
Вообще, должно все работать.
Правда я давно перешел на самописный хинт, но все работает и со стандартным. Правдя я использую CoolTrayIcon (или как он там) компонент, причем достаточно старую версию. В проекте, который еще в разработке, все работает со стандартным компонентом, в законченном компоненте - с самописным хинтом (написан на основе JvclTrayForm, опять же, не помню как он точно там называется).
Ответить с цитированием
  #3  
Старый 16.06.2020, 18:10
VolodinAS VolodinAS вне форума
Прохожий
 
Регистрация: 16.07.2017
Сообщения: 20
Версия Delphi: Delphi XE3
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
В Win10 сообщение должно появляться в менеджере уведомлений.
Вообще, должно все работать.
Правда я давно перешел на самописный хинт, но все работает и со стандартным. Правдя я использую CoolTrayIcon (или как он там) компонент, причем достаточно старую версию. В проекте, который еще в разработке, все работает со стандартным компонентом, в законченном компоненте - с самописным хинтом (написан на основе JvclTrayForm, опять же, не помню как он точно там называется).

Весьма интересно получилось.
Код:
 ti_main.BalloonHint := 'Вас вызывают в перевязочный кабинет!';
              ti_main.BalloonTitle := 'ВНИМАНИЕ!';
              ti_main.ShowBalloonHint;

Я просто указал title, hint.. и оно заработало... Видимо, оно работает в связке, когда надо указывать оба параметра:
Ответить с цитированием
  #4  
Старый 18.06.2020, 18:38
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 7,595
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, дык, это я протормозил. Ведь BaloonHint и есть само сообщение, если оно пустое, то и показывать нечего... а титл, возможно, и не обязателен, будет использованно имя приложения (ну если в Win10 ничего не поменяли...)
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2020

ВКонтакте   Facebook   Twitter