Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2011.07.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
Циркуль   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
15-1301572664
vajo
2011-03-31 15:57
2011.07.17
Мозилла


2-1301995221
Basilisk
2011-04-05 13:20
2011.07.17
Изменение цвета ячейки в StringGrid при заполнении таблицы


15-1300669083
Германн
2011-03-21 03:58
2011.07.17
Ищу что-то типа SVN, но не для разработчиков, а для тестировщиков


6-1239951140
Mulber
2009-04-17 10:52
2011.07.17
Как отслеживать траффик (протокол SMTP)?


1-1260213430
Leto
2009-12-07 22:17
2011.07.17
Странно работает thintwindow





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский