Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.02.2011, 23:17
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию Массовое изменение компонентов

Здраствуйте. Возникла следующая потребность, мне надо например через цикл массово изменить свойства компонента Tedit, а именно, visible. Т.к. едитов у меня около 60 штук, получится очень долго, да и мне их не 1 раз изменять надо. Так же едиты у меня названы по разному.
1) form2.name их 9 штук, т.е. form2.name2, form2.name3....
2) form4.idl их 44.
3) form4.klv их то же 44.
Дак вот сам я честно говоря пытался сделать, к тому же использовал гугл. Но ничего кроме 1 варианта я не нашёл, там был такой вариант: Через финд компонент изменяем свойство всех Tedit, которые нашли. Но мне надо только с определёнными именами. Пытался написать такой код:
Код:
For i := 2 to 10 Do Begin
        S := '';
       e1 := FindComponent('form2.name' + IntToStr(I)) As TEdit;
       e1.Visible:=false;
Но понятно, что это не работает, а больше ничего не надумал, надеюсь на вашу помощь!
Ответить с цитированием
  #2  
Старый 02.02.2011, 23:50
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Ну можно примитивно. Есть разные способы, этот первый пришел в голову. Сравнивать class...
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  for i:=0 to ComponentCount-1 do
    if(Components[i].ClassType = TEdit) then
      TEdit(Components[i]).Visible := False;
end;
__________________
Помогаю за Спасибо
Ответить с цитированием
  #3  
Старый 03.02.2011, 00:01
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

ну как вариант можешь у нужных тебе компонентов (те которые ты будешь скрывать\показывать) поставить свойство Tag=1. В таком случае твоя функция поска будет иметь примерно такой вид:
Код:
for i := 1 to 10 do
  begin
  e1:=(FindComponent('Edit'+IntToStr(i)) as TEdit);
  e1.Visible:= not e1.Tag=1;
  end;
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз

Последний раз редактировалось Yurk@, 03.02.2011 в 00:04.
Ответить с цитированием
  #4  
Старый 03.02.2011, 00:24
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию

Цитата:
Сообщение от v1s2222
Ну можно примитивно. Есть разные способы, этот первый пришел в голову. Сравнивать class...
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
  for i:=0 to ComponentCount-1 do
    if(Components[i].ClassType = TEdit) then
      TEdit(Components[i]).Visible := False;
end;
Мне не нужно изменять все Тедиты, так что ваш способ мне не подойдёт

Цитата:
Сообщение от Yurk@
ну как вариант можешь у нужных тебе компонентов (те которые ты будешь скрывать\показывать) поставить свойство Tag=1. В таком случае твоя функция поска будет иметь примерно такой вид:
Код:
for i := 1 to 10 do
  begin
  e1:=(FindComponent('Edit'+IntToStr(i)) as TEdit);
  e1.Visible:= not e1.Tag=1;
  end;

Спасибо, конечно это не очень удобно, но если до завтра никто другого не напишет, то попробую вашим способом

UPD:
Ох, поторопился я, оказывается мой вариант работает, только это из-за form2. он не работал, перенёс для теста на form2 это цикл, и всё отлично заработало. Теперь буду думать с form2. Если у кого-то есть соображения, то высказывайте.

Последний раз редактировалось Мяфк, 03.02.2011 в 00:33.
Ответить с цитированием
  #5  
Старый 03.02.2011, 05:41
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 663
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Form2.FindComponent(...) не?

От оно че, Михалыч! (с)
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.
Ответить с цитированием
  #6  
Старый 03.02.2011, 23:43
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию

Да, огромное спасибо, помогло.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025