Thema: Delphi Seltsame Includes?

Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#1

Seltsame Includes?

  Alt 15. Aug 2007, 11:31
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?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat