Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрытие приложения, ....не чего не помогает 
V
    Опции темы
Sharkfire
Дата 17.9.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2



Привет! 
Дело вот в чём:
Хочу что бы моё приложении при нажатии на красный 
крестик формы не закрывалось а сворачивалось, или хайдилось (в зависимости от опции):
Код

if(Options.ShowInTray)
 {
 Action = caHide;
 return;
 }
else
{
 Action = caNone;
 Application->Minimize();
 return;
}

Однако всё это не срабатывает!!!
Пытался выловить сообщение WM_QUERYENDSESSION оно тоже почему то не приходит в приложение!
И ещё.. мне нужно знать.. или приложение закрывается пользователем... или Windows прекращает работу!
подскажите как всё это организовать

Это сообщение отредактировал(а) Sharkfire - 17.9.2007, 17:24
PM MAIL ICQ   Вверх
JackYF
Дата 17.9.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 4
Всего: 162



Sharkfire, копай в сторону TFrom::QueryUnload...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Mihhail
Дата 17.9.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 13.9.2007

Репутация: нет
Всего: 9



Встроеная функция для события OnClose:
Код

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
   //При вызове FormClose  Action равно еденице
   Action = 0;    //Если приравнять к нулю окно не закроется
}

Вот и всё: красный крест нажимается, окно не убивается!

Это сообщение отредактировал(а) Mihhail - 17.9.2007, 21:29
PM MAIL WWW   Вверх
Sharkfire
Дата 17.9.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2



Ок ребята!! с этим спасибо!!!

А как узанть что прогу заставляют отключаться???
к примеру... когда выключат винду!! 
Action = 0; с этой она "водвисает" строкой,
вылазит окошоко "Убить щас" 

Это сообщение отредактировал(а) Sharkfire - 17.9.2007, 21:59
PM MAIL ICQ   Вверх
RatHat
Дата 18.9.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вождь индейцев
*


Профиль
Группа: Участник
Сообщений: 234
Регистрация: 5.9.2005

Репутация: -1
Всего: 1



Sharkfire, вообще-то я бы посоветовал писать обработчик не на OnClose а на OnCloseQuery.
--------------------
Ma a kis' hi ve'ist i wan'i na e'ho ho wan'i
PM MAIL   Вверх
Sharkfire
Дата 18.9.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2



В OnCloseQuery нету Action, да меня всё устраивает и так.

ОСТАЛОСЬ ТОКА ОПРЕДЕЛИТЬ НЕ ПРИНУДИТЕЛЬНОЕ ЛИ ЭТО ОТКЛЮЧЕНИЕ
помогите  smile 
PM MAIL ICQ   Вверх
codelord
Дата 18.9.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



может как - нить так:

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  onClose.zip 12,64 Kb


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Sharkfire
Дата 20.9.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2



не хочет файл качать!!!
PM MAIL ICQ   Вверх
codelord
Дата 20.9.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 16
Всего: 39



Там все просто на форме лежит ApplicationEvents1
код всего юнита 
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
  int isOkClose = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  switch( isOkClose ) {
    case 1 : ShowMessage("Закрытие пользователем 1"); break;
    case 2 : ShowMessage("Закрытие Windows 2"); Abort(); break;
    case 0 : ShowMessage("хз видимо как - то иначе"); break;
  };
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
 if( Msg.wParam == 20 ) isOkClose = 1;
 else isOkClose = 2;
}
//---------------------------------------------------------------------------

файл на ifolder
http://ifolder.ru/3422582


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
Sharkfire
  Дата 28.9.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2



Спасбо большое за помощь!

Однако всё напрасно!!!

Я поставил в самом начале обробтчика события (OnClose)
вот эту строку:
Код

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
ShowMessage("Close "+IntToStr(Aborting));
................

при закрытии приложения любимыми способами, появляется 
этот месейдж, т.е всё ок!

Но если я просто выключаю Windows XP (Sp2) то оно не
вылазит, отсюда вывод, что не происходит события 
FormClose!!!

Пока я вручную не отключу программу, она весит а Windows
ждёт пока я это сделаю и не завершает работу!!!

На всякий случай сделал так:
Код

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{ CanClose=1;}

Однако всё бесполезно!!

У меня в программе нет не каких потоков, или процессов вложенных.
просто обработка UDP пакетов!

PM MAIL ICQ   Вверх
dumb
Дата 28.9.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 32
Всего: 158



примерно так:

Unit1.h:
Код

class TForm1 : public TForm
{
    ...
private: // User declarations
    int bShutDown;
    void __fastcall OnQueryEndSession( TWMQueryEndSession &Msg );
    void __fastcall OnEndSession( TWMEndSession &Msg );
protected:
    BEGIN_MESSAGE_MAP
      VCL_MESSAGE_HANDLER(WM_QUERYENDSESSION, TWMQueryEndSession, OnQueryEndSession)
      VCL_MESSAGE_HANDLER(WM_ENDSESSION, TWMEndSession, OnEndSession)
    END_MESSAGE_MAP(TForm)
};

Unit1.cpp:
Код

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  bShutDown = false;
}
//---------------------------------------------------------------------------

...

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  if ( bShutDown )
    Action = caFree;
  else
    Action = caHide;
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::OnQueryEndSession( TWMQueryEndSession &Msg )
{
  bShutDown = true;
  Msg.Result = true;
}
//---------------------------------------------------------------------------

void __fastcall TfrmMain::OnEndSession( TWMEndSession &Msg )
{
  bShutDown = true;
  Msg.Result = 0;
}
//---------------------------------------------------------------------------

PM MAIL   Вверх
Sharkfire
  Дата 28.9.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2



Такой:
Код

void __fastcall TForm1::OnEndSession( TWMEndSession &Msg )
{
  bShutDown = true;
  Msg.Result = true;
  Close();
}


и предложенный код:

Код

void __fastcall TfrmMain::OnEndSession( TWMEndSession &Msg )
{
  bShutDown = true;
  Msg.Result = 0;
}


Да!! Теперь прога отключается при шатдауне виндовса!!!

Но Шатдаун не происходит (( процесс закрытия замерает и ждёт, когда повторно завершаю работу - вот тогда всё ок!!!

Какие ещё будут предложения! Осталось чуть чуть  smile пожалуйста !!
PM MAIL ICQ   Вверх
Sharkfire
Дата 20.10.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 236
Регистрация: 30.11.2006
Где: Одесса

Репутация: 2
Всего: 2



Пересобрал проект в C++ Bulder 2006и проблема сама собой решилась!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.