mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 10:19:52 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{
 | 
						|
 *****************************************************************************
 | 
						|
  This file is part of the Lazarus Component Library (LCL)
 | 
						|
 | 
						|
  See the file COPYING.modifiedLGPL.txt, included in this distribution,
 | 
						|
  for details about the license.
 | 
						|
 *****************************************************************************
 | 
						|
 | 
						|
  Helper functions for component serialized Pascal.
 | 
						|
 | 
						|
  Author: Mattias Gaertner
 | 
						|
}
 | 
						|
unit LazPasReadUtil;
 | 
						|
 | 
						|
{$mode objfpc}{$H+}
 | 
						|
 | 
						|
interface
 | 
						|
 | 
						|
uses
 | 
						|
  Classes;
 | 
						|
 | 
						|
{ ExecCustomCSP: Call Instance.DefineProperties with a list of properties in
 | 
						|
  TBinaryObjectWriter format. This function is used by the auto generated
 | 
						|
  Pascal of TCompWriterPas for custom DefineProperties. }
 | 
						|
procedure ExecCustomCSP(Instance: TPersistent; const Data: array of string);
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
type
 | 
						|
 | 
						|
  { TCSPReader }
 | 
						|
 | 
						|
  TCSPReader = class(TReader)
 | 
						|
  public
 | 
						|
    procedure ReadProperties(Instance: TPersistent);
 | 
						|
  end;
 | 
						|
 | 
						|
{ TCSPReader }
 | 
						|
 | 
						|
procedure TCSPReader.ReadProperties(Instance: TPersistent);
 | 
						|
begin
 | 
						|
  while not EndOfList do
 | 
						|
    ReadProperty(Instance);
 | 
						|
end;
 | 
						|
 | 
						|
procedure ExecCustomCSP(Instance: TPersistent; const Data: array of string);
 | 
						|
var
 | 
						|
  MemStream: TMemoryStream;
 | 
						|
  i: Integer;
 | 
						|
  s: String;
 | 
						|
  Reader: TCSPReader;
 | 
						|
begin
 | 
						|
  MemStream:=TMemoryStream.Create;
 | 
						|
  Reader:=nil;
 | 
						|
  try
 | 
						|
    for i:=low(Data) to High(Data) do
 | 
						|
    begin
 | 
						|
      s:=Data[i];
 | 
						|
      MemStream.Write(s[1],length(s));
 | 
						|
    end;
 | 
						|
    MemStream.Position:=0;
 | 
						|
    Reader:=TCSPReader.Create(MemStream,1024);
 | 
						|
    Reader.ReadProperties(Instance);
 | 
						|
  finally
 | 
						|
    Reader.Free;
 | 
						|
    MemStream.Free;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
end.
 | 
						|
 |