Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задание имени объекта с помощью переменной, Видел такое в скриптовых языках... 
V
    Опции темы
pankerstein
  Дата 23.12.2006, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 16.11.2006
Где: г. Белгород

Репутация: нет
Всего: нет



Доброго времени суток!

У меня такой вопрос:
Допустим у меня на форме 10... и т.д. объектов одного типа (допустим TEdit). Так вот текст из них у меня помещается в структуру, и иногда надоедает писать для 10-ти полей, N строк кода:

Код

begin
form2.rep.Fields[1].text:= edit1.Text;
form2.rep.Fields[2].text:= edit2.Text;
form2.rep.Fields[3].text:= edit3.Text;
form2.rep.Fields[4].text:= edit4.Text;
// и так далее

Конечно хотелось бы сделать это в цикле, но для этого вместо 1,2,3,4 и т.д. должно быть i(что очевидно smile).. с массивом то порядок, а вот как перебрать при помощи изменяющегося i, поля Edit???
Т.е. задать имя Tedit, как edit+i.

В скриптовом языке AS2.0,3.0 было так ["строка"+i].метод/свойство, помоему даже гдето ещё видел, а вот в делфи, сколько ни бился ничего не нашёл smile

Помогите кто чем может! зараннее спосибо...

п.с. Прошу не винить меня в том, что я линивый, ("подумаешь 10 строк кода вместо цыкла"- скажите вы), но программа которую я пишу работает с документами,которые собственно различаются колличеством этих самых полей вода. В одном 5 в другом 15... Видов документов у меня около 20, а теперь представьте, в каждом вот так писать, кучу строк. А то задал в документе i, в каждом своё, и общую процедуру для всех с параметром i. омоему оправданно 
PM WWW   Вверх
anwe
Дата 23.12.2006, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: нет
Всего: 23



Так что ли:
Код

form2.rep.Fields[i].text:=TEdit(FindComponent('Edit'+IntToStr(i))).Text

PM MAIL   Вверх
Beltar
Дата 23.12.2006, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 3
Всего: 7



Компоненты лежат на чем-нибудь вроде панели или формы, и можно перебрать их используя ее свойство Controls, оно у любого наследника TWinControl есть.
Код

for i:=0 to Form.ControlsCount do
  begin
  if Controls[i].Name=...
  end



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
pankerstein
Дата 23.12.2006, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 16.11.2006
Где: г. Белгород

Репутация: нет
Всего: нет



Спасибо !!! разобрался !: )))))))))))
PM WWW   Вверх
pankerstein
Дата 23.12.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 16.11.2006
Где: г. Белгород

Репутация: нет
Всего: нет



Цитата(Beltar @ 23.12.2006,  19:35)
Компоненты лежат на чем-нибудь вроде панели или формы, и можно перебрать их используя ее свойство Controls, оно у любого наследника TWinControl есть.
Код

for i:=0 to Form.ControlsCount do
  begin
  if Controls[i].Name=...
  end

Думал по началу то что надо.. однако всё равно грамостко получается.. мне нужна анология как если бы на месте controls[i].name стояло controls[i].text, однако понятное дело делфи пишет, что такого свойства ему не объявили... 

to *anwe... не получается у меня так как ты подсказал.. может потому, что компоненты у меня на дочерней форме, а вызов идет с главной...ошибку не выдаёт, но когда хочу посмотреть что там записалось из edit в record то там пустоsmile



PM WWW   Вверх
Beltar
Дата 23.12.2006, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 3
Всего: 7



Тут по-любому громоздко получится. Но если у тебя компоненты лежат на панели, или в GroupBox'е, (что еще и красиво), и все одинаковые, то код упрощается, т. к. можно сразу без проверки класса делать им, например.
Name:=(WinContol.Controls[i] as TEdit).Name; если нужно получить имя. Дальше можешь над ним всяко изгаляться.



--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
pankerstein
Дата 23.12.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 16.11.2006
Где: г. Белгород

Репутация: нет
Всего: нет



Цитата(Beltar @  23.12.2006,  22:48 Найти цитируемый пост)
Name:=(WinContol.Controls[i] as TEdit).Name


beltar! rulez!!
То что нужно! работает! и как надо!!!! smile 

Тема закрыта!

PM WWW   Вверх
Beltar
Дата 24.12.2006, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 3
Всего: 7



Добавлю, что можно и не совокупляться с именами, выдирая из них номер, а раздать эдитам теги и получать их. smile Собственно, когда мне надо различить несколько одинаковых контролов, я так и делаю и уверен, что 99% программеров поступает также. smile


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.