Отмена действия

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем -, 10 дек 2008.

  1. Гость

    Не могу сделать элементарную вещь!
    1. Жмем по закрытию окна.
    2. Всплывает окно:
    - Сохранить, Не сохранять и Отмена.

    Вопрос: Как правильно прописать кнопку «Отмена».
     
  2. etc

    etc Гость

    Что значит - "правильно"? вас что интересует?
     
  3. Гость

    Вот есть форма.
    Вот жмем на крестик или Alt+F4 и откр. другая модал. форма.
    На ней три кнопки: да, нет, отмена.
    Вопрос: Какой код нужно прописать кнопке отмена, что бы первая форма не закрылась, ведь она основная. Просто прикол в том, что вторая форма сплывает при событии OnClose, тойсь все, что бы я не делал, при окончании того действия, все ровно закроется первая форма!
    -----------------------------
    Можно же конечно переписать всю прогу, что бы та форма, которая мне нужна, была второй, тогда все будет пучком, но в этом случае тяжело это сделать...
     
  4. etc

    etc Гость

    RКакаято абракадабра.
    Т.е. вы закрываете окно, и сразу открываете другое, но при чем тут какаято кнопка на другой, если уже первая закрыта???
    короче ниче не понятно, вы расскажите че вам надо, только не про формы а про смысл.
     
  5. Гость

    Откройте ворд, напишите там че-то и попробуйте закрыть программу! Всплывает вопрос, хотите сохранить или нет? А есть еще кнопка отменить (тойсь отменить закрытие). Вот я и хочу узнать как отменить закрытие проги! :)
     
  6. etc

    etc Гость

    В ворде при "всплытии" того окна, сам ворд не закрываеться, чувствуете разницу?
    Вариантов сделать такое масса, один из - OnCloseQuery, но с ним надо быть осторожней.
     
  7. Yason

    Yason Гость

    Сантехник, вот код для билдера, в дельфи переводится почти дословно :)
    Код (Text):
    void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
    {
    switch (MessageDlg("Save?", mtConfirmation, mbYesNoCancel, 0)) {
    case mrYes:
    ShowMessage("Saved");
    CanClose = true;
    break;
    case mrNo:
    CanClose = true;
    break;
    case mrCancel:
    CanClose = false;
    break;
    default:
    ShowMessage("WTF?!");
    }
    }
     
  8. etc

    etc Гость

    Yason Что будет если прога бует закрываться вместе с системой, т.е. шотдаун сделали?
     
  9. Yason

    Yason Гость

    etc, действительно, появится неприятное окошко, которое будет мешать системе выгружаться; в конце концов система или выдаст предложение прибить программу, или сделает это автоматически.
    Напомню, однако, что в исходном вопросе про обработку подобных случаев не спрашивалось :)
     
  10. etc

    etc Гость

    Yason
    Ну это не то чтобы ошибка, просто как я уже и подчеркивал в Сообщение #6, надо такие моменты помнить и делать соотв. действия (если надо).
     
  11. Гость

    Yason, Большое спасибо! Очень благодарен!
     
  12. gromoseka

    gromoseka Гость

    А может просто проверить все необходимое при закрытии окна?
    Например, что-то типа
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

    {
    if (MessageDlg("Close application ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo,0) == mrYes)
    Action = caFree;
    else
    Action = caMinimize;
    }
    (пример из билдера)
     
  13. Гость

    Это пример лучше, потому, что если CanClose будет равно false, то система вообще не завершит свою работу... А если использовать Action, то она ее насильно завершит в случае завершения... Вот только нужно не Action = caMinimize;, а Action = caNone; :)
     
Загрузка...

Поделиться этой страницей