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

Вниз

Непредсказуемый порядок обхода контролов   Найти похожие ветки 

 
Циркуль   (2009-11-26 11:43) [0]

Есть вот такая функция для рекурсивного обхода контролов


function FindControl(AParentControl: TWinControl; AConditionFunc: TFindControlConditionFunc): TControl;
var
 I: Integer;
 Control: TControl;
begin
 Result := nil;
 if Assigned(AConditionFunc) then
 begin
   for I := 0 to AParentControl.ControlCount - 1 do
   begin
     Control := AParentControl.Controls[I];
     if AConditionFunc(Control) then
       Result := Control
     else
       if Control is TWinControl then
         Result := FindControl(TWinControl(Control), AConditionFunc);
     if Assigned(Result) then
       Break;
   end;
 end;
end;

TFindControlConditionFunc = function(AControl: TControl): Boolean of object;


На одной из форм она вызывается вот так


...
FindControl(Self, SetupNestedFrame);
...

TForm1.SetupNestedFrame(AControl: TControl): Boolean;
begin
 Result := False;
 if (AControl is TSomeFrame) then
   TSomeFrame(AControl).SomeAction.
end;


Так вот... На форме, где-то на панельках лежит 2 фрейма.
Сначала  вызывается SomeAction для Frame1, потом для Frame2.
Но в экзешнике, скомпиленом на одном из компов порядок получается обратный, т.е. сначала FindControl находит Frame2 а затем Frame1. pas и dfm в обоих случаях идентичные, CreationOrder у формы правильный (сначала создается Frame1 потом Frame2), настройки компиляции проекта одинаковые. В дебагере цикл внутри FindControl бегает как положено, с нуля.


 
Сергей М. ©   (2009-11-26 16:01) [1]

А какая разница, каков фактический порядок обхода ?
Тебя же, судя по логике в SetupNestedFrame, он вообще не интересует..


 
Циркуль   (2009-11-26 16:27) [2]

В общем случае - не интересует, но на данной конкретной форме Frame2 при загрузке (SomeAction) использует данные Frame1, который получает их во время своего SomeAction.

Саму проблему "рассогласования" фреймов я решил, дело не в этом. Мне просто интересно, какая может быть причина того, что при компиляции на одном из компов Frame2 находится на форме первее, чем Frame1, а при компиляции на других компах - первым находится Frame1 (в соответствии с CreationOrder формы), при условии идентичности исходников и настроек компиляции. ОС и версия Delphi тоже одинаковая на компах.

Понимаю, что не имея возможности воспроизвести ситуацию у себя под отладчиком, трудно мне ответить что-нить вразумительное, но мало ли... может кто уже натыкался на подобное и сможет развеять мою веру в чудеса :)


 
Сергей М. ©   (2009-11-26 21:30) [3]


> на данной конкретной форме Frame2 при загрузке (SomeAction)
> использует данные Frame1


Логика, не выдерживающая никакой критики.


 
Циркуль   (2009-11-27 13:37) [4]


> Логика, не выдерживающая никакой критики.


Заявление, не выдерживающее никакой критики :)


 
han_malign   (2009-11-27 16:28) [5]

ZOrder/TabOrder


 
Сергей М. ©   (2009-11-27 16:48) [6]


> Циркуль   (27.11.09 13:37) [4]


Ну смотри сама, кума, - тебе жить)


 
Ухарь   (2009-11-29 13:04) [7]

а каким образом происходит компиляция на другом компьютере?
Проект открывается в IDE и билдится, или же командной строкой?


 
Циркуль   (2009-11-29 18:49) [8]


> Ухарь   (29.11.09 13:04) [7]

открывается в IDE и билдится


 
Ухарь   (2009-12-01 19:19) [9]

можно попробовать сравнить после этого сорсы на двух компьютерах



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

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

Наверх




Память: 0.49 MB
Время: 0.009 c
4-1248840141
Armature_Current
2009-07-29 08:02
2011.07.17
Ошибка функции ReadFile при работе с COM-портом


15-1301468622
eclipse
2011-03-30 11:03
2011.07.17
"Тест драйв" программы


1-1258987492
Diplomat
2009-11-23 17:44
2011.07.17
Удалить сведения об ранее подключенных устройствах


15-1302018111
И. Павел
2011-04-05 19:41
2011.07.17
Ищу роман С. Кинга "Под куполом"


15-1301644671
sniknik
2011-04-01 11:57
2011.07.17
Pivot tables in OpenOffice Calc ... формирование программно