RVDsgn.pas
上传用户:daoqigc
上传日期:2021-04-20
资源大小:2795k
文件大小:10k
源码类别:

RichEdit

开发平台:

Delphi

  1. {*******************************************************}
  2. {                                                       }
  3. {       RichView                                        }
  4. {       TfrmRVDesign: form for design-time component    }
  5. {       editor for TRichView.                           }
  6. {       This unit must not be used by applications      }
  7. {       themselves.                                     }
  8. {                                                       }
  9. {       Copyright (c) Sergey Tkachenko                  }
  10. {       svt@trichview.com                               }
  11. {       http://www.trichview.com                        }
  12. {                                                       }
  13. {*******************************************************}
  14. unit RVDsgn;
  15. interface
  16. {$INCLUDE RV_Defs.inc}
  17. uses
  18.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  19.   ComCtrls, StdCtrls, ExtCtrls, RVScroll, RichView, RVStyle, Registry;
  20. type
  21.   TfrmRVDesign = class(TForm)
  22.     btnOk: TButton;
  23.     btnCancel: TButton;
  24.     pc: TPageControl;
  25.     tsStyles: TTabSheet;
  26.     Label1: TLabel;
  27.     rg: TRadioGroup;
  28.     lv: TListView;
  29.     TabSheet1: TTabSheet;
  30.     cbStylesDefault: TCheckBox;
  31.     cbTagsDefault: TCheckBox;
  32.     rgTag: TRadioGroup;
  33.     Label2: TLabel;
  34.     Image1: TImage;
  35.     TabSheet2: TTabSheet;
  36.     GroupBox1: TGroupBox;
  37.     cbRVFSaveBackground: TCheckBox;
  38.     cbRVFSaveLayout: TCheckBox;
  39.     cbRVFBinary: TCheckBox;
  40.     cbRVFSavePictures: TCheckBox;
  41.     cbRVFSaveControls: TCheckBox;
  42.     GroupBox2: TGroupBox;
  43.     cbRVFLoadBackground: TCheckBox;
  44.     cbRVFLoadLayout: TCheckBox;
  45.     cbRVFIgnoreUnknownPictures: TCheckBox;
  46.     cbRVFIgnoreUnknownControls: TCheckBox;
  47.     cbRVFInvStyles: TCheckBox;
  48.     cbRVFInvImageIndices: TCheckBox;
  49.     cbRVFDefault: TCheckBox;
  50.     Image2: TImage;
  51.     Label3: TLabel;
  52.     cbRVFSaveDocProperties: TCheckBox;
  53.     cbRVFLoadDocProperties: TCheckBox;
  54.     procedure FormActivate(Sender: TObject);
  55.     procedure rgClick(Sender: TObject);
  56.     procedure btnOkClick(Sender: TObject);
  57.   private
  58.     { Private declarations }
  59.     Initialized: Boolean;
  60.     rv: TCustomRichView;
  61.     procedure SaveReg;
  62.   public
  63.     { Public declarations }
  64.     procedure SetRichView(rv: TCustomRichView);
  65.   end;
  66. var
  67.   frmRVDesign: TfrmRVDesign;
  68. implementation
  69. {$R *.DFM}
  70. const
  71.  PropertyCount = 6;
  72.  PropertyNames: array [0..PropertyCount-1] of String =
  73.  ('RVFTextStylesReadMode',
  74.   'RVFParaStylesReadMode',
  75.   'RVFOptions',
  76.   'RVFOptions',
  77.   'RTFReadProperties.TextStyleMode',
  78.   'RTFReadProperties.ParaStyleMode');
  79.  PropertyValues: array [0..PropertyCount-1, Boolean] of String =
  80.  (('rvf_sInsertMap', 'rvf_sInsertMerge'),
  81.   ('rvf_sInsertMap', 'rvf_sInsertMerge'),
  82.   ('-[rvfoSaveTextStyles]', '+[rvfoSaveTextStyles]'),
  83.   ('-[rvfoSaveParaStyles]', '+[rvfoSaveParaStyles]'),
  84.   ('rvrsUseClosest', 'rvrsAddIfNeeded'),
  85.   ('rvrsUseClosest', 'rvrsAddIfNeeded'));
  86.   RVFReaderStyleModes: array [TRVFReaderStyleMode] of String =
  87.     ('rvf_sIgnore', 'rvf_sInsertMap', 'rvf_sInsertMerge');
  88.   RVReaderStyleModes: array [TRVReaderStyleMode] of String =
  89.     ('rvrsUseSpecified', 'rvrsUseClosest', 'rvrsAddIfNeeded');
  90. procedure TfrmRVDesign.FormActivate(Sender: TObject);
  91. var i: Integer;
  92. begin
  93.   if Initialized then
  94.     exit;
  95.   lv.Columns.Clear;
  96.   with lv.Columns.Add do begin
  97.     Caption := 'Property';
  98.     Width   := 180;
  99.   end;
  100.   with lv.Columns.Add do begin
  101.     Caption := 'Old Value';
  102.     Width   := 120;
  103.   end;
  104.   with lv.Columns.Add do begin
  105.     Caption := 'New Value';
  106.     Width   := 120;
  107.   end;
  108.   lv.Items.Clear;
  109.   for i := 0 to PropertyCount-1 do
  110.     lv.Items.Add.Caption := PropertyNames[i];
  111.   lv.Items[0].SubItems.Add(RVFReaderStyleModes[rv.RVFTextStylesReadMode]);
  112.   lv.Items[1].SubItems.Add(RVFReaderStyleModes[rv.RVFParaStylesReadMode]);
  113.   lv.Items[2].SubItems.Add(PropertyValues[2, rvfoSaveTextStyles in rv.RVFOptions]);
  114.   lv.Items[3].SubItems.Add(PropertyValues[3, rvfoSaveParaStyles in rv.RVFOptions]);
  115.   lv.Items[4].SubItems.Add(RVReaderStyleModes[rv.RTFReadProperties.TextStyleMode]);
  116.   lv.Items[5].SubItems.Add(RVReaderStyleModes[rv.RTFReadProperties.ParaStyleMode]);
  117.   for i := 0 to PropertyCount-1 do
  118.     lv.Items[i].SubItems.Add('');
  119.   if (rv.RVFTextStylesReadMode=rvf_sInsertMap) and
  120.      (rv.RVFParaStylesReadMode=rvf_sInsertMap) and
  121.      not (rvfoSaveTextStyles in rv.RVFOptions) and
  122.      not (rvfoSaveParaStyles in rv.RVFOptions) and
  123.      (rv.RTFReadProperties.TextStyleMode=rvrsUseClosest) and
  124.      (rv.RTFReadProperties.ParaStyleMode=rvrsUseClosest) then
  125.     rg.ItemIndex := 0
  126.   else if (rv.RVFTextStylesReadMode=rvf_sInsertMerge) and
  127.      (rv.RVFParaStylesReadMode=rvf_sInsertMerge) and
  128.      (rvfoSaveTextStyles in rv.RVFOptions) and
  129.      (rvfoSaveParaStyles in rv.RVFOptions) and
  130.      (rv.RTFReadProperties.TextStyleMode=rvrsAddIfNeeded) and
  131.      (rv.RTFReadProperties.ParaStyleMode=rvrsAddIfNeeded) then
  132.      rg.ItemIndex := 1;
  133.   if rvoTagsArePChars in rv.Options then
  134.     rgTag.ItemIndex := 1
  135.   else
  136.     rgTag.ItemIndex := 0;
  137.   //btnOk.Enabled := rg.ItemIndex>=0;
  138.   cbRVFSaveBackground.Checked := rvfoSaveBack         in rv.RVFOptions;
  139.   cbRVFSaveLayout.Checked     := rvfoSaveLayout       in rv.RVFOptions;
  140.   cbRVFBinary.Checked         := rvfoSaveBinary       in rv.RVFOptions;
  141.   cbRVFSavePictures.Checked   := rvfoSavePicturesBody in rv.RVFOptions;
  142.   cbRVFSaveControls.Checked   := rvfoSaveControlsBody in rv.RVFOptions;
  143.   cbRVFLoadBackground.Checked := rvfoLoadBack         in rv.RVFOptions;
  144.   cbRVFLoadLayout.Checked     := rvfoLoadLayout       in rv.RVFOptions;
  145.   cbRVFIgnoreUnknownPictures.Checked := rvfoIgnoreUnknownPicFmt in rv.RVFOptions;
  146.   cbRVFIgnoreUnknownControls.Checked := rvfoIgnoreUnknownCtrls  in rv.RVFOptions;
  147.   cbRVFInvStyles.Checked      := rvfoConvUnknownStylesToZero    in rv.RVFOptions;
  148.   cbRVFInvImageIndices.Checked := rvfoConvLargeImageIdxToZero   in rv.RVFOptions;
  149.   cbRVFSaveDocProperties.Checked := rvfoSaveDocProperties       in rv.RVFOptions;
  150.   cbRVFLoadDocProperties.Checked := rvfoLoadDocProperties       in rv.RVFOptions;
  151.   Windows.SetFocus(rg.Handle);
  152.   cbStylesDefault.Enabled := rg.ItemIndex>=0;
  153.   Initialized := True;
  154. end;
  155. {------------------------------------------------------------------------------}
  156. procedure TfrmRVDesign.SetRichView(rv: TCustomRichView);
  157. begin
  158.   Self.rv := rv;
  159. end;
  160. {------------------------------------------------------------------------------}
  161. procedure TfrmRVDesign.rgClick(Sender: TObject);
  162. var i: Integer;
  163. begin
  164.   if not Visible or (rg.ItemIndex<0) then
  165.     exit;
  166.   for i := 0 to PropertyCount-1 do
  167.     lv.Items[i].SubItems[1] := PropertyValues[i,rg.ItemIndex>0];
  168.   btnOk.Enabled := True;
  169.   cbStylesDefault.Enabled := rg.ItemIndex>=0;  
  170. end;
  171. {------------------------------------------------------------------------------}
  172. procedure TfrmRVDesign.btnOkClick(Sender: TObject);
  173.   procedure SetRVFOption(Value: Boolean; Option: TRVFOption);
  174.   begin
  175.     if Value then
  176.       rv.RVFOptions := rv.RVFOptions + [Option]
  177.     else
  178.       rv.RVFOptions := rv.RVFOptions - [Option];
  179.   end;
  180. begin
  181.   case rg.ItemIndex of
  182.     0:
  183.       begin
  184.         rv.RVFTextStylesReadMode := rvf_sInsertMap;
  185.         rv.RVFParaStylesReadMode := rvf_sInsertMap;
  186.         rv.RVFOptions := rv.RVFOptions-[rvfoSaveTextStyles, rvfoSaveParaStyles];
  187.         rv.RTFReadProperties.TextStyleMode := rvrsUseClosest;
  188.         rv.RTFReadProperties.ParaStyleMode := rvrsUseClosest;
  189.       end;
  190.     1:
  191.       begin
  192.         rv.RVFTextStylesReadMode := rvf_sInsertMerge;
  193.         rv.RVFParaStylesReadMode := rvf_sInsertMerge;
  194.         rv.RVFOptions := rv.RVFOptions+[rvfoSaveTextStyles, rvfoSaveParaStyles];
  195.         rv.RTFReadProperties.TextStyleMode := rvrsAddIfNeeded;
  196.         rv.RTFReadProperties.ParaStyleMode := rvrsAddIfNeeded;
  197.       end;
  198.   end;
  199.   case rgTag.ItemIndex of
  200.     0:
  201.     begin
  202.       rv.Options := rv.Options-[rvoTagsArePChars];
  203.     end;
  204.     1:
  205.     begin
  206.       rv.Options := rv.Options+[rvoTagsArePChars];
  207.     end;
  208.   end;
  209.   SetRVFOption(cbRVFSaveBackground.Checked, rvfoSaveBack);
  210.   SetRVFOption(cbRVFSaveLayout.Checked,     rvfoSaveLayout);
  211.   SetRVFOption(cbRVFBinary.Checked,         rvfoSaveBinary);
  212.   SetRVFOption(cbRVFSavePictures.Checked,   rvfoSavePicturesBody);
  213.   SetRVFOption(cbRVFSaveControls.Checked,   rvfoSaveControlsBody);
  214.   SetRVFOption(cbRVFLoadBackground.Checked, rvfoLoadBack);
  215.   SetRVFOption(cbRVFLoadLayout.Checked,     rvfoLoadLayout);
  216.   SetRVFOption(cbRVFIgnoreUnknownPictures.Checked, rvfoIgnoreUnknownPicFmt);
  217.   SetRVFOption(cbRVFIgnoreUnknownControls.Checked, rvfoIgnoreUnknownCtrls);
  218.   SetRVFOption(cbRVFInvStyles.Checked,             rvfoConvUnknownStylesToZero);
  219.   SetRVFOption(cbRVFInvImageIndices.Checked,       rvfoConvLargeImageIdxToZero);
  220.   SetRVFOption(cbRVFSaveDocProperties.Checked,     rvfoSaveDocProperties);
  221.   SetRVFOption(cbRVFLoadDocProperties.Checked,     rvfoLoadDocProperties);
  222.   SaveReg;
  223. end;
  224. procedure TfrmRVDesign.SaveReg;
  225. var reg: TRegistry;
  226. begin
  227.   if not (cbStylesDefault.Checked or cbTagsDefault.Checked or cbRVFDefault.Checked) then
  228.     exit;
  229.   reg := TRegistry.Create;
  230.   try
  231.     if reg.OpenKey('SoftwareTRichView', True) then begin
  232.       if cbStylesDefault.Checked then
  233.         reg.WriteInteger('Styles', rg.ItemIndex);
  234.       if cbTagsDefault.Checked then
  235.         reg.WriteInteger('Tags', rg.ItemIndex);
  236.       if cbRVFDefault.Checked then begin
  237.         reg.WriteBool('rvf01',  cbRVFSaveBackground.Checked);
  238.         reg.WriteBool('rvf02',  cbRVFSaveLayout.Checked);
  239.         reg.WriteBool('rvf03',  cbRVFBinary.Checked);
  240.         reg.WriteBool('rvf04',  cbRVFSavePictures.Checked);
  241.         reg.WriteBool('rvf05',  cbRVFSaveControls.Checked);
  242.         reg.WriteBool('rvf06',  cbRVFLoadBackground.Checked);
  243.         reg.WriteBool('rvf07',  cbRVFLoadLayout.Checked);
  244.         reg.WriteBool('rvf08',  cbRVFIgnoreUnknownPictures.Checked);
  245.         reg.WriteBool('rvf09',  cbRVFIgnoreUnknownControls.Checked);
  246.         reg.WriteBool('rvf10',  cbRVFInvStyles.Checked);
  247.         reg.WriteBool('rvf11',  cbRVFInvImageIndices.Checked);
  248.         reg.WriteBool('rvf12',  cbRVFSaveDocProperties.Checked);
  249.         reg.WriteBool('rvf13',  cbRVFLoadDocProperties.Checked);        
  250.       end;
  251.     end;
  252.   finally
  253.     reg.Free;
  254.   end;
  255. end;
  256. end.