C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Работа с формой.
Guest
Отправлено: 28.01.2004, 15:12


Не зарегистрирован







Привет!

Подскажите как сделать так, чтобы при нажатии на крестик (Х) в форме, она не закрывалась, а только сворачивалась (пряталась)
Если можно с примером кода.

Заранее благодарен
Admin
Отправлено: 28.01.2004, 18:20


Владимир

Группа: Администратор
Сообщений: 1190



В событии формы onClose
CODE

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
       Action = caNone;
       Form1->WindowState = wsMinimized;
}


или в событии формы onCloseQuery

CODE

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
    Form1->WindowState = wsMinimized;
    CanClose = false;
}
Guest
Отправлено: 28.01.2004, 19:00


Не зарегистрирован







Спасибо.
А знаете ли вы как применить остальные значения Action ???
В хэлпе сказано:

caNone The form is not allowed to close, so nothing happens.
caHide The form is not closed, but just hidden. Your application can still access a hidden form.
caFree The form is closed and all allocated memory for the form is freed.
caMinimize The form is minimized, rather than closed.

Однако на деле работает только caNone.
Почему, когда я пишу:
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caHide // или Action = caMinimize
}

ничего не происходит?

и к чему нужно значение caFree, если все равно метод OnClose отработает и форма закроется освободив память?
а если не закроется то смысл её освобождать если приложение еще работает?


Объясните плз.
Admin
Отправлено: 28.01.2004, 19:32


Владимир

Группа: Администратор
Сообщений: 1190



Создайте вторую форму и увидите как это все работает.

Guest
Отправлено: 29.01.2004, 11:30


Не зарегистрирован







Приветствую.

Еще такой вопрос. При таком коде:


void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
Form1->WindowState = wsMinimized;
CanClose = false;
}


форма сворачивается не в панель задач Windows, а какбы на ее поверхность. А как сделать, чтобы форма сворачивалась по-нормальному, на панель задач???
Asher
Отправлено: 29.01.2004, 11:35


Мастер участка

Группа: Модератор
Сообщений: 550



QUOTE
форма сворачивается не в панель задач Windows, а какбы на ее поверхность. А как сделать, чтобы форма сворачивалась по-нормальному, на панель задач???

замени
WindowState = wsMinimized;
на
Perform(WM_SYSCOMMAND, SC_MINIMIZE, 0);

Вернуться в Вопросы программирования в C++Builder