trichview.com

trichview.support




Re: Getting the text of an item using TCustomRVItemInfo


Return to index


Author

Message

Sergey Tkachenko

Posted: 07/09/2004 17:30:33


Here is a function for searching the item of style = RequiredStyle.

(RVData, ItemNo):

- on input: location of your new footnote; search will start from the

previous item and will continue backward

- on output: location of the found item (if it was found: return

value=True).


uses CRVData, CRVFData, RVItem;



function FindPreviousItem(var RVData: TCustomRVData; var ItemNo: Integer;

  RequiredStyle: Integer): Boolean;

   {...................................................}

   function FindItemInRVData(ARVData: TCustomRVData; AItemNo: Integer):

Boolean; forward;

   {...................................................}

   function FindItemInItem(Item: TCustomRVItemInfo; StoreSub:

TRVStoreSubRVData): Boolean;

   var FRVData: TCustomRVData;

   begin

     Result := False;

     if StoreSub=nil then

       FRVData := TCustomRVData(item.GetSubRVData(StoreSub, rvdLast))

     else

       FRVData := TCustomRVData(item.GetSubRVData(StoreSub, rvdPrev));

     if FRVData<>nil then begin

       repeat

         Result := FindItemInRVData(FRVData, FRVData.Items.Count-1);

         if Result then

           break;

         FRVData := TCustomRVData(item.GetSubRVData(StoreSub, rvdPrev));

       until FRVData=nil;

     end;

     StoreSub.Free;

   end;

   {...................................................}

   function FindItemInRVData(ARVData: TCustomRVData; AItemNo: Integer):

Boolean;

   var i: Integer;

   begin

     ARVData := ARVData.GetRVData;

     for i := AItemNo downto 0 do begin

       if ARVData.GetItem(i).StyleNo=RequiredStyle then begin

         Result := True;

         ItemNo := i;

         RVData := ARVData;

         end

       else

         Result := FindItemInItem(ARVData.GetItem(i), nil);

       if Result then

         exit;

     end;

     Result := False;

   end;

   {...................................................}

var StoreSub: TRVStoreSubRVData;

begin

  Result := False;

  dec(ItemNo);

  while RVData<>nil do begin

    Result := FindItemInRVData(RVData, ItemNo);

    if Result then

      break;

    RVData.GetParentInfo(ItemNo, StoreSub);

    if ItemNo<0 then begin

      StoreSub.Free;

      break;

    end;

    RVData := RVData.GetAbsoluteParentData;

    Result := FindItemInItem(RVData.GetItem(ItemNo), StoreSub);

    if Result then

      break;

    dec(ItemNo);

  end;

end;



Test:


var RVData: TCustomRVData;

    ItemNo: Integer;

begin

  RVData := RichViewEdit1.TopLevelEditor.RVData;

  ItemNo := RichViewEdit1.TopLevelEditor.CurItemNo;

  if FindPreviousItem(RVData, ItemNo, 0) then begin

    RVData := RVData.Edit;

    TCustomRVFormattedData(RVData).SetSelectionBounds(

      ItemNo, RVData.GetOffsBeforeItem(ItemNo),

      ItemNo, RVData.GetOffsAfterItem(ItemNo));

    TCustomRVFormattedData(RVData).Invalidate;

  end;

end;


Note: this function uses undocumented methods.





Powered by ABC Amber Outlook Express Converter