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

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

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

Ответить
yanis
незнакомец
Сообщения: 6
Зарегистрирован: 14.07.2012 16:47:37

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

Сообщение yanis »

Начну с части кода:

Код: Выделить всё

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"
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

Сообщение Mr.Smart »

Откуда ж компилятор знает класс какого типа у вас хранится в переменной?

Код: Выделить всё

TDBLookupComboBox(Root2FormControls[j]).ListSource := TDataSource(Root2FormControlsDS[j]);

или

Код: Выделить всё

(Root2FormControls[j] as TDBLookupComboBox).ListSource := (Root2FormControlsDS[j] as TDataSource);


Учим мат часть!!!
yanis
незнакомец
Сообщения: 6
Зарегистрирован: 14.07.2012 16:47:37

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

Сообщение yanis »

Разумеется, не знает.
Спасибо, подзадача решена!
Матчасть учу. Такой вот "Hello World" у меня.
Ответить