Petit exemple expliquant comment utiliser TMemoryStream
Source / Exemple :
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Button1: TButton;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure SaveStream(Save: TMemoryStream;
const Str: string);
function SeparatorStream(const Sep: string; const FullString: string;
Position: integer): string;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
// procédure pour sauver du texte dans un stream et ajouter un séparateur
procedure TForm1.SaveStream(Save: TMemoryStream;
const Str: string);
var
// Création d'un tableau de caractères
lpszbuf: array[0..100] of char;
begin
StrPCopy(lpszbuf, Str); //Prendre la valeur de Str et la copier dans lpszbuf
StrCat(lpszbuf, '###'); //Ajouter ### à lpszbuf
Save.Write(lpszbuf, length(Str) + 3); //Ecrire dans Save de type TMemoryStream la valeur de lpszbuf
end;
procedure TForm1.Button1Click(Sender: TObject);
var
SaveStr: TMemoryStream;
begin
SaveStr:= TMemoryStream.Create; //Création de SaveStr
SaveStream(SaveStr, Edit1.Text); //Ajouter le texte Edit(n).Text dans SaveStr à l'aidre
SaveStream(SaveStr, Edit2.Text); //de la procédure SaveSteam
SaveStream(SaveStr, Edit3.Text);
SaveStream(SaveStr, Edit4.Text);
SaveStream(SaveStr, Edit5.Text);
SaveStream(SaveStr, Edit6.Text);
SaveStream(SaveStr, Edit7.Text);
SaveStream(SaveStr, Edit8.Text);
SaveStr.Position:= 0; //Remettre la position du flux dans le stream à 0
Memo1.Lines.LoadFromStream(SaveStr); //Charger dans Memo1 les infos qui se trouvent dans SaveStr
SaveStr.Free; //Libèrer la mémoire
end;
// fonction servant à séparer chaque champs créer avec le séparateur dans
// la procédure SaveStream
function TForm1.SeparatorStream(const Sep, FullString: string;
Position: integer): string;
var
sTemp: string;
anIndex, aPos: integer;
begin
Result:= '';
anIndex:= 0; //Mettre anIndex à 0
sTemp:= FullString; //Mettre la valeur de FullString dans sTemp
aPos:= Pos(Sep, sTemp); //Donner à aPos la position de Sep dans sTemp
//Boucle de séparation des champs dans le stream
while (aPos > 0) and (anIndex < Position) do
begin
Delete(sTemp, 1, aPos - length(Sep) + aPos - 1);
aPos:= Pos(Sep, sTemp);
inc(anIndex);
end;
aPos:= Pos(Sep, sTemp);
if aPos > 0 then
Delete(sTemp, aPos, length(sTemp) + aPos - 1);
Result:= sTemp;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
OpenString: TMemoryStream;
aData, aPart: string;
begin
OpenString:= TMemoryStream.Create; //Créer le stream OpenString
Memo1.Lines.SaveToStream(OpenString); //Sauver dans OpenStream le texte qui ce trouve
//dans le memo1
aData:= StrPas(OpenString.Memory); //Convertit une chaîne terminée par le caractère Null
//en une chaîne Pascal et la mettre dans aData.
//Mettre dans aPart la valeur de aData après avoir été travailler par la fonction
//SeparatorStream
aPart:= SeparatorStream('###', aData, 0);
//Mettre la valeur de aPart dans le Label1.Caption
Label1.Caption:= aPart;
aPart:= SeparatorStream('###', aData, 1);
Label2.Caption:= aPart;
aPart:= SeparatorStream('###', aData, 2);
Label3.Caption:= aPart;
aPart:= SeparatorStream('###', aData, 3);
Label4.Caption:= aPart;
aPart:= SeparatorStream('###', aData, 4);
Label5.Caption:= aPart;
aPart:= SeparatorStream('###', aData, 5);
Label6.Caption:= aPart;
aPart:= SeparatorStream('###', aData, 6);
Label7.Caption:= aPart;
aPart:= SeparatorStream('###', aData, 7);
Label8.Caption:= aPart;
OpenString.Free; //Libère la mémoire de OpenString
end;
end.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.