Имя: Пароль:
IT
 
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) примени паттерн "Фабрика" - слепи процедуру которая возвращает массив контролов