Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2013, 17:07   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию Работа со строками, преобразование...

Шапка этой темы довольно абстрактна, так как описать всю суть двумя словами я не смог.
Речь идёт не про обычную работу со строками, как с типом данных.
Меня интересует возможность преобразования строки, полученной программным путём в исходный код, и конечно же, это что то вроде " изменения исходного кода программы в процессе её выполнения ".
Соглашусь с тем, что это может оказаться бредом, но в процессе написания мною одной программы, где свойства Name компонентов однотипные - в определённом порядке такие наименования образуют некую последовательность (например, A, B, C и так далее), но это не даёт мне возможности обращаться к именам компонентов, каким либо образом используя любые последовательности, только обычный перебор.

Так вот вопрос в том, можно ли, например в цикле, вычислить, какой компонент будет обработан следующим, взять имя этого компонента в строку, а потом использовать полученную строку, как имя компонента ?

Или же такой вариант, при создании компонентов на форме проекта среда сама даёт последовательность, например Edit1, Edit2, Edit3... Можно ли выделенные циферки как то получить путём вычисления и пришить при обработке компонента ?

И ещё раз повторюсь: Соглашусь с тем, что это может оказаться бредом...
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 15.05.2013, 17:17   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

TComponent.FindComponent - поиск дочернего компонента по имени
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.05.2013, 17:17   #3
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

если я верно понял, то
Код:
var
  c : TComponent;
begin
  c := Form1.FindComponent('A');
  if c <> nil then
    if c is TEdit then // к примеру
      (* чё-то делаем *)
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.05.2013, 17:23   #4
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
если я верно понял, то
Код:
var
  c : TComponent;
begin
  c := Form1.FindComponent('A');
  if c <> nil then
    if c is TEdit then // к примеру
      (* чё-то делаем *)
А можно кейзом перебирать ?
Просто компонентов ровно столько, сколько клавиш на расширенной клавиатуре, плюс кнопочки, лэйбы и т.п...
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 15.05.2013, 17:27   #5
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
А можно кейзом перебирать ?
не понял вопроса(
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.05.2013, 17:35   #6
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
не понял вопроса(
Можно ли согласно вашему коду сделать так:

Код:
case c of
TEdit: {бла-бла-бла};
{и т.д.}
else; end;
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 15.05.2013, 17:45   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

))))))
нет
как вариант решения, если я верно уловил ход мыслей, можно всем нужным Edit-ам назначить Tag = 1, всем нужным Label-ам назначить Tag = 2 и т.д. по аналогии.
а далее сделать так:
Код:
var
  c : TComponent;
begin
  c := Form1.FindComponent('A');
  if c <> nil then
    case c.Tag of 
      0 : // мы уже знаем что под 0 - Эдиты
      1 : // мы уже знаем что под 1 - Лейбы
      // и т.д.
    else
    end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 15.05.2013, 17:48   #8
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

А можно ли сделать что то из ряда фантистики (для меня, исходя из моих знаний), а именно, выполнить сформированную строку, так код ? Будь то процедура, функция, набор операций, кусок оператора (операции)...
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 15.05.2013, 17:55   #9
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Yurk@ Посмотреть сообщение
))))))
нет
как вариант решения, если я верно уловил ход мыслей, можно всем нужным Edit-ам назначить Tag = 1, всем нужным Label-ам назначить Tag = 2 и т.д. по аналогии.
а далее сделать так:
Код:
var
  c : TComponent;
begin
  c := Form1.FindComponent('A');
  if c <> nil then
    case c.Tag of 
      0 : // мы уже знаем что под 0 - Эдиты
      1 : // мы уже знаем что под 1 - Лейбы
      // и т.д.
    else
    end;
Ну, допустим, у меня 104 компонента TImage... Каждому Image свой tag ?
Ничем не отличается от перебора, всё равно, что я запишу
Код:
case c.Name of
{пошёл перебор}
else; end;
ну, или если case'ом нельзя - то получаем обычные if'ы
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 15.05.2013, 18:18   #10
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

в зависимости от задачи
если нужно обработать каждый Image в отдельности - нужно думать как их различать,
а если можно все 104 TImage обработать по одному алгоритму - тогда всем одинаковое свойство Tag
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 15.05.2013 в 18:24.
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со строками missg Помощь студентам 3 09.11.2011 16:36
Работа со строками в СИ. just_dake Помощь студентам 5 04.05.2011 18:19
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
работа со строками в С(СИ) savra Помощь студентам 0 26.11.2009 12:50
Работа со строками. Galacticus Общие вопросы C/C++ 0 11.03.2009 16:49