![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свойство "color"
Alex7 © (2005-10-04 11:14:00)Подскажите , пожалуйста как изменить "color" всех размещенных на форме компонентов редактирования
(Edit, SpinEdit, ComboBox, Memo и т.п.) .
Не проходят на первый взгляд очевидные варианты
1) For i:=0 To ControlCount-1 Do
Controls[i].Color := clred;
2) For i:=0 To ControlCount-1 Do
If Controls[i] is TWinControl and not (Controls[i] is TButton) Then
TWinControl(Controls[i]).Color := clred;
А проходит, как мне кажется, абсурдное
For i:=0 To ControlCount-1 Do
TEdit(Controls[i]).Color := clred;
При этом краснеет все и Edit и SpinEdit и ComboBox и Memo.
Спасибо.
ЮЮ (2005-10-05 09:54:00) [1]1) потому, что Color у TControl - protected
Type TControlAccess = class(TControl);
for i := 0 To ControlCount - 1 do TControlAccess (Controls[i]).Color := ... ;
такое объявление позволяет использовать protected св-ва класса TControlAccess или преведенного к этоиу типу объекта другого класса-предка
В твоем варианте TEdit(Controls[i]).Color := clred; ты приводишь к типу TEdit, у которого Color уже published
...
2) TSpinEdit что в справки из CLX, а не VCL, а там и TEdit наследник TWidпetControl (TWidgetControl is the base class for all controls that are wrappers for Qt widgets.)
3) Все работает и без объявления Property Color. Что оно дает ?
Ещё один метод "доступа" к protected-св-ву предка - перенос его в public-секцию
Alex7 (2005-10-05 08:44:00) [2]Большое спасибо! Все работает.
Но, каюсь, вопросы остались:
1. Чем свойство "Color" отличается, например, от "Enabled"?
Почему простая кострукция
For i:=0 To ControlCount-1 Do Controls[i].Enabled=True;
для "Enabled" работает, а для "Color" нет?
2. Из рекомендации выходит, что TSpinEdit наследник
TEdit, а из Help того не видно.(Там указан TWidGetControl).
3.Все работает и без объявления Property Color.
Что оно дает ?
4. Не уловил совета по "ParentColor". Если для возврата
к исходному цвету, то не срабатывает.
Еще раз большое спасибо.
Чапаев (2005-10-04 13:13:00) [3]Может стоит всем Controls[I].ParentColor:=True;?
Котик Б (2005-10-04 12:08:00) [4]Прошу прощения за дубль :-[
Котик Б (2005-10-04 12:07:00) [5]Я бы сделал примерно так:
type
TMyControl = class(TControl)
public
property Color;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
a: array[0..2] of TClass = (TCustomEdit, TCustomMemo, TComboBox);
var
i, j: integer;
begin
for i := 0 to ControlCount -1 do begin
for j := Low(a) to High(a) do
if Controls[i] is a[j]
then TMyControl(Controls[i]).Color := clRed;
end;
end;
Котик Б (2005-10-04 12:06:00) [6]Я бы сделал примерно так:
type
TMyControl = class(TControl)
public
property Color;
end;
procedure TForm1.Button1Click(Sender: TObject);
const
a: array[0..2] of TClass = (TCustomEdit, TCustomMemo, TComboBox);
var
i, j: integer;
begin
for i := 0 to ControlCount -1 do begin
for j := Low(a) to High(a) do
if Controls[i] is a[j]
then TMyControl(Controls[i]).Color := clRed;
end;
end;