trichview.com Forum Index trichview.com
TRichView support forums
 

Adding special characters


 
Post new topic   Reply to topic    trichview.com Forum Index -> Support
    View previous topic :: View next topic  
Author Message
BennieC



Joined: 18 Jun 2011
Posts: 28

PostPosted: Wed Jan 04, 2012 3:19 pm    Post subject: Adding special characters Reply with quote

Hi,
I wish to allow editors to add reference numbers to documents eg (123), in superscript and a special colour, at specific locations.
However, I would like to have the ability to display or not display such numbers. Is there an easy way to do this or must the document be parsed fully to allow or disallow display. Also, how do I insert a special character to identify the location of such text.
Bennie
Back to top
View user's profile Send private message
Sergey Tkachenko
Site Admin


Joined: 27 Aug 2005
Posts: 11004

PostPosted: Thu Jan 05, 2012 2:14 pm    Post subject: Reply with quote

The simplest solution is to mark this text as hidden (adding rvteoHidden in TextStyle.Options). They can be shown only if you include rvoShowHiddenText in RichViewEdit.Options.
This text will have a special dotted underline when displayed.

If you do not want to use a hidden text, then yes, you need to search and delete them. You can assign some special tag value to these items to distinguish them from the rest of text.
Back to top
View user's profile Send private message Visit poster's website
BennieC



Joined: 18 Jun 2011
Posts: 28

PostPosted: Fri Jan 06, 2012 10:55 am    Post subject: Reply with quote

Thanks.
I am struggling to identify positions.
I click in the document and use insertText(InsertedText,true) to place the reference text in the location. I now need to change the format of the reference text to superscript, red and hidden, but I can't locate the specific string. I assume I need to select it to change it but to select it (SetSelection) I need to know the Item number which I can't locate.
I assume I should do the following

Click in the document at the insert location
Insert the text string (InsertText)
Select the text string (SetSelection)
Change it's style (??)

And then when displaying it I need to toggle hidden on or off as desired

Is this more or less correct and how do I achieve this
Back to top
View user's profile Send private message
Sergey Tkachenko
Site Admin


Joined: 27 Aug 2005
Posts: 11004

PostPosted: Fri Jan 06, 2012 3:18 pm    Post subject: Reply with quote

It's simpler.
All inserted text use the style defined in RichViewEdit.CurTextStyleNo.
Assign it before calling InsertText.
Do you use RichViewActions?
Back to top
View user's profile Send private message Visit poster's website
BennieC



Joined: 18 Jun 2011
Posts: 28

PostPosted: Mon Jan 09, 2012 12:51 pm    Post subject: Reply with quote

OK, I have tried setting the style and it does work. However, when adding my new style, using textstyles.add, how do I know what the index of the addition is. I tried to use .count, but there appears to be an offset of 2 ie count would say there are 8 styles, but styleno 10 is the one I added.
Is there a default styleset?

Answer to the other question - yes I do use Richview actions as my editor is basically the sample as provided by you - for now at least.
Bennie
Back to top
View user's profile Send private message
Sergey Tkachenko
Site Admin


Joined: 27 Aug 2005
Posts: 11004

PostPosted: Mon Jan 09, 2012 1:59 pm    Post subject: Reply with quote

Collection items are indexed from 0 to Count-1, so, after calling TextStyles.Add, the new style has the index TextStyles.Count-1.

You need to make sure that you do not create a style identical to the style that already exists. Use TextStyles.FindSuchStyle to find an existing style with the required properties. Add a new style only if FindSuchStyle returns -1.
The example can be found in Demos\*\Editors\Editor 2\

If you use RichViewActions, you can use TrvActionFontEx instead of working directly with styles.
For example, you want to retain all the properties of the current text style, but make it all-caps, red, arial, 10pt:
Code:
rvActionFontEx1.UserInterface := False;
rvActionFontEx1.ValidProperties := [rvfimFontName, rvfimSize, rvfimAllCaps, rvfimColor];
rvActionFontEx1.Font.Name := 'Arial';
rvActionFontEx1.Font.Size := 10;
rvActionFontEx1.Font.Color := clRed;
rvActionFontEx1.FontStyleEx := [rvfsAllCaps];
rvActionFontEx1.ExecuteTarget(RichViewEdit1);
rvActionFontEx1.UserInterface := True;
Back to top
View user's profile Send private message Visit poster's website
BennieC



Joined: 18 Jun 2011
Posts: 28

PostPosted: Tue Jan 10, 2012 1:43 pm    Post subject: Reply with quote

Well there is some progress. I can add a new style consistently. The next problem is that, when I use aTRichview component to display the edited text, it does not recognise the same style. I then proceeded to save the style after creation in a ini file but finding the style in the saved file always returns -1 and hence a new style is always created.
Code:


unit EditUtils;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ComCtrls, ExtCtrls, ImgList, ContNrs,
  RVEdit, RVStyle;

procedure CreateUserStyles(CurrStyle : integer; var AStyle: TRVStyle);
procedure GetRefFont(CurrStyle : integer; var FontInfo: TFontInfo;
                      var AStyle: TRVStyle; var StyleNo : integer);

var
  RefStyleNo : integer;    // The style number for references

implementation

uses L5_Globals;

procedure GetRefFont(CurrStyle : integer; var FontInfo: TFontInfo;
                      var AStyle: TRVStyle; var StyleNo : integer);
begin
  // creating text style with the desired attributes
  FontInfo := TFontInfo.Create(nil);
  try
    FontInfo.Assign(AStyle.TextStyles[CurrStyle]);
    FontInfo.FontName := 'Arial';
    FontInfo.Size := 12;
    FontInfo.Color := clBlue;
    FontInfo.SubSuperScriptType := rvsssSuperScript;
    // if such text style already exists, reusing it
    StyleNo := AStyle.TextStyles.FindSuchStyle(CurrStyle, FontInfo, RVAllFontInfoProperties);
  finally
    FontInfo.Free;
  end;
end;

procedure CreateUserStyles(CurrStyle : integer; var AStyle: TRVStyle);
var
  FontInfo : TFontInfo;
begin
  // First check if a Style.ini exists, if so load it, else create a new one and save it
  if FileExists(ApplicationPath + '\EdtStyle.ini') then
  begin
    AStyle.LoadINI(ApplicationPath + '\EdtStyle.ini', 'TextStyles');
    GetRefFont(CurrStyle, FontInfo, AStyle, RefStyleNo);
  end
  else
  begin
    GetRefFont(CurrStyle, FontInfo, AStyle, RefStyleNo);
  end;

  if RefStyleNo < 0 then
  try
    begin
      // if not, adding it
      AStyle.TextStyles.Add;
      RefStyleNo := AStyle.TextStyles.Count - 1;
      AStyle.TextStyles[RefStyleNo].Assign(FontInfo);
      AStyle.TextStyles[RefStyleNo].Standard := False;
    end;
  finally
    AStyle.SaveINI(ApplicationPath + '\EdtStyle.ini', 'TextStyles');
  end;

end;


end.


The above is called with
Code:
     
      myEdStyle := TRVStyle.Create(self);
      myEdStyle := aRVComponent.Style;
      myEditor.RichViewEdit1.Style := myEdStyle;
      CreateUserStyles(myEditor.RichViewEdit1.CurItemStyle, myEdStyle);
      myEditor.RichViewEdit1.Format;



Hope my code is readable
Back to top
View user's profile Send private message
Sergey Tkachenko
Site Admin


Joined: 27 Aug 2005
Posts: 11004

PostPosted: Wed Jan 11, 2012 5:38 pm    Post subject: Reply with quote

Can you reproduce this problem in a simple project?
Send it to richviewgmailcom.
Back to top
View user's profile Send private message Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    trichview.com Forum Index -> Support All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group