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

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

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

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

Сообщение zs02 » 13.04.2013 10:43:32

Необходимо передать значение поля динамически созданной форме
Вот код создания дочерней формы в главной форме
Код: Выделить всё
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:
zs02
незнакомец
 
Сообщения: 3
Зарегистрирован: 19.11.2010 15:05:21

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

Сообщение Mr.Smart » 13.04.2013 12:04:06

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

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

Сообщение SeZuka » 13.04.2013 12:05:22

Вроде как свойство должно быть объявлено в published разделе
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru