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

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

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

Имеется следующая проблема: динамически создаю компонент groupbox, с несколькими Label и кнопкой. Необходимо редактировать эти элементы, однако обратиться к ним напрямую для меня затруднительно. Хотелось бы узнать: есть ли возможность получать значения элементов созданного groupbox по щелчку на этот groupbox? Данные по идее должны переноситься из выбранного groupbox на заранее созданные статические Edit 1, Edit 2 и тому подобное. А затем как сохранить их обратно в тот же Groupbox из которого они были получены?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2013, 14:26
Ответы с готовыми решениями:

Получение значений(Text) из динамически созданных элементов(Edit)
Добрый день! Описание программы Есть одна проблемка. Есть Form1 на ней...

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

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

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

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

25
FIL
Модератор
3422 / 2556 / 728
Регистрация: 19.09.2012
Сообщений: 7,926
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 Кб, 8 просмотров)
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

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

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

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


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

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

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