|
Delphi . Действия с динамическим объектом в embarcadero delphi xe2 | ☑ | ||
---|---|---|---|---|
0
dimoverok
22.04.12
✎
20:52
|
По нажатию кнопки динамически создается 5 комбобоксов. При повторном нажатии кнопки создается еще группа из 5 комбобоксов на 20 пикселей ниже предыдущей группы и так можно повторять практически бесконечно раз.
вот код procedure TFt1.FormCreate(Sender: TObject); begin nu := 1; end; procedure DobPol(); var ComboBox: TComboBox; begin if (nu=1) then begin vu:=5 end; for I := nu to vu do begin Combobox:=TCombobox.Create(Ft1); Combobox.Parent:=Ft1; Combobox.Style:=csSimple; Combobox.Left:=20+l; Combobox.Top:=50+t; Combobox.Width:=100; Combobox.Text:=''; ComboBox.Name:='ComboBox'+IntToStr(i); Ft1.Label1.Caption:=ComboBox.Name; ComboBox.Text:=''; l:=l+120; end; nu:=vu+1; vu:=vu+5; t:= t+20; l:=0; if (i mod 30 = 0 ) then begin Ft1.height:= Ft1.height+120; end; end; {$R *.dfm} procedure TFt1.Button1Click(Sender: TObject); var ComboBox: TComboBox; begin DobPol(); end; Но, необходимо сделать, чтобы следующая группа комбобоксов(либо других объектов) создавались по выполнению условия : последний комбобокс *НЕ ПУСТОЙ*(т.е. пользователь либо заполнил компбобокс вручную, либо выбрал из всплывающего списка доступные данные). Так же, по идеи, я смогу воспользоваться этими же командами для выполнения других работ с этими группами, автоматически создаваемыми объектами. Но *эти* команды я не могу найти, или же находил, но может не правильно пытался воспользоваться. Если бы объекты были изначально на форме, код бы выгладил так - Если на комбобокс_5(10,15,20,...) клик(фокус,выбран, выделен) и комбобокс_5(10,15,20,...) не пустой, тогда выполнить процедуру Dobpol(); Пожалуйста, помогите понять, как проводить дальнейшею работу с динамически создаваемыми объектами. Мне будет достаточно, наверное, хотя бы одного примера кода работы с хоть каким нибудь объектом типа Edit или ComboBox. Являюсь студентом второго курса, пожалуйста, не судите строго. |
|||
1
H A D G E H O G s
22.04.12
✎
21:07
|
навскидку
(Ft1.FindComponent('ComboBox1')as TComboBox).Visible:=false; |
|||
2
H A D G E H O G s
22.04.12
✎
21:08
|
Ну или в массив сохранить, хоть и лишнее.
|
|||
3
HeroShima
22.04.12
✎
21:09
|
или сохранять указатель на последний при генерации
|
|||
4
dimoverok
22.04.12
✎
21:14
|
скрыть/показать к сожалению не вариант... предлагали, но это не совсем хорошо(не знаю, может быть если ничего совсем не получиться, то придется наверное к этому перейти).
Указатель на последний как сделать? и не совсем подходит мне кажется, потому что дальнейшие, ДАЛЬнейшие действия - содержимое комбобокс_1(6,11,16,...) будут уходить в одну таблицу, а к примеру из комбобокс_4(9,14,19,...) будут в другую, и так надо будет фокусироваться(выбирать,выделять) каждый комбобокс для других работ с содержимым... |
|||
5
HeroShima
22.04.12
✎
21:16
|
А фокус там зачем?
|
|||
6
dimoverok
22.04.12
✎
21:46
|
ну не совсем фокус, я просто не могу подобрать нужное слово. главное - в процессе работы программы, как программно фокусироваться на объекте с проверкой его состояния
|
|||
7
HeroShima
22.04.12
✎
21:48
|
(6) поиск элемента формы по атрибутам / сохранение ссылок на элементы в массиве / т.п.
|
|||
8
mistеr
22.04.12
✎
22:25
|
(2) +1, При создании добавляй в TList. Проверяешь последний в списке.
|
|||
9
ILM
гуру
22.04.12
✎
22:53
|
Фигасе, давно подраздел сделали "Delphi"...
|
|||
10
dimoverok
22.04.12
✎
23:43
|
поиск эелементов формы по атрибутам мне не извесен ... Можете ли вы объяснить как можно подробно и примитивно?
сохранить ссылки на элементы в массив... Дело в том, что паскаль был у нас довольно поверхностно и перед тем, как нас начали ганять по делфи, нам в головы усилино загружали Си. в СИ я был добавил строчки(предворительно объявив float* massiv[]; где нибудь в начале программы) и в цикле massiv[i]=&combobox; кажется так... Tlist вообще ниразу еще не трогал, опять же, если можете, опишите пожалуйста дейсвия. Есил я добавлю ссылки в массив, понятно как потом работать в других направлениях. Однако, можете ли посоветовать событие, к которому привязать проверку? Нажатие любой клавиши на клавиатуре желательно исключить. |
|||
11
mistеr
22.04.12
✎
23:55
|
(10) Если хочешь сдать, придется и почитать и потрогать. В сети куча инфы на русском с примерами по работе с любыми компонентами и классами. На delphikingdom.ru прекрасный поиск по имени класса/компонента.
Пойми, здесь не дельфисты в общем-то собрались, ради тебя вряд ли кто-то будет лазить по справке, запускать среду, разжевывать все тебе до мелкой кашки. Насчет события, сам же написал (0), по нажатию кнопки. |
|||
12
dimoverok
23.04.12
✎
00:24
|
да я понимаю что это не специализированный форум, я пытаюсь узнать и на других ресурсах.
примеров работы с динамически создаваемыми объектами практически нету. А по моему вопросу я вообще не нашел готовой, выложенной на всеобщее обозрение информации. я в принципе, прошу хотя бы подтолкнуть в нужное направление, и лишь по возможности привести какие то примеры . я уже начал искать информацию работы с Tlist, сохранение адреса объекта... за ссыль спасибо, я уже открыл и сейчас все там просмотрю, может быть еще и что нибудь другое интересное найду, которое пригодиться. на каждой форме я начал с того, что находил первый кусочек и начинал его усовершенствовать под себя. для этой формы я нашел только это var Edit: TEdit; Edit:=TEdit.Create(Form1); все остальное я дописал сам, методом проб и ошибок. На весь код, который у меня в первом посту, потратил примерно 2 часа. Сколько времени уйдет у нормального делфиста? 30 секунд? по поводу кнопки - её в идеале, там не должно быть. форма должна будет создаться с первой группой объектов, а далее группы появляться должны только после заполнения предыдущей HeroShima огромное спасибо, с массивом стало что то получаться. |
|||
13
mistеr
23.04.12
✎
00:38
|
||||
14
dimoverok
23.04.12
✎
00:51
|
спасибо спасибо, я на половину там, на половину в делфи
|
|||
15
badboychik
23.04.12
✎
05:35
|
(10) а что мешает и здесь массив создать?
array of TComboBox или найди его по имени: function FindComponent(const AName: string): TComponent; |
|||
16
Андрюха
23.04.12
✎
06:04
|
(0) Стесняюсь спросить, а зачем "по нажатию кнопки динамически создается 5 комбобоксов. При повторном нажатии кнопки создается еще группа из 5 комбобоксов..."?
|
|||
17
badboychik
23.04.12
✎
07:13
|
(0) примени паттерн "Фабрика" - слепи процедуру которая возвращает массив контролов
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |