⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listgallery2rvfrm.pas

📁 richviewaction 1.58 需要richview 1.9.46
💻 PAS
字号:

{*******************************************************}
{                                                       }
{       RichViewActions (not included in main set)      }
{       Dialog for applying HTML-style lists            }
{                                                       }
{       Copyright (c) Sergey Tkachenko                  }
{       svt@trichview.com                               }
{       http://www.trichview.com                        }
{                                                       }
{*******************************************************}

unit ListGallery2RVFrm;

{$I RichViewActions.inc}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, BaseRVFrm, ImgList, StdCtrls, RVOfficeRadioBtn, ComCtrls,
  {$IFDEF USERVKSDEVTE}
  te_controls,
  {$ENDIF}
  RVSpinEdit, RVEdit, RVStyle;

type
  TfrmRVListGallery2 = class(TfrmRVBase)
    il1: TImageList;
    pc: TPageControl;
    tsBullets: TTabSheet;
    tsNumbering: TTabSheet;
    rg1: TRVOfficeRadioGroup;
    rg2: TRVOfficeRadioGroup;
    lblLevel: TLabel;
    seLevel: TRVSpinEdit;
    btnOk: TButton;
    btnCancel: TButton;
    GroupBox1: TGroupBox;
    seStartFrom: TRVSpinEdit;
    rbContinue: TRadioButton;
    rbStartFrom: TRadioButton;
    procedure seStartFromChange(Sender: TObject);
    procedure rg2DblClickItem(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    frve: TCustomRichViewEdit;
    BeforeListNo, AfterListNo: Integer;
  protected
    {$IFDEF RVASKINNED}
    procedure OnCreateThemedControl(OldControl, NewControl: TControl); override;
    {$ENDIF}    
  public
    { Public declarations }
    _rbStartFrom, _pc, _tsBullets, _tsNumbering: TControl;
    procedure Init(rve: TCustomRichViewEdit);
    procedure GetListStyle(var ListStyle: TRVListInfo; var ListNo, Level, StartFrom: Integer;
      var UseStartFrom: Boolean);
  end;

implementation

{$R *.dfm}

{ TfrmRVListGallery2 }

procedure TfrmRVListGallery2.GetListStyle(var ListStyle: TRVListInfo; var ListNo, Level, StartFrom: Integer;
      var UseStartFrom: Boolean);
begin
  if ((GetPageControlActivePageIndex(_pc)=0) and (rg1.ItemIndex<1)) or
     ((GetPageControlActivePageIndex(_pc)=1) and (rg2.ItemIndex<1)) then begin
    ListStyle := nil;
    exit;
  end;
  ListStyle := TRVListInfo.Create(nil);
  ListStyle.Standard := False;
  with ListStyle.Levels.Add do begin
    Font.Size := 12;
    case GetPageControlActivePageIndex(_pc) of
      0:
        begin
          ListType := rvlstBullet;
          case rg1.ItemIndex of
            1:
              begin
                Font.Name := 'Symbol';
                Font.Charset := SYMBOL_CHARSET;
                FormatString := #$B7;
              end;
            2:
              begin
                Font.Name := 'Courier New';
                Font.Charset := ANSI_CHARSET;
                FormatString := 'o';
              end;
            3:
              begin
                Font.Name := 'Wingdings';
                Font.Charset := SYMBOL_CHARSET;
                FormatString := #$A7;
              end;
          end;
        end;
      1:
        begin
          FormatString := '%0:s.';
          case rg2.ItemIndex of
            1: ListType := rvlstDecimal;
            2: ListType := rvlstUpperAlpha;
            3: ListType := rvlstLowerAlpha;
            4: ListType := rvlstUpperRoman;
            5: ListType := rvlstLowerRoman;
          end;
        end;
    end;
    {
    if cbCompact.Checked then begin
      LeftIndent   := 24 * seLevel.AsInteger;
      MarkerIndent := 24 * seLevel.AsInteger;
      FirstIndent  := 24;
      end
    else} begin
      LeftIndent   := 24 * (seLevel.AsInteger+1);
      MarkerIndent := 24 * seLevel.AsInteger;
      FirstIndent  := 0;
    end;
  end;
  if (BeforeListNo>=0) and ListStyle.IsSimpleEqual(frve.Style.ListStyles[BeforeListNo], True) then
    ListNo := BeforeListNo
  else if (AfterListNo>=0) and ListStyle.IsSimpleEqual(frve.Style.ListStyles[AfterListNo], True) then
    ListNo := AfterListNo
  else
    ListNo := -1;
  Level := seLevel.AsInteger;
  StartFrom := seStartFrom.AsInteger;
  UseStartFrom := GetRadioButtonChecked(_rbStartFrom) and not ((ListNo<0) and (StartFrom=1)); 
end;

procedure TfrmRVListGallery2.Init(rve: TCustomRichViewEdit);
var ListNo, Level, Dummy1: Integer;
    StartFrom, StartNo, StartOffs, EndNo, EndOffs: Integer;
    UseStartFrom: Boolean;
begin
  rve := rve.TopLevelEditor;
  frve := rve;
  rve.RVData.GetSelectionBoundsEx(StartNo, StartOffs, EndNo, EndOffs, True);
  if (rve.GetListMarkerInfo(EndNo, ListNo, Level, StartFrom, UseStartFrom)>=0) and (ListNo>=0) then begin
    if UseStartFrom then
      seStartFrom.Value := StartFrom;
    SetRadioButtonChecked(_rbStartFrom, UseStartFrom);
    case rve.Style.ListStyles[ListNo].Levels[Level].ListType of
      rvlstBullet:
        begin
          SetPageControlActivePage(_pc, _tsBullets);
          if rve.Style.ListStyles[ListNo].Levels[Level].FormatString=#$B7 then
            rg1.ItemIndex := 1
          else if rve.Style.ListStyles[ListNo].Levels[Level].FormatString='o' then
            rg1.ItemIndex := 2
          else if rve.Style.ListStyles[ListNo].Levels[Level].FormatString=#$A7 then
            rg1.ItemIndex := 2;
        end;
      rvlstDecimal:
        begin
          SetPageControlActivePage(_pc, _tsNumbering);
          rg2.ItemIndex := 1;
        end;
      rvlstUpperAlpha:
        begin
          SetPageControlActivePage(_pc, _tsNumbering);
          rg2.ItemIndex := 2;
        end;
      rvlstLowerAlpha:
        begin
          SetPageControlActivePage(_pc, _tsNumbering);
          rg2.ItemIndex := 3;
        end;
      rvlstUpperRoman:
        begin
          SetPageControlActivePage(_pc, _tsNumbering);
          rg2.ItemIndex := 4;
        end;
      rvlstLowerRoman:
        begin
          SetPageControlActivePage(_pc, _tsNumbering);
          rg2.ItemIndex := 5;
        end;
    end;
    if Round(rve.Style.ListStyles[ListNo].Levels[Level].LeftIndent / 24 - 1)<1 then
      seLevel.Value := 1
    else
      seLevel.Value := Round(rve.Style.ListStyles[ListNo].Levels[Level].LeftIndent / 24 - 1);
  end;
  BeforeListNo := -1;
  AfterListNo  := -1;
  while (StartNo>0) and not rve.IsParaStart(StartNo) do
    dec(StartNo);
  if StartNo>0 then begin
    dec(StartNo);
    while (StartNo>0) and not rve.IsParaStart(StartNo) do
      dec(StartNo);
    if (rve.GetListMarkerInfo(StartNo, ListNo, Level, Dummy1, UseStartFrom)>=0) then
      BeforeListNo := ListNo;
  end;
  while (EndNo<rve.ItemCount-1) and not rve.IsParaStart(EndNo) do
    inc(EndNo);
  if rve.IsParaStart(EndNo) and (rve.GetListMarkerInfo(EndNo, ListNo, Level, Dummy1, UseStartFrom)>=0) then
    AfterListNo := ListNo;
end;


procedure TfrmRVListGallery2.seStartFromChange(Sender: TObject);
begin
  if Visible then
    SetRadioButtonChecked(_rbStartFrom, True);
end;

procedure TfrmRVListGallery2.rg2DblClickItem(Sender: TObject);
begin
  ModalResult := mrOk;
end;

{$IFDEF RVASKINNED}
procedure TfrmRVListGallery2.OnCreateThemedControl(OldControl,
  NewControl: TControl);
begin
  if OldControl = _rbStartFrom then
    _rbStartFrom := NewControl
  else if OldControl = _pc then begin
    _pc := NewControl;
    {$IFDEF USERVKSDEVTE}
    _tsBullets := TTePageControl(_pc).Pages[0];
    _tsNumbering := TTePageControl(_pc).Pages[1];
    {$ENDIF}
  end;
end;
{$ENDIF}

procedure TfrmRVListGallery2.FormCreate(Sender: TObject);
begin
  _rbStartFrom := rbStartFrom;
  _pc          := pc;
  _tsBullets   := tsBullets;
  _tsNumbering := tsNumbering;
  inherited;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -