|
//********************************************************************** //***** Component source (pas) ***************************************** //********************************************************************** unit Test;
interface
uses Windows, Forms, Classes, StdCtrls, SysUtils, ComCtrls, Messages, Controls, {DB, DBCtrls, CommCtrl, OCIH, OCI, OCL, ExtVCs,} dsgnintf;
type TMyPropertyEditor = class(TPropertyEditor) private { Private declarations } public { Public declarations } function GetAttributes: TPropertyAttributes; override; procedure Edit; override; function GetValue: string; override; end;
TMyEditorPopup = class(TComponentEditor) private { Private declarations } public { Public declarations } procedure Edit; override; procedure ExecuteVerb(Index: Integer); override; function GetVerb(Index: Integer): string; override; function GetVerbCount: Integer; override; end;
TMyData = class private Fstr: string; FInt: Integer; public property StringValue: string read Fstr write FStr; property IntegerValue: Integer read FInt write FInt; end;
TMyTable = class(TPersistent) private FList: TList; function GetCount: Integer; function GetItem(Index: Integer): TMyData;
procedure SetItem(Index: Integer; vItem: TMyData); procedure ReadProperties(Reader: TReader); procedure WriteProperties(Writer: TWriter); protected procedure DefineProperties(Filer: TFiler); override; public constructor Create; destructor Destroy; override; procedure AddItem; procedure DeleteItem(Index: Integer); property ItemCount: Integer read GetCount; property Items[Index: Integer]: TMyData read GetItem write SetItem; default; end;
TMyComponent = class(TComponent) private FMyTable: TMyTable; procedure SetTables(Value: TMyTable); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property MyTables: TMyTable read FMyTable write SetTables; end;
procedure Register;
implementation
uses PropDlg; { TMyTable }
constructor TMyTable.Create; begin FList := TList.Create; FList.Clear; end;
destructor TMyTable.Destroy; begin FList.Free; FList := nil; inherited destroy; end;
procedure TMyTable.DefineProperties(Filer: TFiler); begin Filer.DefineProperty('Tables', ReadProperties, WriteProperties, True); end;
procedure TMyTable.ReadProperties(Reader: TReader); begin Reader.ReadListBegin; while (not Reader.EndOfList) do begin AddItem; with Items[itemCount - 1] do begin Fstr := Reader.ReadString; FInt := Reader.ReadInteger; end; end; Reader.ReadListEnd; end;
procedure TMyTable.WriteProperties(Writer: TWriter); var I: Integer; begin Writer.WriteListBegin; for I := 0 to (ItemCount - 1) do begin with Items[I] do begin Writer.WriteString(Fstr); Writer.WriteInteger(FInt); end; end; Writer.WriteListEnd; end;
procedure TMyTable.AddItem; var vData: TMyData; begin vData := TMyData.Create; FList.Add(vData); end;
function TMyTable.GetCount: Integer; begin Result := FList.Count; end;
function TMyTable.GetItem(Index: Integer): TMyData; begin Result := TMyData(FList[Index]); end;
procedure TMyTable.SetItem(Index: Integer; vItem: TMyData); begin Flist[Index] := vItem; end;
procedure TMyTable.DeleteItem(Index: Integer); begin FList.Delete(Index); end;
|