Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.064 c
15-1346775365
pasha_golub
2012-09-04 20:16
2013.03.22
Как привести TList<TField> к простому TList


2-1337494815
Михаил
2012-05-20 10:20
2013.03.22
Игра ханойские башни


15-1343889055
БарЛог
2012-08-02 10:30
2013.03.22
Велопоход в никуда с палаткой на несколько дней


15-1335608712
Труп Васи Доброго
2012-04-28 14:25
2013.03.22
Телефоноудлинитель


15-1341788808
RGV
2012-07-09 03:06
2013.03.22
Драйвер.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский