home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 September / Chip_2001-09_cd1.bin / zkuste / delphi / kolekce / d56 / RMCTL.ZIP / rmDataStorage.pas < prev    next >
Pascal/Delphi Source File  |  2001-06-22  |  7KB  |  303 lines

  1. {================================================================================
  2. Copyright (C) 1997-2001 Mills Enterprise
  3.  
  4. Unit     : rmDataStorage
  5. Purpose  : To allow the storage of text or binary data within the application 
  6. Date     : 03-04-2000
  7. Author   : Ryan J. Mills
  8. Version  : 1.80
  9. Notes    : The original idea for these components came from Daniel Parnell's
  10.            TStringz component.  I created these after I came across some
  11.            limitations in that component.  These components are more functional
  12.            and provide more design time properties.
  13. ================================================================================}
  14.  
  15. unit rmDataStorage;
  16.  
  17. interface
  18.  
  19. {$I CompilerDefines.INC}
  20.  
  21. uses
  22.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
  23.  
  24. type
  25.   TrmDataStorageFileName = string;
  26.   TrmDataStorageLongint = Longint;
  27.  
  28.   TrmCustomDataStorage = class(TComponent)
  29.   private
  30.     { Private declarations }
  31.     procedure SetDataSize(const Value: TrmDataStorageLongint);
  32.   protected
  33.     { Protected declarations }
  34.     procedure DefineProperties(Filer: TFiler); override;
  35.     procedure ReadBinaryData(Stream: TStream); virtual;
  36.     procedure WriteBinaryData(Stream: TStream); virtual;
  37.     function GetDataSize: TrmDataStorageLongint; virtual;
  38.   public
  39.     { Public declarations }
  40.     constructor create(AOwner:TComponent); override;
  41.     procedure WriteToFile(filename:string); virtual;
  42.     procedure LoadFromFile(FileName:string); virtual;
  43.     procedure ClearData; virtual;
  44.   published
  45.     { Published declarations }
  46.     property DataSize : TrmDataStorageLongint read GetDataSize write SetDataSize;
  47.   end;
  48.  
  49.   TrmTextDataStorage = class(TrmCustomDataStorage)
  50.   private
  51.     { Private declarations }
  52.     fData : TStringList;
  53.     procedure SetData(const Value: TStringList);
  54.   protected
  55.     { Protected declarations }
  56.     procedure ReadBinaryData(Stream: TStream); override;
  57.     procedure WriteBinaryData(Stream: TStream); override;
  58.     function GetDataSize: TrmDataStorageLongint; override;
  59.   public
  60.     { Public declarations }
  61.     constructor create(AOwner:TComponent); override;
  62.     destructor destroy; override;
  63.     procedure WriteToFile(filename:string); override;
  64.     procedure LoadFromFile(FileName:string); override;
  65.     procedure ClearData; override;
  66.   published
  67.     { Published declarations }
  68.     property Data : TStringList read fData write SetData stored False;
  69.   end;
  70.  
  71.   TrmBinaryDataStorage = class(TrmCustomDataStorage)
  72.   private
  73.     { Private declarations }
  74.     fData : TMemoryStream;
  75.     function GetData: TMemoryStream;
  76.   protected
  77.     { Protected declarations }
  78.     procedure ReadBinaryData(Stream: TStream); override;
  79.     procedure WriteBinaryData(Stream: TStream); override;
  80.     function GetDataSize: TrmDataStorageLongint; override;
  81.   public
  82.     { Public declarations }
  83.     constructor create(AOwner:TComponent); override;
  84.     destructor destroy; override;
  85.     procedure WriteToFile(filename:string); override;
  86.     procedure LoadFromFile(FileName:string); override;
  87.     procedure ClearData; override;
  88.     property Data : TMemoryStream read GetData;
  89.   published
  90.     { Published declarations }
  91.   end;
  92.  
  93. implementation
  94.  
  95. { TrmCustomDataStorage }
  96.  
  97. procedure TrmCustomDataStorage.ClearData;
  98. begin
  99.    if not (csdesigning in componentstate) then
  100.       Raise Exception.create('Not in design mode');
  101. end;
  102.  
  103. constructor TrmCustomDataStorage.create(AOwner: TComponent);
  104. begin
  105.   inherited;
  106. end;
  107.  
  108. procedure TrmCustomDataStorage.DefineProperties(Filer: TFiler);
  109. begin
  110.   inherited;
  111.   Filer.DefineBinaryProperty('StoredData',ReadBinaryData, WriteBinaryData, True);
  112. end;
  113.  
  114. function TrmCustomDataStorage.GetDataSize: TrmDataStorageLongint;
  115. begin
  116.    Result := 0;  
  117. end;
  118.  
  119. procedure TrmCustomDataStorage.LoadFromFile(FileName: string);
  120. begin
  121.    if not (csdesigning in componentstate) then
  122.       Raise Exception.create('Not in design mode.');
  123.  
  124.    if not FileExists(filename) then
  125.       Raise Exception.create('File does not exist.');
  126. end;
  127.  
  128. procedure TrmCustomDataStorage.ReadBinaryData(Stream: TStream);
  129. begin
  130.    //Do Nothing....
  131. end;
  132.  
  133. procedure TrmCustomDataStorage.SetDataSize(
  134.   const Value: TrmDataStorageLongint);
  135. begin
  136.    //Do Nothing....
  137. end;
  138.  
  139. procedure TrmCustomDataStorage.WriteBinaryData(Stream: TStream);
  140. begin
  141.    //Do Nothing....
  142. end;
  143.  
  144. procedure TrmCustomDataStorage.WriteToFile(filename: string);
  145. begin
  146.    //Do Nothing....
  147. end;
  148.  
  149. { TrmTextDataStorage }
  150.  
  151. procedure TrmTextDataStorage.ClearData;
  152. begin
  153.   inherited;
  154.   fData.Clear;
  155. end;
  156.  
  157. constructor TrmTextDataStorage.create(AOwner: TComponent);
  158. begin
  159.   inherited;
  160.   fData := TStringlist.create;
  161. end;
  162.  
  163. destructor TrmTextDataStorage.destroy;
  164. begin
  165.   inherited;
  166.   fData.free;
  167. end;
  168.  
  169. function TrmTextDataStorage.GetDataSize: TrmDataStorageLongint;
  170. begin
  171.    Result := length(fData.Text);  
  172. end;
  173.  
  174. procedure TrmTextDataStorage.LoadFromFile(FileName: string);
  175. begin
  176.    inherited;
  177.    fData.LoadFromFile(filename);
  178. end;
  179.  
  180. procedure TrmTextDataStorage.ReadBinaryData(Stream: TStream);
  181. var
  182.   n : longint;
  183.   wData : TMemoryStream;
  184. begin
  185.   fData.Clear;
  186.  
  187.   Stream.ReadBuffer(n,SizeOf(n));
  188.  
  189.   if n > 0 then
  190.   begin
  191.     wData := tmemoryStream.create;
  192.     try
  193.        if not assigned(wData) then
  194.          raise Exception.Create('Out of memory');
  195.        wData.CopyFrom(Stream, n);
  196.        wData.Position := 0;
  197.        fData.LoadFromStream(wData);
  198.     finally
  199.        wData.free;    
  200.     end;
  201.   end;
  202. end;
  203.  
  204. procedure TrmTextDataStorage.SetData(const Value: TStringList);
  205. begin
  206.   if csDesigning in componentState then
  207.      FData.assign(Value)
  208.   else
  209.      Raise Exception.create('Not in design mode.');
  210. end;
  211.  
  212. procedure TrmTextDataStorage.WriteBinaryData(Stream: TStream);
  213. var
  214.    wData : TMemoryStream;
  215.    n : longint;
  216. begin
  217.   wData := tmemoryStream.create;
  218.   try
  219.      fData.SaveToStream(wData);
  220.      n := wData.Size;
  221.  
  222.      Stream.WriteBuffer(n, sizeof(n));
  223.      if n > 0 then
  224.        Stream.CopyFrom(wData, 0);
  225.   finally
  226.      wData.free;
  227.   end;
  228. end;
  229.  
  230. procedure TrmTextDataStorage.WriteToFile(filename: string);
  231. begin
  232.   inherited;
  233.   fData.SaveToFile(filename);
  234. end;
  235.  
  236. { TrmBinaryDataStorage }
  237.  
  238. procedure TrmBinaryDataStorage.ClearData;
  239. begin
  240.   inherited;
  241.   fData.Clear;
  242. end;
  243.  
  244. constructor TrmBinaryDataStorage.create(AOwner: TComponent);
  245. begin
  246.   inherited;
  247.   fData := TMemoryStream.Create;
  248. end;
  249.  
  250. destructor TrmBinaryDataStorage.destroy;
  251. begin
  252.   inherited;
  253.   fData.free;
  254. end;
  255.  
  256. function TrmBinaryDataStorage.GetData: TMemoryStream;
  257. begin
  258.    fData.Position := 0;
  259.    Result := fData;  
  260. end;
  261.  
  262. function TrmBinaryDataStorage.GetDataSize: TrmDataStorageLongint;
  263. begin
  264.    result := fData.Size;  
  265. end;
  266.  
  267. procedure TrmBinaryDataStorage.LoadFromFile(FileName: string);
  268. begin
  269.    inherited;
  270.    fData.LoadFromFile(filename);
  271. end;
  272.  
  273. procedure TrmBinaryDataStorage.ReadBinaryData(Stream: TStream);
  274. var
  275.   n : longint;
  276. begin
  277.   fData.Clear;
  278.  
  279.   Stream.ReadBuffer(n,SizeOf(n));
  280.  
  281.   if n > 0 then
  282.      fData.CopyFrom(Stream, n);
  283. end;
  284.  
  285. procedure TrmBinaryDataStorage.WriteBinaryData(Stream: TStream);
  286. var
  287.    n : longint;
  288. begin
  289.   n := fData.Size;
  290.  
  291.   Stream.WriteBuffer(n, sizeof(n));
  292.  
  293.   if n > 0 then
  294.     Stream.CopyFrom(fData, 0);
  295. end;
  296.  
  297. procedure TrmBinaryDataStorage.WriteToFile(filename: string);
  298. begin
  299.    fData.SaveToFile(filename);
  300. end;
  301.  
  302. end.
  303.