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

Вниз

VISIBLE   Найти похожие ветки 

 
ankazh ©   (2012-06-17 19:04) [0]

Есть ли возможность сделать 1. все компоненты на форме невидимыми 2. сделать невидимыми компонеты определенного класса.


 
Virgo_Style ©   (2012-06-17 19:22) [1]

да, есть.
что именно вызывает затруднения?


 
Anatoly Podgoretsky ©   (2012-06-17 19:24) [2]

Да
Да
При условии, что это видимые компоненты.


 
ankazh ©   (2012-06-17 19:31) [3]

эээээ затруднение.... Form1.(надо что-то вроде allcomponents).visible:=false;


 
Inovet ©   (2012-06-17 19:42) [4]

1. Пройтись в цикле по
Components
ComponentCount
2. проверять на принадлежность к классу


 
Inovet ©   (2012-06-17 19:47) [5]

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
begin
 for i := 0 to ComponentCount - 1 do
 begin
   if Components[i] is TEdit then
   begin
     (Components[i] as TEdit).Visible := false;
   end;
 end;
end;


 
Anatoly Podgoretsky ©   (2012-06-17 19:50) [6]


> Inovet ©   (17.06.12 19:47) [5]

Поскольку речь об визуальных компонентах, то надо по Controls


 
Inovet ©   (2012-06-17 19:53) [7]

> [6] Anatoly Podgoretsky ©   (17.06.12 19:50)
> Поскольку речь об визуальных компонентах, то надо по Controls

Ну да, в вопросе как бы неявно подразумевалоиь Controls. Но вдруг не только.


 
Anatoly Podgoretsky ©   (2012-06-17 19:57) [8]

> Inovet  (17.06.2012 19:53:07)  [7]

Какой смысл проверять по Components, если там может не быть всех контролов.
Да и невизуальные компоненты никого не интересуют


 
Inovet ©   (2012-06-17 20:02) [9]

> [8] Anatoly Podgoretsky ©   (17.06.12 19:57)
> Какой смысл проверять по Components, если там может не быть
> всех контролов.

Ну хорошо. Тогда ещё так:
(Components[i] as TControl).Visible := false;


 
ankazh ©   (2012-06-17 20:05) [10]

спасибо огромное!


 
Inovet ©   (2012-06-17 20:06) [11]

> [9] Inovet ©   (17.06.12 20:02)
> (Components[i] as TControl).Visible := false;

в смысле

Controls[i].Visible := false;

Но назад в видимые уже не переключить.


 
stas ©   (2012-06-17 21:24) [12]

А еще можно положить на форму панель и делать ее не видимой.


 
Anatoly Podgoretsky ©   (2012-06-17 21:42) [13]

> Inovet  (17.06.2012 20:02:09)  [9]

Это еще хуже, чревато рантайм ошибками, поскольку большинство компонент не
являются TControl и не имеет свойства Visible
Непонятно зачем все эти извращения? Когда Controls полностью и
надежно решают задачу


 
Inovet ©   (2012-06-17 22:30) [14]

> [13] Anatoly Podgoretsky ©   (17.06.12 21:42)
> Это еще хуже, чревато рантайм ошибками,

Я ниже поправил. Разумеется везде заменить Components на Control. Но снова видимыми их так не сделать, сам же говорил.


 
Омлет ©   (2012-06-17 23:12) [15]

> Но снова видимыми их так не сделать, сам же говорил.

Почему не сделать? Всё работает.

procedure TForm1.SetControlsVisible(Value: boolean; AClass: TClass);
var
 i: integer;
begin
 for i := 0 to ControlCount - 1 do
   if Controls[i] is AClass then
     Controls[i].Visible := Value;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SetControlsVisible(not Edit1.Visible, TEdit);
end;


 
Inovet ©   (2012-06-17 23:57) [16]

> [15] Омлет ©   (17.06.12 23:12)
> Всё работает.

Да, меня копипаст подвёл.


 
Германн ©   (2012-06-18 02:17) [17]


> Anatoly Podgoretsky ©   (17.06.12 19:50) [6]
>
>
> > Inovet ©   (17.06.12 19:47) [5]
>
> Поскольку речь об визуальных компонентах, то надо по Controls
>

Так тогда нужно рекурсию включать :(


 
Anatoly Podgoretsky ©   (2012-06-18 07:22) [18]

> Германн  (18.06.2012 02:17:17)  [17]

А по components не надо чтоли?


 
sniknik ©   (2012-06-18 07:52) [19]

> Так тогда нужно рекурсию включать :(
нафига?

> А по components не надо чтоли?
не надо, ни с components ни с Controls.


 
Омлет ©   (2012-06-18 08:58) [20]

> sniknik ©   (18.06.12 07:52) [19]

Для Controls нужна рекурсия.

procedure SetControlsVisible(AParent: TWinControl; Value: boolean; AClass: TClass);
var
 i: integer;
 Ctrl: TControl;
begin
 for i := 0 to AParent.ControlCount - 1 do
 begin
   Ctrl := AParent.Controls[i];
   if Ctrl is AClass then
     Ctrl.Visible := Value;
   if Ctrl is TWinControl then
    SetControlsVisible(TWinControl(Ctrl), Value, AClass);
 end;
end;


 
brother ©   (2012-06-18 09:08) [21]

эээ, так если AParent невидим, то и все, что на нем тож не видно, зачем их еще приеудительно инвизить?


 
sniknik ©   (2012-06-18 09:23) [22]

> Для Controls нужна рекурсия.
> нафига?
не код но смысл... я это спрашивал, а не как сделать.


 
Омлет ©   (2012-06-18 09:35) [23]

> sniknik ©   (18.06.12 07:52) [19]

Смысл - в задаче:
> сделать невидимыми компонеты определенного класса (см. [0])

Если, к примеру, едиты раскиданы по разным панелькам, как их все скрыть без рекурсии?


 
sniknik ©   (2012-06-18 09:37) [24]

> зачем их еще приеудительно инвизить?
до меня дошло, например невидимыми нужно делать эдиты, а один из, лежит на панели (не на форме, в чилдах формы его не будет)... значит делаем и его, не обращая внимание на вопрос
> 1. все компоненты на форме невидимыми 2. сделать невидимыми компонеты определенного класса.
хотя, конечно это уже философия... что именно считать лежащим на форме, считать ли детей, и ее (что делаем и зачем) естественно проигнорировали.


 
sniknik ©   (2012-06-18 09:38) [25]

> как их все скрыть без рекурсии?
нафига? если они на панельках а не на форме. (см. [0])


 
Омлет ©   (2012-06-18 09:43) [26]

> sniknik ©   (18.06.12 09:38) [25]

На столе стоит поднос, а на подносе - стакан.
С гегельянской точки зрения стакан стоит и на подносе, и на столе одновременно ))


 
sniknik ©   (2012-06-18 10:01) [27]

> С гегельянской точки зрения
программистам нужно запретить изучать философию...


 
brother ©   (2012-06-18 10:47) [28]

> [27] sniknik ©   (18.06.12 10:01)
> > С гегельянской точки зрения
> программистам нужно запретить изучать философию...

и правильную постановку ТЗ )


 
Dennis I. Komarov ©   (2012-06-19 14:47) [29]

ИМХО XYZ
Автору нужно Create in run-time...


 
Inovet ©   (2012-06-19 17:31) [30]

> [29] Dennis I. Komarov ©   (19.06.12 14:47)

Пусть автор озвучит исходную задачу.



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

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

Наверх




Память: 0.53 MB
Время: 0.103 c
15-1350066609
Лёха
2012-10-12 22:30
2013.03.22
Помогите люди добрые


15-1336226589
Vik
2012-05-05 18:03
2013.03.22
У меня маленький вопрос.


1-1295711313
Gu
2011-01-22 18:48
2013.03.22
Диалог "Свойства файла" для нескольких файлов папок


2-1328101281
sergeii01
2012-02-01 17:01
2013.03.22
Запись в файл из нескольких потоков


2-1345890795
alexdn
2012-08-25 14:33
2013.03.22
Как написать условие