Ich habe im Moment ein Problem, was mich sehr nevt. Ich schreibe ja mit dem Euklid an Promathika und wir nähern uns an die Version 1.0. Das Problem an dem Programm ist, dass es Linux- und Windows-Versionen geben wird, die aber absolut kompatible Dateien (Settings, Funktionslisten...) erzeugen sollen, damit hier keine extra Unterscheidung notwendig ist.
Ich erzeuge zum Speichern von Settings und Listen Dateien von bestimmten Records. Das funktioniert auch wunderbar, solange man Linux-Dateien in der Linux-Version öffnet und Windows-Dateien in der Windows-Version. Es funktioniert aber nicht, wenn ich eine in Windows erzeugte Settings-Datei in Linux aufrufen möchte oder umgekehrt. Hier ist die Record-Definition:
Code: Alles auswählen
type tColorSettings=record
bgrdCol:tColor;
bgrdCol2:tColor;
CurvCol:tColor;
CurvCol2:tColor;
GridCol:tColor;
PinCol: tColor;
AxisCol:tColor;
AxisCrossCol:tColor;
RulBgrdCol:tColor;
RulTextCol:tColor;
BgrdGrad:ShortInt; //Hintergrundfarbverlauf -1=aus; 0=vertical; 1=horizontal
CurvGrad:ShortInt; //Funktionsfarbverlauf -1=aus; 0=vertical; 1=horizontal
end;
type tPerformanceSet=record
ThreadCount:byte; //Anzahl der Threads für Graphberechnung
CurvWidth:double; //Strichbreite für Graphen
AA_Level_hor:byte; //horizontale Subpixel-Anzahl
AA_Level_ver:byte; //vertikale Subpixelanzahl
unsharpness:extended; //Schritweite in Hauptachsen-Richtung
TermOut:ShortInt; //-1=aus; 0=einfach; 1=komplex
TermkoordX:integer; //X-Koordinate für linke obere Ausgabe-Ecke von Termen
TermKoordY:integer; //Y-Koordinate
statistics:boolean;
AA_Mode:word;
end;
type tKartesianSet=record
xmin:extended;
xmax:extended;
ymin:extended;
ymax:extended;
DistortFree:ShortInt;//-1=aus;0=xmin variabel; 1=xmax variabel; 2=ymin variabel; 3=ymax variabel
AxisSign:boolean;
Ruldens_X:double;
Ruldens_Y:double;
GridDensX:double;
GridDensY:double;
PinSubDensX:double;
PinSubDensY:double;
RulerMode:ShortInt; //-1=aus; 0=angepasst; 1=benutzerdefinierter Hintergrund
end;
type tMainSizing=record
MainWidth:word;
MainHeight:word;
DrawResX:word;
DrawResY:word;
end;
type tGlobalSet=record
ColorSet:tColorSettings;
PerformanceSet:tPerformanceSet;
Kartesianset:tKartesianSet;
MainSizing:tMainSizing;
end;
Code: Alles auswählen
function tFMain.LoadSet (var loc_Set:tGlobalSet):boolean;
var
Filestring:string;
DefaultSet:File of tGlobalSet;
fileClosed:boolean=false;
begin
FileString:='defaults.prs';
try
AssignFile(DefaultSet,FileString);
{$i-}
Reset(DefaultSet);
{$i+}
Seek(DefaultSet,0);
read(DefaultSet,Loc_Set);
CloseFile(DefaultSet);
result:=true;
FileClosed:=true;
except
result:=false;
loc_set:=prm_setmanager.get_Defaults;
If not FileClosed then CloseFile(DefaultSet);
end;
end;
//==========================================================================================
function tFMain.SaveSet (loc_set:tGlobalSet):boolean;
var
Filestring:string;
DefaultSet:File of tGlobalSet;
FileClosed:boolean=false;
begin
FileString:='defaults.prs';
try
AssignFile(DefaultSet,FileString);
{$i-}
ReWrite(DefaultSet);
{$i+}
Seek(DefaultSet,0);
write(DefaultSet,Loc_Set);
CloseFile(DefaultSet);
result:=true;
FileClosed:=true;
except
result:=false;
If not FileClosed then CloseFile(DefaultSet);
end;
end;