home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / sibylft1.zip / DOC.DAT / DOC / SPCC / CLASSES.PAS < prev    next >
Pascal/Delphi Source File  |  1997-04-07  |  36KB  |  964 lines

  1. {╔══════════════════════════════════════════════════════════════════════════╗
  2.  ║                                                                          ║
  3.  ║     Sibyl Portable Component Classes                                     ║
  4.  ║                                                                          ║
  5.  ║     Copyright (c) 1995,97 SpeedSoft Germany,   All rights reserved.      ║
  6.  ║                                                                          ║
  7.  ╚══════════════════════════════════════════════════════════════════════════╝}
  8.  
  9. UNIT Classes;
  10.  
  11.  
  12. INTERFACE
  13.  
  14. USES Dos,SysUtils;
  15.  
  16. {$IFDEF OS2}
  17. USES PmWin,BseDos;
  18. {$ENDIF}
  19. {$IFDEF Win95}
  20. USES WinUser,WinBase;
  21. {$ENDIF}
  22.  
  23. //TStream seek origins
  24. CONST
  25.   soFromBeginning = 0;
  26.   soFromCurrent   = 1;
  27.   soFromEnd       = 2;
  28.  
  29. TYPE
  30.     EStreamError=CLASS(Exception);
  31.     EFCreateError=CLASS(EStreamError);
  32.     EFOpenError=CLASS(EStreamError);
  33.  
  34.     TStream=CLASS(TObject)
  35.       PRIVATE
  36.          FUNCTION GetSize:LONGINT;VIRTUAL;
  37.          FUNCTION GetPosition:LONGINT;
  38.          PROCEDURE SetPosition(NewPos:Longint);
  39.          PROCEDURE Error(ResourceId:WORD);VIRTUAL;
  40.       PUBLIC
  41.          PROCEDURE ReadBuffer(VAR Buffer;Count:LONGINT);
  42.          PROCEDURE WriteBuffer(CONST Buffer;Count:LONGINT);
  43.          FUNCTION CopyFrom(Source: TStream; Count: Longint): Longint;
  44.          FUNCTION Read(VAR Buffer;Count:LONGINT):LONGINT;VIRTUAL;ABSTRACT;
  45.          FUNCTION Write(CONST Buffer;Count:LONGINT):LONGINT;VIRTUAL;ABSTRACT;
  46.          FUNCTION Seek(Offset:LONGINT;Origin:WORD):LONGINT;VIRTUAL;ABSTRACT;
  47.          FUNCTION EndOfData: BOOLEAN; VIRTUAL;
  48.          FUNCTION ReadLn: STRING; VIRTUAL;
  49.          PROCEDURE WriteLn(CONST S: STRING); VIRTUAL;
  50.       PUBLIC
  51.          PROPERTY Position:LONGINT read GetPosition write SetPosition;
  52.          PROPERTY Size:LONGINT read GetSize;
  53.     END;
  54.  
  55. CONST
  56.     {FileStream Open modes}
  57.  
  58.     fmCreate = $FFFF;            (* Delphi *)
  59.  
  60.     Stream_Create    = fmCreate; (* compatibility only *)
  61.     Stream_Open      = fmInOut;  (* compatibility only *)
  62.  
  63. TYPE
  64.     THandleStream= class(TStream)
  65.       PRIVATE
  66.          FHandle: LongInt;
  67.       PUBLIC
  68.          CONSTRUCTOR Create(AHandle: LongInt);
  69.          FUNCTION Read(VAR Buffer; Count: Longint): Longint; override;
  70.          FUNCTION Write(CONST Buffer; Count: Longint): Longint; override;
  71.          FUNCTION Seek(Offset: Longint; Origin: Word): Longint; override;
  72.       PUBLIC
  73.          PROPERTY Handle: LongInt read FHandle;
  74.     END;
  75.  
  76. TYPE
  77.     TFileStream=CLASS(TStream)
  78.       PRIVATE
  79.          PStreamFile:FILE;
  80.       PUBLIC
  81.          {Rene}
  82.          CONSTRUCTOR Create(CONST FileName:STRING;Mode:LONGWORD);
  83.          DESTRUCTOR Destroy;OVERRIDE;
  84.          FUNCTION Read(VAR Buffer;Count:LONGINT):LONGINT;OVERRIDE;
  85.          FUNCTION Write(CONST Buffer;Count:LONGINT):LONGINT;OVERRIDE;
  86.          FUNCTION Seek(Offset:LONGINT;Origin:WORD):LONGINT;OVERRIDE;
  87.     END;
  88.  
  89.  
  90.     TMemoryStream=CLASS(TStream)
  91.       PRIVATE
  92.          FBuffer: PByteArray;
  93.          FSize, FCapacity, FPosition: LongInt;
  94.          PROCEDURE SetCapacity(NewCapacity: LongInt);
  95.       PROTECTED
  96.          PROPERTY Capacity:LongInt read FCapacity write SetCapacity;
  97.       PUBLIC
  98.          DESTRUCTOR Destroy;OVERRIDE;
  99.          FUNCTION Read(VAR Buffer;Count:Longint):Longint;OVERRIDE;
  100.          FUNCTION Write(CONST Buffer; Count: Longint):Longint;OVERRIDE;
  101.          FUNCTION Seek(Offset: Longint; Origin: Word):Longint;OVERRIDE;
  102.          PROCEDURE LoadFromStream(Stream: TStream);
  103.          PROCEDURE LoadFromFile(CONST FileName:STRING);
  104.          PROCEDURE SaveToStream(Stream: TStream);
  105.          PROCEDURE SaveToFile(CONST FileName:STRING);
  106.          PROCEDURE SetSize(NewSize: Longint);
  107.          PROCEDURE Clear;
  108.       PUBLIC
  109.          PROPERTY Memory: PByteArray read FBuffer;
  110.     END;
  111.  
  112.  
  113. CONST
  114.     MaxListSize = MaxLongInt DIV SizeOf(Pointer);
  115.  
  116.     { A notify event is a method variable, i.e. a PROCEDURE
  117.     variable for objects. Some classes allow the specification
  118.     of objects to be notified of changes. }
  119.  
  120.  
  121. TYPE
  122.     TComponent=CLASS;
  123.  
  124. {$M+}
  125.     TNotifyEvent = PROCEDURE(Sender:TObject) OF OBJECT;
  126. {$M-}
  127.  
  128.     EListError = CLASS(Exception);
  129.  
  130.     {TList CLASS}
  131.     TList = CLASS;
  132.     PPointerList = ^TPointerList;
  133.     TPointerList = ARRAY[0..MaxListSize-1] OF POINTER;
  134.     TListSortCompare = FUNCTION(Item1,Item2: POINTER):LONGINT;
  135.  
  136.     TFreeListItem = PROCEDURE(Sender:TObject;Item:POINTER) OF OBJECT;
  137.  
  138.     TList = CLASS
  139.       PRIVATE
  140.          FList:PPointerList;
  141.          FCount:LONGINT;
  142.          FCapacity:LONGINT;
  143.          FGrowth:LONGINT;
  144.          FOnFreeItem:TFreeListItem;
  145.          FUNCTION Get(Index:LONGINT):POINTER;
  146.          PROCEDURE Put(Index:LONGINT;Item:POINTER);
  147.          PROCEDURE SetCount(NewCount:LONGINT);
  148.       PROTECTED
  149.          PROCEDURE Error; VIRTUAL;
  150.          PROCEDURE Grow; VIRTUAL;
  151.          PROCEDURE SetCapacity(NewCapacity:LONGINT); VIRTUAL;
  152.          PROCEDURE FreeItem(Item:POINTER); VIRTUAL;
  153.       PUBLIC
  154.          DESTRUCTOR Destroy; OVERRIDE;
  155.          PROCEDURE Clear; VIRTUAL;
  156.          FUNCTION Add(Item:POINTER):LONGINT;
  157.          PROCEDURE Delete(Index:LONGINT);
  158.          FUNCTION Remove(Item:POINTER):LONGINT;
  159.          PROCEDURE Cut(Index1,Index2:LONGINT);
  160.          PROCEDURE Insert(Index:LONGINT;Item:POINTER);
  161.          PROCEDURE Exchange(Index1,Index2:LONGINT);
  162.          PROCEDURE Move(CurIndex,NewIndex:LONGINT);
  163.          FUNCTION IndexOf(Item:POINTER):LONGINT;
  164.          FUNCTION First:POINTER;
  165.          FUNCTION Last:POINTER;
  166.          FUNCTION Expand:TList;
  167.          PROCEDURE Pack;
  168.          PROCEDURE Sort(Compare: TListSortCompare);
  169.       PUBLIC
  170.          PROPERTY  Capacity:LONGINT read FCapacity write SetCapacity;
  171.          PROPERTY  Count:LONGINT read FCount write SetCount;
  172.          PROPERTY  Growth:LONGINT read FGrowth write FGrowth;
  173.          PROPERTY  Items[Index:LONGINT]:POINTER read Get write Put; default;
  174.          PROPERTY  List:PPointerList read FList;
  175.          PROPERTY  OnFreeItem:TFreeListItem read FOnFreeItem write FOnFreeItem;
  176.     END;
  177.  
  178.  
  179.     {TChainList CLASS}
  180.     PChainListItem = ^TChainListItem;
  181.     TChainListItem = RECORD
  182.                            prev:PChainListItem;
  183.                            Item:Pointer;
  184.                            next:PChainListItem;
  185.     END;
  186.  
  187.     TChainList = CLASS(TObject)
  188.       PRIVATE
  189.          FList:PChainListItem;
  190.          FListEnd:PChainListItem;
  191.          FCount:LongInt;
  192.          FOnFreeItem:TFreeListItem;
  193.       PRIVATE
  194.          FUNCTION Index2PLE(Index:LongInt):PChainListItem;
  195.          FUNCTION Item2PLE(Item:Pointer):PChainListItem;
  196.          FUNCTION PLE2Index(ple:PChainListItem):LongInt;
  197.          FUNCTION Item2Index(Item:Pointer):LongInt;
  198.          PROCEDURE Connect(ple1,ple2:PChainListItem);
  199.          FUNCTION Get(Index:LongInt):Pointer;
  200.          PROCEDURE Put(Index:LongInt;Item:Pointer);
  201.       PROTECTED
  202.          PROCEDURE Error; VIRTUAL;
  203.          PROCEDURE FreeItem(Item:POINTER); VIRTUAL;
  204.       PUBLIC
  205.          DESTRUCTOR Destroy; OVERRIDE;
  206.          PROCEDURE Clear; VIRTUAL;
  207.          FUNCTION Add(Item:Pointer):LongInt;
  208.          FUNCTION Remove(Item:Pointer):LongInt;
  209.          PROCEDURE Delete(Index:LongInt);
  210.          FUNCTION First:Pointer;
  211.          FUNCTION Last:Pointer;
  212.          FUNCTION IndexOf(Item:Pointer):LongInt;
  213.          PROCEDURE Insert(Index:LongInt;Item:Pointer);
  214.          PROCEDURE Move(CurIndex,NewIndex:LongInt);
  215.          PROCEDURE Exchange(Index1,Index2:LongInt);
  216.          PROCEDURE Pack;
  217.       PUBLIC
  218.          PROPERTY  Count:LongInt read FCount;
  219.          PROPERTY  Items[Index:LongInt]:Pointer read Get write Put; default;
  220.          PROPERTY  OnFreeItem:TFreeListItem read FOnFreeItem write FOnFreeItem;
  221.     END;
  222.  
  223.  { TStrings is an abstract base class for storing a
  224.   number of Strings. Every String can be associated
  225.   with a value as well as with an object. So, IF you
  226.   want to store simple Strings, or collections of
  227.   keys and values, or collection of named objects,
  228.   TStrings is the abstract ancestor you should
  229.   derive your class from. }
  230.  
  231. TYPE
  232.   EStringListError = CLASS(Exception);
  233.  
  234.   TStrings = CLASS(TObject)
  235.      PRIVATE
  236.        FUpdateSemaphore: LongInt;
  237.        FPreventFree: Boolean;
  238.        FUNCTION GetValue(CONST Name: STRING): STRING;
  239.        PROCEDURE SetValue(CONST Name, Value: STRING);
  240.        FUNCTION FindValue(CONST Name: STRING; VAR Value: STRING): LongInt;
  241.        FUNCTION GetName(Index: LongInt): STRING;
  242.      PROTECTED
  243.        FUNCTION Get(Index: LongInt): STRING; VIRTUAL; abstract;
  244.        FUNCTION GetCount: LongInt; VIRTUAL; abstract;
  245.        FUNCTION GetObject(Index: LongInt): TObject; VIRTUAL;
  246.        PROCEDURE Put(Index: LongInt; CONST S: STRING); VIRTUAL;
  247.        PROCEDURE PutObject(Index: LongInt; AObject: TObject); VIRTUAL;
  248.        PROCEDURE SetUpdateState(Updating: Boolean); VIRTUAL;
  249.        FUNCTION GetTextStr: AnsiString; VIRTUAL;
  250.        PROCEDURE SetTextStr(CONST Value: AnsiString); VIRTUAL;
  251.      PUBLIC
  252.        FUNCTION Add(CONST S: STRING): LongInt; VIRTUAL;
  253.        FUNCTION AddObject(CONST S: STRING; AObject: TObject): LongInt; VIRTUAL;
  254.        PROCEDURE AddStrings(AStrings: TStrings); VIRTUAL;
  255.        PROCEDURE Append(CONST S: STRING);
  256.        PROCEDURE Assign(AStrings: TStrings); VIRTUAL;
  257.        PROCEDURE BeginUpdate;
  258.        PROCEDURE Clear; VIRTUAL; abstract;
  259.        PROCEDURE Delete(Index: LongInt); VIRTUAL; abstract;
  260.        PROCEDURE EndUpdate;
  261.        FUNCTION Equals(AStrings: TStrings): Boolean;
  262.        PROCEDURE Exchange(Index1, Index2: LongInt); VIRTUAL;
  263.        FUNCTION GetText: PChar;VIRTUAL;
  264.        FUNCTION IndexOf(CONST S: STRING): LongInt; VIRTUAL;
  265.        FUNCTION IndexOfName(CONST Name: STRING): LongInt;
  266.        FUNCTION IndexOfObject(AObject: TObject): LongInt;
  267.        PROCEDURE Insert(Index: LongInt; CONST S: STRING); VIRTUAL; abstract;
  268.        PROCEDURE InsertObject(Index: LongInt; CONST S: STRING; AObject: TObject); VIRTUAL;
  269.        PROCEDURE LoadFromFile(CONST FileName: STRING);
  270.        PROCEDURE SetText(Text: PChar);VIRTUAL;
  271.        PROCEDURE LoadFromStream(Stream: TStream); VIRTUAL;
  272.        PROCEDURE Move(CurIndex, NewIndex: LongInt); VIRTUAL;
  273.        PROCEDURE SaveToFile(CONST FileName: STRING);
  274.        PROCEDURE SaveToStream(Stream: TStream); VIRTUAL;
  275.      PUBLIC
  276.        PROPERTY Names[Index: LongInt]: STRING read GetName;
  277.        PROPERTY Count: LongInt read GetCount;
  278.        PROPERTY Objects[Index: LongInt]: TObject read GetObject write PutObject;
  279.        PROPERTY Values[CONST Name: STRING]: STRING read GetValue write SetValue;
  280.        PROPERTY Strings[Index: LongInt]: STRING read Get write Put; default;
  281.        PROPERTY Text:AnsiString read GetTextStr write SetTextStr;
  282.   END;
  283.  
  284. { TStringList is a concrete class derived
  285.   from TStrings. TStringList stores its items
  286.   in a PRIVATE field of type TList. It's very
  287.   fast, since it performs binary search for
  288.   retrieving objects by name. You can specify
  289.   whether you want TStringList to be sorted or
  290.   unsorted as well as case-sensitive or not.
  291.   You can also specify the way a TStringList
  292.   object handles duplicate entries.
  293.  
  294.   TStringList is able to notify the user when
  295.   the list's data changes or has been changed.
  296.   Use the properties OnChange and OnChanged. }
  297.  
  298. TYPE
  299.   TDuplicates = (dupIgnore, dupAccept, dupError);
  300.  
  301.   TFreeStringListItem = PROCEDURE(Sender:TObject;AObject:TObject) OF OBJECT;
  302.  
  303. TYPE
  304.   TStringList = CLASS(TStrings)
  305.   PRIVATE
  306.     FList: TList;
  307.     FSorted: Boolean;
  308.     FDuplicates: TDuplicates;
  309.     FCaseSensitive: Boolean;
  310.     FOnChange: TNotifyEvent;
  311.     FOnChanging: TNotifyEvent;
  312.     FOnFreeItem: TFreeStringListItem;
  313.     FLockChange:BOOLEAN;
  314.     PROCEDURE BottomUpHeapSort;
  315.     PROCEDURE SetSorted(Value: Boolean);
  316.     PROCEDURE SetCaseSensitive(Value: Boolean);
  317.   PROTECTED
  318.     PROCEDURE Changed; VIRTUAL;
  319.     PROCEDURE Changing; VIRTUAL;
  320.     FUNCTION Get(Index: LongInt): STRING; OVERRIDE;
  321.     FUNCTION GetCount: LongInt; OVERRIDE;
  322.     FUNCTION GetObject(Index: LongInt): TObject; OVERRIDE;
  323.     PROCEDURE Put(Index: LongInt; CONST S: STRING); OVERRIDE;
  324.     PROCEDURE PutObject(Index: LongInt; AObject: TObject); OVERRIDE;
  325.     PROCEDURE SetUpdateState(Updating: Boolean); OVERRIDE;
  326.     PROCEDURE FreeItem(AObject: TObject);VIRTUAL;
  327.   PUBLIC
  328.     CONSTRUCTOR Create;
  329.     DESTRUCTOR Destroy; OVERRIDE;
  330.     FUNCTION Add(CONST S: STRING): LongInt; OVERRIDE;
  331.     PROCEDURE Clear; OVERRIDE;
  332.     PROCEDURE Delete(Index: LongInt); OVERRIDE;
  333.     PROCEDURE Exchange(Index1, Index2: LongInt); OVERRIDE;
  334.     FUNCTION Find(CONST S: STRING; VAR Index: LongInt): Boolean; VIRTUAL;
  335.     FUNCTION IndexOf(CONST S: STRING): LongInt; OVERRIDE;
  336.     PROCEDURE Insert(Index: LongInt; CONST S: STRING); OVERRIDE;
  337.     PROCEDURE Sort; VIRTUAL;
  338.     PROPERTY Duplicates: TDuplicates read FDuplicates write FDuplicates;
  339.     PROPERTY CaseSensitive: Boolean read FCaseSensitive write SetCaseSensitive;
  340.     PROPERTY Sorted: Boolean read FSorted write SetSorted;
  341.     PROPERTY OnChange: TNotifyEvent read FOnChange write FOnChange;
  342.     PROPERTY OnChanging: TNotifyEvent read FOnChanging write FOnChanging;
  343.     PROPERTY OnFreeItem: TFreeStringListItem read FOnFreeItem write FOnFreeItem;
  344.   END;
  345.  
  346. { StrItem is a space-efficient way to store an object
  347.   associated with a STRING. It is used inside TStringList. }
  348.  
  349. TYPE
  350.   PStrItem = ^TStrItem;
  351.   TStrItem = RECORD
  352.      FObject: TObject;
  353.      FString: STRING;
  354.   END;
  355.  
  356. FUNCTION NewStrItem(CONST AString: STRING; AObject: TObject): PStrItem;
  357. PROCEDURE DisposeStrItem(P: PStrItem);
  358.  
  359. TYPE
  360.  
  361. { TBits implements a Boolean array. Entries are
  362.   numbered 0 .. Size - 1, as usual. Bits allows
  363.   read / write access to entries. OpenBit returns
  364.   index of first True bit, or -1 if none is True. }
  365.  
  366.   PBitsArray = ^TBitsArray;
  367.   TBitsArray = ARRAY[0..MaxLongInt DIV 4] OF LongWord;
  368.  
  369.   EBitsError = class(Exception);
  370.  
  371.   TBits = class
  372.   PRIVATE
  373.     FBits: PBitsArray;
  374.     FSize: LongInt;
  375.     PROCEDURE Error;
  376.     FUNCTION GetBit(Index: LongInt): Boolean;
  377.     PROCEDURE SetBit(Index: LongInt; Bit: Boolean);
  378.     PROCEDURE SetSize(NewSize: LongInt);
  379.   PUBLIC
  380.     DESTRUCTOR Destroy; override;
  381.     FUNCTION OpenBit: LongInt;
  382.     property Bits[Index: LongInt]: Boolean read GetBit write SetBit; default;
  383.     property Size: LongInt read FSize write SetSize;
  384.   END;
  385.  
  386.  
  387. TYPE
  388.     //General types
  389.     HWindow=LONGWORD;
  390.  
  391.     PMessage=^TMessage;
  392. {$M+}
  393.     TMessage=RECORD
  394. {$M-}
  395.          Msg:LONGWORD;
  396.          ReceiverClass: TObject;
  397.          Receiver: HWindow;
  398.          Handled: LONGBOOL;  {True if the message was handled}
  399.          CASE Integer OF
  400.             0: ( Param1: LONGWORD;
  401.                  Param2: LONGWORD;
  402.                  Result: LONGWORD);
  403.             1: ( WParam: LONGWORD;
  404.                  LParam: LONGWORD;
  405.                  MsgResult: LONGWORD);
  406.             2: ( Param1Lo: WORD;
  407.                  Param1Hi: WORD;
  408.                  Param2Lo: WORD;
  409.                  Param2Hi: WORD;
  410.                  ResultLo: WORD;
  411.                  ResultHi: WORD);
  412.             3: ( Param1LoByteLo:BYTE;
  413.                  Param1LoByteHi:BYTE;
  414.                  Param1HiByteLo:BYTE;
  415.                  Param1HiByteHi:BYTE;
  416.                  Param2LoByteLo:BYTE;
  417.                  Param2LoByteHi:BYTE;
  418.                  Param2HiByteLo:BYTE;
  419.                  Param2HiByteHi:BYTE;
  420.                  ResultLoByteLo:BYTE;
  421.                  ResultLoByteHi:BYTE;
  422.                  ResultHiByteLo:BYTE;
  423.                  ResultHiByteHi:BYTE);
  424.     END;
  425.  
  426.     HDC=LONGWORD;
  427.     HPalette=LONGWORD;
  428.  
  429. {$M+}
  430.     TColor=LONGINT;
  431. {$M-}
  432.  
  433.     PPoint=^TPoint;
  434. {$M+}
  435.     TPoint=RECORD
  436.          X,Y:LONGINT;
  437.     END;
  438. {$M-}
  439.  
  440.     PRect=^TRect;
  441. {$M+}
  442.     TRect=RECORD
  443.          CASE LongInt OF
  444.            0: (Left,Bottom,Right,Top:LONGINT);
  445.            1: (LeftBottom,RightTop:TPoint);
  446.     END;
  447. {$M-}
  448.  
  449.  
  450.     PSize=^TSize;
  451. {$M+}
  452.     TSize=RECORD
  453.          CX,CY:LONGINT;
  454.     END;
  455.  
  456.     TRGB=RECORD
  457.          Blue:BYTE;
  458.          Green:BYTE;
  459.          Red:BYTE;
  460.          Fill:BYTE;
  461.     END;
  462. {$M-}
  463.  
  464. CONST
  465. {$M+}
  466.     {Default RGB color values}
  467.     clBlack                    = TColor($00000000);
  468.     clMaroon                   = TColor($00800000);
  469.     clGreen                    = TColor($00008000);
  470.     clOlive                    = TColor($00808000);
  471.     clNavy                     = TColor($00000080);
  472.     clPurple                   = TColor($00800080);
  473.     clTeal                     = TColor($00008080);
  474.     clGray                     = TColor($00808080);
  475.     clSilver                   = TColor($00C6C6C6);
  476.     clRed                      = TColor($00FF0000);
  477.     clLime                     = TColor($0000FF00);
  478.     clYellow                   = TColor($00FFFF00);
  479.     clBlue                     = TColor($000000FF);
  480.     clFuchsia                  = TColor($00FF00FF);
  481.     clAqua                     = TColor($0000FFFF);
  482.     clLtGray                   = TColor($00CCCCCC);
  483.     clDkGray                   = TColor($00808080);
  484.     clWhite                    = TColor($00FFFFFF);
  485.  
  486.     {System Colors}
  487.     clScrollbar                = TColor(0 OR $80000000);
  488.     clBackGround               = TColor(1 OR $80000000);
  489.     clActiveCaption            = TColor(2 OR $80000000);
  490.     clInactiveCaption          = TColor(3 OR $80000000);
  491.     clMenu                     = TColor(4 OR $80000000);
  492.     clWindow                   = TColor(5 OR $80000000);
  493.     clWindowFrame              = TColor(6 OR $80000000);
  494.     clMenuText                 = TColor(7 OR $80000000);
  495.     clWindowText               = TColor(8 OR $80000000);
  496.     clCaptionText              = TColor(9 OR $80000000);
  497.     clActiveBorder             = TColor(10 OR $80000000);
  498.     clInactiveBorder           = TColor(11 OR $80000000);
  499.     clAppWorkSpace             = TColor(12 OR $80000000);
  500.     clHighlight                = TColor(13 OR $80000000);
  501.     clHighlightText            = TColor(14 OR $80000000);
  502.     clBtnFace                  = TColor(15 OR $80000000);
  503.     clBtnShadow                = TColor(16 OR $80000000);
  504.     clGrayText                 = TColor(17 OR $80000000);
  505.     clBtnText                  = TColor(18 OR $80000000);
  506.     clInactiveCaptionText      = TColor(19 OR $80000000);
  507.     clBtnHighlight             = TColor(20 OR $80000000);
  508.     cl3DDkShadow               = TColor(21 OR $80000000);
  509.     cl3DLight                  = TColor(22 OR $80000000);
  510.     clInfoText                 = TColor(23 OR $80000000);
  511.     clInfo                     = TColor(24 OR $80000000);
  512.     clBtnDefault               = TColor(25 OR $80000000);
  513.     clDlgWindow                = TColor(26 OR $80000000);
  514.     clEntryField               = TColor(27 OR $80000000);
  515.     clStaticText               = TColor(28 OR $80000000);
  516. {$M-}
  517.  
  518.  
  519. TYPE
  520.     TColorName = RECORD
  521.          Name: STRING[20];
  522.          Value: LONGINT;
  523.     END;
  524.  
  525. CONST
  526.     MaxDefaultColors = 18;
  527.     DefaultColors: ARRAY[1..MaxDefaultColors] OF TColorName = (
  528.          (Name:'clBlack'; Value:clBlack),
  529.          (Name:'clMaroon'; Value:clMaroon),
  530.          (Name:'clGreen'; Value:clGreen),
  531.          (Name:'clOlive'; Value:clOlive),
  532.          (Name:'clNavy'; Value:clNavy),
  533.          (Name:'clPurple'; Value:clPurple),
  534.          (Name:'clTeal'; Value:clTeal),
  535.          (Name:'clGray'; Value:clGray),
  536.          (Name:'clSilver'; Value:clSilver),
  537.          (Name:'clRed'; Value:clRed),
  538.          (Name:'clLime'; Value:clLime),
  539.          (Name:'clYellow'; Value:clYellow),
  540.          (Name:'clBlue'; Value:clBlue),
  541.          (Name:'clFuchsia'; Value:clFuchsia),
  542.          (Name:'clAqua'; Value:clAqua),
  543.          (Name:'clLtGray'; Value:clLtGray),
  544.          (Name:'clDkGray'; Value:clDkGray),
  545.          (Name:'clWhite'; Value:clWhite));
  546.  
  547.     MaxSystemColors = 29;
  548.     SystemColors: ARRAY[1..MaxSystemColors] OF TColorName = (
  549.          (Name:'clScrollbar'; Value:clScrollBar),
  550.          (Name:'clBackGround'; Value:clBackGround),
  551.          (Name:'clActiveCaption'; Value:clActiveCaption),
  552.          (Name:'clInactiveCaption'; Value:clInactiveCaption),
  553.          (Name:'clMenu'; Value:clMenu),
  554.          (Name:'clWindow'; Value:clWindow),
  555.          (Name:'clWindowFrame'; Value:clWindowFrame),
  556.          (Name:'clMenuText'; Value:clMenuText),
  557.          (Name:'clWindowText'; Value:clWindowText),
  558.          (Name:'clCaptionText'; Value:clCaptionText),
  559.          (Name:'clActiveBorder'; Value:clActiveBorder),
  560.          (Name:'clInactiveBorder'; Value:clInactiveBorder),
  561.          (Name:'clAppWorkSpace'; Value:clAppWorkSpace),
  562.          (Name:'clHighLight'; Value:clHighLight),
  563.          (Name:'clHighLightText'; Value:clHighLightText),
  564.          (Name:'clBtnFace'; Value:clBtnFace),
  565.          (Name:'clBtnShadow'; Value:clBtnShadow),
  566.          (Name:'clGrayText'; Value:clGrayText),
  567.          (Name:'clBtnText'; Value:clBtnText),
  568.          (Name:'clInactiveCaptionText'; Value:clInactiveCaptionText),
  569.          (Name:'clBtnHighlight'; Value:clBtnHighlight),
  570.          (Name:'cl3DDkShadow'; Value:cl3DDkShadow),
  571.          (Name:'cl3DLight'; Value:cl3DLight),
  572.          (Name:'clInfoText'; Value:clInfoText),
  573.          (Name:'clInfo'; Value:clInfo),
  574.          (Name:'clBtnDefault'; Value:clBtnDefault),
  575.          (Name:'clDlgWindow'; Value:clDlgWindow),
  576.          (Name:'clEntryField'; Value:clEntryField),
  577.          (Name:'clStaticText'; Value:clStatictext));
  578.  
  579.  
  580. FUNCTION ColorName(ColorValue:TColor):STRING;
  581. FUNCTION ColorValue(ColorName:STRING):TColor;
  582.  
  583.  
  584. TYPE
  585.     TResourceName=STRING[32];
  586.  
  587.     TResourceStream=CLASS(TMemoryStream)
  588.       PRIVATE
  589.          FHeaderPos:LONGINT;
  590.          FResourceList:TList;
  591.          SCUStream:TStream;
  592.       PUBLIC
  593.          FUNCTION NewResourceEntry(CONST ResName:TResourceName;
  594.                                    VAR Data;DataLen:LONGINT):BOOLEAN;
  595.          FUNCTION WriteResourcesToStream(Stream:TMemoryStream):BOOLEAN;
  596.          DESTRUCTOR Destroy;OVERRIDE;
  597.     END;
  598.  
  599.  
  600. {Standard Resource names for NewResourceEntry}
  601. CONST
  602.     rnGlyph         = 'rnGlyph';
  603.     rnBitmap        = 'rnBitmap';
  604.     rnPicture       = 'rnPicture';
  605.     rnPictureLeaf   = 'rnPictureLeaf';
  606.     rnPictureOpen   = 'rnPictureOpen';
  607.     rnPictureClosed = 'rnPictureClosed';
  608.     rnFont          = 'rnFont';
  609.     rnTabFont       = 'rnTabFont';
  610.     rnLines         = 'rnLines';
  611.     rnItems         = 'rnItems';
  612.     rnTabs          = 'rnTabs';
  613.     rnDBServer      = 'rnDBServer';
  614.     rnDBDataBase    = 'rnDBDataBase';
  615.     rnDBTable       = 'rnDBTable';
  616.     rnDBQuery       = 'rnDBQuery';
  617.     rnDBDataField   = 'rnDBDataField';
  618.     rnGridSizes     = 'rnGridSize';
  619.     rnFileName      = 'rnFileName';
  620.     rnIcon          = 'rnIcon';
  621.     rnDBGridCols    = 'rnDBGridCols';
  622.     rnStatusPanels  = 'rnStatusPanels';
  623.     rnHeaders       = 'rnHeaders';
  624.  
  625. TYPE
  626.     TComponentState=SET OF (csDesigning,csReading,csWriting,csDestroying,
  627.                             csLoaded,csForm,csDetail,csReferenceControl,
  628.                             csReference,csAcceptsControls,csHandleLinks,
  629.                             {Rene}csHasMainMenu);
  630.  
  631.     TDesignerState=SET OF (dsFormVisible,dsNoRealSizing{-},
  632.                            dsNoSourceCode,dsStored,dsAutoCreate);
  633.  
  634.     TOperation=(opInsert,opRemove);
  635.  
  636.     TGetChildProc=PROCEDURE(Child:TComponent) OF OBJECT;
  637.  
  638.  
  639.     ESCUError=CLASS(Exception);
  640.  
  641.     TComponent=CLASS(TObject)
  642.       PRIVATE
  643.          FLanguages:POINTER;
  644.          FName:PSTRING;
  645.          FUnitName:PSTRING;
  646.          FTypeName:PSTRING;
  647.          FOwner:TComponent;
  648.          FComponentState:TComponentState;
  649.          FDesignerState:TDesignerState;
  650.          FCreateFromSCU:BOOLEAN;
  651.          FComponents:TList;
  652.          FFreeNotifyList:TList;
  653.          FMethods:POINTER;
  654.          FTag:LONGINT;
  655.          FWriteComponentCount:LONGINT;
  656.          SCUStream:TMemoryStream;
  657.          SCUResStream:TResourceStream;
  658.          SCUWriteError:BOOLEAN;
  659.          FOnCreate:TNotifyEvent;
  660.          FOnDestroy:TNotifyEvent;
  661.          FReference:TComponent;
  662.          FUNCTION GetComponentCount:LONGINT;
  663.          FUNCTION GetComponent(AIndex:LONGINT):TComponent;
  664.          FUNCTION GetComponentIndex:LONGINT;
  665.          PROCEDURE SetComponentIndex(Index:LONGINT);
  666.          FUNCTION GetName:STRING;
  667.          PROCEDURE SetName(CONST NewName:STRING);
  668.          FUNCTION GetUnitName:STRING;
  669.          FUNCTION GetTypeName:STRING;
  670.          PROCEDURE SetTypeName(NewName:STRING);
  671.          FUNCTION GetDesigned:BOOLEAN;
  672.          PROCEDURE SetupSCU;
  673.          FUNCTION ReadPropertiesSCU(Namep,Resourcep:POINTER;VAR ClassPointer:POINTER):BOOLEAN;
  674.          FUNCTION ReadComponentsSCU(NameTable,ResourceTable:POINTER;VAR ClassP:POINTER):BOOLEAN;
  675.          PROCEDURE ReadResourceSCU(ResourceTable:POINTER;VAR ClassP:POINTER);
  676.          PROCEDURE WriteComponent(Child:TComponent);
  677.          PROCEDURE ReadSCU(Data:POINTER);
  678.       PROTECTED
  679.          PROCEDURE SetupComponent;VIRTUAL;
  680.          PROCEDURE Loaded;VIRTUAL;
  681.          PROCEDURE LoadedFromSCU(SCUParent:TComponent);VIRTUAL;
  682.          PROCEDURE LoadingFromSCU(SCUParent:TComponent);VIRTUAL;
  683.          PROCEDURE GetChildren(Proc:TGetChildProc);VIRTUAL;
  684.          FUNCTION HasParent:BOOLEAN;VIRTUAL;
  685.          PROCEDURE UpdateLinkList(CONST PropertyName:STRING;LinkList:TList);VIRTUAL;  //for component links
  686.       PUBLIC
  687.          CONSTRUCTOR Create(AOwner:TComponent);VIRTUAL;
  688.          DESTRUCTOR Destroy;OVERRIDE;
  689.          PROCEDURE InsertComponent(AComponent:TComponent);VIRTUAL;
  690.          PROCEDURE RemoveComponent(AComponent:TComponent);VIRTUAL;
  691.          FUNCTION IndexOfComponent(AComponent:TComponent):LONGINT;
  692.          PROCEDURE DestroyComponents;
  693.          FUNCTION FindComponent(CONST AName:STRING):TComponent;
  694.          PROCEDURE ReadSCUResource(CONST ResName:TResourceName;VAR Data;DataLen:LONGINT);VIRTUAL;
  695.          FUNCTION WriteSCUResource(Stream:TResourceStream):BOOLEAN;VIRTUAL;
  696.          PROCEDURE ReadFromStream(SCUStream:TStream);
  697.          PROCEDURE WriteToStream(SCUStream:TStream);
  698.          PROCEDURE Notification(AComponent:TComponent;Operation:TOperation);VIRTUAL;
  699.          PROCEDURE FreeNotification(AComponent:TComponent);VIRTUAL;
  700.          PROCEDURE SetDesigning(Value:BOOLEAN);VIRTUAL;
  701.          PROCEDURE GetDesignerPopupEvents(AString:TStringList);VIRTUAL;
  702.          PROCEDURE DesignerPopupEvent(Value:LONGINT);VIRTUAL;
  703.          PROPERTY Owner:TComponent read FOwner;
  704.          PROPERTY Components[Index:LONGINT]:TComponent read GetComponent;
  705.          PROPERTY ComponentCount:LONGINT read GetComponentCount;
  706.          PROPERTY ComponentIndex:LONGINT read GetComponentIndex write SetComponentIndex;
  707.          PROPERTY ComponentState:TComponentState read FComponentState write FComponentState;
  708.          PROPERTY DesignerState:TDesignerState read FDesignerState write FDesignerState; stored;
  709.          PROPERTY UnitName:STRING read GetUnitName;
  710.          PROPERTY TypeName:STRING read GetTypeName write SetTypeName;
  711.          PROPERTY Designed:BOOLEAN read GetDesigned;
  712.          PROPERTY FreeNotifyList:TList read FFreeNotifyList;
  713.          PROPERTY Methods:POINTER read FMethods write FMethods;      {undocumented}
  714.       PUBLISHED
  715.          PROPERTY Name:STRING read GetName write SetName;
  716.          PROPERTY Tag:LONGINT read FTag write FTag;
  717.          PROPERTY OnCreate:TNotifyEvent read FOnCreate write FOnCreate;
  718.          PROPERTY OnDestroy:TNotifyEvent read FOnDestroy write FOnDestroy;
  719.     END;
  720.     TComponentClass=CLASS OF TComponent;
  721.  
  722.     TCollection = CLASS;
  723.  
  724.     TCollectionItem = CLASS
  725.       PRIVATE
  726.          FCollection:TCollection;
  727.       PRIVATE
  728.          FUNCTION GetIndex:LONGINT;
  729.          PROCEDURE SetCollection(NewValue:TCollection);
  730.       PROTECTED
  731.          PROCEDURE SetIndex(NewIndex:LONGINT);VIRTUAL;
  732.          PROCEDURE Changed(AllItems:BOOLEAN);
  733.       PUBLIC
  734.          PROCEDURE Assign(Source:TCollectionItem);VIRTUAL;ABSTRACT;
  735.          CONSTRUCTOR Create(ACollection: TCollection);VIRTUAL;
  736.          DESTRUCTOR Destroy;OVERRIDE;
  737.       PUBLIC
  738.          PROPERTY Collection:TCollection read FCollection write SetCollection;
  739.          PROPERTY Index:LONGINT read GetIndex write SetIndex;
  740.     END;
  741.  
  742.     TCollectionItemClass=CLASS OF TCollectionItem;
  743.  
  744.     TCollection=CLASS(TComponent)
  745.       PRIVATE
  746.          FItemClass:TCollectionItemClass;
  747.          FItems:TList;
  748.          FUpdateCount:LONGINT;
  749.       PRIVATE
  750.          FUNCTION GetCount:LONGINT;
  751.          PROCEDURE InsertItem(Item:TCollectionItem);
  752.          PROCEDURE RemoveItem(Item:TCollectionItem);
  753.       PROTECTED
  754.          PROCEDURE Changed;
  755.          FUNCTION GetItem(Index:LONGINT):TCollectionItem;
  756.          PROCEDURE SetItem(Index:LONGINT;Value:TCollectionItem);
  757.       PUBLIC
  758.          PROCEDURE Update(Item:TCollectionItem);VIRTUAL;
  759.          PROCEDURE SetupComponent;OVERRIDE;
  760.          DESTRUCTOR Destroy;OVERRIDE;
  761.          FUNCTION Add:TCollectionItem;
  762.          PROCEDURE Assign(Source:TCollection);VIRTUAL;
  763.          PROCEDURE BeginUpdate;
  764.          PROCEDURE Clear;
  765.          PROCEDURE EndUpdate;
  766.       PUBLIC
  767.          PROPERTY Count:LONGINT read GetCount;
  768.          PROPERTY Items[Index:LONGINT]:TCollectionItem read GetItem write SetItem;
  769.          PROPERTY ItemClass:TCollectionItemClass read FItemClass write FItemClass;
  770.     END;
  771.  
  772.  
  773.     TStringSelectList=CLASS(TComponent)
  774.       PRIVATE
  775.          FList:TStringList;
  776.          FSelected:STRING;
  777.       PROTECTED
  778.          PROCEDURE SetStringItem(NewValue:STRING);VIRTUAL;
  779.          PROCEDURE SetupComponent;OVERRIDE;
  780.       PUBLIC
  781.          DESTRUCTOR Destroy;OVERRIDE;
  782.          FUNCTION GetItems:TStringList;VIRTUAL;
  783.          PROPERTY SelectedItem:STRING read FSelected write SetStringItem;
  784.          PROPERTY Items:TStringList read GetItems;
  785.     END;
  786.  
  787.  
  788.     {$M+}
  789.     TThreadPriority=(tpIdle,tpLowest,tpLower,tpNormal,tpHigher,tpHighest,tpTimeCritical);
  790.     {$M-}
  791.  
  792.     TThreadMethod=PROCEDURE OF OBJECT;
  793.  
  794.     TThread=CLASS
  795.       PRIVATE
  796.          FOnTerminate:TNotifyEvent;
  797.          FHandle:LONGWORD;
  798.          FPriority:TThreadPriority;
  799.          FFreeOnTerminate:BOOLEAN;
  800.          FTerminated:BOOLEAN;
  801.          FReturnValue:LONGINT;
  802.          FSuspended:BOOLEAN;
  803.          FFinished:BOOLEAN;
  804.          FThreadId:LONGWORD;
  805.          FParameter:POINTER;
  806.          FMethod:TThreadMethod;
  807.          PROCEDURE SetSuspended(NewValue:BOOLEAN);
  808.          PROCEDURE SetPriority(NewValue:TThreadPriority);
  809.          PROCEDURE SyncTerminate;
  810.          PROCEDURE MsgIdle;
  811.       PROTECTED
  812.          PROCEDURE DoTerminate;VIRTUAL;
  813.          PROCEDURE Execute;VIRTUAL;ABSTRACT;
  814.       PUBLIC
  815.          CONSTRUCTOR Create(CreateSuspended:Boolean);
  816.          CONSTRUCTOR ExtCreate(CreateSuspended:Boolean;StackSize:LONGWORD;
  817.                                Priority:TThreadPriority;Param:POINTER);
  818.          DESTRUCTOR Destroy;OVERRIDE;
  819.          FUNCTION WaitFor:LONGINT;
  820.          PROCEDURE Terminate;
  821.          PROCEDURE Suspend;
  822.          PROCEDURE Resume;
  823.          PROCEDURE Kill;
  824.          PROCEDURE Synchronize(Method:TThreadMethod);
  825.          PROCEDURE ProcessMsgs;
  826.          PROPERTY Terminated:BOOLEAN read FTerminated;
  827.          PROPERTY ReturnValue:LONGINT read FReturnValue write FReturnValue;
  828.          PROPERTY ThreadId:LONGWORD read FThreadId;
  829.          PROPERTY Handle:LONGWORD read FHandle;
  830.          PROPERTY Priority:TThreadPriority read FPriority write SetPriority;
  831.          PROPERTY Parameter:POINTER read FParameter write FParameter;
  832.          PROPERTY Suspended:BOOLEAN read FSuspended write SetSuspended;
  833.          PROPERTY FreeOnTerminate:BOOLEAN read FFreeOnTerminate write FFreeOnTerminate;
  834.          PROPERTY OnTerminate:TNotifyEvent read FOnTerminate write FOnTerminate;
  835.     END;
  836.  
  837.  
  838. PROCEDURE RegisterClasses(CONST ComponentClasses: ARRAY OF TComponentClass);
  839. FUNCTION SearchClassByName(CONST Name:STRING):TComponentClass;
  840. FUNCTION CallReadProp(Objekt:TObject;FuncAddr:POINTER;Typ:BYTE;
  841.                       TypLen:LONGINT;Value:POINTER):BOOLEAN;
  842. FUNCTION CallWriteProp(Objekt:TObject;ProcAddr:POINTER;Typ:BYTE;
  843.                        TypLen:LONGINT;Value:POINTER):BOOLEAN;
  844.  
  845.  
  846. TYPE
  847.     PSCUFileFormat=^TSCUFileFormat;
  848.     TSCUFileFormat=RECORD
  849.          Version:STRING[5];
  850.          ObjectOffset,ObjectLen:LONGINT;
  851.          NameTableOffset,NameTableLen:LONGINT;
  852.          ResourceOffset,ResourceLen:LONGINT;
  853.          ObjectCount:LONGINT;
  854.          UseEntry:LONGINT;
  855.          NextEntry:POINTER;
  856.     END;
  857.  
  858.  
  859.     PFormListItem=^TFormListItem;
  860.     TFormListItem=RECORD
  861.          Form:TComponent;
  862.          FormName:STRING[64];
  863.          UnitName:STRING;
  864.          AutoCreate:BOOLEAN;
  865.          SCUPointer:POINTER;
  866.          SCUSize:LONGINT;
  867.     END;
  868.  
  869.  
  870. FUNCTION WritePropertiesToStream(FormList:TList):TMemoryStream;
  871. FUNCTION WritePropertiesToFile(FileName:STRING;FormList:TList):BOOLEAN;
  872.  
  873.  
  874. TYPE
  875.     TMsgDlgBtn=(mbYes,mbNo,mbOk,mbCancel,mbAbort,mbRetry,mbIgnore,mbAll,mbHelp);
  876.     TMsgDlgButtons=SET OF TMsgDlgBtn;
  877.     TMsgDlgType=(mtWarning,mtError,mtInformation,mtConfirmation,mtCustom,mtCritical);
  878.     TMsgDlgReturn=(mrOk,mrCancel,mrYes,mrNo,mrIgnore,mrRetry,mrAbort,mrNone,mrAll);
  879. CONST
  880.     mbYesNo=[mbYes,mbNo];
  881.     mbYesNoCancel=[mbYes,mbNo,mbCancel];
  882.     mbOkCancel=[mbOk,mbCancel];
  883.     mbAbortRetryIgnore=[mbAbort,mbRetry,mbIgnore];
  884.  
  885.  
  886. FUNCTION MessageBox2(CONST Msg:STRING;Typ:TMsgDlgType;Buttons:TMsgDlgButtons):TMsgDlgReturn;
  887. FUNCTION ErrorBox2(CONST Msg:STRING):TMsgDlgReturn;
  888.  
  889. FUNCTION GetExperts:TList;
  890.  
  891.  
  892. VAR RegisteredClasses:TList;
  893.     PropertyEditDialogs:TList;
  894.     LibExperts:TList;
  895.     LibExpertInstances:TList;
  896.  
  897. TYPE
  898.     TPropertyEditorReturn=(edOk,edCancel,edList,edNoEditor);
  899.  
  900.     TPropertyEditor=CLASS(TComponent)
  901.        PRIVATE
  902.          FPropertyOwner:TComponent;
  903.          FPropertyName:STRING;
  904.          FList:TStringList;
  905.        PUBLIC
  906.          FUNCTION Execute(VAR Value;ValueLen:LONGINT):TPropertyEditorReturn;VIRTUAL;ABSTRACT;
  907.        PUBLIC
  908.          PROPERTY PropertyOwner:TComponent read FPropertyOwner;
  909.          PROPERTY PropertyName:STRING read FPropertyName;
  910.          PROPERTY List:TStringList read FList;
  911.     END;
  912.     TPropertyEditorClass=CLASS OF TPropertyEditor;
  913.  
  914.     TStringPropertyEditor=CLASS(TPropertyEditor)
  915.        PUBLIC
  916.          FUNCTION Execute(VAR Value:STRING;ValueLen:LONGINT):TPropertyEditorReturn;VIRTUAL;ABSTRACT;
  917.     END;
  918.  
  919.     TShortIntPropertyEditor=CLASS(TPropertyEditor)
  920.        PUBLIC
  921.          FUNCTION Execute(VAR Value:ShortInt):TPropertyEditorReturn;VIRTUAL;ABSTRACT;
  922.     END;
  923.  
  924.     TIntegerPropertyEditor=CLASS(TPropertyEditor)
  925.        PUBLIC
  926.          FUNCTION Execute(VAR Value:Integer):TPropertyEditorReturn;VIRTUAL;ABSTRACT;
  927.     END;
  928.  
  929.     TLongIntPropertyEditor=CLASS(TPropertyEditor)
  930.        PUBLIC
  931.          FUNCTION Execute(VAR Value:LongInt):TPropertyEditorReturn;VIRTUAL;ABSTRACT;
  932.     END;
  933.  
  934.     TClassPropertyEditorReturn=(peOk,peCancel,peClear,peNoEditor);
  935.  
  936.     TClassPropertyEditor=CLASS(TPropertyEditor)
  937.       PRIVATE
  938.          PROPERTY PropertyOwner;
  939.          PROPERTY PropertyName;
  940.          PROPERTY List;
  941.       PUBLIC
  942.          FUNCTION Execute(VAR ClassToEdit:TObject):TClassPropertyEditorReturn;VIRTUAL;
  943.     END;
  944.     TClassPropertyEditorClass=CLASS OF TClassPropertyEditor;
  945.  
  946.  
  947. PROCEDURE AddPropertyEditor(OwnerClass:TClass;PropertyName:STRING;PropertyEditor:TPropertyEditorClass);
  948. FUNCTION CallPropertyEditor(Owner:TComponent;PropertyName:STRING;VAR Value;ValueLen:LONGINT;
  949.                              VAR List:TStringList):TPropertyEditorReturn;
  950. FUNCTION PropertyEditorAvailable(OwnerClass:TClass;PropertyName:STRING):BOOLEAN;
  951.  
  952. PROCEDURE AddClassPropertyEditor(ClassToEdit:TClass;PropertyEditor:TClassPropertyEditorClass);
  953. FUNCTION CallClassPropertyEditor(VAR ClassToEdit:TObject):TClassPropertyEditorReturn;
  954. FUNCTION ClassPropertyEditorAvailable(ClassName:STRING):BOOLEAN;
  955.  
  956.  
  957. FUNCTION GetTempFileName:STRING;
  958. FUNCTION InDesigner:BOOLEAN;
  959.  
  960.  
  961. IMPLEMENTATION
  962.  
  963.  
  964.