Bueno la idea es sencilla.
SimpleGraph te da opciones de recorrer los objetos y acceder a todas sus propiedades y también te da opciones por código para crear nuevos elementos.
La idea es que al guardar, puedas recorrer los objetos que existen en el grafo y sus propiedades y almacenarlas en una tabla (posición, colores,...). En mi caso almacenaba sólo algunas porque los objetos eran siempre del mismo tiupo y con algunas variaciones.
Para recuperar, debes realizar el caso contrario. Recorrer la tabla e ir creando objetos dinámicamente según las propiedades almacenadas.
Te adjunto un código sencillo que funciona para que cojas la idea de cómo hacerlo.
Código Delphi
[-]
procedure TMainForm.btnGrabarClick(Sender: TObject);
var
i, oc:Integer;
o:TGraphObject;
FIni:TIniFile;
begin
FIni := TIniFile.CReate(ChangeFileExt(Application.ExeName, '.ini'));
try
oc := SimpleGraph.ObjectsCount;
for I := 0 to (SimpleGraph.Objects.Count - 1) do begin
o := SimpleGraph.Objects.Items[i];
if (o is TGraphNode) then begin
FIni.WriteString('OBJ'+IntToStr(i), 'Clase', TGraphNode(o).ClassName);
FIni.WriteString('OBJ'+IntToStr(i), 'Left', IntToStr(TGraphNode(o).Left));
FIni.WriteString('OBJ'+IntToStr(i), 'Top', IntToStr(TGraphNode(o).Top));
FIni.WriteString('OBJ'+IntToStr(i), 'Ancho', IntToStr(TGraphNode(o).Width));
FIni.WriteString('OBJ'+IntToStr(i), 'Alto', IntToStr(TGraphNode(o).Height));
FIni.WriteString('OBJ'+IntToStr(i), 'Color', IntToStr(TGraphNode(o).Brush.Color));
end;
end;
finally
FreeAndNil(FIni);
end;
end;
procedure TMainForm.btnRecuperarClick(Sender: TObject);
var
i, oc:Integer;
o:TGraphObject;
FIni:TIniFile;
secc:TStringList;
str:String;
Rect:TRect;
function GetNodeClass(AClass:string):TGraphNodeClass;
begin
if (AClass = 'TRectangularNode') then
Result := TRectangularNode;
end;
begin
SimpleGraph.CommandMode := cmInsertNode;
FIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
secc := TStringList.CReate;
try
FIni.ReadSections(secc);
for i := 0 to (secc.Count - 1) do begin
Str := FIni.ReadString('OBJ' + IntToStr(i), 'Clase', 'TRectangularNode');
SimpleGraph.DefaultNodeClass := GetNodeClass(Str);
Rect.Left := FIni.ReadInteger('OBJ' + IntToStr(i), 'Left', 10);
Rect.Top := FIni.ReadInteger('OBJ' + IntToStr(i), 'Top', 10);
Rect.Width := FIni.ReadInteger('OBJ' + IntToStr(i), 'Ancho', 100);
Rect.Height := FIni.ReadInteger('OBJ' + IntToStr(i), 'Alto', 50);
o := SimpleGraph.InsertNode(Rect);
TGraphNode(o).Brush.Color := FIni.ReadInteger('OBJ' + IntToStr(i), 'Color', 0);
end;
finally
FreeAndNil(FIni);
FreeAndNil(secc);
end;
end;