home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 October / Chip_2002-10_cd1.bin / zkuste / delphi / kolekce / d56 / FLEXCEL.ZIP / FlexCel / UFlxRowComments.pas < prev   
Pascal/Delphi Source File  |  2002-06-10  |  3KB  |  126 lines

  1. unit UFlxRowComments;
  2.  
  3. interface
  4. uses sysutils, classes , contnrs;
  5. type
  6.   TCommentRowPos= class(TList)
  7.   private
  8.     function GetItems(index: integer): integer;
  9.     procedure SetItems(index: integer; const Value: integer);
  10.   public
  11.     Row: integer;
  12.     
  13.     procedure Add(const i: integer);
  14.     property Items[index: integer]: integer read GetItems write SetItems; default;
  15.   end;
  16.  
  17.   TRowComments= class(TObjectList) //Items are TCommentRowPos
  18.   private
  19.     EmptySlot: TCommentRowPos;
  20.  
  21.     function GetItems(aRow: integer): TCommentRowPos;
  22.     function Find(const aRow: integer; var Index: integer): boolean;
  23.   public
  24.     constructor Create;
  25.     destructor Destroy; override;
  26.  
  27.     procedure Add(const aRow, aPos: integer);
  28.     property Items[aRow: integer]: TCommentRowPos read GetItems; default;
  29.     procedure Delete(const aRow, aCol: integer);
  30.   end;
  31. implementation
  32.  
  33. { TCommentRowPos }
  34.  
  35.  
  36. { TRowComments }
  37.  
  38. procedure TRowComments.Add(const aRow, aPos: integer);
  39. var
  40.   i: integer;
  41. begin
  42.   if not Find(aRow, i) then begin;Insert( i, TCommentRowPos.Create); (inherited Items[i] as TCommentRowPos).Row:=aRow;end;
  43.   (inherited Items[i] as TCommentRowPos).Add(aPos);
  44. end;
  45.  
  46. constructor TRowComments.Create;
  47. begin
  48.   inherited Create(True);
  49.   EmptySlot:= TCommentRowPos.Create;
  50. end;
  51.  
  52. destructor TRowComments.Destroy;
  53. begin
  54.   FreeAndNil(EmptySlot);
  55.   inherited;
  56. end;
  57.  
  58. function TRowComments.GetItems(aRow: integer): TCommentRowPos;
  59. var
  60.   i:integer;
  61. begin
  62.   if Find(aRow, i) then Result:= inherited Items[i] as TCommentRowPos else Result:=EmptySlot;
  63. end;
  64.  
  65. function TRowComments.Find(const aRow: integer ; var Index: integer): boolean;
  66. Var
  67.  L, H, I, C: Integer;
  68. begin
  69.   Result := False;
  70.   L := 0;
  71.   H := Count - 1;
  72.   while L <= H do
  73.   begin
  74.     I := (L + H) shr 1;
  75.     if (inherited Items[i] as TCommentRowPos).Row < aRow then C:=-1 else if (inherited Items[i] as TCommentRowPos).Row>aRow then C:=1 else C:=0;
  76.     if C < 0 then L := I + 1 else
  77.     begin
  78.       H := I - 1;
  79.       If C = 0 Then
  80.       begin
  81.         Result := True;
  82.         L := I;
  83.       end;
  84.     end;
  85.   end;
  86.   Index := L;
  87. end;
  88.  
  89. procedure TRowComments.Delete(const aRow, aCol: integer);
  90. var
  91.   i,k:integer;
  92.   Limit: integer;
  93.   CRp: TCommentRowPos;
  94. begin
  95.   if Find(aRow, i) then
  96.   begin
  97.     CRp:=(inherited Items[i] as TCommentRowPos);
  98.     Limit:=CRp[aCol];
  99.     CRp.Delete(aCol);
  100.     for i:=0 to count-1 do
  101.     begin
  102.      CRp:=(inherited Items[i] as TCommentRowPos);
  103.      for k:=0 to CRp.Count-1 do if CRp[k]>Limit then CRp[k]:=CRp[k]-1;
  104.     end;
  105.   end;
  106. end;
  107.  
  108. { TCommentRowPos }
  109.  
  110. procedure TCommentRowPos.Add(const i: integer);
  111. begin
  112.   inherited Add(Pointer(i));
  113. end;
  114.  
  115. function TCommentRowPos.GetItems(index: integer): integer;
  116. begin
  117.   Result:=Integer(inherited Items[Index]);
  118. end;
  119.  
  120. procedure TCommentRowPos.SetItems(index: integer; const Value: integer);
  121. begin
  122.   inherited Items[Index]:=Pointer(Value);
  123. end;
  124.  
  125. end.
  126.