Unit uform;
Interface
Uses Windows, Messages, Sysutils, Classes, Graphics, Controls, Forms, Dialogs, Stdctrls;
type TForm1 = class (TForm) Button1: TButton; Button2: TButton; Memo1: TMemo; Memo2: TMemo; procedure Button1Click (Sender: TObject); procedure Button2Click (Sender: TObject); private {Private declarations} public {Public declarations} hStrList : Tstringlist; v: olevariant;
Var Form1: TFORM1;
IMPLEMENTATION
{$ R * .dfm}
Procedure VariantTostReam (Stream: TSTREAM); VAR P: POINTER; Begin P: = VararrayLock (data); try stream.write (p ^, VararrayHighBound (data, 1) 1); // Assuming Low Bound = 0 Finally Vararrayunlock (data); end;
Function streamtovariant (Stream: TSTREAM): Olevariant; var P: Pointer; Begin Result: = VararrayCreate ([0, Stream.size - 1], varbyte); p: = varosition: = 0; // Start from Beginning Of Stream Stream.read (p ^, stream.size); Finally Vararrayunlock (Result); end;
function StringlistToVariant (aStrlist: TStrings): OleVariant; var hStream: TStream; begin hStream: = TMemoryStream.Create; try aStrList.SaveToStream (hStream); hStream.Seek (0, soFromBeginning); Result: = StreamToVariant (hStream); finally hStream .Free;
procedure VariantToStringlist (const Data: OleVariant; aStrlist: TStrings); var hStream: TStream; begin hStream: = TMemoryStream.Create; try VariantToStream (Data, hStream); hStream.Seek (0, soFromBeginning); aStrList.LoadFromStream (hStream); Finally hstream.free; end;
Procedure tform1.button1click (sender: TOBJECT); begin hrstrlist: = tstringlist.create; hrstr means.assign (memo1.Lines); v: = stringlisttovariant (hstrlist);
HSTRLIST.DESTROY; END;
Procedure TFORM1.BUTTON2CLICK (Sender: TOBJECT); Begin VariantToStringList (v, memo2.line);
End.