Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.035 c
2-1142260999
Митяй
2006-03-13 17:43
2006.03.26
Иерархические данные


2-1142056505
The X
2006-03-11 08:55
2006.03.26
Ввод даты в поле Date.


2-1141663768
Arazel
2006-03-06 19:49
2006.03.26
IDAPI: Как вставить новую запись? С Автоинкрементом?


15-1141408225
ZeFiR
2006-03-03 20:50
2006.03.26
бесплатный хостинг со своим доменом


3-1138788233
AlAnNik
2006-02-01 13:03
2006.03.26
Проблема с MSDE





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский