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

Вниз

Что отработает раньше: TDataSet.OnCalcField   Найти похожие ветки 

 
Ega23 ©   (2006-11-16 09:38) [0]

или TDataLink.ActiveChanged контрола, "смотрящего" на этот DataSet?


 
ЮЮ ©   (2006-11-16 09:46) [1]

А поставить бряки? Или, надеешься, что кто-то VCL знает настолько, что в исходники даже не полезет? :)


 
Ega23 ©   (2006-11-16 09:51) [2]


> А поставить бряки? Или, надеешься, что кто-то VCL знает
> настолько, что в исходники даже не полезет? :)


Не надо меня идиотом считать. Бряки не ставил, но в исходники сам слазил. По исходникам - сначала CalcFields для ActiveBuffer отработает, а потом рассылка пойдёт.
Интересует не упустил ли я чего-либо.


 
evvcom ©   (2006-11-16 10:12) [3]

> [2] Ega23 ©   (16.11.06 09:51)
> Бряки не ставил, но в исходники сам слазил

Лучше бряки поставь. Подтверди свою гипотезу практикой. Хотя, имхо, вроде очередность логичная. Но у всех разные понятия о логичности того или иного.


 
ЮЮ ©   (2006-11-16 10:24) [4]

А я разглядел другое:

procedure TDataSet.SetState(Value: TDataSetState);
begin
 if FState <> Value then
 begin
   FState := Value;
   FModified := False;
   DataEvent(deUpdateState, 0);
 end;
end;

procedure TDataSet.DataEvent(Event: TDataEvent; Info: Longint);
begin
 NotifyDataSources := not (ControlsDisabled or (State = dsBlockRead));
   deUpdateState:
     if ControlsDisabled then
     begin
       Event := deDisabledStateChange;
       Info := Integer(State <> dsInactive);
       NotifyDataSources := True;
     end;
 end;

 if NotifyDataSources then
 begin
   for I := 0 to FDataSources.Count - 1 do
     TDataSource(FDataSources[I]).DataEvent(Event, Info);
   if FDesigner <> nil then FDesigner.DataEvent(Event, Info);
 end;
end;


Н.д. изменил статус, оповестил DataSources, те DataLinks.
А вычислять свои вычислимые поля он, по-моему, без надобности не будет.


 
Anatoly Podgoretsky ©   (2006-11-16 10:31) [5]

> evvcom  (16.11.2006 10:12:03)  [3]

Конечно, зачем словам верить, даже самого провереного человека, все равно ведь ошибиться может, пускай редко, но даже самые, самые, самые гуру иногда ошибаются, особенно когда на память надеются.


 
ЮЮ ©   (2006-11-16 10:46) [6]

А бряки запросто показали:

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;  // здесь вызовется TDataSet.CalculateFields</B
                                         
       finally
         if State <> dsOpening then
           OpenCursorComplete;  здесь вызовется  DataEvent(deUpdateState, 0);
       end;
     end else
     begin
       if not (csDestroying in ComponentState) then DoBeforeClose;
       SetState(dsInactive);
       CloseCursor;
       if not (csDestroying in ComponentState) then DoAfterClose;
     end;
   end;
end;

З.Ы. Но Ega23 не идиот бряки ставить. Зачем, если другие идиотв найдутся :)



Страницы: 1 вся ветка

Текущий архив: 2007.02.04;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
1-1166014247
BBCHa
2006-12-13 15:50
2007.02.04
Интегрция с OpenOffice


2-1168964455
-John-Doe-
2007-01-16 19:20
2007.02.04
Маленький image у каждой вкладки PageControl в заголовке?


2-1169119105
Garacio
2007-01-18 14:18
2007.02.04
переключение чтение/запись-чтение для USB


2-1169377884
md
2007-01-21 14:11
2007.02.04
как найти экземпляр класса?


2-1169116390
mmip
2007-01-18 13:33
2007.02.04
Подключение к MS SQL