Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2018.10.21;
Скачать: [xml.tar.bz2];

Вниз

Property не читает значение поля   Найти похожие ветки 

 
hei   (2016-09-02 17:26) [0]

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

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

Есть классы:


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-02 17:32) [1]

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

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

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

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


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


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


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

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


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

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]);


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

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


 
kilkennycat ©   (2016-09-05 10:46) [5]

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


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

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

Пишу в 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"

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


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

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


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


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


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

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2018.10.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.001 c
2-1472826405
hei
2016-09-02 17:26
2018.10.21
Property не читает значение поля


2-1473119810
Денис11998833
2016-09-06 02:56
2018.10.21
TPanel на потомке от TCustomControl


2-1472882501
RusSun
2016-09-03 09:01
2018.10.21
Как быстро узнать что в строке одни нули?


1-1359522126
Vasya
2013-01-30 09:02
2018.10.21
Virtual Treeview как скрыть строку


2-1473244823
валя
2016-09-07 13:40
2018.10.21
чтение запись строки из файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский