Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
ВнизFIND TEXT RESOURCES Найти похожие ветки
← →
KALqYAN (2006-03-10 13:24) [0]Подскажите пожалуйста, как в своём приложении можно отыскать все Caption"ы, Text"ы и тд. всех присутствующих компонентов?, чтоб потом их можно было бы например каким нибудь циклом переименовать...
Спасибо!
← →
Сергей М. © (2006-03-10 13:32) [1]без рекурсии не обойтись
← →
DarkLord © (2006-03-10 13:49) [2]
> без рекурсии не обойтись
А зачем тут рекурсия?
Вполне можно обойтись. Например так:
for i:=0 to Form1.ControlCount-1 do
begin
if Form1.Controls[i] is TComboBox then
(Form1.Controls[i] as TComboBox).Text:="";
...
if Form1.Controls[i] is TCheckBox then
(Form1.Controls[i] as TCheckBox).Checked:=False;
end;
← →
Alkid © (2006-03-10 13:49) [3]В Application перебираешь все формы, а потом для каждой формы рекурсивно перебираешь компоненты.
← →
Stakan © (2006-03-10 13:53) [4]DarkLord © (10.03.06 13:49) [2]
Как причём. А если, например, на форме панель, а на ней ещё контролы? Твой код их не учтёт.
← →
Ega23 © (2006-03-10 13:54) [5]
> а потом для каждой формы рекурсивно перебираешь компоненты.
Нафига рекурсивно?
← →
Ega23 © (2006-03-10 13:55) [6]
> Вполне можно обойтись. Например так:
>
> for i:=0 to Form1.ControlCount-1 do
Так не получится. Нужно ComponentCount и Components[i] использовать.
← →
Alkid © (2006-03-10 13:55) [7]
> Нафига рекурсивно?
А если у тебя структура древесная? Панель на панели и кнопочка где-то в конце?
← →
DarkLord © (2006-03-10 13:56) [8]
> Как причём. А если, например, на форме панель, а на ней
> ещё контролы? Твой код их не учтёт.
Упс. Согласен. :)
← →
DarkLord © (2006-03-10 13:59) [9]
> Так не получится. Нужно ComponentCount и Components[i] использовать.
Я просто выдрал кусок кода из операции с PageControl и поменял на Form1, а в условии цикла поменять забыл :)
Но суть именно такова ;)
← →
Ega23 © (2006-03-10 14:01) [10]
> А если у тебя структура древесная? Панель на панели и кнопочка
> где-то в конце?
TForm.Components - для красоты? :о)
← →
Alkid © (2006-03-10 14:02) [11]
> TForm.Components - для красоты? :о)
Ага. Чистая декорация. :)
Не знаю. Не пробовал. Может быть там и линейный список.
← →
msguns © (2006-03-10 14:04) [12]Слушайте Ежу - дело говорит.
А не будете слушать и в глаз дать может - десантник блин !
;)
← →
Ega23 © (2006-03-10 14:11) [13]
> Может быть там и линейный список.
Линейный. По Owner"у.
← →
Ega23 © (2006-03-10 14:18) [14]
> А не будете слушать и в глаз дать может - десантник блин
> !
Блин, ну не десантник я!
И вообще я это "голубое братство" не люблю...
← →
Alkid © (2006-03-10 14:19) [15]
> А не будете слушать и в глаз дать может - десантник блин
Вот щас тебе в глаз и даст :)
А вообще, кстати, а что будет, если я свойство Owner у компонента
выставлю на на форму, а на другой контейнерный компонент?
← →
msguns © (2006-03-10 14:24) [16]>Ega23 © (10.03.06 14:18) [14]
>Блин, ну не десантник я!
>И вообще я это "голубое братство" не люблю...
Но хоть в глаз-то дать можешь ?
>Alkid © (10.03.06 14:19) [15]
>А вообще, кстати, а что будет, если я свойство Owner у компонента
выставлю на на форму, а на другой контейнерный компонент?
Этим самым ты офрмишь завещание, по которому твоего компонента будут хоронить не на Родине.
← →
Alkid © (2006-03-10 14:28) [17]
> Этим самым ты офрмишь завещание, по которому твоего компонента
> будут хоронить не на Родине.
Да нет. Просто похоронит его тот самый компонент в тот момент, когда его начнёт хоронить форма.
← →
Crash Coredump © (2006-03-10 14:50) [18]
> Этим самым ты офрмишь завещание, по которому твоего компонента
> будут хоронить не на Родине.
Красиво излагаешь :)
Но без рекурсии все равно не обойтись.
← →
Ega23 © (2006-03-10 14:54) [19]
> А вообще, кстати, а что будет, если я свойство Owner у компонента
> выставлю на на форму, а на другой контейнерный компонент?
>
В Design-time на форму положены TEdit и TPanel; на панель положен ещё один TEdit
procedure TForm1.Button1Click(Sender: TObject);
var
i, cnt:Integer;
begin
cnt:=0;
for i:=0 to componentcount-1 do
if (Components[i] is TEdit) then Inc(Cnt);
ShowMessage(IntToStr(cnt));
end;
Результат - 2.
Расширим:
procedure TForm1.Button1Click(Sender: TObject);
var
i, cnt:Integer;
begin
With TEdit.Create(Form1) do
begin
Parent:=Form1;
SetBounds(10, 20, 100, 20);
end;
With TEdit.Create(Panel1) do
begin
Parent:=Panel1;
SetBounds(10, 20, 100, 20);
end;
cnt:=0;
for i:=0 to componentcount-1 do
if (Components[i] is TEdit) then Inc(Cnt);
ShowMessage(IntToStr(cnt));
end;
Результат - 3.
Вывод: если в ран-тайме создавать компонент, не от формы, то действительно придётся рекурсивно обходить.
← →
Leonid Troyanovsky © (2006-03-10 15:08) [20]
> Ega23 © (10.03.06 14:54) [19]
> Результат - 3.
1.
--
Regards, LVT.
← →
Anatoly Podgoretsky © (2006-03-10 15:11) [21]А вопрос то читали?
Во всем приложении.
← →
Ega23 © (2006-03-10 15:19) [22]
> Leonid Troyanovsky © (10.03.06 15:08) [20]
Не, ну первые-то два TEdit, что в дизайн-тайме положили, никто никуда не убирал...
← →
begin...end © (2006-03-10 15:20) [23]> msguns © (10.03.06 14:24) [16]
> Этим самым ты офрмишь завещание, по которому твоего компонента
> будут хоронить не на Родине.
Если компонент -- контрол, то это зависит от того, кто у него parent. TWinControl (или его наследник) перед смертью "хоронит" тех своих детишек, для которых он является parent"ом. Потом принимается за тех из оставшихся, для которых он является owner"ом.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c