Ich muss das ursprüngliche Thema noch mal aufgreifen, da ich noch ein paar Probleme habe, die ich mir nicht erklären kann.
Hier noch mal meine Klassen:
Delphi-Quellcode:
type
TBefehl =
class(TObject)
private
fGuid: AnsiString;
fZeilen: Integer;
fZeilenText: AnsiString;
fFirstRow: Integer;
fLastRow: Integer;
fElseRow: Integer;
FBlockGuid: AnsiString;
FIsInBlock: Boolean;
FIsInElse: Boolean;
published
property Zeilen: Integer
read fZeilen
write fZeilen;
property ZeilenText: AnsiString
read fZeilenText
write fZeilenText;
property FirstRow: Integer
read fFirstRow
write fFirstRow;
property LastRow: Integer
read fLastRow
write fLastRow;
property ElseRow: Integer
read fElseRow
write fElseRow;
property IsInBlock: Boolean
read FIsInBlock
write FIsInBlock;
property IsInElse: Boolean
read FIsInElse
write FIsInElse;
property GUID: AnsiString
read fGuid
write fGuid;
property BlockGuid: AnsiString
read FBlockGuid
write FBlockGuid;
public
constructor Create;
procedure WriteBefehlToStream(Stream: TStream);
procedure ReadBefehlFromStream(Stream: TStream);
end;
type
TECHO =
class(TBefehl)
private
fOn: Boolean;
fOff: Boolean;
fAt: Boolean;
fText: AnsiString;
procedure SetRow(Row: Integer);
function GetRow: Integer;
procedure SetIsInBlock(Value: Boolean);
function GetIsInBlock: Boolean;
procedure SetIsInElse(Value: Boolean);
function GetIsInElse: Boolean;
procedure SetBlockGuid(Value: Ansistring);
function GetBlockGuid: Ansistring;
public
procedure BuildZeilenText;
procedure WriteToStream(Stream: TStream);
procedure ReadFromStream(Stream: TStream);
published
property IsOn: Boolean
read fOn
write fOn;
property IsOff: Boolean
read fOff
write fOff;
property IsAt: Boolean
read fAt
write fAt;
property Text: AnsiString
read fText
write fText;
property Row: Integer
read GetRow
write SetRow;
property localIsInBlock: Boolean
read GetIsInBlock
write SetIsInBlock;
property localIsInElse: Boolean
read GetIsInElse
write SetIsInElse;
property localBlockGuid: AnsiString
read GetBlockGuid
write SetBlockGuid;
end;
Die Funktionen dazu
Delphi-Quellcode:
procedure TECHO.SetRow(Row: Integer);
begin
fFirstRow:=Row;
fLastRow:=Row;
fElseRow:=-1;
fIsInBlock:=False;
fIsInElse:=False;
fBlockGuid:='';
end;
function TECHO.GetRow: Integer;
begin
Result:=fFirstRow;
end;
procedure TECHO.SetIsInBlock(Value: Boolean);
begin
self.FIsInBlock:=Value;
end;
function TECHO.GetIsInBlock: Boolean;
begin
Result:=Self.FIsInBlock;
end;
procedure TECHO.SetIsInElse(Value: Boolean);
begin
self.FIsInElse:=Value;
end;
function TECHO.GetIsInElse: Boolean;
begin
Result:=self.FIsInElse;
end;
procedure TECHO.SetBlockGuid(Value: AnsiString);
begin
self.FBlockGuid:=Value;
end;
function TECHO.GetBlockGuid: AnsiString;
begin
Result:=self.FBlockGuid;
end;
procedure TECHO.BuildZeilenText;
begin
if (Self.fOn and not Self.fOff) then
Self.ZeilenText:='ECHO On' else
if (not Self.fOn and Self.fOff) then
Self.ZeilenText:='ECHO Off' else
if (not Self.fOn and not Self.fOff) then
Self.ZeilenText:='ECHO '+self.fText;
if self.fAt then
Self.ZeilenText:='@'+Self.ZeilenText;
self.Zeilen:=1;
end;
in der Formunit geht's dann folgendermaßen:
Delphi-Quellcode:
echo:=TECHO.Create;
echo.IsOn:=frm_echo.rb_echoon.Checked;
echo.IsOff:=frm_echo.rb_echooff.Checked;
echo.IsAt:=frm_echo.chk_at.Checked;
echo.Text:=frm_echo.edt_eigenerText.Text;
echo.BuildZeilenText;
if (chk_anfuegen.Checked) or (lst_batch.Items.Count=0) then begin
BefehlsListe.Add(echo);
ActRow:=BefehlsListe.Count-1;
end else begin
begin
echo.localIsInBlock:=InBlock;
echo.localIsInElse:=InElse;
echo.localBlockGuid:=Blockguid;
BefehlsListe.Insert(IndexOfBefehlGuid(BefehlguidListe[ActRow]), echo);
BefehlsList ist eine TObjectList.
Nun mein Problem:
Bis zum "BefehlsListe.Insert" funktioniert alles. D.h. alle Properties werden wie gewünscht gesetzt, das habe ich im Debugger kontrolliert.
Wenn ich mir nach dem Insert mein Object "echo" im Debugger ansehe, dann die die Properties "IsInBlock, IsInElse und Blockguid" immer auf False bzw '' , egal was ich vorher gesetzt habe. Ich komme aber nicht dahinter, warum das so ist. Interessanterweise ist der Zeilentext, der ja auch in der Klasse TBefehl deklariert ist, noch dem Insert noch vorhanden.
Bitte nicht über den Sinn der Funktionen oder Propertynamen diskutieren, ist eh nur ein Spass- und Übungsprojekt.