Exemple d'utilisation des streams avec tmemorystream

Contenu du snippet

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.

A voir également

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.

Du même auteur (Jeankiki)