Столкнулся с непонятными глюками компонента TFrame. Размещаю один фрейм (Frame3) на другом (Frame1) и кладу это всё на форму. На верхнем фрейме (Frame2) я размести TActionList, определив у TAction свойство Shortcut; но Shortcut не работает. Если у Frame3 поменять значение любого свойства или добавить обработку какого-нибудь события (можно даже просто опертор ';'), то всё работает нормально. При этом в dfm-файл (формы) добавлются строки:
inherited Frame31: TFrame3
Enabled = False //Если, например, было изменено св-во Enable
OnClick = Frame21Frame31Click //Если обрабатывается событие OnClick
Ещё более непонятные вещи происходят, если цепочку вложености фреймов увеличть до 3-х,
разместив на каждом TActionList и определив у TAction Shortcut.
Интересно, почему так происходит?..
Здравствуйте vladsm, Вы писали:
V>Здравствуйте curious, Вы писали:
C>>Столкнулся с непонятными глюками компонента TFrame. Размещаю один фрейм (Frame3) на другом (Frame1) и кладу это всё на форму. На верхнем фрейме (Frame2) я размести TActionList, определив у TAction свойство Shortcut; но Shortcut не работает. Если у Frame3 поменять значение любого свойства или добавить обработку какого-нибудь события (можно даже просто опертор ';'), то всё работает нормально.
V>Когда-то тоже слышал про такую беду с вложенными фреймами.
Не понятный глюк. Что скажут гуру VCL-я?
Однозначно проблема с inherited.
Дельфяк очень криво работает с наследованием фреймов. Проблема в том, что достаточно трудно понять, что имелл в виду разработчик. Особенно это касается связанных свойств, то есть таких, например, как alignment, anchors, width, height. Дело в том, что при вставке фрейма в форму храняться только значения тех пропертей, которые в нем отличаются от унаследованных. В результате правило большого паьца таково: опасайтесь редактировать фрейм после того, как он куда-либо вставлен. Надо убедиться, что его свойства(и свойства его компонентов) приняли нужные значения. Если что-то выглядит не так, то надо сразу лезть в текстовое представление dfm и править все руками. Object Inspector — слабый помощник, т.к. он не показывает, откуда взяты значения свойств — унаследованы, или перегружены локально.