📄 listgalleryrvfrm.pas
字号:
{*******************************************************}
{ }
{ RichViewActions }
{ Dialog for applying lists }
{ }
{ Copyright (c) Sergey Tkachenko }
{ svt@trichview.com }
{ http://www.trichview.com }
{ }
{*******************************************************}
unit ListGalleryRVFrm;
interface
{$I RV_Defs.inc}
{$I RichViewActions.inc}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, BaseRVFrm, ComCtrls, StdCtrls, RVOfficeRadioBtn, RVStyle,
{$IFDEF USERVKSDEVTE}
te_theme, te_controls, te_extctrls,
{$ENDIF}
{$IFDEF USERVTNT}
TntComCtrls,
{$ENDIF}
PtblRV, RVReport, ImgList, RVSpinEdit, RVClasses, RVEdit, RVALocalize;
type
TfrmRVListGallery = class(TfrmRVBase)
btnOk: TButton;
btnCancel: TButton;
pc: TPageControl;
ts1: TTabSheet;
ts2: TTabSheet;
rg1: TRVOfficeRadioGroup;
btnEdit1: TButton;
RVStyle2: TRVStyle;
il: TImageList;
helper: TRVReportHelper;
btnReset: TButton;
rvstmp: TRVStyle;
RVStyle1: TRVStyle;
rg2: TRVOfficeRadioGroup;
btnEdit2: TButton;
il2: TImageList;
il3: TImageList;
cmbNumbering: TComboBox;
seStartFrom: TRVSpinEdit;
rvsTemplate1: TRVStyle;
rvsTemplate2: TRVStyle;
procedure FormCreate(Sender: TObject);
procedure rg1Click(Sender: TObject);
procedure btnEdit1Click(Sender: TObject);
procedure btnEdit2Click(Sender: TObject);
procedure rg2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure rg2DblClickItem(Sender: TObject);
procedure cmbNumberingClick(Sender: TObject);
procedure btnResetClick(Sender: TObject);
private
{ Private declarations }
StyleIndices: array [0..1] of TRVIntegerList;
StartFromList: TRVIntegerList;
FMainPage, FMainIndex: Integer;
_btnEdit1, _btnEdit2, _btnReset,
_cmbNumbering, _pc, _ts1, _ts2: TControl;
procedure CreateThumbnail(bmp: TBitmap; ListNo: Integer; RVStyle1: TRVStyle);
procedure EditList(RVStyle: TRVStyle; Index: Integer);
procedure InitBullets;
function GetRVStyle(PageNo: Integer): TRVStyle;
function GetRVStyleTemplate(PageNo: Integer): TRVStyle;
function Getrg(PageNo: Integer): TRVOfficeRadioGroup;
protected
{$IFDEF RVASKINNED}
procedure OnCreateThemedControl(OldControl, NewControl: TControl); override;
{$ENDIF}
public
{ Public declarations }
procedure GetListStyle(var ListStyle: TRVListInfo; var ListNo: Integer; var StartFrom: Integer;
var UseStartFrom: Boolean);
procedure InitStyles(rve: TCustomRichViewEdit);
procedure Localize; override;
end;
implementation
uses ParaListRVFrm;
const ThumbWidth = 67;
ThumbHeight = 93;
LongText = '--------------------------------------------------------------------------------------------------------';
var ModifiedTemplates: array [0..1] of TRVStyle;
{$R *.dfm}
function GetThemedColor(Color: TColor): TColor;
begin
Result := Color;
{$IFDEF USERVKSDEVTE}
if GetThemeLink(nil)<>nil then
Result := GetThemeLink(nil).SysColors[Color];
{$ENDIF}
end;
{ TfrmRVListGallery }
procedure TfrmRVListGallery.CreateThumbnail(bmp: TBitmap; ListNo: Integer;
RVStyle1: TRVStyle);
var h,level,i: Integer;
begin
bmp.Canvas.Brush.Color := GetThemedColor(clWindow);
bmp.Canvas.FillRect(Bounds(0,0,bmp.Width,bmp.Height));
level := 0;
if RVStyle1.ListStyles[ListNo].Levels.Count=0 then
exit;
rvstmp.ListStyles.Clear;
rvstmp.ListStyles.Add.Assign(RVStyle1.ListStyles[ListNo]);
for i := 0 to rvstmp.ListStyles[0].Levels.Count-1 do begin
rvstmp.ListStyles[0].Levels[i].LeftIndent := Round(rvstmp.ListStyles[0].Levels[i].LeftIndent/2);
rvstmp.ListStyles[0].Levels[i].MarkerIndent := Round(rvstmp.ListStyles[0].Levels[i].MarkerIndent/2);
rvstmp.ListStyles[0].Levels[i].FirstIndent := Round(rvstmp.ListStyles[0].Levels[i].FirstIndent/2);
end;
ListNo := 0;
helper.RichView.Clear;
helper.RichView.Style := rvstmp;
for i := 0 to 2 do begin
helper.RichView.SetListMarkerInfo(-1, ListNo, level, 1, 0, False);
helper.RichView.AddNL(LongText, 0, -1);
helper.RichView.SetAddParagraphMode(False);
helper.RichView.AddNL(LongText, 0, 0);
helper.RichView.SetAddParagraphMode(True);
if not rvstmp.ListStyles[ListNo].OneLevelPreview then
inc(level);
if level = rvstmp.ListStyles[ListNo].Levels.Count then
level := 0;
end;
helper.Init(Canvas, bmp.Width);
helper.FormatNextPage(1000);
h := helper.EndAt;
if h<il.Height then
h := il.Height;
helper.rv.ClientHeight := h;
// w := il.Width;
helper.rv.ClientWidth := MulDiv(helper.RichView.ClientWidth, h, il.Height);
helper.DrawPreview(1, bmp.Canvas, Rect(0,0,il.Width,il.Height));
//helper.DrawPage(1, bmp.Canvas, True, bmp.Height);
end;
procedure TfrmRVListGallery.EditList(RVStyle: TRVStyle; Index: Integer);
var frm: TfrmRVParaList;
r: Boolean;
begin
if Index<1 then
exit;
frm := TfrmRVParaList.Create(Application);
frm.SetListStyle(RVStyle.ListStyles[Index-1]);
r := frm.ShowModal=mrOk;
if r then begin
frm.GetListStyle(rvstmp.ListStyles[0]);
if rvstmp.ListStyles[0].HasNumbering then
SetPageControlActivePage(_pc, _ts2)
else
SetPageControlActivePage(_pc, _ts1);
Getrg(GetPageControlActivePageIndex(_pc)).ItemIndex := Index;
StyleIndices[GetPageControlActivePageIndex(_pc)][Index-1] := -1;
frm.GetListStyle(ModifiedTemplates[GetPageControlActivePageIndex(_pc)].ListStyles[Index-1]);
frm.GetListStyle(GetRVStyle(GetPageControlActivePageIndex(_pc)).ListStyles[Index-1]);
end;
frm.Free;
if r then
ModalResult := mrOk;
end;
procedure TfrmRVListGallery.FormCreate(Sender: TObject);
var bmp: TBitmap;
r: TRect;
i: Integer;
begin
_btnEdit1 := btnEdit1;
_btnEdit2 := btnEdit2;
_btnReset := btnReset;
_cmbNumbering := cmbNumbering;
_pc := pc;
_ts1 := ts1;
_ts2 := ts2;
inherited;
StartFromList := TRVIntegerList.CreateEx(7,-1);
for i := 0 to 1 do begin
StyleIndices[i] := TRVIntegerList.CreateEx(7,-1);
end;
InitBullets;
RVStyle1.TextStyles[0].Color := GetThemedColor(clBtnShadow);
RVStyle1.TextStyles[0].BackColor := GetThemedColor(clBtnFace);
RVStyle2.TextStyles[0].Color := GetThemedColor(clBtnShadow);
RVStyle2.TextStyles[0].BackColor := GetThemedColor(clBtnFace);
rvsTemplate1.TextStyles[0].Color := GetThemedColor(clBtnShadow);
rvsTemplate1.TextStyles[0].BackColor := GetThemedColor(clBtnFace);
rvsTemplate2.TextStyles[0].Color := GetThemedColor(clBtnShadow);
rvsTemplate2.TextStyles[0].BackColor := GetThemedColor(clBtnFace);
if ModifiedTemplates[0]=nil then begin
ModifiedTemplates[0] := TRVStyle.Create(nil);
ModifiedTemplates[0].TextStyles.Clear;
ModifiedTemplates[0].ParaStyles.Clear;
ModifiedTemplates[0].ListStyles := rvsTemplate1.ListStyles;
end;
if ModifiedTemplates[1]=nil then begin
ModifiedTemplates[1] := TRVStyle.Create(nil);
ModifiedTemplates[1].TextStyles.Clear;
ModifiedTemplates[1].ParaStyles.Clear;
ModifiedTemplates[1].ListStyles := rvsTemplate2.ListStyles;
end;
RVStyle1.ListStyles := ModifiedTemplates[0].ListStyles;
RVStyle2.ListStyles := ModifiedTemplates[1].ListStyles;
rvstmp.ParaStyles := RVStyle1.ParaStyles;
rvstmp.TextStyles := RVStyle1.TextStyles;
helper.RichView.Style := RVStyle1;
helper.RichView.LeftMargin := 0;
helper.RichView.TopMargin := 0;
helper.RichView.RightMargin := 0;
helper.RichView.BottomMargin := 0;
r := Rect(0,0,il.Width,il.Height);
bmp := TBitmap.Create;
bmp.Width := il.Width;
bmp.Height := il.Height;
bmp.Canvas.Brush.Color := GetThemedColor(clWindow);
bmp.Canvas.FillRect(r);
bmp.Canvas.Font.Name := 'Arial';
bmp.Canvas.Font.Size := 12;
DrawText(bmp.Canvas.Handle, RVA_GetPC(rvam_lg_None), -1, r,
DT_CENTER or DT_VCENTER or DT_SINGLELINE);
il.AddMasked(bmp, clWindow);
il2.AddMasked(bmp, clWindow);
il3.AddMasked(bmp, clWindow);
bmp.Free;
for i := 0 to RVStyle1.ListStyles.Count-1 do begin
bmp := TBitmap.Create;
bmp.Width := il.Width;
bmp.Height := il.Height;
bmp.Canvas.Brush.Color := GetThemedColor(clWindow);
bmp.Canvas.FillRect(r);
CreateThumbnail(bmp,i,RVStyle1);
il.AddMasked(bmp, clWhite);
bmp.Free;
end;
for i := 0 to RVStyle2.ListStyles.Count-1 do begin
bmp := TBitmap.Create;
bmp.Width := il.Width;
bmp.Height := il.Height;
bmp.Canvas.Brush.Color := GetThemedColor(clWindow);
bmp.Canvas.FillRect(r);
CreateThumbnail(bmp,i,RVStyle2);
il2.AddMasked(bmp, clWhite);
bmp.Free;
end;
{
for i := 0 to RVStyle3.ListStyles.Count-1 do begin
bmp := TBitmap.Create;
bmp.Width := il.Width;
bmp.Height := il.Height;
bmp.Canvas.Brush.Color := GetThemedColor(clWindow);
bmp.Canvas.FillRect(r);
CreateThumbnail(bmp,i,RVStyle3);
il3.AddMasked(bmp, clWindow);
bmp.Free;
end;
}
end;
procedure TfrmRVListGallery.FormDestroy(Sender: TObject);
var i : Integer;
begin
for i := 0 to 1 do begin
StyleIndices[i].Free;
StyleIndices[i] := nil;
end;
StartFromList.Free;
StartFromList := nil;
inherited;
end;
procedure TfrmRVListGallery.rg1Click(Sender: TObject);
begin
_btnEdit1.Enabled := rg1.ItemIndex>0;
if GetPageControlActivePageIndex(_pc)=0 then
_btnReset.Enabled :=
(rg1.ItemIndex>0) and
not RVStyle1.ListStyles[rg1.ItemIndex-1].IsSimpleEqual(rvsTemplate1.ListStyles[rg1.ItemIndex-1], False);
end;
procedure TfrmRVListGallery.rg2Click(Sender: TObject);
begin
if GetPageControlActivePageIndex(_pc)=1 then
_btnReset.Enabled :=
(rg2.ItemIndex>0) and
not RVStyle2.ListStyles[rg2.ItemIndex-1].IsSimpleEqual(rvsTemplate2.ListStyles[rg2.ItemIndex-1], False);
if rg2.ItemIndex<0 then
exit;
ClearXBoxItems(_cmbNumbering);
if rg2.ItemIndex=0 then begin
_cmbNumbering.Enabled := False;
seStartFrom.Enabled := False;
seStartFrom.Indeterminate := True;
_btnEdit2.Enabled := False;
exit;
end;
if StyleIndices[1][rg2.ItemIndex-1]>=0 then begin
XBoxItemsAddObject(_cmbNumbering, RVA_GetS(rvam_lg_NumContinue), TObject(1));
XBoxItemsAddObject(_cmbNumbering, RVA_GetS(rvam_lg_NumReset), TObject(2));
end;
XBoxItemsAddObject(_cmbNumbering, RVA_GetS(rvam_lg_NumCreate), TObject(3));
_cmbNumbering.Enabled := True;
if StyleIndices[1][rg2.ItemIndex-1]>=0 then begin
if StartFromList[rg2.ItemIndex-1]<0 then begin
SetXBoxItemIndex(_cmbNumbering, 0);
seStartFrom.Indeterminate := True;
seStartFrom.Enabled := False;
end
else begin
SetXBoxItemIndex(_cmbNumbering, 1);
seStartFrom.Value := StartFromList[rg2.ItemIndex-1];
seStartFrom.Enabled := True;
end
end
else begin
SetXBoxItemIndex(_cmbNumbering, 0);
seStartFrom.Value := 1;
seStartFrom.Enabled := True;
end;
_btnEdit2.Enabled := rg2.ItemIndex>0;
end;
procedure TfrmRVListGallery.cmbNumberingClick(Sender: TObject);
begin
if (GetXBoxItemIndex(_cmbNumbering)<0) or
(Integer(GetXBoxObject(_cmbNumbering, GetXBoxItemIndex(_cmbNumbering)))=1) then begin
seStartFrom.Indeterminate := True;
seStartFrom.Enabled := False;
exit;
end;
if (Integer(GetXBoxObject(_cmbNumbering, GetXBoxItemIndex(_cmbNumbering)))=2) and
(StartFromList[rg2.ItemIndex-1]>=0) then
seStartFrom.Value := StartFromList[rg2.ItemIndex-1]
else
seStartFrom.Value := 1;
seStartFrom.Enabled := True;
end;
procedure TfrmRVListGallery.btnEdit1Click(Sender: TObject);
begin
EditList(RVStyle1, rg1.ItemIndex)
end;
procedure TfrmRVListGallery.btnEdit2Click(Sender: TObject);
begin
EditList(RVStyle2, rg2.ItemIndex)
end;
procedure TfrmRVListGallery.InitBullets;
var i: Integer;
begin
with rvsTemplate1.ListStyles[0] do begin
Levels[0].FormatString := 'v';
Levels[1].FormatString := '
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -