Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Софт
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2015, 09:57   #101
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
PS Между прочим tag более глобален, если так можно сказать, чем переменная определенная в private класса. Его, этот самый tag, видно и можно изменить во всех местах, где доступен указатель на экземпляр класса, а та переменная фигвам
Да, согласен. Переделал.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.11.2015, 19:46   #102
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Чё-то нихрена у меня не получается закрыть прогу при закрытии Винды. Вот, прилагаю исходники заготовки в которой оставлены только функции управления открытием и закрытием формы. Всяко пробовал. Просидел почти неделю. Перерыл все поисковики. На дельфях инфы полно, но все предлагают воспользоваться обработчиком onQueryEndSession, которого в Buildere, хоть убейся, нету .
Вложения
Тип файла: rar TreyIcon.rar (300.1 Кб, 7 просмотров)
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 05.11.2015 в 19:49.
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.11.2015, 20:21   #103
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Дык и в делфи нет такого обработчика. А есть сообщение WM_QUERYENDSESSION винды, которое не зависит от языка, на котором прога написана
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.11.2015, 20:35   #104
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Дык и в делфи нет такого обработчика. А есть сообщение WM_QUERYENDSESSION винды, которое не зависит от языка, на котором прога написана
Так я пытался его получить таким методом:

Код:
        BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_USER,TMessage,MTIcon);// MyTrayIcon
        MESSAGE_HANDLER(WM_QUERYENDSESSION, TMessage, WMCLOSE);//WMCLOSE );
        END_MESSAGE_MAP(TComponent);

void __fastcall TForm1::WMCLOSE(TMessage& Msga)
{
  // WM_QUERYENDSESSION  = 0x0011
  if (Msga.WParam == WM_QUERYENDSESSION)//<= 0x0010) // WM_CLOSE
  {
    //ShowMessage("Exit App");
    DestroyWindow(Handle);
    if (Msga.WParam <= 0x0002) // WM_DESTROY
      PostQuitMessage(0);
  }
}
Если ставлю WM_CLOSE, прога просто закрывается как и при обычном нажатии на крестик. Но при этом, на закрытие винды не реагирует.
Если ставлю WM_QUERYENDSESSION, перестаёт вообще реагировать на крестик, но и на винду по прежнему не реагирует. Мозги уже кипят!
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.11.2015, 20:43   #105
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Так а вы читали про WM_QUERYENDSESSION, это просто запрос "что делать", и надо вернуть надо закрывать или нет.
come-on вне форума Ответить с цитированием
Старый 05.11.2015, 20:46   #106
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
Так а вы читали про WM_QUERYENDSESSION, это просто запрос "что делать", и надо вернуть надо закрывать или нет.
Ой, я за неделю столько всего перечитал и перепробовал, мама не горюй. Сайтов 100 пересмотрел. Нигде ничего толком нет. Даже по прямому запросу WM_QUERYENDSESSION, всякая чушь и флуд на форумах.
И потом, как выловить, что винда выдаёт при закрытии? Пробовал под отладчиком, так она билдер закрывает (он не в трее), а прога как висела, так и висит.
Даже нашел, где эти константы декларируются CBuilder6\Source\Vcl\messages.pas.
Пробовал и через компонент TrayIcon, всё бесполезно. Но делают же это как-то? Все проги висящие в трее, закрываются нормально. Не думал, что для такой распространённой задачки, будет так мало инфы.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 05.11.2015 в 20:58.
Smitt&Wesson вне форума Ответить с цитированием
Старый 05.11.2015, 22:58   #107
kvitaliy
Участник клуба
 
Регистрация: 17.05.2011
Сообщений: 1,660
По умолчанию

WM_QUERYENDSESSION надо ловить в CALLBACK функции
Код:
LRESULT CALLBACK WindowProc( 
  HWND hwnd,      // handle to window 
  UINT uMsg,      // message identifier 
  WPARAM wParam,  // not used 
  LPARAM lParam   // logoff option
);
если uMsg = WM_QUERYENDSESSION, то комп или выключается или перезагружается.

На Бейсике это выглядит так
Код:
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
  Protected result = #PB_ProcessPureBasicEvents
  Select uMsg
  Case #WM_QUERYENDSESSION
     If 1; упростил, но тут должен быть флаг нужна задержка закрытию приложения или нет
      result=#False ; говорим винде, что мы пока не можем завершить свою работу, пусть подождет
     Else
      result=#True ; или разрешаем перезагрузиться или выключиться...
     EndIf
 
    Case #WM_ENDSESSION, #WM_CLOSE
            ;ПроцедураСохранения параметров() ; Тут ваша процедура сохранения
            MessageRequester("Внимание!","Сохраняю все данные",0)
            
      If uMsg = #WM_ENDSESSION
        result = 0 ; дела сделаны, можно разрешить винде убить программу или закрыть её самому END.
      EndIf
  EndSelect
  ProcedureReturn result
EndProcedure

If OpenWindow(0, 0, 0, 300, 200, "Перезагрузка, сохранение настроек", #PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered)
  SetWindowCallback(@WinCallback())
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
      EndSelect
  ForEver
EndIf

Последний раз редактировалось kvitaliy; 05.11.2015 в 23:02.
kvitaliy вне форума Ответить с цитированием
Старый 06.11.2015, 11:10   #108
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Вот, нашел нЕчто похожее, на то, что мне нужно: http://www.firststeps.ru/mfc/winapi/r.php?56
И куда мне эту функцию пристроить в оконной Билдеровской проге?
Пробовал, даже в главный файл проекта засунуть, одни ошибки.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 06.11.2015, 11:48   #109
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

https://www.google.com/search?q=wm_q...%2B%2B+builder
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 06.11.2015, 12:58   #110
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А я всегда говорил: - Без пузыря не разобраться . Пошел. С горя взял пузырёк. Вмазал рюмочку, думаю - дай на форум загляну, а решение проблемы уже на блюдечке . Alex11223, спасибо!
Да, вот исходники заготовки, для работы с треем. Builder 6.

Сворачивается/разворачивается кликом на иконке.
Выводит сообщение при наведении мышью.
Разворачивается/закрывается из всплывающего меню.
При щелчке на "крестике", сворачивается в трей.
Закрывается, если закрывается Винда.
Вложения
Тип файла: rar TreyIcon.rar (420.7 Кб, 7 просмотров)
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 06.11.2015 в 13:07.
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа напоминалка C-Jay Общие вопросы C/C++ 1 23.12.2017 12:04
напоминалка по ACCESS fakel-v БД в Delphi 5 14.12.2011 05:52
напоминалка ГОСЕАН БД в Delphi 4 26.10.2011 08:08
напоминалка из таблицы PL.db ГОСЕАН БД в Delphi 0 14.01.2011 08:53
Напоминалка C++ Flippp C++ Builder 5 19.09.2009 18:42