Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

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

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

13.12.2013, 14:26. Просмотров 1762. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получение значений параметров динамически созданных компонентов (Delphi):

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

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

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

Удаление динамически созданных компонентов - Delphi
if not globrazr then Trichedit(PopupMenuforrichedit.PopupComponent).Free else messagedlg('Компонент находится в режиме...

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

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

25
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
13.12.2013, 17:20  [ТС] #16
насчёт минимального комплекта - я действительно не знал, что оттуда выкинуть.
0
U_Dimas
fatal error
135 / 127 / 12
Регистрация: 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 / 12
Регистрация: 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
Миниатюры
Получение значений параметров динамически созданных компонентов  
angstrom
2470 / 1846 / 66
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
16.12.2013, 01:56 #21
Delphi
1
...FindComponent(a.Name + 'LabSurname'...
Что таким способом должно быть найдено? Переменная a не определена.
0
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
16.12.2013, 02:01  [ТС] #22
Цитата Сообщение от angstrom Посмотреть сообщение
Что таким способом должно быть найдено?
Пытаюсь таким способом получить название groupbox, созданного динамически, по клику на него.

Добавлено через 2 минуты
Я хочу сделать что-то, обратное этому.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
 grp:=TGroupBox.Create(Form1);
          grp.Parent:=Form1;
          grp.Name:='grpbox'+IntToStr(i);
          grp.Caption:='панель'+IntToStr(I);
          grp.Color:=clred;
          grp.OnDblClick:=GroupBoxsClick;   
 
          LabSurname:=TLabel.Create(Form1);
          LabSurname.Parent:=grp;
          LabSurname.Name:= 'grpbox'+IntToStr(i)+'LabSurname';
          LabSurname.Top:=25;
          LabSurname.Left:=10;
          LabSurname.Caption:=Edit1.Text;
0
angstrom
2470 / 1846 / 66
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
16.12.2013, 02:11 #23
А по коду можно понять, что имя TLabel-а. Если GroupBox-а, то
Delphi
1
2
3
4
procedure TForm1.GroupBoxsClick(Sender: TObject);
begin
   Edit1.Text := (Sender as TGroupBox).Caption;  
end;
1
northener
пофигист широкого профиля
3244 / 2296 / 496
Регистрация: 15.07.2013
Сообщений: 13,533
16.12.2013, 02:14 #24
Цитата Сообщение от Somny Посмотреть сообщение
Выдаёт непонятную ошибку
Чего ж тут непонятного? FindComponent(a.Name + 'LabSurname') возвращает nil ибо a неопределено.
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.GroupBoxsClick(Sender: TObject);
var 
  i : Integer;
begin
  for i:=0 to TGroupBox(Sender).ControlCount-1 do
    if (TGroupBox(Sender).Controls[i] is TLabel) 
      and (TLabel(TGroupBox(Sender).Controls[i]).Name = TGroupBox(Sender).Name+'LabSurname')
    then Edit1.Text:=TLabel(TGroupBox(Sender).Controls[i]).Caption;
1
Somny
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 13
16.12.2013, 02:15  [ТС] #25
Цитата Сообщение от angstrom Посмотреть сообщение
А по коду можно понять, что имя TLabel-а.
Да, просто я связал имя GroupBox'а и имя Label'ов, которые в нём находятся. Я думал, что с помощью FindComponent смогу получить значение name у групбокса, сложить его с именем label'a, и получить его Caption.
0
angstrom
2470 / 1846 / 66
Регистрация: 14.09.2012
Сообщений: 5,981
Записей в блоге: 2
16.12.2013, 02:20 #26
Delphi
1
2
3
4
5
6
7
8
procedure TForm1.GroupBoxsClick(Sender: TObject);
var
  lbl : TLabel;
begin
  lbl := TLabel(FindComponent((Sender as TGroupBox).Caption + 'LabSurname'));
  if lbl <> NIL then
    Edit1.Text := lbl.Caption;
end;
1
16.12.2013, 02:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2013, 02:20
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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