Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Property не читает значение поля


hei ©   (2016-09-02 17:26:00) 

Всем добрый день!

Не ругайте слишком сильно за вопрос! Тяпница и сё такое...

Есть классы:


TContact = class
 private
  fOrgFullName: WideString;
  fPerFIO: WideString;
 ....
public
 ....
  property OrgFullName: WideString read fOrgFullName;
   property PerFIO: WideString read fPerFIO;
end;

TLnkDoc_Info = class
 private
   fLnkDocNumber: WideString;
   fLnkDocDate: TDateTime;
   fLnkDocLinkType: WideString;
 public
  ...
    property LnkDocNumber: WideString read fLnkDocNumber;
   property LnkDocDate: TDateTime read fLnkDocDate;
   property LnkDocLinkType: WideString read fLnkDocLinkType;
 end;

TDoc_Info = class
 private
    fDocAddr: TContact;                  //Адресат
   fDocAnn: WideString;                 //Аннотация
   fDocVisa: TContact;                  //Подписант
   fDocSender: TContact;          
...
 fDocLnkList: array of TLnkDoc_Info;
...
 public
   ....
  property DocAddr: TContact read fDocAddr;
   property DocAnn: WideString read fDocAnn;
   property DocVisa: TContact read fDocVisa;
   property DocSender: TContact read fDocSender;

  property DocLnkList: array of TLnkDoc_Info read fDocLnkList; ......????
end;

TXML_Doc = class
   private
     fDocument: TDoc_Info;              
   public
     constructor Create;
     procedure AnalysisXMLDoc;
     property pDocument: TDoc_Info read fDocument;
 end;

implementation

procedure TXML_Doc.AnalysisXMLDoc;
var
 Doc: DomDocument;
 XML_Doc: TXML_Doc;
begin
 //  создание экземпляра объекта DOMDocument;
   Doc := CoDOMDocument.Create;
 //  вызов метода Load экземпляра объекта DOMDocument;
   Doc.load('DocInfo.xml');
   XML_Doc := TXML_Doc.Create;
   Doc.Set_async(false);
   XML_Doc.fXMLText := Doc.xml;
   XML_Doc.fDocument.XMLGet_Doc_Info(Doc.documentElement.selectSingleNode('Document List'));

end;


Далее в FormShow пишу:

X_Doc:= TXML_Doc.Create;
  X_Doc.AnalysisXMLDoc;
Memo1.Text:= 'Номер документа: '+ X_Doc.pDocument.DocNumber + #13#10+
               'Дата документа: '+DateToStr(X_Doc.pDocument.DocDate);


Но Memo выводит объект как после выполнения метода Create (заполняет поля пустым значением, а дату текущей), и не работает свойство. Что не так? Разве нельзя по свойству получать (не методом) поле с типом другой класс, у кот. брать проперти и получать другое поле с типом класс...

И еще вопрос. Как быть со свойством для получения значений поля fDocLnkList ???

Заранее благодарен.


jcl   (2016-09-05 12:06:00) [1]


> ВладОшин ©   (05.09.16 11:48) [7]
> соотв.метод написать? (GetDocLnk)


Ахаха, спасибо!

P.S. не всякий каждый понедельник.... я огурцом...


ВладОшин   (2016-09-05 11:48:00) [2]

соотв.метод написать? (GetDocLnk)


jcl   (2016-09-05 11:39:00) [3]

И это, как оказалось не все....

Пишу в TDoc_Info:

private
....
   fDocLnkList: array of TLnkDoc_Info;  //Связанные документы
   function GetDocLnk(idx: integer): TLnkDoc_Info;
....
public
...
 property DocLnkList[idx: integer]: TLnkDoc_Info read GetDocLnk;


Компилятор пишет ошибку на строке function GetDocLnk:
E2065 Unsatisfied forward or external declaration: 'TDoc_Info.GetDocLnk'

Ткните носом, пожалуйста, где исправить?


kilkennycat   (2016-09-05 10:46:00) [4]

еще бы. каждый понедельник мы огурцом...


jcl   (2016-09-05 10:31:00) [5]

Спасибо всем!
В пн голова значительно свежее :)


ВладОшин   (2016-09-03 17:45:00) [6]

type
 TD = array of string;
 TC = class
 private
  FA: TD;
 public
   constructor Create;
   property A:TD read FA write FA;
 end;

constructor TC.Create;
begin
 inherited;
 SetLength(FA, 3);
 FA[0] := '0 0';
 FA[1] := '1 1';
 FA[2] := '2 2';
end;

var
 b: Byte;
begin
 C := TC.Create;
 for b := 0 to Length(C.A) - 1 do
   ShowMessage(C.A[b]);


Игорь Шевченко   (2016-09-02 19:19:00) [7]


> Подскажите только


Во всех примерах для такого рода полей делают два свойства, одно для получения количества элементов, другое для получения/замены элемента по индексу.

Динамический массив не может быть типом свойства


jcl   (2016-09-02 17:32:00) [8]

Вот я тупень....

в FormShow перекрывал объект TXML_Doc... Сделал в TXML_Doc.AnalysisXMLDoc; везде Self, заработало...

Подскажите только с

property DocLnkList: array of TLnkDoc_Info read fDocLnkList; ......????


Наверх

Титульная страница Поиск, карта сайта Написать письмо