Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.048 c
2-1141668489
vital538
2006-03-06 21:08
2006.03.26
FireBird


3-1138874396
AlAnNik
2006-02-02 12:59
2006.03.26
Входной параметр хранимой процедуры


11-1122709972
AdmeraL
2005-07-30 11:52
2006.03.26
COL and VCL ?


15-1141205838
Pazitron_Brain
2006-03-01 12:37
2006.03.26
Учебник по Турбо Паскалю. Немнюгин.


8-1129642025
фывыч
2005-10-18 17:27
2006.03.26
про HWaveOut