Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];

Вниз

Не могу сформулировать название вопроса...   Найти похожие ветки 

 
olookin   (2004-02-21 15:20) [0]

Итак, моя проблема в следующем.
Есть компонент, который при закрытии приложения (т.е. именно главной формы) должен проверить сохраненку данных и в случае несохраненности должен вызвать диалог типа "Хотим сохранить?". При этом никаких диалогов не должно быть при закрытии формы на которой размещен этот компонент. Если я привязываю OnDestroy формы-владельца компонента (т.е. не обязательно главной, однако такое меня устраивает) к OnMyDestroy - то как таковое OnMyDestroy происходит, но при этом диалоги появляются лишь на мгновение. Ясно что при этом никакого сохранения (либо чего то другого) не происходит... Если я пытаюсь привязать OnDestroy главной формы (через Application.MainForm.OnDestroy) к моему дестрою, то возникает AV так как при создании комопннета MainForm=nil. Я попытался обойти проблему так. Привязал OnShow формы-владельца компонента к моему OnMyShow, где я уже могу привязать Application.Mainform.Ondestroy:=OnMyDestroy поскольку тут уже MainForm<>nil. Но при этом теряются команды, которые исходно были записаны в OnShow формы-владельца....

Вот такая замудка... Пишите обязательно если что не понятно...


 
easy   (2004-02-21 15:27) [1]

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not datasaved then
if MessageDlg("Желаете сохранить?",mtConfirmation, [mbYes, mbNo], 0) = mrYes then
SaveData;
end;

?


 
Юрий Зотов   (2004-02-21 15:35) [2]

Почему именно OnDestroy? Это может быть уже поздно. Используйте OnClose главной формы. А если еще использовать диалог типа YesNoCancel и параметр CanClose, то юзер сможет не только сохранять или не сохранять данные, но и вообще отменить завершение программы.


 
olookin   (2004-02-21 15:39) [3]

Еще раз повторюсь - все эти вызовы из компонента а не в коде программы... Т.е. даже если я не напишу ничего в OnClose главной формы, у меня компонент должен отработать закрытие этой формы...

В любом случае всем спасибо - задача уже решена.


 
Игорь Шевченко   (2004-02-21 19:23) [4]

olookin © (21.02.04 15:39)

Как еще один вариант - попробуй привязаться в компоненте к Application.OnMessage и реагировать на сообщение WM_SYSCOMMAND с параметром SC_CLOSE и Hwnd = Application.MainForm.Handle;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if (Msg.hwnd = Application.MainForm.Handle) and
(Msg.message = WM_SYSCOMMAND) and (Msg.wParam = SC_CLOSE) then
Handled := MessageBox(0, "Вы уверены ?", "Я закрываюсь",
MB_ICONQUESTION or MB_YESNOCANCEL) <> IDYES;
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
1-6056
DmitryNekl
2004-02-18 21:39
2004.03.03
Массив элементов TStringList


8-6164
esVer
2003-10-31 15:41
2004.03.03
Bitmap как результат ф-ции


6-6172
Gorlum
2003-12-26 13:22
2004.03.03
E-mail


1-6012
Серёга
2004-02-19 13:44
2004.03.03
RichEdit


1-6092
girich
2004-02-19 14:20
2004.03.03
элементарное в TService





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский