Главная страница
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.01 c
3-5977
TurburatoR
2004-02-05 11:41
2004.03.03
Локальная таблица


1-6069
Гиричев Руслан
2004-02-21 18:09
2004.03.03
Как вернуться в прошлое?


3-5972
Boroda Oleg
2004-02-04 16:15
2004.03.03
Получение значения из триггера по созданию новой записи


6-6173
evgenius
2003-12-27 17:55
2004.03.03
Обмен данными в сети


1-6071
Batoon
2004-02-21 15:20
2004.03.03
*.DCU