Форум: "Основная";
Текущий архив: 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