Доброго времени суток!!
Если не трудно, подскажите где мои ошибки? Чую их прям дофига :)
Не использовал никогда интерфейсы, захотелось поэкспериментировать, решил учиться на реальной задаче.
Нужен расчет стоимости маш.-часа. В него входит несколько параметров, нужно выдавать пользователю формулу и значение каждого параметра.
+ Соответственно, наваял вот такой интерфейс и "общий" класс для всех параметров |
type
IMashParameter = interface
// общие методы
function GetRubValue: Currency;
procedure SetRubValue(const RubValue: Currency);
function GetFormula: String;
procedure SetFormula(const Formula: String);
// переопределяемые
procedure ConstructFormula;
procedure DrawParamVals;
// общие свойства
property RubValue: Currency read GetRubValue write SetRubValue;
property Formula: String read GetFormula write SetFormula;
end;
type
TCommonParameter = class(TInterfacedObject, IMashParameter)
private
function GetRubValue: Currency;
procedure SetRubValue(const RubValue: Currency);
function GetFormula: String;
procedure SetFormula(const Formula: String);
public
procedure ConstructFormula;
procedure DrawParamVals;
property RubValue: Currency read GetRubValue write SetRubValue;
property Formula: String read GetFormula write SetFormula;
end;
|
Сами параметры описал как наследника TCommonParameter
+ Типа вот так |
type
TMashAmortiz = class(TCommonParameter)
AmortID: Integer;
AmortNorma: Double;
procedure ConstructFormula;
procedure DrawParamVals;
end;
type
TMashGRR = class(TCommonParameter)
GRR: Integer;
GRRTempKoeff: Double;
procedure ConstructFormula;
procedure DrawParamVals;
end;
|
+ Создал класс, который собирает в себе все параметры |
type
TMashSmetData = class(TPersistent)
public
VosstFormula: String;
GRRInfo: TMashGRR;
AmortInfo: TMashAmortiz;
|
+ И затем использую это все |
type
TMashCalculation = class
private
...
FMashSmetData: TMashSmetData;
procedure FSetMashSmetData(AMashSmetData: TMashSmetData);
public
property PriceSmetData: TMashSmetData read FMashSmetData write FSetMashSmetData;
end;
|
И вот теперь как мне значения то менять?
Напрямую естественно (Типа MashCalculation.PriceSmetData.GRRInfo.Formula) писать не дает.
Делаю в тестовой процедуре временный TMashSmetData:
var
MSD: TMashSmetData;
begin
...
//при исполнении вываливается что нельзя так присвоить, причем тип указывает в ошибке вообще не этот
MashCalculation.PriceSmetData.AssignTo(MSD);
Если не затруднит, укажите на ошибки?
Спасибо!