Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.05 c
15-1341440157
Германн
2012-07-05 02:15
2013.03.22
Про современные холодильники.


15-1344870494
stas
2012-08-13 19:08
2013.03.22
DelphiXE 2 FireMonkey


15-1349814602
Юрий
2012-10-10 00:30
2013.03.22
С днем рождения ! 10 октября 2012 среда


15-1338582602
Юрий
2012-06-02 00:30
2013.03.22
С днем рождения ! 2 июня 2012 суббота


15-1331238602
Юрий
2012-03-09 00:30
2013.03.22
С днем рождения ! 9 марта 2012 пятница




   Наверх