Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
#1

Получение значений параметров динамически созданных компонентов - Delphi

13.12.2013, 14:26. Просмотров 1773. Ответов 25
Метки нет (Все метки)

Имеется следующая проблема: динамически создаю компонент groupbox, с несколькими Label и кнопкой. Необходимо редактировать эти элементы, однако обратиться к ним напрямую для меня затруднительно. Хотелось бы узнать: есть ли возможность получать значения элементов созданного groupbox по щелчку на этот groupbox? Данные по идее должны переноситься из выбранного groupbox на заранее созданные статические Edit 1, Edit 2 и тому подобное. А затем как сохранить их обратно в тот же Groupbox из которого они были получены?
http://www.cyberforum.ru/delphi-beginners/thread448258.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2013, 14:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получение значений параметров динамически созданных компонентов (Delphi):

Сохранение созданных компонентов динамически
Подскажите пожалуйста как при закрытии программы сохрянить созданые динамически...

Удаление динамически созданных компонентов
if not globrazr then Trichedit(PopupMenuforrichedit.PopupComponent).Free else...

Пересечение динамически созданных компонентов
Смоделировал ситуацию на обычно созданных компонентах, на картинке шейпы и мне...

События для динамически созданных компонентов
Создайте приложение с кнопкой Пуск, при нажатии на которую форма заполняется...

Выравнивание для динамически созданных компонентов
Есть кнопка, которая создает объект и заносит его в поле типа: Tlist<TObject>...

25
FIL
Модератор
3409 / 2547 / 725
Регистрация: 19.09.2012
Сообщений: 7,908
13.12.2013, 14:29 #2
Присваивай создаваемым компонентам имена и обращайся к ним при помощи FindComponent
0
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 14:37  [ТС] #3
FIL, я бы и рад, но пользователь вряд ли знает, какие имена программа даёт компонентам. Мне нужно получить эти названия именно по щелчку на groupbox. Если я что-то неправильно понял, напиши пожалуйста пример, как должен выглядеть такой onClick, который ты имеешь ввиду.
0
U_Dimas
fatal error
135 / 127 / 29
Регистрация: 10.04.2012
Сообщений: 357
13.12.2013, 14:52 #4
Вот такой код сменить цвет шрифта на красный всем label-ам в groupbox1
Вам останется получить все groupbox-ы ну и добавить к Label_ам то что вам надо:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
  i: Integer;
begin
  for i:=0 to GroupBox1.ControlCount-1 do
    begin
      if GroupBox1.Controls[i].ClassName= 'TLabel'
        then
          begin
            (GroupBox1.Controls[i] aS TLabel).Font.Color:= ClRed;
          end;
    end;
end;
А вот так перебираем все groupBox и задаем красный цвет шрифта:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
  i: Integer;
begin
  for i:=0 to Form1.ControlCount-1 do
    begin
      if Form1.Controls[i].ClassName= 'TGroupBox'
        then
          begin
            (Form1.Controls[i] aS TGroupBox).Font.Color:= ClRed;
          end;
    end;
end;
0
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 15:54  [ТС] #5
U_Dimas, Мне нужно поменять значения label'ов в конкретно выбранном Groupbox, а не во всех. FIL предложил сделать это поиском, но проблема в том, что для поиска нужно узнать имя того, что мы собственно ищем. В этом и проблема - я хочу получить значение name компонента groupbox, кликнув на него.

Попробую объяснить ещё раз:
Я создаю динамический groupbox с именем 'gr'+a[i].
Он появился на форме.
Теперь я хочу получить реальное значение этого 'gr'+a[i], кликнув на созданный groupbox. Может быть его name= gr1, может быть gr5 - мне главное это значение получить с помощью клика. Дальше всё более-менее понятно.

Добавлено через 33 минуты
Блин, ну неужели так нельзя сделать? Никак нельзя через SelectedIndex или что-то подобное в delphi получить значение имени компонента?
0
U_Dimas
fatal error
135 / 127 / 29
Регистрация: 10.04.2012
Сообщений: 357
13.12.2013, 16:06 #6
Для вновь создаваемых groupbox событие клик, вставте код:

Delphi
1
2
3
4
5
6
7
8
9
10
var
  XY_: Tpoint;
  a: TComponent;
begin
  GetCursorPos(XY_);
  if (FindDragTarget (XY_,false)) <> nil
    then
          a:= (FindDragTarget (XY_,false));
          ShowMessage(a.Name);
end;
1
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 16:12  [ТС] #7
U_Dimas, поставил приведённый вами текст программы на OnClick - к сожалению никакого сообщения при клике не выводится. Это может быть связано с OnMouseDown?

Добавлено через 3 минуты
Поменял на DblClick - теперь появляется сообщение, но оно пустое.
0
U_Dimas
fatal error
135 / 127 / 29
Регистрация: 10.04.2012
Сообщений: 357
13.12.2013, 16:17 #8
Какая версия delphi у вас, могу рабочий проект скинуть но у меня 7 версия
0
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 16:26  [ТС] #9
U_Dimas, у меня версия 7.0 Build 4.453.
0
U_Dimas
fatal error
135 / 127 / 29
Регистрация: 10.04.2012
Сообщений: 357
13.12.2013, 16:26 #10
Попробуйте отключить событие mousedown
0
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 16:40  [ТС] #11
U_Dimas, Отключил все остальные события - всё равно пустое сообщение.
0
U_Dimas
fatal error
135 / 127 / 29
Регистрация: 10.04.2012
Сообщений: 357
13.12.2013, 16:42 #12
Попробуйте запустить у себя

componentname.rar
0
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 16:50  [ТС] #13
U_Dimas, хмм, твоя работает, но у меня с таким же кодом почему-то нет.

Добавлено через 2 минуты
Точнее как - сообщение у меня показывается, но почему-то не показывается имя компонента.
0
U_Dimas
fatal error
135 / 127 / 29
Регистрация: 10.04.2012
Сообщений: 357
13.12.2013, 16:53 #14
Ну если минимальный комплект скинете - могу посмотреть где ошибка
0
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 17:03  [ТС] #15
Надеюсь удастся исправить.
0
Вложения
Тип файла: rar gendr.rar (183.8 Кб, 7 просмотров)
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 17:20  [ТС] #16
насчёт минимального комплекта - я действительно не знал, что оттуда выкинуть.
0
U_Dimas
fatal error
135 / 127 / 29
Регистрация: 10.04.2012
Сообщений: 357
13.12.2013, 17:24 #17
Дружище - так как ты ищем имя компонента, надо его указать:

grp.Name := 'наше имя';

Лучше всего завести глобальную переменую integer и увеличивать ее после каждого создания groupbox

Delphi
1
2
grp.Name := 'наше имя' + IntToStr (наша переменная);
inc (наша переменная) - прибавим к переменной 1
1
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 17:32  [ТС] #18
Цитата Сообщение от U_Dimas Посмотреть сообщение
Дружище - так как ты ищем имя компонента, надо его указать:
Блин, а я-то, тормоз, думал, что прога сама будет его выдумывать по такому же принципу. Действительно помогло. Спасибо большое, ты здорово выручил =)
0
U_Dimas
fatal error
135 / 127 / 29
Регистрация: 10.04.2012
Сообщений: 357
13.12.2013, 17:35 #19
Погоди сейчас еще надо с mousedown разобраться
0
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
16.12.2013, 01:51  [ТС] #20
Помогите пожалуйста. Возникли проблемы с кодом на этом моменте:

Delphi
1
2
3
4
5
6
7
8
9
10
 procedure TForm1.GroupBoxsClick(Sender: TObject);
    var
      XY_: Tpoint;
      a: TComponent;
    begin
      GetCursorPos(XY_);
      if (FindDragTarget (XY_,false)) <> nil
        then
        Edit1.Text:=TLabel(FindComponent(a.Name + 'LabSurname')).Caption;  
    end;
Пытаюсь получить текст из Label динамического компонента и записать его в Edit1

Выдаёт непонятную ошибку
0
Миниатюры
Получение значений параметров динамически созданных компонентов  
16.12.2013, 01:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2013, 01:51
Привет! Вот еще темы с решениями:

Удаление динамически созданных компонентов TEdit с формы
Здравствуйте, помогите пожалуйста с удалением компонентов TEdit с формы. Есть...

Удаление динамически созданных компонентов (panel, image, label)
Всем привет. У меня есть panel который создаётся внутри ScrollBox вместе с...

В чём правильно хранить настройки динамически созданных компонентов
Нужно запомнить такую структуру . Есть не ограниченное количества панелей они...

Сохранение динамически созданных компонентов программы при ее закрытии
Здравствуйте. Скажите пожалуйста, есть ли способ как-то сохранить результат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru