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

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

Неожиданный результат сложения записей. [D6, XP]


Drowsy ©   (2015-11-07 21:12:00) 

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 StdCtrls;

type

PCalcRecord = ^TCalcRecord;
TCalcRecord = record
  EQUIP_Pure : real;
end;

 TForm1 = class(TForm)
   Button1: TButton;
   Label2: TLabel;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
 private
   { Private declarations }
   WorkRecord : pCalcRecord;
   ER_Cranes : PCalcRecord;

 public
   { Public declarations }
 end;

var
 Form1: TForm1;

procedure ClearCalcRecord( var vCalcRecord : TCalcRecord);

function PlusCalcRecord  ( var vCalcRecord : TCalcRecord) : TCalcRecord;

function GetRecord(inValue : real
                           ) : TCalcRecord;

function GetCraneRecord(
             var inValue : real) : TCalcRecord;

implementation

{$R *.dfm}

function GetCraneRecord(
             var inValue : real) : TCalcRecord;
begin
 Result := GetRecord(inValue );
end;

procedure ClearCalcRecord( var vCalcRecord : TCalcRecord);
begin
 with vCalcRecord do
 begin
   EQUIP_Pure := 0;
 end;
end;

function PlusCalcRecord( var vCalcRecord : TCalcRecord) : TCalcRecord;
begin
 // здесь Result.EQUIP_Pure = 2222.22 !!!!! ЭТО КАК?
 // vCalcRecord.EQUIP_Pure = 7777.77
 Result.EQUIP_Pure := Result.EQUIP_Pure + vCalcRecord.EQUIP_Pure;
end;

function GetRecord(inValue : real
                           ) : TCalcRecord;
begin
 ClearCalcRecord(result);
 with Result do
 begin
   EQUIP_Pure := inValue;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var R : real;
begin
 ClearCalcRecord(ER_Cranes^);
 ClearCalcRecord(WorkRecord^);

 R := 2222.22;

 WorkRecord^ := GetCraneRecord( R );
//  здесь WorkRecord^.EQUIP_Pure =  2222.22
 WorkRecord^.EQUIP_Pure := 7777.77;
//  здесь WorkRecord^.EQUIP_Pure =  7777.77

// здесь  ER_Cranes^.EQUIP_Pure = 0;
 ER_Cranes^ := PlusCalcRecord(WorkRecord^);
// здесь  ER_Cranes^.EQUIP_Pure = 9999.99 !!!;

 Label2.Caption := FloatToStr(ER_Cranes^.EQUIP_Pure);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 new(ER_Cranes);
 new(WorkRecord);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Dispose(ER_Cranes);
 Dispose(WorkRecord);
end;

end.


Drowsy   (2015-11-07 23:07:00) [1]

Sorry! Разобрался, вопрос снимается..


Наверх

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