Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Свойство "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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо