1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| {écrire une chaîne de caractères depuis le flux}
procedure WriteStreamString(Stream : TStream; UneChaine : string);
var LongueurChaine : integer;
begin
{obtenir la longueur de la chaîne de caractères}
LongueurChaine := Length(UneChaine);
{écrire cette longueur dans le flux}
Stream.Write(LongueurChaine,SizeOf(integer));
{écrire les caractères}
Stream.Write(UneChaine[1], LongueurChaine);
end;
{retourne une chaîne de caractères depuis le flux}
function ReadStreamString(Stream : TStream) : string;
var LongueurChaine : integer;
begin
{obtenir la longueur de la chaîne de caractères}
Stream.Read(LongueurChaine,SizeOf(integer));
{Redimensionner la chaine pour allouer la mémoire nécessaire}
SetLength(Result, LongueurChaine);
{Lire les caractères}
Stream.Read(Result[1], LongueurChaine);
end;
// Sauver un TStringGrid dans un fichier
procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
var f:TFileStream;
i, k ,cc, rr: Integer;
begin
if FileExists(FileName)
then f:=TFileStream.Create(FileName,fmOpenWrite)
else f:=TFileStream.Create(FileName,fmCreate);
try
with StringGrid do
begin
cc:=ColCount;
rr:=RowCount;
// Ecrire le nombre de Colonnes/lignes
f.Write(cc,SizeOf(integer));
f.Write(rr,SizeOf(integer));
// Boucler sur les cellules
for i := 0 to ColCount - 1 do
for k := 0 to RowCount - 1 do
WriteStreamString(F,Cells[i, k]);
end;
finally
F.Free;
end;
end;
// Charger un TStringGrid depuis un fichier
function LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName):boolean;
var f:TFileStream;
iTmp, i, k, cc, rr: Integer;
begin
result:=FileExists(FileName);
if not result then Exit;
f:=TFileStream.Create(FileName,fmOpenRead);
try
with StringGrid do
begin
// Obtenir le nombre de colonnes
f.Read(iTmp,SizeOf(integer));
ColCount := iTmp;
// et de lignes
f.Read(iTmp,SizeOf(integer));
RowCount := iTmp;
// remplir les cellules
for i := 0 to ColCount - 1 do
for k := 0 to RowCount - 1 do
Cells[i, k] := ReadStreamString(f);
end;
finally
F.Free;
end;
end; |
Partager