Форум: "Прочее";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
ВнизВ ДатаСете непонятность Найти похожие ветки
← →
Чапаев © (2006-11-22 16:27) [0]
procedure TDataSet.SetActive(Value: Boolean);
begin
if (csReading in ComponentState) then
begin
FStreamedActive := Value;
end
else
if Active <> Value then
begin
if Value then
begin
DoBeforeOpen;
try
OpenCursor;
finally
if State <> dsOpening then
OpenCursorComplete;
end;
end else
begin
if not (csDestroying in ComponentState) then DoBeforeClose;
SetState(dsInactive);
CloseCursor;
if not (csDestroying in ComponentState) then DoAfterClose;
end;
end;
end;
Это зачем же они так делают?
← →
novill © (2006-11-22 16:33) [1]А в чем вопрос? если SetActive производится в процессе разрушения, то не обрабатывать события.
← →
Anatoly Podgoretsky © (2006-11-22 16:37) [2]> Чапаев (22.11.2006 16:27:00) [0]
Затем, что компонент может находиться в состоянии csDestroying
← →
Чапаев © (2006-11-22 16:40) [3]> [2] Anatoly Podgoretsky © (22.11.06 16:37)
И почему при этом BeforeClose обрабатывать не нужно? Вот это понять не могу.
← →
Anatoly Podgoretsky © (2006-11-22 16:44) [4]
> Чапаев © (22.11.06 16:40) [3]
Потому что будет ошибка, компонент разрушается, а ты грязными лапами в нем копаешься.
← →
novill © (2006-11-22 16:46) [5]> [3] Чапаев © (22.11.06 16:40)
Стоит посмотреть, когда в процессе уничтожения компонента вызывается SetActive, может этого уже нельзя делать.
← →
Чапаев © (2006-11-22 16:57) [6]> [5] novill © (22.11.06 16:46)
В принципе, в OnDestroy модуля данных вызывался Table.Close. А Table.BeforeClose не отрабатывал.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.04 c