Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
Delphi 2009 Professional
|
Re: Daten in einer Klassenhierachie ablegen
28. Okt 2006, 11:42
Zitat von steewan:
Delphi-Quellcode:
procedure TGeraet.Add_Einschub(vTyp : integer; vAdresse : integer);
var idx : integer;
vEinschub : TEinschub;
begin
idx := get_Anzahl_Einschuebe;
SetLength(FEinschuebe, idx + 1);
vEinschub := TEinschub.create;
FEinschuebe[idx] := vEinschub;
vEinschub.Free;
FEinschuebe[idx].Typ := vTyp;
FEinschuebe[idx].Adresse := vAdresse;
end;
procedure TEinschub.Add_Stromkreis(vAdresse : integer);
var idx : integer;
vStromkreis : TStromkreis;
begin
idx := get_Anzahl_Stromkreise;
SetLength(FStromkreise, idx + 1);
vStromkreis := TStromkreis.create;
FStromkreise[idx] := vStromkreis;
FStromkreise[idx].Adresse := vAdresse;
vStromkreis.Free;
end;
procedure TStromkreis.Add_Leuchte(vAdresse : integer; vZielort: string);
var idx : integer;
vLeuchte : TLeuchte;
begin
idx := get_Anzahl_Leuchten;
SetLength(FLeuchten, idx + 1);
vLeuchte := TLeuchte.create;
FLeuchten[idx] := vLeuchte;
vLeuchte.Free;
FLeuchten[idx].Adresse := vAdresse;
FLeuchten[idx].Zielort := vZielort;
end;
Dast geht auch anders:
Delphi-Quellcode:
{ * Variante 1 = Direkte Instanzierung + with * }
procedure TGeraet.Add_Einschub(vTyp : integer; vAdresse : integer);
var idx : integer;
begin
idx := get_Anzahl_Einschuebe;
SetLength(FEinschuebe, idx + 1);
with FEinschuebe[idx] := TEinschub.create do begin
Typ := vTyp;
Adresse := vAdresse;
end;
end;
{ * Variante 2 = direkte Instanzierung * }
procedure TEinschub.Add_Stromkreis(vAdresse : integer);
var idx : integer;
begin
idx := get_Anzahl_Stromkreise;
SetLength(FStromkreise, idx + 1);
FStromkreise[idx] := TStromkreis.create;
FStromkreise[idx].Adresse := vAdresse;
end;
{ * Variante 3 = direkte Instanzierung + Verzicht, auf eigene Methoden * }
procedure TStromkreis.Add_Leuchte(vAdresse : integer; vZielort: string);
begin
SetLength(FLeuchten, Length(FLeuchten) + 1);
FLeuchten[High(FLeuchten)] := TLeuchte.create;
FLeuchten[High(FLeuchten)].Adresse := vAdresse;
FLeuchten[High(FLeuchten)].Zielort := vZielort;
// Ich bin mir nicht sicher, ob es hier mit with effektiver ist, da nur einmal die "High()" - Methode aufgerufen werden muss (siehe Variante 1)
end;
Zu deinem Problem: Debug mal in "Add_Leuchte" und sag uns, wo dort der Fehler auftritt... Vielleicht ist "get_Anzahl_Leuchten" "defekt"
Fabian Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
|
|
Zitat
|