![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Одновременное включение свойства readOnly у всех компонентов. [D5, Win95/98]
str © (2002-06-21 21:25:00)Есть кнопочка "РЕДАКТИРОВАТЬ", при нажатии на которую все компоненты становятся доступными для редактирования. Как это сделать?
Юрий Зотов (2002-06-22 02:39:00) [1]> Song © (21.06.02 21:55)
Цикл-то, это да, но разве у класса TComponent есть свойство ReadOnly? Нет. Значит, и переключить его без дополнительного анализа класса не получится. Причем анализ этот будет и громоздким, и, саме главное, неуниверсальнгым - если делать его обычным способои. А чтобы он был компактным и универсальным, надо использовать RTTI.
> str (21.06.02 21:25)
В общем, делается это примерно так. Кнопка Button1 переключает значение свойства ReadOnly на обратное для ВСЕХ имеющихся на форме компонентов, у которых это свойство вообще есть и оно published.
uses
..., TypInfo;
procedure TForm1.Button1Click(Sender: TObject);
procedure SwitchReadOnly(Obj: TObject);
var
P: PPropInfo;
begin
P := GetPropInfo(Obj, "ReadOnly");
if P <> nil then SetOrdProp(Obj, P, Integer(not Boolean(GetOrdProp(Obj, P))))
end;
var
i: integer;
begin
for i := 0 to ComponentCount - 1 do SwitchReadOnly(Components[i])
end;
Song (2002-06-21 21:55:00) [2]FindComponent или цикл для всех (см. TComponent)