Форум: "Начинающим";
Текущий архив: 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.076 c