передать значение поля динамически созданной формы

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

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

Ответить
zs02
незнакомец
Сообщения: 3
Зарегистрирован: 19.11.2010 14:05:21

передать значение поля динамически созданной формы

Сообщение zs02 »

Необходимо передать значение поля динамически созданной форме
Вот код создания дочерней формы в главной форме

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

procedure TfMain.Create_Forms(name_forms:string);
var
 NewPage     : TTabSheet;
 NewToolsPan : TPanel;
 NewCloseBtn : TSpeedButton;
 f: Tformclass;
 b: TForm;
begin
  NewPage:=TTabSheet.Create(Self);
  NewPage.PageControl:=PageControl1;
  NewPage.Caption:=TreeView1.Selected.Text;
  //-------------------------
  NewToolsPan:=TPanel.Create(NewPage);
  NewToolsPan.BevelOuter:=bvNone;
  NewToolsPan.Color:=clForm;
  NewToolsPan.Align:=alTop;
  NewToolsPan.Caption:='';
  NewToolsPan.Height:=20;
  NewToolsPan.Parent:=NewPage;
  //Close-Button
  NewCloseBtn:=TSpeedButton.Create(NewPage);
  NewCloseBtn.Width:=NewToolsPan.Height;
  NewCloseBtn.Align:=alRight;
  NewCloseBtn.Caption:='';
  dm1.ImageList1.GetBitmap(4,NewCloseBtn.Glyph);
  NewCloseBtn.Hint:='Закрыть вкладку';
  NewCloseBtn.Tag:=integer(NewPage);
  NewCloseBtn.Parent:=NewToolsPan;
  NewCloseBtn.OnClick:=@OnClosePageClick;
  //form-template
  f:=TFormclass(findClass(name_forms));
  b:=f.CreateParented(NewPage.Handle);
  with b do
    begin
     SetStringPropertyIfExists(b,'id_tree','122');
     Align:=NewPage.Align;
     BorderStyle:= bsNone;
     Parent:=NewPage;
     Show;
     PageControl1.ActivePage:=PageControl1.Pages[PageControl1.PageCount-1];
   end;
end;                       


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

procedure TfMain.SetStringPropertyIfExists(AComp: TObject; APropName: string;AValue: string);

 var
   PropInfo: PPropInfo;
   TK: TTypeKind;
 begin
  PropInfo:=GetPropInfo(AComp, APropName);
  if PropInfo <> nil then
   begin
     TK := PropInfo^.PropType^.Kind;
    if (TK = tkString) or (TK = tkLString) or (TK = tkWString) then
       SetStrProp(AComp, PropInfo, AValue);
   end;
 end;                                 


объявление поля в дочерней форме

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

 private
...
id_tr :string;
...
public
    property id_tree: string read id_tr write id_tr ;
   
  end;
...         


Значение id_tree в форму не передается. Функция GetPropInfo не находит property id_tree. Класс дочерней формы заключаем в {$M+} и {$M-}.
В чем дело? :cry:
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

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

Заменяем public на published.
SeZuka
постоялец
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Сообщение SeZuka »

Вроде как свойство должно быть объявлено в published разделе
Ответить