Динамическое создание "сложных" контролов

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Динамическое создание "сложных" контролов

Сообщение yanis » 18.11.2012 11:27:49

Начну с части кода:
Код: Выделить всё
var
  Root2FormControls: Array of TControl;
...
            case db_form_text.Strings[i+1] of
                 'TLabeledEdit': begin
                             CRef := GetClass('TLabeledEdit');
                             if CRef <> nil then begin
                                Root2FormControls[j] := TLabeledEdit.Create(TabSheet3);
//                                Root2FormControls[j].EditLabel.Caption := db_form_text.Strings[i+2];
                                Root2FormControls[j].top := itop;
                                Root2FormControls[j].left := ileft;
                                Root2FormControls[j].width := iwidth;
                                Root2FormControls[j].Parent := TabSheet3;
                                Root2FormControls[j].Visible:=true;
                                itop := itop + Root2FormControls[j].Height + 5;
                             end else begin
                                 ShowMessage('No GetClass for TLabeledEdit');
                             end;
                 end;
...

В таком виде программа работает и создаются EditBox-ы без Label.
Если раскомментировать
Root2FormControls[j].EditLabel.Caption := db_form_text.Strings[i+2];
- получаю ошибку компиляции
main.pas(273,54) Error: identifier idents no member "EditLabel"

Вопрос простой: как добавить Label к программно созданному TLabeledEdit?
Заранее спасибо за помощь.

Добавлено спустя 1 час 46 минут 59 секунд:
Та же самая беда с
Код: Выделить всё
                 'TDBLookupComboBox': begin
                      Root2FormControlsLabels[j] := TLabel.Create(TabSheet3);
                      Root2FormControlsLabels[j].Caption := db_form_text.Strings[i+2];
                      Root2FormControlsLabels[j].top := itop;
                      Root2FormControlsLabels[j].left := ileft;
                      Root2FormControlsLabels[j].Parent := TabSheet3;
                      Root2FormControlsLabels[j].Visible:=true;
                      itop := itop + Root2FormControlsLabels[j].Height;

                      Root2FormControlsZQ[j] := TZQuery.Create(TabSheet3);
                      Root2FormControlsZQ[j].Connection := ZConnection1;
                      Root2FormControlsZQ[j].SQL.Clear;
                      Root2FormControlsZQ[j].SQL.Text := 'SELECT id, descr FROM `anns_references` WHERE (' + db_form_text.Strings[i+3] + ') ORDER BY sort, descr';
                      Root2FormControlsZQ[j].Active := true;

                      Root2FormControlsDS[j] := TDataSource.Create(Self);
                      Root2FormControlsDS[j].DataSet := Root2FormControlsZQ[j];
                      Root2FormControlsDS[j].Enabled := true;

                      CRef := GetClass('TDBLookupComboBox');
                      if CRef <> nil then begin
                         Root2FormControls[j] := TDBLookupComboBox.Create(TabSheet3);
                         Root2FormControls[j].top := itop;
                         Root2FormControls[j].left := ileft;
                         Root2FormControls[j].width := iwidth;
                         Root2FormControls[j].Parent := TabSheet3;
                         Root2FormControls[j].ListSource := Root2FormControlsDS[j];
                         Root2FormControls[j].ListField := 'descr';
                         Root2FormControls[j].KeyField := 'id';
                         Root2FormControls[j].Visible:=true;
                         itop := itop + Root2FormControls[j].Height + 5;
                      end else begin
                         ShowMessage('No GetClass for TDBLookupComboBox');
                      end;
                 end;

Root2FormControls[j].ListSource := Root2FormControlsDS[j];
Root2FormControls[j].ListField := 'descr';
Root2FormControls[j].KeyField := 'id';

main.pas(315,47) Error: identifier idents no member "ListSource"
main.pas(316,47) Error: identifier idents no member "ListField"
main.pas(317,47) Error: identifier idents no member "KeyField"
yanis
незнакомец
 
Сообщения: 6
Зарегистрирован: 14.07.2012 16:47:37

Re: Динамическое создание "сложных" контролов

Сообщение Mr.Smart » 18.11.2012 13:27:51

Откуда ж компилятор знает класс какого типа у вас хранится в переменной?
Код: Выделить всё
TDBLookupComboBox(Root2FormControls[j]).ListSource := TDataSource(Root2FormControlsDS[j]);

или
Код: Выделить всё
(Root2FormControls[j] as TDBLookupComboBox).ListSource := (Root2FormControlsDS[j] as TDataSource);


Учим мат часть!!!
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Динамическое создание "сложных" контролов

Сообщение yanis » 18.11.2012 13:55:42

Разумеется, не знает.
Спасибо, подзадача решена!
Матчасть учу. Такой вот "Hello World" у меня.
yanis
незнакомец
 
Сообщения: 6
Зарегистрирован: 14.07.2012 16:47:37


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 212

Рейтинг@Mail.ru