Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.30;
Скачать: CL | DM;

Вниз

Свойство "color"   Найти похожие ветки 

 
Alex7   (2005-10-04 11:14) [0]

Подскажите , пожалуйста как изменить "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-04 12:06) [1]

Я бы сделал примерно так:

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:07) [2]

Я бы сделал примерно так:

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:08) [3]

Прошу прощения за дубль :-[


 
Чапаев ©   (2005-10-04 13:13) [4]

Может стоит всем Controls[I].ParentColor:=True;?


 
Alex7   (2005-10-05 08:44) [5]

Большое спасибо! Все работает.
Но, каюсь, вопросы остались:
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-05 09:54) [6]

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-секцию



Страницы: 1 вся ветка

Текущий архив: 2005.10.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
4-1125147958
kami
2005-08-27 17:05
2005.10.30
Как передать содержимое файла в Clipboard


2-1128586322
SQL-nik
2005-10-06 12:12
2005.10.30
Помогите с ADO


1-1128414653
JohnKorsh
2005-10-04 12:30
2005.10.30
Прстейший вопрос по TBotton


14-1128793787
Layner
2005-10-08 21:49
2005.10.30
Обновление программы


2-1128744905
intel
2005-10-08 08:15
2005.10.30
работа с Excel