Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.03;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.04 c
1-6156
Digitman
2004-02-19 12:16
2004.03.03
TListView.OnDeletion


14-6201
Cosinus
2004-02-11 18:27
2004.03.03
Интересно, это когда-нибудь надоест ? :))))


14-6202
Calm
2004-02-11 09:47
2004.03.03
Готовимся к переходу на Аду?


4-6276
dit
2003-12-24 11:40
2004.03.03
процеду ра ловушки


6-6170
Pantera111
2003-12-26 15:41
2004.03.03
Компонент GrabURL