Jetzt steh ich voll aufm Schlauch.
Folgende simple
Unit in ihrem Anfangsstadium:
Delphi-Quellcode:
unit DataObjectsPLC;
interface
uses
// Delphi / VCL Units
SysUtils;
type
//*** Forward declarations
TPLCDataLayout =
class;
TPLCBit =
class;
TPLCBit =
class(TObject)
private
FIsError: Boolean;
FText:
String;
procedure SetIsError(
const Value: Boolean);
procedure SetText(
const Value:
String);
public
property IsError: Boolean
read FIsError
write SetIsError;
property Text:
String read FText
write SetText;
end;
TPLCDataLayout =
class(TObject)
private
FBits:
Array of TPLCBit;
FLength: Integer;
procedure CleanUpBits;
function GetBits(AIndex: Integer): TPLCBit;
procedure SetLength(
const Value: Integer);
public
constructor Create;
destructor Destroy;
override;
property Bits[AIndex: Integer]: TPLCBit
read GetBits;
property Length: Integer
read FLength
write SetLength;
end;
implementation
procedure TPLCBit.SetIsError(
const Value: Boolean);
begin
FIsError := Value;
end;
procedure TPLCBit.SetText(
const Value:
String);
begin
FText := Value;
end;
constructor TPLCDataLayout.Create;
begin
FLength := 0;
System.SetLength(FBits, 0);
inherited;
end;
destructor TPLCDataLayout.Destroy;
begin
CleanUpBits;
inherited;
end;
procedure TPLCDataLayout.CleanUpBits;
var
i: Integer;
begin
for i := 0
to System.Length(FBits) - 1
do
begin
FreeAndNil(FBits[i]);
end;
System.SetLength(FBits, 0);
end;
function TPLCDataLayout.GetBits(AIndex: Integer): TPLCBit;
begin
result := FBits[AIndex];
end;
procedure TPLCDataLayout.SetLength(
const Value: Integer);
begin
FLength := Value;
CleanUpBits;
System.SetLength(FBits, FLength);
end;
end.
So. Wenn sich jetzt jemand fragt, warum ich dort drin immer explizit
Delphi-Quellcode:
System.SetLength(FBits, 0) // und
System.Length(FBits)
aufrufe, der stellt sich die gleiche Frage wie ich.
Ohne das explitzite vorgestellte System bekomme ich die Compilermeldung:
Zitat von
Delphi Compiler:
[Fehler] DataObjectsPLC.pas(91): Inkompatible Typen: 'Integer' und 'dynamic array'
Und wenn ich
Delphi-Quellcode:
uses
// Delphi / VCL Units
System, SysUtils;
verwende bekomme ich ein:
Zitat von
Delphi Compiler:
[Fehler] DataObjectsPLC.pas(7): Bezeichner redefiniert: 'System'
WAS zum Teufel hat sich hier eingeschlichen?