Page 1 of 1

Moving the Caret Position

Posted: Sat Jan 15, 2011 9:47 am
by viperpix
Hi, im a new fan of your products.
i've recently downloaded the trial version of trichview, that is GREAT!!!
I've also found that in a mixed text, object are known as "item"s, but only thing that i couldn't understand was that "How can i move the Caret Position before/after a specified Item?"
i would like verryy much to buy this component, but i need this ability too!
Thanks.

Posted: Sat Jan 15, 2011 11:52 am
by Sergey Tkachenko
If you know ItemNo in the document of rve: TRichViewEdit:
Before the item:

Code: Select all

rve.SetSelectionBounds(ItemNo, rve.GetOffsBeforeItem(ItemNo),
  ItemNo, rve.GetOffsBeforeItem(ItemNo));
After the item:

Code: Select all

rve.SetSelectionBounds(ItemNo, rve.GetOffsAfterItem(ItemNo),
  ItemNo, rve.GetOffsAfterItem(ItemNo));
----
To move the caret to the beginning of the ItemNo-th item in the table cell:

Code: Select all

uses CRVData;

var RVData: TCustomRVFormattedData;

RVData := TCustomRVFormattedData(table.Cells[r,c].Edit);
RVData.SetSelectionBounds(ItemNo, RVData.GetOffsBeforeItem(ItemNo),
  ItemNo, RVData.GetOffsBeforeItem(ItemNo));

Moving the Caret Position

Posted: Sun Jan 16, 2011 6:50 am
by viperpix
Thanks for ur help, but here's the thing:
I just want to move the caret at before and after all images in rve and put those images in new lines by pressing "enter" at before and after each of them;
but i'm wondering why the Enter code (#13#10) wont work in RVE!
How can i achieve this?
Thanks.

Posted: Mon Jan 17, 2011 7:54 pm
by Sergey Tkachenko

Code: Select all

procedure PicturesToNewLines(RVData: TCustomRVData; rve: TCustomRichViewEdit);
var i,r,c: Integer;
    table: TRVTableItemInfo;
begin
   for i := RVData.ItemCount-1 downto 0 do
     case RVData.GetItemStyle(i) of
       rvsPicture, rvsHotPicture:
         begin
           if (i<>RVData.ItemCount-1) and not RVData.IsFromNewLine(i+1) then begin
             RVData := RVData.Edit;
             TCustomRVFormattedData(RVData).SetSelectionBounds(
               i, RVData.GetOffsAfterItem(i), i, RVData.GetOffsAfterItem(i));
             SendMessage(rve.Handle, WM_KEYDOWN, VK_RETURN, 0);
           end;
           if not (RVData.IsFromNewLine(i) or ((i>0) and (RVData.GetItemStyle(i-1)=rvsListMarker))) then begin
             RVData := RVData.Edit;
             TCustomRVFormattedData(RVData).SetSelectionBounds(
               i, RVData.GetOffsBeforeItem(i), i, RVData.GetOffsBeforeItem(i));
             SendMessage(rve.Handle, WM_KEYDOWN, VK_RETURN, 0);
           end;
         end;
       rvsTable:
         begin
           table := TRVTableItemInfo(RVData.GetItem(i));
           for r := 0 to table.RowCount-1 do
             for c := 0 to table.ColCount-1 do
               if table.Cells[r,c]<>nil then
                 PicturesToNewLines(table.Cells[r,c].GetRVData, rve);
         end;
     end;
end;
Call:

Code: Select all

  PicturesToNewLines(RichViewEdit1.RVData, RichViewEdit1);
PS: rve.InsertText(#13#10) can be used instead of SendMessage(rve.Handle, WM_KEYDOWN, VK_RETURN, 0). But in the current version, InsertText has a little problem, so results will not be optimal with it.

Moving the Caret Position

Posted: Tue Jan 18, 2011 7:09 am
by viperpix
Thanks again for ur answer, thats helpful. but i really need to have "Enter" ability, so maybe i should use the sendmessage function instead of inserttext! but its not a good idea in all times!
maybe i should wait for an update for RVE which solves this problem.
but for now i think i can handle it by message function.
Thanks for ur guidance.

Posted: Tue Jan 18, 2011 11:29 am
by Sergey Tkachenko
Actually, the only problem with InsertText(#13#10) after a picture is that it adds unnecessary empty text item after the picture. It is not noticeable - you will not see the difference if you replace SendMessage to InsertText in the code above.
But the condition for checking if the picture already ends a paragraph (not RVData.IsFromNewLine(i+1)) does not work with this empty text line, so when this code is called for the second time, empty lines are added after pictures.
A fix will be added in a beta version for registered users later in this weak.
As for the trial version, we plan to update it in the end of this month or at the beginning of the next month.