Bin neu hier im Forum aber ein alter Delphianer.
(Möchte jetzt verstärkt Lazarus nutzen weil sich Emberacedero "oder so ähnlich" ja mit ihrer Produktpolitik bekanntermaßen seit Jahren selbst ins Knie schiessen, aber egal)
Folgendes:
Code: Alles auswählen
type myrange = -10..10;
type Tconnect=record
public
con_nummer:word;
conned_myObj:word;
conned_inmyObj:word;
conned_outmyObj:word;
conned_io_put:word;
conned_io_put_in:word;
conned_io_put_out:word;
wert:myrange;
end;
type Tio_put=record
public
nummer:word;
name:string;
wert:myrange;
connection:array of Tconnect;
end;
type TmyObj=class
public
myObj_nummer:word;
myObj_name:string;
myObj_type:byte;
anzahl_inputs:byte;
anzahl_outputs:byte;
inputliste:array of Tio_put;
outputliste:array of Tio_put;
constructor create; virtual; abstract;
procedure grab_input(myObjnummer:word); virtual; abstract;
procedure calc(myObjnummer:word); virtual; abstract;
end;
type TmyObj2=class(TmyObj)
const myObj_type=11;
public
constructor create; override;
procedure grab_input(myObjnummer:word); override;
procedure calc(myObjnummer:word); override;
destructor destroy;
end;
procedure TmyObj2.calc(myObjnummer:word);
var I_1, I_2,calc:myrange;
i,j:word;
begin
I_1:=0;I_2:=0;
I_1:=myObjs_liste[myObjnummer].inputliste[0].wert; //<----- .wert immer wie erwartet aber Fehler: I_1 ist nicht immer .wert
I_2:=myObjs_liste[myObjnummer].inputliste[1].wert; //<----- .wert immer wie erwartet aber Fehler: I_2 ist nicht .wert sondern irgendeine Zahl
Ich kann dies im Debugger nachvollziehen, .wert ist richtig aber I_2 wird nicht zugewiesen.
In der weiteren Verwendung von I_1 und I_2 i.d. vereinfachten Art calc:=max(I_1,I_2); gibts natürlich einen ERangeCheck weil max(calc)=10 sein muss.
Initialisiere ich die Werte kann ich nicht mehr nachvollziehen ob I_2 richtig ist oder nur der vorinitialisierte Wert.
Wieso funktioniert hier die Wertübergabe nicht


Gleicher Code funktioniert in TurboDelphi (BP 2006), stammt ja auch daher, und funktionierte schon mal in Lazarus.