![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сообщения в TabSheet [D7, WinXP]
Alex_KV © (2006-01-20 14:12:00)Здравствуйте, Мастера!
Передо мной такая задача:
есть форма, на ней несколько TabSheet'ов,
на которых всякие др. контролы.
Хочу в зависимости от опред. условий
на любом TabSheet'e вкл/выкл контролы (Enable: true/false).
Перебирать все контролы лень.
Есть у TTabSheet метод Broadcast, рассылающий сообщения
дочерним контролам.
Если кто знает какое сообщение нуна для вкл.выкл контролов
или другой способ, подскажите, буду благодарен!
eugie (2006-01-26 05:45:00) [1]Не помню, насколько давно, но в FAQ этого сайта был пример для изменения свойств дочерних объектов, реализованный через PPropInfo, работает достаточно хорошо.
Короче, можно, например так изменить свойства ReadOnly для всех контролов, помещенных на форму:
Procedure SetReadOnly(Send:TForm; ROnly:Boolean);
Var i:Integer;
f:Integer;
PropInfo: PPropInfo;
Begin
If ROnly=True Then
f:=1
Else
f:=0;
With Send Do
Begin
For i:=0 to Send.ComponentCount-1 Do
Begin
If Send.Components[i].Tag = 0 Then
Begin
if not (Send.Components[i].ClassInfo=nil) then
begin
PropInfo:= GetPropInfo(Send.Components[i].ClassInfo, 'ReadOnly');
if PropInfo <> nil then
begin
case PropInfo^.PropType^.Kind of
tkEnumeration : SetOrdProp(Send.Components[i],PropInfo,f);
end; // case
end;
end;
End;
End;
End;
End;
В твоем случае - замени 'ReadOnly' на 'Enabled'.
begin...end (2006-01-20 14:25:00) [2]> Alex_KV (20.01.06 14:12)
> Хочу в зависимости от опред. условий
> на любом TabSheet'e вкл/выкл контролы (Enable: true/false).
> Перебирать все контролы лень.
TTabSheet.Enabled ?
Johnmen (2006-01-20 14:18:00) [3]Стандартное решение - использовать TActionList.
Ega23 (2006-01-20 14:18:00) [4]
With TTabSheet do
for i:=0 to ControlCount-1 do
TControl(Controls[i]).Enabled:=not TControl(Controls[i]).Enabled;