![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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; ......????