Sharfik писал(а):Сам сказал - она закрыта, а значит ошибка вылетает оправданно. Вопрос - зачем ты щелкаешь по форме? И где обрабатывается щелчек?
Есть форма №1, на которой есть tedit.
Есть форма №2 со списком. Форма №2 вызывается формой №1 в модальном режиме. При выборе позиции в списке (список - stringgrid) по двойному щелчку мышкой вызывается метод close формы №2,
- Код: Выделить всё
procedure TsfForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
modalresult:=selected_sf_record;
end;
форма закрывается и значение tedit формы №1 заполняется:
- Код: Выделить всё
tedit.text:=sfForm.ShowModal;
Иногда ПОСЛЕ закрытия формы №2 при клике мышкой на форме №1 выпадает эксепшн, который был упомянут выше, о том, что форма №2 (она уже закрыта) не может получить фокус.
Если в метод закрытия формы №2 добавить
- Код: Выделить всё
sleep(200);
ошибка исчезает.
Создаешь две формы чистые и пишешь методы их вызова как в твоей программе. Когда будет глючить ищешь баг.
Ошибка вылетает БЕЗ системы. Иногда вылетает, иногда нет.
Лекс Айрин - спасибо, попробую.
Добавлено спустя 20 минут 38 секунд:MiniQ писал(а):Как бы приведенный пример совсем не дает представления о структуре кода.
Вопрос из разряда "Доктор, у меня это. Что делать?"
Структура кода:
Форма №1
(по нажатию кнопки вызываем форму №2 в модальном режиме)
- Код: Выделить всё
procedure TPay.btnSFSelClick(Sender: TObject);
begin
tedit.text:=sfForm.ShowModal;
end;
Форма №2
(двойной клик по stringgrid)
- Код: Выделить всё
procedure TsfForm.sfGridDblClick(Sender: TObject);
begin
//sleep(200);
close;
end;
(инициализация переменной selected_SF_record)
- Код: Выделить всё
procedure TsfForm.sfGridSelectCell(Sender: TObject; aCol, aRow: Integer;
var CanSelect: Boolean);
begin
selected_SF_record:=sfGrid.Cells[0,aRow];
end;
(закрываем форму №2)
- Код: Выделить всё
procedure TsfForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
modalresult:=selected_sf_record;
//closeAction:=caFree;
end;
Больше никакого кода, который участвует в упомянутом процессе, нет.