![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FIND TEXT RESOURCES [D7, Win95/98, Win2k, WinXP]
KALqYAN © (2006-03-10 13:24:00)Подскажите пожалуйста, как в своём приложении можно отыскать все Caption'ы, Text'ы и тд. всех присутствующих компонентов?, чтоб потом их можно было бы например каким нибудь циклом переименовать...
Спасибо!
begin...end (2006-03-10 15:20:00) [1]> msguns © (10.03.06 14:24) [16]
> Этим самым ты офрмишь завещание, по которому твоего компонента
> будут хоронить не на Родине.
Если компонент -- контрол, то это зависит от того, кто у него parent. TWinControl (или его наследник) перед смертью "хоронит" тех своих детишек, для которых он является parent'ом. Потом принимается за тех из оставшихся, для которых он является owner'ом.
Ega23 (2006-03-10 15:19:00) [2]
> Leonid Troyanovsky © (10.03.06 15:08) [20]
Не, ну первые-то два TEdit, что в дизайн-тайме положили, никто никуда не убирал...
Anatoly Podgoretsky (2006-03-10 15:11:00) [3]А вопрос то читали?
Во всем приложении.
Leonid Troyanovsky (2006-03-10 15:08:00) [4]
> Ega23 © (10.03.06 14:54) [19]
> Результат - 3.
1.
--
Regards, LVT.
Ega23 (2006-03-10 14:54:00) [5]
> А вообще, кстати, а что будет, если я свойство 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.
Вывод: если в ран-тайме создавать компонент, не от формы, то действительно придётся рекурсивно обходить.
Crash Coredump (2006-03-10 14:50:00) [6]
> Этим самым ты офрмишь завещание, по которому твоего компонента
> будут хоронить не на Родине.
Красиво излагаешь :)
Но без рекурсии все равно не обойтись.
Alkid (2006-03-10 14:28:00) [7]
> Этим самым ты офрмишь завещание, по которому твоего компонента
> будут хоронить не на Родине.
Да нет. Просто похоронит его тот самый компонент в тот момент, когда его начнёт хоронить форма.
msguns (2006-03-10 14:24:00) [8]>Ega23 © (10.03.06 14:18) [14]
>Блин, ну не десантник я!
>И вообще я это "голубое братство" не люблю...
Но хоть в глаз-то дать можешь ?
>Alkid © (10.03.06 14:19) [15]
>А вообще, кстати, а что будет, если я свойство Owner у компонента
выставлю на на форму, а на другой контейнерный компонент?
Этим самым ты офрмишь завещание, по которому твоего компонента будут хоронить не на Родине.
Alkid (2006-03-10 14:19:00) [9]
> А не будете слушать и в глаз дать может - десантник блин
Вот щас тебе в глаз и даст :)
А вообще, кстати, а что будет, если я свойство Owner у компонента
выставлю на на форму, а на другой контейнерный компонент?
Ega23 (2006-03-10 14:18:00) [10]
> А не будете слушать и в глаз дать может - десантник блин
> !
Блин, ну не десантник я!
И вообще я это "голубое братство" не люблю...
Ega23 (2006-03-10 14:11:00) [11]
> Может быть там и линейный список.
Линейный. По Owner'у.
msguns (2006-03-10 14:04:00) [12]Слушайте Ежу - дело говорит.
А не будете слушать и в глаз дать может - десантник блин !
;)
Alkid (2006-03-10 14:02:00) [13]
> TForm.Components - для красоты? :о)
Ага. Чистая декорация. :)
Не знаю. Не пробовал. Может быть там и линейный список.
Ega23 (2006-03-10 14:01:00) [14]
> А если у тебя структура древесная? Панель на панели и кнопочка
> где-то в конце?
TForm.Components - для красоты? :о)
DarkLord (2006-03-10 13:59:00) [15]
> Так не получится. Нужно ComponentCount и Components[i] использовать.
Я просто выдрал кусок кода из операции с PageControl и поменял на Form1, а в условии цикла поменять забыл :)
Но суть именно такова ;)
DarkLord (2006-03-10 13:56:00) [16]
> Как причём. А если, например, на форме панель, а на ней
> ещё контролы? Твой код их не учтёт.
Упс. Согласен. :)
Alkid (2006-03-10 13:55:00) [17]
> Нафига рекурсивно?
А если у тебя структура древесная? Панель на панели и кнопочка где-то в конце?
Ega23 (2006-03-10 13:55:00) [18]
> Вполне можно обойтись. Например так:
>
> for i:=0 to Form1.ControlCount-1 do
Так не получится. Нужно ComponentCount и Components[i] использовать.
Ega23 (2006-03-10 13:54:00) [19]
> а потом для каждой формы рекурсивно перебираешь компоненты.
Нафига рекурсивно?
Stakan (2006-03-10 13:53:00) [20]DarkLord © (10.03.06 13:49) [2]
Как причём. А если, например, на форме панель, а на ней ещё контролы? Твой код их не учтёт.