GetItemStyle

Public forum for discussing TScaleRichView (shareware addon to TRichView providing WYSIWYG editing)
Post Reply
th9999
Posts: 13
Joined: Tue Jun 25, 2013 10:42 am

GetItemStyle

Post by th9999 » Mon Jul 24, 2017 11:04 am

Hello, administrator
Ask a question. I have a document containing text, pictures, components, forms, etc. How can I decide which item is a form or text.
My code is as follows:
For I: = 0 to TmpSRichViewEdit. RichViewEdit. Do ItemCount - 1
The begin
If TmpSRichViewEdit. RichViewEdit. RVData. GetItemStyle (I) = rvsTable then begin
TableTmp: = TRVTableItemInfo (TmpSRichViewEdit. RichViewEdit. RVData. The GetItem (I));
... This is the form
End else begin / / normal content
...... This judgment is text
The end;
The end;
Thank you very much!

Sergey Tkachenko
Site Admin
Posts: 13468
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Re: GetItemStyle

Post by Sergey Tkachenko » Mon Jul 24, 2017 1:36 pm

If GetItemStyle returns zero or positive value, this is a text item. The returned value is the index in the collection TmpSRichViewEdit.RichViewEdit.Style.TextStyles.

If GetItemStyle returns a negative value, this is a non-text item. The list of items is here:
http://www.trichview.com/help/idh_const_rvsxxx.html

th9999
Posts: 13
Joined: Tue Jun 25, 2013 10:42 am

Re: GetItemStyle

Post by th9999 » Mon Jul 24, 2017 11:34 pm

Thank you very much

th9999
Posts: 13
Joined: Tue Jun 25, 2013 10:42 am

Re: GetItemStyle

Post by th9999 » Mon Jul 24, 2017 11:45 pm

Hi Sergey Tkachenko
I have a document at the time of editing, the text has multiple colors to distinguish, but at the time of printing requirements to print all black font, in my judgment in the way you modify the document font color, but some will be garbled words? The HTML code is as follows: for I: = 0 to TmpSRichViewEdit. RichViewEdit. Do ItemCount - 1
The begin
If TmpSRichViewEdit. RichViewEdit. RVData. GetItemStyle (I) = rvsTable rvsTable then / / form
The begin
TableTmp: = TRVTableItemInfo (TmpSRichViewEdit. RichViewEdit. RVData. The GetItem (I));
For tmpRow: = 0 to TableTmp. RowCount - 1 do / / line count
The begin
For tmpCol: = 0 to TableTmp. ColCount - 1 do / / column number
The begin
If TableTmp. Cells [tmpRow tmpCol] < > nil then
The begin
RVData: = TableTmp Cells [tmpRow, tmpCol]. GetRVData;
For tmpTtemNO: = 0 to RVData. ItemCount - 1 do
The begin
If rvdata.getitemstyle (tmpTtemNO) > = 0 then / / greater than or equal to 0 represents text
RVData. The GetItem (tmpTtemNO). StyleNo: = 0; / / cancel the font color
The end;
The end;
The end;
The end;
End else begin / / normal content
If TmpSRichViewEdit. RichViewEdit. GetItemStyle (I) > = 0 then / / is greater than or equal to 0 (text
TmpSRichViewEdit. RichViewEdit. The GetItem (I). The StyleNo: = 0; / / cancel the font color
The end;
The end;
Is there a problem with the way I changed the color of the font? thank you

Sergey Tkachenko
Site Admin
Posts: 13468
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Re: GetItemStyle

Post by Sergey Tkachenko » Tue Jul 25, 2017 8:23 pm

TRVPrint component has ColorMode property, allowing to print black-on-white text without document modification.
However, this feature is not supported by ScaleRichView, so you are right, you need to change text color in document.

If you need changing only text color, you do not need to analyze the whole document. You just need to change RVStyle:

Code: Select all

procedure MakeBW(RVStyle: TRVStyle);
var
  i, j: Integer;
begin
  for i := 0 to RVStyle.TextStyles.Count - 1 do
  begin
    RVStyle.TextStyles[i].Color := clBlack;
    RVStyle.TextStyles[i].BackColor := clNone;
  end;
  for i := 0 to RVStyle.ListStyles.Count - 1 do
    for j := 0 to RVStyle.ListStyles[i].Levels.Count - 1 do
      RVStyle.ListStyles[i].Levels[j].Font.Color := clBlack;
end;

procedure SRVMakeBW(Srv: TSRichViewEdit);
var 
  i: TSRVHeaderFooterType;
begin
  MakeBW(Srv.RichViewEdit.Style);
  for i := Low(TSRVHeaderFooterType) to High(TSRVHeaderFooterType) do
    MakeBW(Srv.SubDocuments[i].GetRVStyle);
end;
This code makes all text items and list markers black.

th9999
Posts: 13
Joined: Tue Jun 25, 2013 10:42 am

SRVMakeBW

Post by th9999 » Wed Jul 26, 2017 4:45 am

Hello, administrator
Sorry to have to bother you, I listen to your code changes, print text can black font, but I don't have any (TSRVHeaderFooterType) unit, I modify your code, do not know to have what effect, modify the code is as follows:
Procedure SRVMakeBW (Srv: TSRichViewEdit);
/ / var I: TSRVHeaderFooterType;
The begin
MakeBW (Srv) RichViewEdit) Style);
MakeBW (Srv) RVHeader) Style);
MakeBW (Srv) RVFooter) Style);
/ / for I: = Low (TSRVHeaderFooterType) to High (TSRVHeaderFooterType) do
/ / MakeBW (Srv SubDocuments GetRVStyle);
The end;
Currently, the TSRVComboBox control in the printed file is still in color, can it not be modified?

th9999
Posts: 13
Joined: Tue Jun 25, 2013 10:42 am

SRVMakeBW

Post by th9999 » Wed Jul 26, 2017 4:50 am

Code: Select all

procedure SRVMakeBW(Srv: TSRichViewEdit);
//var i: TSRVHeaderFooterType;
begin
  MakeBW(Srv.RichViewEdit.Style);
  MakeBW(Srv.RVHeader.Style);
  MakeBW(Srv.RVFooter.Style); 
  //for i := Low(TSRVHeaderFooterType) to High(TSRVHeaderFooterType) do
  //  MakeBW(Srv.SubDocuments[i].GetRVStyle);
end;

Sergey Tkachenko
Site Admin
Posts: 13468
Joined: Sat Aug 27, 2005 10:28 am
Contact:

Re: GetItemStyle

Post by Sergey Tkachenko » Wed Jul 26, 2017 8:59 am

Your change is correct, if you use an old version of ScaleRichView which does not support special headers and footers for the first page and odd/even pages.
For changing text color in controls, you really need to enumerate all items in the document and assign Font.Color. I'll make an example later.

th9999
Posts: 13
Joined: Tue Jun 25, 2013 10:42 am

Re: GetItemStyle

Post by th9999 » Thu Jul 27, 2017 1:19 am

Sergey Tkachenko
Thank you very much, waiting for your presentation... I'll show you a screenshot of the color of the control.
Attachments
QQ图片20170727091225.png
QQ图片20170727091225.png (28.81 KiB) Viewed 755 times

Post Reply