commit fddb8c1dff4f084e729571c0f11c39eb508cc0c5 Author: david Date: Mon Jan 11 12:26:42 2010 +0000 Importación inicial con versión 12.0.4 NO HAY CÓDIGO FUENTE git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.TRichView@1 b34d35ef-135b-4489-b9d1-9916e9c25524 diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Project1.bdsproj b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Project1.bdsproj new file mode 100644 index 0000000..97bd9ed --- /dev/null +++ b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Project1.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + Project1.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Project1.dpr b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Project1.dpr new file mode 100644 index 0000000..ab14b2d --- /dev/null +++ b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Project1.dpr @@ -0,0 +1,14 @@ +program Project1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + RVBlendBitmap in '..\..\RVBlendBitmap.pas'; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Project1.res b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Project1.res new file mode 100644 index 0000000..e916e21 Binary files /dev/null and b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Project1.res differ diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Unit1.dfm b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Unit1.dfm new file mode 100644 index 0000000..843d633 Binary files /dev/null and b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Unit1.dfm differ diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Unit1.pas b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Unit1.pas new file mode 100644 index 0000000..ecd9346 --- /dev/null +++ b/12.0.4/Demos/Addins/BlendBitmap/Demo/Delphi/Unit1.pas @@ -0,0 +1,94 @@ +{==============================================================================} +{ Example of new item type for RichView: } +{ - TRVBlendBitmapItemInfo } +{ (semi-transparent image) } +{ - TRVHotBlendBitmapItemInfo } +{ (semi-transparent image - hypertext link) } +{------------------------------------------------------------------------------} +{ (c) Sergey Tkachenko (svt@trichview.com) } +{ http://www.trichview.com } +{==============================================================================} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, RVStyle, RVScroll, RichView, RVBlendBitmap, StdCtrls, ShellApi; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + Image1: TImage; + Image2: TImage; + Label1: TLabel; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var bmp: TBitmap; + item: TRVHotBlendBitmapItemInfo; + i: Integer; +begin + // Note: not very fast drawing, so do not use for large images + // Note: you can save RVF documents with semitransparent images + // (RVF reader must have RVBlendBMP.pas unit in order to + // load such files) + + RichView1.AddBreak; + RichView1.AddNL('Example of Semitransparent Image',1,1); + RichView1.AddBreak; + + for i := 0 to 10 do + RichView1.AddNL('some text',0,0); + + bmp := TBitmap.Create; + bmp.Assign(Image1.Picture.Bitmap); + item := TRVHotBlendBitmapItemInfo.CreateEx(RichView1.RVData, bmp, rvvaBaseline); + item.Transparency := 100; + item.HotTransparency := 0; + // 0 - no transparency, + // 255 - fully transparent (invisible) + + item.ParaNo := 1; + RichView1.AddItem('', item); + RichView1.AddNL('www.trichview.com',4,1); + + for i := 0 to 10 do + RichView1.AddNL('some text',0,0); + + bmp := TBitmap.Create; + bmp.Assign(Image2.Picture.Bitmap); + item := TRVHotBlendBitmapItemInfo.CreateEx(RichView1.RVData, bmp, rvvaBaseline); + item.Transparency := 200; + item.HotTransparency := 100; + item.ParaNo := 1; + RichView1.AddItem('', item); + RichView1.AddNL('www.trichview.com',4,1); + + for i := 0 to 10 do + RichView1.AddNL('some text',0,0); + + RichView1.Format; +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +begin + ShellExecute(0, 'open', 'http://www.trichview.com', nil, nil, SW_SHOW) +end; + +end. diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Project1.dpr b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Project1.dpr new file mode 100644 index 0000000..ab14b2d --- /dev/null +++ b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Project1.dpr @@ -0,0 +1,14 @@ +program Project1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + RVBlendBitmap in '..\..\RVBlendBitmap.pas'; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Project1.dproj b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Project1.dproj new file mode 100644 index 0000000..8b176b0 --- /dev/null +++ b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Project1.dproj @@ -0,0 +1,108 @@ + + + {0977BF2F-F5DC-49B7-BE93-C86769B0709E} + Project1.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Project1.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Project1.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + 12 + +
diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Project1.res b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Project1.res new file mode 100644 index 0000000..e916e21 Binary files /dev/null and b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Project1.res differ diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Unit1.dfm b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Unit1.dfm new file mode 100644 index 0000000..f585f20 Binary files /dev/null and b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Unit1.dfm differ diff --git a/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Unit1.pas b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Unit1.pas new file mode 100644 index 0000000..6697bf4 --- /dev/null +++ b/12.0.4/Demos/Addins/BlendBitmap/Demo/DelphiUnicode/Unit1.pas @@ -0,0 +1,94 @@ +{==============================================================================} +{ Example of new item type for RichView: } +{ - TRVBlendBitmapItemInfo } +{ (semi-transparent image) } +{ - TRVHotBlendBitmapItemInfo } +{ (semi-transparent image - hypertext link) } +{------------------------------------------------------------------------------} +{ (c) Sergey Tkachenko (svt@trichview.com) } +{ http://www.trichview.com } +{==============================================================================} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, RVStyle, RVScroll, RichView, RVBlendBitmap, StdCtrls, ShellApi; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + Image1: TImage; + Image2: TImage; + Label1: TLabel; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var bmp: TBitmap; + item: TRVHotBlendBitmapItemInfo; + i: Integer; +begin + // Note: not very fast drawing, so do not use for large images + // Note: you can save RVF documents with semitransparent images + // (RVF reader must have RVBlendBMP.pas unit in order to + // load such files) + + RichView1.AddBreak; + RichView1.AddNLWTag('Example of Semitransparent Image',1,1,0); + RichView1.AddBreak; + + for i := 0 to 10 do + RichView1.AddNLWTag('some text',0,0,0); + + bmp := TBitmap.Create; + bmp.Assign(Image1.Picture.Bitmap); + item := TRVHotBlendBitmapItemInfo.CreateEx(RichView1.RVData, bmp, rvvaBaseline); + item.Transparency := 100; + item.HotTransparency := 0; + // 0 - no transparency, + // 255 - fully transparent (invisible) + + item.ParaNo := 1; + RichView1.AddItem('', item); + RichView1.AddNLWTag('www.trichview.com',4,1,0); + + for i := 0 to 10 do + RichView1.AddNLWTag('some text',0,0,0); + + bmp := TBitmap.Create; + bmp.Assign(Image2.Picture.Bitmap); + item := TRVHotBlendBitmapItemInfo.CreateEx(RichView1.RVData, bmp, rvvaBaseline); + item.Transparency := 200; + item.HotTransparency := 100; + item.ParaNo := 1; + RichView1.AddItem('', item); + RichView1.AddNLWTag('www.trichview.com',4,1,0); + + for i := 0 to 10 do + RichView1.AddNLWTag('some text',0,0,0); + + RichView1.Format; +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +begin + ShellExecute(0, 'open', 'http://www.trichview.com', nil, nil, SW_SHOW) +end; + +end. diff --git a/12.0.4/Demos/Addins/BlendBitmap/RVBlendBitmap.pas b/12.0.4/Demos/Addins/BlendBitmap/RVBlendBitmap.pas new file mode 100644 index 0000000..42eb834 --- /dev/null +++ b/12.0.4/Demos/Addins/BlendBitmap/RVBlendBitmap.pas @@ -0,0 +1,201 @@ +unit RVBlendBitmap; + +interface +{$I RV_Defs.inc} + +uses + {$IFDEF RICHVIEWDEF2009}AnsiStrings,{$ENDIF} + SysUtils, Classes, Windows, Graphics, + RVStyle, RVItem, RVFMisc, DLines, CRVFData, RVTypes; + +const + rvsBlendBitmap = -50; + rvsHotBlendBitmap = -51; + +type + TRVBlendBitmapItemInfo = class(TRVGraphicItemInfo) + protected + Back: TBitmap; + function SaveRVFHeaderTail(RVData: TPersistent): TRVRawByteString; override; + function GetTransparency(State: TRVItemDrawStates): Byte; virtual; + public + Transparency: Byte; + constructor CreateEx(RVData: TPersistent; AImage: TGraphic; AVAlign: TRVVAlign); override; + destructor Destroy; override; + procedure Paint(x,y: Integer; Canvas: TCanvas; State: TRVItemDrawStates; + Style: TRVStyle; dli: TRVDrawLineInfo); override; + procedure AfterLoading(FileFormat: TRVLoadFormat); override; + function ReadRVFHeaderTail(var P: PRVAnsiChar; RVData: TPersistent; + UTF8Strings: Boolean; var AssStyleNameUsed: Boolean): Boolean; override; + procedure Assign(Source: TCustomRVItemInfo); override; + end; + + TRVHotBlendBitmapItemInfo = class(TRVBlendBitmapItemInfo) + protected + function GetTransparency(State: TRVItemDrawStates): Byte; override; + public + HotTransparency: Byte; + function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; override; + constructor CreateEx(RVData: TPersistent; AImage: TGraphic; AVAlign: TRVVAlign); override; + procedure Execute(RVData:TPersistent); override; + procedure Assign(Source: TCustomRVItemInfo); override; + end; + + +implementation + +{$R-} +procedure DrawTransparent(Canvas: TCanvas; + x,y: Integer; + Transparency: Byte; + Back: TBitmap; + Bitmap: TBitmap); +type + RGBARR = array [0..0] of TRGBQUAD; + PRGBARR = ^RGBARR; +var rgb1,rgb2: PRGBARR; + i,j: Integer; + op, tr: Integer; +begin + tr := Transparency; + op := 255-Transparency; + Back.Canvas.CopyRect(Rect(0,0,Back.Width,Back.Height), Canvas, + Bounds(x,y,Back.Width,Back.Height)); + for i:=0 to Back.Height-1 do begin + rgb1 := PRGBARR(Back.ScanLine[i]); + rgb2 := PRGBARR(Bitmap.ScanLine[i]); + for j:=0 to Back.Width-1 do + if not CompareMem(@rgb1[j], @rgb2[j],3) then + with rgb1[j] do begin + rgbBlue := (rgbBlue*tr + rgb2[j].rgbBlue*op) div 255; + rgbGreen := (rgbGreen*tr + rgb2[j].rgbGreen*op)div 255; + rgbRed := (rgbRed*tr + rgb2[j].rgbRed*op) div 255; + end; + end; + Canvas.Draw(x,y, Back); +end; + +{======================= TRVBlendBitmapItemInfo ===============================} +constructor TRVBlendBitmapItemInfo.CreateEx(RVData: TPersistent; AImage: TGraphic; AVAlign: TRVVAlign); +begin + inherited CreateEx(RVData, AImage as TBitmap, AValign); + Transparency := 0; + StyleNo := rvsBlendBitmap; + AfterLoading(rvlfRVF); +end; +{------------------------------------------------------------------------------} +procedure TRVBlendBitmapItemInfo.AfterLoading(FileFormat: TRVLoadFormat); +begin + inherited AfterLoading(FileFormat); + TBitmap(Image).PixelFormat := pf32bit; + Back := TBitmap.Create; + Back.PixelFormat := pf32bit; + Back.Width := TBitmap(Image).Width; + Back.Height := TBitmap(Image).Height; +end; +{------------------------------------------------------------------------------} +destructor TRVBlendBitmapItemInfo.Destroy; +begin + Back.Free; + inherited Destroy; +end; +{------------------------------------------------------------------------------} +function TRVBlendBitmapItemInfo.GetTransparency(State: TRVItemDrawStates): Byte; +begin + Result := Transparency; +end; +{------------------------------------------------------------------------------} +procedure TRVBlendBitmapItemInfo.Paint(x,y: Integer; Canvas: TCanvas; State: TRVItemDrawStates; + Style: TRVStyle; dli: TRVDrawLineInfo); +begin + if ImageCopy<>nil then + inherited Paint(x, y, Canvas, State, Style, dli) + else begin + inc(x); inc(y); + DrawTransparent(Canvas, x, y, GetTransparency(State), Back, TBitmap(Image)); + if (rvidsCurrent in State) and (Style.HoverColor<>clNone) then begin + Canvas.Pen.Color := Style.HoverColor; + Canvas.Pen.Style := psSolid; + Canvas.Rectangle(x-2,y-2, x+Image.Width+2, y+Image.Height+2); + end; + if (rvidsSelected in State) then begin + Canvas.Pen.Color := Style.SelColor; + Canvas.Pen.Style := psSolid; + Canvas.Rectangle(x-1,y-1, x+Image.Width+1, y+Image.Height+1); + end + end; +end; +{------------------------------------------------------------------------------} +function TRVBlendBitmapItemInfo.SaveRVFHeaderTail(RVData: TPersistent): TRVRawByteString; +begin + Result := {$IFDEF RVUNICODESTR}AnsiStrings.{$ENDIF}Format('%s %d', [inherited SaveRVFHeaderTail(RVData), Integer(Transparency)]); +end; +{------------------------------------------------------------------------------} +function TRVBlendBitmapItemInfo.ReadRVFHeaderTail(var P: PRVAnsiChar; + RVData: TPersistent; UTF8Strings: Boolean; + var AssStyleNameUsed: Boolean): Boolean; +var tr: Integer; +begin + Result := inherited ReadRVFHeaderTail(P, RVData, UTF8Strings, AssStyleNameUsed); + if not Result then exit; + if not (P^ in [#0, #10, #13]) then + Result := RVFReadInteger(P,tr) + else + Result := False; + if Result then + Transparency := Byte(tr); +end; +{------------------------------------------------------------------------------} +procedure TRVBlendBitmapItemInfo.Assign(Source: TCustomRVItemInfo); +begin + if (Source is TRVBlendBitmapItemInfo) then + Transparency := TRVBlendBitmapItemInfo(Source).Transparency; + inherited Assign(Source); +end; +{======================= TRVHotBlendBitmapItemInfo ============================} +constructor TRVHotBlendBitmapItemInfo.CreateEx(RVData: TPersistent; + AImage: TGraphic; AVAlign: TRVVAlign); +begin + inherited CreateEx(RVData, AImage, AVAlign); + StyleNo := rvsHotBlendBitmap; +end; +{------------------------------------------------------------------------------} +function TRVHotBlendBitmapItemInfo.GetBoolValueEx(Prop: TRVItemBoolPropertyEx; + RVStyle: TRVStyle): Boolean; +begin + case Prop of + rvbpJump, rvbpAllowsFocus, rvbpXORFocus, rvbpHotColdJump: + Result := True; + else + Result := inherited GetBoolValueEx(Prop, RVStyle); + end; +end; +{------------------------------------------------------------------------------} +procedure TRVHotBlendBitmapItemInfo.Execute(RVData:TPersistent); +begin + if RVData is TCustomRVFormattedData then + TCustomRVFormattedData(RVData).DoJump(JumpID+ + TCustomRVFormattedData(RVData).FirstJumpNo) +end; +{------------------------------------------------------------------------------} +procedure TRVHotBlendBitmapItemInfo.Assign(Source: TCustomRVItemInfo); +begin + if (Source is TRVHotBlendBitmapItemInfo) then + HotTransparency := TRVHotBlendBitmapItemInfo(Source).HotTransparency; + inherited Assign(Source); +end; +{------------------------------------------------------------------------------} +function TRVHotBlendBitmapItemInfo.GetTransparency(State: TRVItemDrawStates): Byte; +begin + if rvidsHover in State then + Result := HotTransparency + else + Result := Transparency; +end; +{==============================================================================} +initialization + + RegisterRichViewItemClass(rvsBlendBitmap, TRVBlendBitmapItemInfo); + RegisterRichViewItemClass(rvsHotBlendBitmap, TRVHotBlendBitmapItemInfo); + +end. diff --git a/12.0.4/Demos/Addins/BlendBitmap/readme.txt b/12.0.4/Demos/Addins/BlendBitmap/readme.txt new file mode 100644 index 0000000..a600539 --- /dev/null +++ b/12.0.4/Demos/Addins/BlendBitmap/readme.txt @@ -0,0 +1,11 @@ +BlendBitmap Version 3.3 + +This is a demonstration of custom item types for TRichView + +Installing: RichView plug-ins are not components, so no special +installing required. Just include RVBlendBitmap in "uses" of +your unit. + +Sergey Tkachenko, +svt@trichview.com +http://www.trichview.com \ No newline at end of file diff --git a/12.0.4/Demos/Addins/ChartItem/ChartItem.pas b/12.0.4/Demos/Addins/ChartItem/ChartItem.pas new file mode 100644 index 0000000..5f2bef7 --- /dev/null +++ b/12.0.4/Demos/Addins/ChartItem/ChartItem.pas @@ -0,0 +1,72 @@ +unit ChartItem; + +interface + +uses Windows, Classes, Graphics, RVFuncs, RVScroll, DLines, RVItem, Chart, RVStyle; + +const + rvsChart = -1001; + +type + + TRVChartItemInfo = class (TRVControlItemInfo) + public + constructor Create(RVData: TPersistent); override; + constructor CreateEx(RVData: TPersistent; AChart: TChart; AVAlign: TRVVAlign); + function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; override; + procedure Print(Canvas: TCanvas; x,y,x2: Integer; Preview, Correction: Boolean; + const sad: TRVScreenAndDevice; RichView: TRVScroller; dli: TRVDrawLineInfo; + Part: Integer; ColorMode: TRVColorMode; RVData: TPersistent); override; + end; + +implementation + +{============================ TRVChartItemInfo ================================} +constructor TRVChartItemInfo.Create(RVData: TPersistent); +begin + inherited Create(RVData); + StyleNo := rvsChart; +end; + +constructor TRVChartItemInfo.CreateEx(RVData: TPersistent; AChart: TChart; AVAlign: TRVVAlign); +begin + inherited CreateEx(RVData, AChart, AVAlign); + StyleNo := rvsChart; +end; + +function TRVChartItemInfo.GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; +begin + case Prop of + rvbpPrintToBMP: + Result := False; + else + Result := inherited GetBoolValueEx(Prop, RVStyle); + end; +end; + +procedure TRVChartItemInfo.Print(Canvas: TCanvas; x, y, x2: Integer; + Preview, Correction: Boolean; const sad: TRVScreenAndDevice; + RichView: TRVScroller; dli: TRVDrawLineInfo; Part: Integer; + ColorMode: TRVColorMode; RVData: TPersistent); +var sv: Integer; + bmp: TBitmap; +begin + if Preview then begin + bmp := TBitmap.Create; + bmp.Width := Control.Width; + bmp.Height := Control.Height; + TChart(Control).Draw(bmp.Canvas, Rect(0,0, Control.Width,Control.Height)); + Canvas.StretchDraw(Bounds(x,y,dli.Width,dli.Height),bmp); + bmp.Free; + end + else begin + sv := SaveDC(Canvas.Handle); + TChart(Control).PrintPartial(Bounds(x,y,dli.Width,dli.Height)); + RestoreDC(Canvas.Handle, sv); + end; +end; + +initialization + RegisterRichViewItemClass(rvsChart, TRVChartItemInfo); + +end. diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Project1.bdsproj b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Project1.bdsproj new file mode 100644 index 0000000..f944e4d --- /dev/null +++ b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Project1.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + Project1.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Project1.dpr b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Project1.dpr new file mode 100644 index 0000000..25dd5e9 --- /dev/null +++ b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Project1.dpr @@ -0,0 +1,14 @@ +program Project1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + ChartItem in '..\..\ChartItem.pas'; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Project1.res b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Project1.res new file mode 100644 index 0000000..e916e21 Binary files /dev/null and b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Project1.res differ diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Unit1.dfm b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Unit1.dfm new file mode 100644 index 0000000..4528d8a Binary files /dev/null and b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Unit1.dfm differ diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Unit1.pas b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Unit1.pas new file mode 100644 index 0000000..893d203 --- /dev/null +++ b/12.0.4/Demos/Addins/ChartItem/Demo/Delphi/Unit1.pas @@ -0,0 +1,85 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + TeEngine, Series, ExtCtrls, TeeProcs, Chart, TeeFunci, PtblRV, + RVStyle, RVScroll, RichView, StdCtrls, + ChartItem; + +type + TForm1 = class(TForm) + Chart1: TChart; + Series1: TPieSeries; + TeeFunction1: TAverageTeeFunction; + RichView1: TRichView; + RVStyle1: TRVStyle; + RVPrint1: TRVPrint; + Button1: TButton; + Chart2: TChart; + Series2: THorizBarSeries; + Series3: THorizBarSeries; + Label1: TLabel; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var item: TRVChartItemInfo; +begin + // Filling charts + Chart1.Series[0].Add(1,'1',clTeeColor); + Chart1.Series[0].Add(2,'2',clTeeColor); + Chart1.Series[0].Add(3,'3',clTeeColor); + Chart1.Series[0].Add(4,'4',clTeeColor); + + Chart2.Series[0].Add(1,'1',clTeeColor); + Chart2.Series[0].Add(2,'2',clTeeColor); + Chart2.Series[0].Add(3,'3',clTeeColor); + Chart2.Series[0].Add(4,'4',clTeeColor); + Chart2.Series[1].Add(4,'4',clTeeColor); + Chart2.Series[1].Add(3,'3',clTeeColor); + Chart2.Series[1].Add(2,'2',clTeeColor); + Chart2.Series[1].Add(1,'1',clTeeColor); + + + + RichView1.AddNL('Printing example',1,1); + RichView1.AddBreak; + + item := TRVChartItemInfo.CreateEx(RichView1.RVData, Chart1, rvvaBaseline); + item.ParaNo := 1; + RichView1.AddItem('',item); + + RichView1.AddBreak; + + item := TRVChartItemInfo.CreateEx(RichView1.RVData, Chart2, rvvaBaseline); + item.ParaNo := 1; + RichView1.AddItem('',item); + RichView1.AddBreak; + RichView1.AddNL('END OF DOC',0,0); + + + RichView1.Format; +end; + +procedure TForm1.Button1Click(Sender: TObject); +begin + RVPrint1.AssignSource(RichView1); + RVPrint1.FormatPages(rvdoAll) ; + RVPrint1.Print('Chart',1,False) ; +end; + +end. diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/ChartDemo.dpr b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/ChartDemo.dpr new file mode 100644 index 0000000..075451d --- /dev/null +++ b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/ChartDemo.dpr @@ -0,0 +1,14 @@ +program ChartDemo; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + ChartItem in '..\..\ChartItem.pas'; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/ChartDemo.dproj b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/ChartDemo.dproj new file mode 100644 index 0000000..ad792d9 --- /dev/null +++ b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/ChartDemo.dproj @@ -0,0 +1,108 @@ + + + {F8E0F7F3-B449-4D1D-AB46-ABDD192E9D05} + ChartDemo.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + ChartDemo.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + ChartDemo.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + 12 + +
diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/ChartDemo.res b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/ChartDemo.res new file mode 100644 index 0000000..e916e21 Binary files /dev/null and b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/ChartDemo.res differ diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/Unit1.dfm b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/Unit1.dfm new file mode 100644 index 0000000..9b733db Binary files /dev/null and b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/Unit1.dfm differ diff --git a/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/Unit1.pas b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/Unit1.pas new file mode 100644 index 0000000..da629b7 --- /dev/null +++ b/12.0.4/Demos/Addins/ChartItem/Demo/DelphiUnicode/Unit1.pas @@ -0,0 +1,85 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + TeEngine, Series, ExtCtrls, TeeProcs, Chart, TeeFunci, PtblRV, + RVStyle, RVScroll, RichView, StdCtrls, + ChartItem; + +type + TForm1 = class(TForm) + Chart1: TChart; + Series1: TPieSeries; + TeeFunction1: TAverageTeeFunction; + RichView1: TRichView; + RVStyle1: TRVStyle; + RVPrint1: TRVPrint; + Button1: TButton; + Chart2: TChart; + Series2: THorizBarSeries; + Series3: THorizBarSeries; + Label1: TLabel; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var item: TRVChartItemInfo; +begin + // Filling charts + Chart1.Series[0].Add(1,'1',clTeeColor); + Chart1.Series[0].Add(2,'2',clTeeColor); + Chart1.Series[0].Add(3,'3',clTeeColor); + Chart1.Series[0].Add(4,'4',clTeeColor); + + Chart2.Series[0].Add(1,'1',clTeeColor); + Chart2.Series[0].Add(2,'2',clTeeColor); + Chart2.Series[0].Add(3,'3',clTeeColor); + Chart2.Series[0].Add(4,'4',clTeeColor); + Chart2.Series[1].Add(4,'4',clTeeColor); + Chart2.Series[1].Add(3,'3',clTeeColor); + Chart2.Series[1].Add(2,'2',clTeeColor); + Chart2.Series[1].Add(1,'1',clTeeColor); + + + + RichView1.AddNLWTag('Printing example',1,1,0); + RichView1.AddBreak; + + item := TRVChartItemInfo.CreateEx(RichView1.RVData, Chart1, rvvaBaseline); + item.ParaNo := 1; + RichView1.AddItem('',item); + + RichView1.AddBreak; + + item := TRVChartItemInfo.CreateEx(RichView1.RVData, Chart2, rvvaBaseline); + item.ParaNo := 1; + RichView1.AddItem('',item); + RichView1.AddBreak; + RichView1.AddNLWTag('END OF DOC',0,0,0); + + + RichView1.Format; +end; + +procedure TForm1.Button1Click(Sender: TObject); +begin + RVPrint1.AssignSource(RichView1); + RVPrint1.FormatPages(rvdoAll) ; + RVPrint1.Print('Chart',1,False) ; +end; + +end. diff --git a/12.0.4/Demos/Addins/ChartItem/readme.txt b/12.0.4/Demos/Addins/ChartItem/readme.txt new file mode 100644 index 0000000..962ecd3 --- /dev/null +++ b/12.0.4/Demos/Addins/ChartItem/readme.txt @@ -0,0 +1,13 @@ +Version 3.2 + +By default, RichView prints inserted controls using a temporal bitmap provided by programmer +in OnPrintComponent event. +This technique cannot provide a high quality image printing since this bitmap has screen resolution, +which is usually much lower than resolution of printer *. +This plugin does a high quality printing of TChart components inserted in RichView editor or viewer. +A good example how to implement printing for custom types of controls. Demo included + +Notes: +* - since v1.6, this temporal bitmap can have size larger than size of the control. +It will be stretched to privide higher quality of printing. +But using this item class is still preferable. diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Project1.bdsproj b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Project1.bdsproj new file mode 100644 index 0000000..7b33b04 --- /dev/null +++ b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Project1.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + Project1.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Project1.dpr b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Project1.dpr new file mode 100644 index 0000000..bcf5ddb --- /dev/null +++ b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Project1.dpr @@ -0,0 +1,14 @@ +program Project1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + ComboItem in '..\..\ComboItem.pas'; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Project1.res b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Project1.res new file mode 100644 index 0000000..65efbd2 Binary files /dev/null and b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Project1.res differ diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Unit1.dfm b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Unit1.dfm new file mode 100644 index 0000000..74bba4e Binary files /dev/null and b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Unit1.dfm differ diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Unit1.pas b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Unit1.pas new file mode 100644 index 0000000..21cb43f --- /dev/null +++ b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/Delphi/Unit1.pas @@ -0,0 +1,79 @@ +{*******************************************************} +{ } +{ RichView } +{ Combo Item Demo } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, + Dialogs, RVScroll, RichView, RVStyle, ComboItem, RVTable; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + rv: TRichView; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var item: TRVComboItemInfo; + table: TRVTableItemInfo; +begin + rv.AddNL('Virtual Greengrocery',0,1); + rv.AddNL('',0,1); + table := TRVTableItemInfo.CreateEx(2,2,rv.RVData); + table.BorderColor := clSilver; + table.BorderStyle := rvtbColor; + table.BorderWidth := 2; + + table.Cells[0,0].Clear; + table.Cells[1,0].Clear; + table.Cells[0,1].Clear; + table.Cells[1,1].Clear; + table.Cells[0,0].AddNL('Select fruits:',0,0); + table.Cells[1,0].AddNL('Select vegetables:',0,0); + table.Cells[0,0].BestWidth := 200; + table.Cells[0,1].BestWidth := 120; + table.CellPadding := 5; + table.ParaNo := 1; + + item := TRVComboItemInfo.CreateEx(rv.RVData, 1, ''); + item.MinWidth := 100; + item.Items.Add('apple'); + item.Items.Add('banana'); + item.Items.Add('pear'); + table.Cells[0,1].AddItem('', item); + + item := TRVComboItemInfo.CreateEx(rv.RVData, 1, ''); + item.Items.Add('cucumber'); + item.Items.Add('tomato'); + item.MinWidth := 100; + table.Cells[1,1].AddItem('', item); + rv.AddItem('', table); + rv.AddNL('(click the gray square to select)',0,1); + rv.Format; + +end; + +end. diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Project1.dpr b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Project1.dpr new file mode 100644 index 0000000..bcf5ddb --- /dev/null +++ b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Project1.dpr @@ -0,0 +1,14 @@ +program Project1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + ComboItem in '..\..\ComboItem.pas'; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Project1.dproj b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Project1.dproj new file mode 100644 index 0000000..91e258b --- /dev/null +++ b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Project1.dproj @@ -0,0 +1,108 @@ + + + {2660954C-9E85-405A-AA17-ACDC58741B30} + Project1.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Project1.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Project1.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + 12 + +
diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Project1.res b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Project1.res new file mode 100644 index 0000000..65efbd2 Binary files /dev/null and b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Project1.res differ diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Unit1.dfm b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Unit1.dfm new file mode 100644 index 0000000..16ce3e0 Binary files /dev/null and b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Unit1.dfm differ diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Unit1.pas b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Unit1.pas new file mode 100644 index 0000000..386f138 --- /dev/null +++ b/12.0.4/Demos/Addins/ComboItem/ComboItem Demo/DelphiUnicode/Unit1.pas @@ -0,0 +1,79 @@ +{*******************************************************} +{ } +{ RichView } +{ Combo Item Demo } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls, + Dialogs, RVScroll, RichView, RVStyle, ComboItem, RVTable; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + rv: TRichView; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var item: TRVComboItemInfo; + table: TRVTableItemInfo; +begin + rv.AddNLWTag('Virtual Greengrocery',0,1,0); + rv.AddNLWTag('',0,1,0); + table := TRVTableItemInfo.CreateEx(2,2,rv.RVData); + table.BorderColor := clSilver; + table.BorderStyle := rvtbColor; + table.BorderWidth := 2; + + table.Cells[0,0].Clear; + table.Cells[1,0].Clear; + table.Cells[0,1].Clear; + table.Cells[1,1].Clear; + table.Cells[0,0].AddNLWTag('Select fruits:',0,0,0); + table.Cells[1,0].AddNLWTag('Select vegetables:',0,0,0); + table.Cells[0,0].BestWidth := 200; + table.Cells[0,1].BestWidth := 120; + table.CellPadding := 5; + table.ParaNo := 1; + + item := TRVComboItemInfo.CreateEx(rv.RVData, 1, ''); + item.MinWidth := 100; + item.Items.Add('apple'); + item.Items.Add('banana'); + item.Items.Add('pear'); + table.Cells[0,1].AddItem('', item); + + item := TRVComboItemInfo.CreateEx(rv.RVData, 1, ''); + item.Items.Add('cucumber'); + item.Items.Add('tomato'); + item.MinWidth := 100; + table.Cells[1,1].AddItem('', item); + rv.AddItem('', table); + rv.AddNLWTag('(click the gray square to select)',0,1,0); + rv.Format; + +end; + +end. diff --git a/12.0.4/Demos/Addins/ComboItem/ComboItem.pas b/12.0.4/Demos/Addins/ComboItem/ComboItem.pas new file mode 100644 index 0000000..9ac7414 --- /dev/null +++ b/12.0.4/Demos/Addins/ComboItem/ComboItem.pas @@ -0,0 +1,238 @@ +{*******************************************************} +{ } +{ RichView } +{ Combo Item - item class for RichView. } +{ Non-text item that looks like a text } +{ (but cannot be wrapped and edited) } +{ and shows combobox when focused. } +{ Does not support Unicode. } +{ Shows combobox only in TRichView, } +{ not in TRichViewEdit } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +unit ComboItem; + +{$I RV_Defs.inc} + +interface +uses {$IFDEF RICHVIEWDEF2009}AnsiStrings,{$ENDIF} + Windows, SysUtils, Graphics, Classes, Controls, StdCtrls, + RVItem, CRVData, CRVFData, RVStyle, RVScroll, RVFMisc, + RVLabelItem, RVTypes; + +const + rvsCombo = -201; + +type + TRVComboItemInfo = class (TRVLabelItemInfo) + private + FItems: TStringList; + FComboBox: TComboBox; + FRVData: TCustomRVData; + function GetItems: TStrings; + procedure SetItems(const Value: TStrings); + procedure DoComboBoxClick(Sender: TObject); + protected + function GetRVFExtraPropertyCount: Integer; override; + procedure SaveRVFExtraProperties(Stream: TStream); override; + public + constructor Create(RVData: TPersistent); override; + constructor CreateEx(RVData: TPersistent; TextStyleNo: Integer; const Text: String); + destructor Destroy; override; + function SetExtraCustomProperty(const PropName: TRVAnsiString; + const Value: String): Boolean; override; + function ReadRVFLine(const s: TRVRawByteString; RVData: TPersistent; + ReadType, LineNo, LineCount: Integer; var Name: TRVRawByteString; + var ReadMode: TRVFReadMode; var ReadState: TRVFReadState; + UTF8Strings: Boolean; var AssStyleNameUsed: Boolean): Boolean; override; + function GetBoolValueEx(Prop: TRVItemBoolPropertyEx; RVStyle: TRVStyle): Boolean; override; + function GetBoolValue(Prop: TRVItemBoolProperty): Boolean; override; + procedure Focusing; override; + procedure ClearFocus; override; + procedure Inserting(RVData: TObject; var Text: TRVRawByteString; Safe: Boolean); override; + function OwnsControl(AControl: TControl): Boolean; override; + procedure AdjustInserted(x,y: Integer; adjusty: Boolean); override; + property Items: TStrings read GetItems write SetItems; + end; + +implementation + +{============================== TRVComboItemInfo ==============================} +constructor TRVComboItemInfo.Create(RVData: TPersistent); +begin + inherited; + StyleNo := rvsCombo; + Spacing := 0; +end; +{------------------------------------------------------------------------------} +constructor TRVComboItemInfo.CreateEx(RVData: TPersistent; + TextStyleNo: Integer; const Text: String); +begin + inherited CreateEx(RVData, TextStyleNo, Text); + StyleNo := rvsCombo; + Spacing := 0; +end; +{------------------------------------------------------------------------------} +destructor TRVComboItemInfo.Destroy; +begin + FItems.Free; + ClearFocus; + inherited; +end; +{------------------------------------------------------------------------------} +procedure TRVComboItemInfo.ClearFocus; +var ComboBox: TComboBox; +begin + ComboBox := FComboBox; + FComboBox := nil; + ComboBox.Free; +end; +{------------------------------------------------------------------------------} +procedure TRVComboItemInfo.Focusing; +var ItemNo, DItemNo: Integer; +begin + ClearFocus; + if FRVData<>nil then begin + FComboBox := TComboBox.Create(nil); + FComboBox.Visible := False; + FComboBox.Parent := FRVData.GetParentControl; + ItemNo := FRVData.GetItemNo(Self); + TCustomRVFormattedData(FRVData).Item2FirstDrawItem(ItemNo, DItemNo); + with TCustomRVFormattedData(FRVData).DrawItems[DItemNo] do begin + FComboBox.Width := Width{+GetSystemMetrics(SM_CXVSCROLL)}; + FComboBox.Height := Height; + FComboBox.Font.Assign(FRVData.GetRVStyle.TextStyles[TextStyleNo]); + if FRVData.GetRVStyle.TextStyles[TextStyleNo].BackColor<>clNone then + FComboBox.Color := FRVData.GetRVStyle.TextStyles[TextStyleNo].BackColor; + FComboBox.Style := csDropDownList; + FComboBox.Items := Items; + FComboBox.ItemIndex := FComboBox.Items.IndexOf(Text); + FComboBox.OnClick := DoComboBoxClick; + TCustomRVFormattedData(FRVData).ResetSubCoords; + AdjustInserted(Left-TCustomRVFormattedData(FRVData).GetHOffs, + Top-TCustomRVFormattedData(FRVData).GetVOffs, True); + end; + FComboBox.Visible := True; + FComboBox.SetFocus; + end; +end; +{------------------------------------------------------------------------------} +function TRVComboItemInfo.GetBoolValueEx(Prop: TRVItemBoolPropertyEx; + RVStyle: TRVStyle): Boolean; +begin + case Prop of + rvbpAllowsFocus: + Result := True; + rvbpXORFocus: + Result := False; + else + Result := inherited GetBoolValueEx(Prop, RVStyle); + end; +end; +{------------------------------------------------------------------------------} +function TRVComboItemInfo.GetBoolValue(Prop: TRVItemBoolProperty): Boolean; +begin + case Prop of + rvbpImmediateControlOwner: + Result := FComboBox<>nil; + else + Result := inherited GetBoolValue(Prop); + end; +end; +{------------------------------------------------------------------------------} +function TRVComboItemInfo.GetItems: TStrings; +begin + if FItems=nil then + FItems := TStringList.Create; + Result := FItems; +end; +{------------------------------------------------------------------------------} +procedure TRVComboItemInfo.SetItems(const Value: TStrings); +begin + FItems.Assign(Value); +end; +{------------------------------------------------------------------------------} +procedure TRVComboItemInfo.Inserting(RVData: TObject; var Text: TRVRawByteString; + Safe: Boolean); +begin + FRVData := TCustomRVData(RVData); + if FComboBox<>nil then begin + FComboBox.Visible := False; + if not Safe and (RVData<>nil) then + FComboBox.Parent := FRVData.GetParentControl + else + FComboBox.Parent := nil; + end; + inherited Inserting(RVData, Text, Safe); +end; +{------------------------------------------------------------------------------} +function TRVComboItemInfo.OwnsControl(AControl: TControl): Boolean; +begin + Result := AControl=FComboBox; +end; +{------------------------------------------------------------------------------} +procedure TRVComboItemInfo.AdjustInserted(x, y: Integer; adjusty: Boolean); +begin + if FComboBox<>nil then begin + FComboBox.Left := x+Spacing; + FComboBox.Tag := y+Spacing; + if adjusty then + RV_Tag2Y(FComboBox); + FComboBox.Visible := True; + end; +end; +{------------------------------------------------------------------------------} +procedure TRVComboItemInfo.DoComboBoxClick(Sender: TObject); +begin + if FComboBox.ItemIndex>=0 then begin + Text := FComboBox.Text; + UpdateMe; + end; +end; +{------------------------------------------------------------------------------} +function TRVComboItemInfo.GetRVFExtraPropertyCount: Integer; +begin + Result := Items.Count + inherited GetRVFExtraPropertyCount; +end; +{------------------------------------------------------------------------------} +procedure TRVComboItemInfo.SaveRVFExtraProperties(Stream: TStream); +var i: Integer; +begin + inherited SaveRVFExtraProperties(Stream); + for i := 0 to items.Count-1 do + RVFWriteLine(Stream, {$IFDEF RVUNICODESTR}AnsiStrings.{$ENDIF} + Format('item=%s', [StringToRVFString(Items[i])])); +end; +{------------------------------------------------------------------------------} +function TRVComboItemInfo.SetExtraCustomProperty(const PropName: TRVAnsiString; + const Value: String): Boolean; +begin + if PropName='item' then begin + Items.Add(Value); + Result := True; + end + else + Result := inherited SetExtraCustomProperty(PropName, Value); +end; +{------------------------------------------------------------------------------} +function TRVComboItemInfo.ReadRVFLine(const s: TRVRawByteString; RVData: TPersistent; + ReadType, LineNo, LineCount: Integer; var Name: TRVRawByteString; + var ReadMode: TRVFReadMode; var ReadState: TRVFReadState; + UTF8Strings: Boolean; var AssStyleNameUsed: Boolean): Boolean; +begin + if LineNo=0 then + Items.Clear; + Result := inherited ReadRVFLine(s, RVData, ReadType, LineNo, LineCount, Name, + ReadMode, ReadState, UTF8Strings, AssStyleNameUsed); +end; + +initialization + + RegisterRichViewItemClass(rvsCombo, TRVComboItemInfo); + +end. diff --git a/12.0.4/Demos/Addins/ComboItem/readme.txt b/12.0.4/Demos/Addins/ComboItem/readme.txt new file mode 100644 index 0000000..a29eed3 --- /dev/null +++ b/12.0.4/Demos/Addins/ComboItem/readme.txt @@ -0,0 +1,23 @@ +ComboItem Version 1.3 + + Combo Item - item class for RichView. + It's an label item that displays combo-box when focused: clicked or activated by Tab key. + It can show combobox only in TRichView, not in TRichViewEdit (because items in TRichViewEdit + cannot be focused). + + +{----------------------------------- COMBOITEM ---------------------------------} + +This item has all properties of LabelItem. +It cannot resize itself when new text is chosen from the combobox, so you should +assign MinWidth to value large enough to show the whole text. + +Properties: +property Items: TStrings + +History + +v1.3 Compatibility with TRichView v11 +v1.2 Compatibility with TRichView v10 + (where LabelItem is included in the standard set of items) +v1.1 Saving items in RVF \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Autocomplete/Autocomplete.bdsproj b/12.0.4/Demos/Delphi/Assorted/Autocomplete/Autocomplete.bdsproj new file mode 100644 index 0000000..e952ccf --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Autocomplete/Autocomplete.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Autocomplete.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Autocomplete/Autocomplete.dpr b/12.0.4/Demos/Delphi/Assorted/Autocomplete/Autocomplete.dpr new file mode 100644 index 0000000..290eed2 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Autocomplete/Autocomplete.dpr @@ -0,0 +1,13 @@ +program Autocomplete; + +uses + Forms, + MainFrm in 'MainFrm.pas' {frmMain}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Autocomplete/Autocomplete.res b/12.0.4/Demos/Delphi/Assorted/Autocomplete/Autocomplete.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Autocomplete/Autocomplete.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Autocomplete/MainFrm.dfm b/12.0.4/Demos/Delphi/Assorted/Autocomplete/MainFrm.dfm new file mode 100644 index 0000000..a743503 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Autocomplete/MainFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Autocomplete/MainFrm.pas b/12.0.4/Demos/Delphi/Assorted/Autocomplete/MainFrm.pas new file mode 100644 index 0000000..e5c3169 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Autocomplete/MainFrm.pas @@ -0,0 +1,93 @@ +{*******************************************************} +{ } +{ RichView } +{ AutoComplete demo } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +unit MainFrm; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, Menus, RVStyle, RVScroll, RichView, RVEdit, RVGetText; + +type + TfrmMain = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + PopupMenu1: TPopupMenu; + procedure RichViewEdit1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure FormCreate(Sender: TObject); + private + procedure AddPopupMenuItem(s: String); + procedure AutoCompletePopupMenuClick(Sender: TObject); + { Private declarations } + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + +implementation + +{$R *.dfm} + +procedure TfrmMain.FormCreate(Sender: TObject); +begin + {$IFDEF RICHVIEWDEF6} + PopupMenu1.AutoHotkeys := maManual; + {$ENDIF} + RichViewEdit1.Clear; + RichViewEdit1.AddNL( + 'Type a word and press Ctrl+Space for suggestions', 0,0); + RichViewEdit1.Format; +end; + +procedure TfrmMain.AddPopupMenuItem(s: String); +var mi: TMenuItem; +begin + mi := TMenuItem.Create(PopupMenu1); + mi.Caption := s; + mi.OnClick := AutoCompletePopupMenuClick; + PopupMenu1.Items.Add(mi); +end; + +procedure TfrmMain.AutoCompletePopupMenuClick(Sender: TObject); +begin + RichViewEdit1.SelectCurrentWord; + RichViewEdit1.InsertText((Sender as TMenuItem).Caption, False); +end; + +procedure TfrmMain.RichViewEdit1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +var s: String; + pt: TPoint; +begin + if (Key=VK_SPACE) and (ssCtrl in Shift) then begin + s := GetCurrentWord(RichViewEdit1); + if s<>'' then begin + while PopupMenu1.Items.Count>0 do + PopupMenu1.Items[0].Free; + AddPopupMenuItem('super'+s); + AddPopupMenuItem('mega'+s); + AddPopupMenuItem('ultra'+s); + AddPopupMenuItem('grand'+s); + GetCaretPos(pt); + pt := RichViewEdit1.TopLevelEditor.ClientToScreen(pt); + PopupMenu1.Popup(pt.X, pt.Y+10); + end; + Key := 0; + end; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/CustomDraw.bdsproj b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/CustomDraw.bdsproj new file mode 100644 index 0000000..8773738 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/CustomDraw.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + CustomDraw.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/CustomDraw.dpr b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/CustomDraw.dpr new file mode 100644 index 0000000..ae6c226 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/CustomDraw.dpr @@ -0,0 +1,13 @@ +program CustomDraw; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/CustomDraw.res b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/CustomDraw.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/CustomDraw.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/Unit1.dfm new file mode 100644 index 0000000..1dff70c Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/Unit1.pas new file mode 100644 index 0000000..bbe3add --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Custom Draw/CustomDraw/Unit1.pas @@ -0,0 +1,312 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, RVTypes; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + RichView2: TRichView; + procedure RVStyle1DrawStyleText(Sender: TRVStyle; const s: TRVRawByteString; + Canvas: TCanvas; StyleNo, SpaceBefore, Left, Top, Width, + Height: Integer; DrawState: TRVTextDrawStates; + var DoDefault: Boolean); + procedure FormCreate(Sender: TObject); + procedure RVStyle1StyleHoverSensitive(Sender: TRVStyle; + StyleNo: Integer; var Sensitive: Boolean); + procedure RVStyle1DrawTextBack(Sender: TRVStyle; Canvas: TCanvas; + StyleNo, Left, Top, Width, Height: Integer; + DrawState: TRVTextDrawStates; var DoDefault: Boolean); + procedure RVStyle1DrawCheckpoint(Sender: TRVStyle; Canvas: TCanvas; X, + Y, ItemNo, XShift: Integer; RaiseEvent: Boolean; Control: TControl; + var DoDefault: Boolean); + procedure RVStyle1DrawPageBreak(Sender: TRVStyle; Canvas: TCanvas; Y, + XShift: Integer; PageBreakType: TRVPageBreakType; Control: TControl; var DoDefault: Boolean); + procedure RVStyle1DrawParaBack(Sender: TRVStyle; Canvas: TCanvas; + ParaNo: Integer; ARect: TRect; var DoDefault: Boolean); + procedure RichView2Paint(Sender: TCustomRichView; Canvas: TCanvas; + Prepaint: Boolean); + procedure RichView2RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{============================== DRAWING ROUTINES ==============================} + +{$R-} // turning off range checking (required for DrawTrRect) +{------------------------------------------------------------------------------} +{ Drawing left to right arrow } +{------------------------------------------------------------------------------} +procedure DrawArrow(Canvas: TCanvas; Left, Top, Width, Height: Integer); +var midx,midy: Integer; + one, two : Integer; +begin + midx := Left+Width div 2; + midy := Top+Height div 2; + if Width>0 then begin + one := 1; + two := -2; + end + else begin + one := -1; + two := 2; + end; + Canvas.PolyLine([Point(Left+one,Top+3), + Point(midx,Top+3), + Point(midx,Top+1), + Point(Left+Width+two, midy), + Point(midx, Top+Height-2), + Point(midx, Top+Height-4), + Point(Left+one,Top+Height-4), + Point(Left+one,Top+3) + ]); +end; +{------------------------------------------------------------------------------} +{ Drawing an icon for page breaks } +{------------------------------------------------------------------------------} +procedure DrawPageIcon(Canvas: TCanvas; Left, Top, Width, Height: Integer); +var LeftS, RightS: Integer; +begin + LeftS := Left+2; + RightS := Left+Width-4; + Canvas.PolyLine([Point(RightS-3,Top), + Point(LeftS,Top), + Point(LeftS, Top+Height), + Point(RightS,Top+Height), + Point(RightS,Top+3), + Point(RightS-3,Top), + Point(RightS-3,Top+3), + Point(RightS,Top+3) + ]); + Canvas.Pen.Style := psDot; + Canvas.Pen.Color := clRed; + Canvas.MoveTo(Left, Top+Height div 2); + Canvas.LineTo(Left+Width, Top+Height div 2); +end; +{------------------------------------------------------------------------------} +{ Drawing a colored rectangle with specified degree of opacity (0..255) } +{ (quite slow...) } +{------------------------------------------------------------------------------} +procedure DrawTrRect(Canvas: TCanvas; const ARect: TRect; + Color: TColor; + Opacity: Integer); +type + RGBARR = array [0..0] of TRGBQUAD; + PRGBARR = ^RGBARR; +var prgb: PRGBARR; + rgb : TRGBQUAD; + i,j: Integer; + tr : Integer; + Clr: LongInt; + bmp: TBitmap; +begin + Clr := ColorToRGB(Color); + rgb.rgbRed := Clr and $000000FF; + rgb.rgbGreen := (Clr and $0000FF00) shr 8; + rgb.rgbBlue := (Clr and $00FFFFFF) shr 16; + rgb.rgbReserved := 0; + + bmp := TBitmap.Create; + bmp.PixelFormat := pf32bit; + bmp.Width := ARect.Right-ARect.Left; + bmp.Height := ARect.Bottom-ARect.Top; + bmp.Canvas.CopyRect(Rect(0,0,bmp.Width,bmp.Height), Canvas, ARect); + + tr := 255 - Opacity; + for i := 0 to bmp.Height-1 do begin + prgb := PRGBARR(bmp.ScanLine[i]); + for j := 0 to bmp.Width-1 do + with prgb[j] do begin + rgbBlue := (rgbBlue*tr + rgb.rgbBlue*Opacity) div 255; + rgbGreen := (rgbGreen*tr + rgb.rgbGreen*Opacity)div 255; + rgbRed := (rgbRed*tr + rgb.rgbRed*Opacity) div 255; + end; + end; + Canvas.Draw(ARect.Left, ARect.Top, bmp); + bmp.Free; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; +begin + RichView1.AddNL('Example',1,1); + RichView1.AddNL('This is an example of ',0,0); + RichView1.Add('custom drawn text',3); + RichView1.Add('.',0); + RichView1.AddNL(' Hot link 1 ',4,1); + RichView1.AddNL(' Hot link 2 ',5,1); + RichView1.AddBreakEx(1, rvbsLine, clBtnShadow); + RichView1.AddCheckpoint; + RichView1.AddNL('Another example - a custom drawing of checkpoints.',0,0); + RichView1.AddCheckpoint; + RichView1.AddNL('For example, you can draw a little nice arrow instead of default dotted line.',0,0); + RichView1.AddBreakEx(1, rvbsLine, clBtnShadow); + RichView1.AddNL('One more example - a custom displaying of page break',0,0); + RichView1.PageBreaksBeforeItems[RichView1.ItemCount-1] := True; + RichView1.Format; + + RichView2.AddNL('Cool Effect - ',2,2); + RichView2.SetAddParagraphMode(False); + RichView2.AddNL('Transparent paragraph background.',2,2); + RichView2.AddNL('example of custom painting of paragraph background',0,2); + RichView2.SetAddParagraphMode(True); + for i := 0 to 20 do + RichView2.AddNL('This is the example how to use OnDrawParaBack and OnPaint events.',0,0); + RichView2.Format; +end; +{------------------------------------------------------------------------------} +{ Should RichView repaint itself if mouse is over text of specified style? } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1StyleHoverSensitive(Sender: TRVStyle; + StyleNo: Integer; var Sensitive: Boolean); +begin + if StyleNo in [4,5] then + Sensitive := True; // (default for other styles) +end; +{------------------------------------------------------------------------------} +{ Drawing a background of text } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawTextBack(Sender: TRVStyle; Canvas: TCanvas; + StyleNo, Left, Top, Width, Height: Integer; DrawState: TRVTextDrawStates; + var DoDefault: Boolean); +var r: TRect; +begin + case StyleNo of + 5: + begin + // drawing a sunken edge for the 5th style + r := Bounds(Left,Top, Width, Height); + if rvtsHover in DrawState then + DrawEdge(Canvas.Handle, r, BDR_SUNKENOUTER or BF_ADJUST, BF_RECT) + end; + end; +end; +{------------------------------------------------------------------------------} +{ Drawing a text } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawStyleText(Sender: TRVStyle; const s: TRVRawByteString; + Canvas: TCanvas; StyleNo, SpaceBefore, Left, Top, Width, Height: Integer; + DrawState: TRVTextDrawStates; var DoDefault: Boolean); +begin + // This implementation does not support Unicode text items. + // For Unicode text items, s contains "raw Unicode". It must be + // converted to ANSI or Unicode string before using. + // See the same example for Delphi 2009+ (Demos\DelphiUnicode\) + + if rvtsSelected in DrawState then + exit; // default drawing for selected text + inc(Left, SpaceBefore); + case StyleNo of + 0: + begin + // sunken effect + Canvas.Font.Color := clBtnHighlight; + Canvas.TextOut(Left+1,Top+1, s); + Canvas.Font.Color := clBtnShadow; + Canvas.TextOut(Left,Top, s); + DoDefault := False; + end; + 3: + begin + // raised effect + Canvas.Font.Color := clBtnHighlight; + Canvas.TextOut(Left-1,Top-1, s); + Canvas.Font.Color := clBtnShadow; + Canvas.TextOut(Left+1,Top+1, s); + DoDefault := False; + end; + 4: + begin + if rvtsHover in DrawState then begin + // hot glow effect + Canvas.Font.Color := Sender.TextStyles[StyleNo].HoverColor; + Canvas.TextOut(Left+1,Top+1, s); + Canvas.TextOut(Left-1,Top-1, s); + Canvas.Font.Color := Sender.TextStyles[StyleNo].Color; + Canvas.TextOut(Left,Top, s); + DoDefault := False; + end; + end; + end; +end; +{------------------------------------------------------------------------------} +{ Drawing checkpoint as arrow icon } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawCheckpoint(Sender: TRVStyle; Canvas: TCanvas; + X, Y, ItemNo, XShift: Integer; RaiseEvent: Boolean; Control: TControl; + var DoDefault: Boolean); +begin + if RaiseEvent then + Canvas.Pen.Color := Sender.CheckpointEvColor + else + Canvas.Pen.Color := Sender.CheckpointColor; + DrawArrow(Canvas, -XShift+2, Y-5, RichView1.LeftMargin-4, 10); + DoDefault := False; +end; +{------------------------------------------------------------------------------} +{ Drawing page break as icon } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawPageBreak(Sender: TRVStyle; Canvas: TCanvas; + Y, XShift: Integer; PageBreakType: TRVPageBreakType; Control: TControl; var DoDefault: Boolean); +begin + Canvas.Pen.Color := Sender.PageBreakColor; + DrawPageIcon(Canvas, -XShift+2, Y-8, 16, 16); + DoDefault := False; +end; +{------------------------------------------------------------------------------} +{ Drawing a background of paragraphs } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawParaBack(Sender: TRVStyle; Canvas: TCanvas; + ParaNo: Integer; ARect: TRect; var DoDefault: Boolean); +begin + if ParaNo=2 then begin + // semi-transparent background for paragraph style #2: + DrawTrRect(Canvas, ARect, Sender.ParaStyles[ParaNo].Background.Color, 150); + DoDefault := False; + end; +end; +{------------------------------------------------------------------------------} +{ Drawing unscrollable picture } +{------------------------------------------------------------------------------} +procedure TForm1.RichView2Paint(Sender: TCustomRichView; Canvas: TCanvas; + Prepaint: Boolean); +var x,y: Integer; + r: TRect; +begin + Canvas.Pen.Color := clRed; + Canvas.Pen.Width := 3; + Canvas.Brush.Color := clBlack; + x := Sender.ClientWidth-10; + y := Sender.ClientHeight-10; + Canvas.Ellipse(x-10, y-10, x+10, y+10); + r := Bounds(x-10, y-10, 20, 20); + Canvas.Brush.Style := bsClear; + Canvas.Font.Color := clRed; + Canvas.Font.Name := 'Arial'; + Canvas.Font.Style := [fsBold]; + Canvas.Font.Size := 12; + DrawText(Canvas.Handle, '!', 1, r, DT_SINGLELINE or DT_CENTER or DT_VCENTER); +end; + +procedure TForm1.RichView2RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); +begin + if (x>Sender.ClientWidth-20) and (y>Sender.ClientHeight-20) then + Application.MessageBox('!','!', MB_OK or MB_ICONINFORMATION); +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/CustomDrawMath.bdsproj b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/CustomDrawMath.bdsproj new file mode 100644 index 0000000..e938e01 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/CustomDrawMath.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + CustomDrawMath.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/CustomDrawMath.dpr b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/CustomDrawMath.dpr new file mode 100644 index 0000000..184472d --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/CustomDrawMath.dpr @@ -0,0 +1,13 @@ +program CustomDrawMath; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/CustomDrawMath.res b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/CustomDrawMath.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/CustomDrawMath.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/Unit1.dfm new file mode 100644 index 0000000..6be76c7 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/Unit1.pas new file mode 100644 index 0000000..440a6e3 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Custom Draw/Mathematics/Unit1.pas @@ -0,0 +1,83 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, RVEdit, CRVFData, RVTypes; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichViewEdit1: TRichViewEdit; + procedure FormCreate(Sender: TObject); + procedure RVStyle1DrawStyleText(Sender: TRVStyle; const s: TRVRawByteString; + Canvas: TCanvas; StyleNo, SpaceBefore, Left, Top, Width, + Height: Integer; DrawState: TRVTextDrawStates; + var DoDefault: Boolean); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + with RichViewEdit1 do begin + Clear; + AddNL('M',1,0); + Add('=||m',0); + Add('i,j',3); + Add('||',0); + // Note: rvoTagsArePChars in Options + AddNLTag('n',2, -1, Integer(StrNew('m'))); + // double scripts are only as an example + // here. They are too imperfect - + // they assume that superscript text is narrower + // (or at least not too wider) + // than subscript + Format; + end; +end; + +procedure TForm1.RVStyle1DrawStyleText(Sender: TRVStyle; const s: TRVRawByteString; + Canvas: TCanvas; StyleNo, SpaceBefore, Left, Top, Width, Height: Integer; + DrawState: TRVTextDrawStates; var DoDefault: Boolean); +var uppertext: PChar; +begin + // This implementation does not support Unicode text items. + // For Unicode text items, s contains "raw Unicode". It must be + // converted to ANSI or Unicode string before using. + // See the same example for Delphi 2009+ (Demos\DelphiUnicode\) + + case StyleNo of + 1: // dot + begin + // displaying small circle in the right top corner of item + // and allowing default drawing of item text + if (rvtsItemEnd in DrawState) and (Length(s)>0) then begin + Canvas.Pen.Color := Sender.TextStyles[1].Color; + Canvas.Ellipse(Left+Width-2,Top-2,Left+Width+2,Top+2); + end; + end; + 2: // double scripts + begin + // displaying tag string as superscript + // and allowing default drawing of item text (subscript) + if (rvtsItemStart in DrawState) and (Length(s)>0) then begin + uppertext := PChar(TCustomRVFormattedData(Sender.RVData).GetItemTag(Sender.ItemNo)); + if uppertext<>nil then + Canvas.TextOut(Left,Top-Height+5, uppertext); + end; + end; + end; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/FillInGaps.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/FillInGaps.bdsproj new file mode 100644 index 0000000..477623f --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/FillInGaps.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + FillInGaps.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/FillInGaps.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/FillInGaps.dpr new file mode 100644 index 0000000..9a55c74 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/FillInGaps.dpr @@ -0,0 +1,13 @@ +program FillInGaps; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/FillInGaps.res b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/FillInGaps.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/FillInGaps.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/Unit1.dfm new file mode 100644 index 0000000..d4023ee Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/Unit1.pas new file mode 100644 index 0000000..9f088c2 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/FillInGaps/Unit1.pas @@ -0,0 +1,120 @@ +unit Unit1; + +interface + +{------------------------------------------------------------------------------ + Implementing "fields" + The main property settings: + - rvoTagsArePChars in RichViewEdit1.Options (so each item can have associated string) + - RVStyle1.TextStyles collection has two styles (for static text and for fields) + Especially look at Protection properties + - RichViewEdit1 is set to "use predefined set of styles" (right click on + RichViewEdit1 at design time, then choose "Settings") + - AcceptDragDropFormats = [] + +------------------------------------------------------------------------------ } + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, Clipbrd, StdCtrls, + CRVData, RVTable; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + rvs: TRVStyle; + Button1: TButton; + procedure FormCreate(Sender: TObject); + procedure RichViewEdit1Paste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +function GetFieldLocation(RootRVData: TCustomRVData; const field: String; + var RVData: TCustomRVData; var ItemNo: Integer): Boolean; +var i,r,c: Integer; + table: TRVTableItemInfo; +begin + Result := False; + for i := 0 to RootRVData.ItemCount-1 do + if RootRVData.GetItemStyle(i)=rvsTable then begin + table := TRVTableItemInfo(RootRVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then begin + Result := GetFieldLocation(table.Cells[r,c].GetRVData, + field, RVData, ItemNo); + if Result then + exit; + end + end + else if PChar(RootRVData.GetItemTag(i)) = field then begin + ItemNo := i; + RVData := RootRVData.GetSourceRVData; + Result := True; + exit; + end; +end; + +function GetFieldValue(rv: TCustomRichView; const field: String): String; +var RVData: TCustomRVData; + ItemNo: Integer; +begin + if GetFieldLocation(rv.RVData, field, RVData, ItemNo) then + Result := RVData.GetItemText(ItemNo) + else + Result := ''; +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit1.AddNL('2 + 2 =', 1,0); + RichViewEdit1.AddNLTag(' ', 0,-1, Integer(StrNew('answer1'))); + RichViewEdit1.Add('?', 1); + RichViewEdit1.AddNL('3 + 3 =', 1,0); + RichViewEdit1.AddNLTag(' ', 0,-1, Integer(StrNew('answer2'))); + RichViewEdit1.Add('?', 1); + RichViewEdit1.Format; + RichViewEdit1.SetSelectionBounds(1,2,1,2); +end; + +procedure TForm1.RichViewEdit1Paste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); +var s: String; +begin + // allowing to paste only one line text + s := Clipboard.AsText; + if (Pos(#10,s)=0) and (Pos(#13,s)=0) then + RichViewEdit1.InsertText(s,False); + DoDefault := False; +end; + +procedure TForm1.Button1Click(Sender: TObject); +var s: String; +begin + s := GetFieldValue(RichViewEdit1, 'answer1'); + if StrToIntDef(Trim(s), 0)<>4 then begin + Application.MessageBox('Wrong! Try again','Test', 0); + exit; + end; + s := GetFieldValue(RichViewEdit1, 'answer2'); + if StrToIntDef(Trim(s), 0)<>6 then begin + Application.MessageBox('Wrong! Try again','Test', 0); + exit; + end; + Application.MessageBox('Test is passed','Test', 0); +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/LiveLink1.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/LiveLink1.bdsproj new file mode 100644 index 0000000..15fc964 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/LiveLink1.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + LiveLink1.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/LiveLink1.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/LiveLink1.dpr new file mode 100644 index 0000000..349aed7 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/LiveLink1.dpr @@ -0,0 +1,13 @@ +program LiveLink1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/LiveLink1.res b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/LiveLink1.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/LiveLink1.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/Unit1.dfm new file mode 100644 index 0000000..8c568d7 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/Unit1.pas new file mode 100644 index 0000000..2fdfd24 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Simple/Unit1.pas @@ -0,0 +1,168 @@ +unit Unit1; + +interface + +{------------------------------------------------------------------------------} +{ Important settings: + rvoTagsArePChars in RichViewEdit1.Options +{------------------------------------------------------------------------------} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, RVStyle, RVScroll, RichView, RVEdit; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Button1: TButton; + Button2: TButton; + Label1: TLabel; + Edit1: TEdit; + Label2: TLabel; + Edit2: TEdit; + Button3: TButton; + Label3: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Edit1Change(Sender: TObject); + procedure Edit2Change(Sender: TObject); + procedure RichViewEdit1Change(Sender: TObject); + private + { Private declarations } + LastNameItemNo, // Storing LastItem no is not necessary, + LastDateItemNo: Integer; // but increases efficiency + Freeze: Boolean; + procedure InsertField(const field, value: String; var LastItemNo: Integer); + public + { Public declarations } + end; + +var + Form1: TForm1; + + + +implementation + +procedure GetFieldItemNo(rv: TCustomRichView; const field: String; var ItemNo: Integer); +var i: Integer; +begin + if (ItemNo>=0) and (ItemNo=0 then + Result := rv.GetItemText(LastItemNo) + else + Result := ''; +end; + +procedure SetFieldValue(rv: TCustomRichViewEdit; const field, value: String; + var LastItemNo: Integer); +begin + GetFieldItemNo(rv, field, LastItemNo); + if LastItemNo>=0 then + rv.SetItemTextEd(LastItemNo, value); +end; + + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit1.AddNL('Insert fields here',0,0); + RichViewEdit1.Format; +end; + +procedure TForm1.InsertField(const field, value: String; var LastItemNo: Integer); +var StyleNo: Integer; +begin + if GetFieldValue(RichViewEdit1, field, LastItemNo)<>'' then begin + Application.MessageBox('Field already exists!','',0); + exit; + end; + StyleNo := RichViewEdit1.CurParaStyleNo; + RichViewEdit1.CurTextStyleNo := 6; + RichViewEdit1.InsertStringTag(value, Integer(StrNew(PChar(field)))); + RichViewEdit1.CurTextStyleNo := StyleNo; + RichViewEdit1.SetFocus; +end; + + +procedure TForm1.Button1Click(Sender: TObject); + +begin + InsertField('name', Edit1.Text, LastNameItemNo); +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + InsertField('date', Edit2.Text, LastDateItemNo); +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + RichViewEdit1.ApplyTextStyle(0); + RichViewEdit1.SetFocus; +end; + +procedure TForm1.Edit1Change(Sender: TObject); +begin + if Freeze then + exit; + Freeze := True; + try + SetFieldValue(RichViewEdit1, 'name', Edit1.Text, LastNameItemNo); + finally + Freeze := False; + end; +end; + +procedure TForm1.Edit2Change(Sender: TObject); +begin + if Freeze then + exit; + Freeze := True; + try + SetFieldValue(RichViewEdit1, 'date', Edit2.Text, LastDateItemNo); + finally + Freeze := False; + end; +end; + +procedure TForm1.RichViewEdit1Change(Sender: TObject); +var s: String; +begin + if Freeze then + exit; + Freeze := True; + try + s := GetFieldValue(RichViewEdit1, 'name', LastNameItemNo); + if s<>'' then + Edit1.Text := s; + s := GetFieldValue(RichViewEdit1, 'date', LastDateItemNo); + if s<>'' then + Edit2.Text := s; + finally + Freeze := False; + end; +end; + + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/LiveLink2.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/LiveLink2.bdsproj new file mode 100644 index 0000000..98ce722 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/LiveLink2.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + LiveLink2.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/LiveLink2.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/LiveLink2.dpr new file mode 100644 index 0000000..e3d7adb --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/LiveLink2.dpr @@ -0,0 +1,13 @@ +program LiveLink2; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/LiveLink2.res b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/LiveLink2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/LiveLink2.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/Unit1.dfm new file mode 100644 index 0000000..472624d Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/Unit1.pas new file mode 100644 index 0000000..1f81cfb --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/LiveLink/Tables/Unit1.pas @@ -0,0 +1,203 @@ +unit Unit1; + +interface + +{------------------------------------------------------------------------------} +{ Important settings: + rvoTagsArePChars in RichViewEdit1.Options +{------------------------------------------------------------------------------} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, RVStyle, RVScroll, RichView, RVEdit, RVTable, CRVData, RVERVData; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Button1: TButton; + Button2: TButton; + Label1: TLabel; + Edit1: TEdit; + Label2: TLabel; + Edit2: TEdit; + Button3: TButton; + Label3: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Edit1Change(Sender: TObject); + procedure Edit2Change(Sender: TObject); + procedure RichViewEdit1Change(Sender: TObject); + private + { Private declarations } + Freeze: Boolean; + procedure InsertField(const field, value: String); + public + { Public declarations } + end; + +var + Form1: TForm1; + + + +implementation + +function GetFieldLocation(RootRVData: TCustomRVData; const field: String; + var RVData: TCustomRVData; var ItemNo: Integer): Boolean; +var i,r,c: Integer; + table: TRVTableItemInfo; +begin + Result := False; + for i := 0 to RootRVData.ItemCount-1 do + if RootRVData.GetItemStyle(i)=rvsTable then begin + table := TRVTableItemInfo(RootRVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then begin + Result := GetFieldLocation(table.Cells[r,c].GetRVData, field, RVData, ItemNo); + if Result then + exit; + end + end + else if PChar(RootRVData.GetItemTag(i)) = field then begin + ItemNo := i; + RVData := RootRVData.GetSourceRVData; + Result := True; + exit; + end; +end; + +function GetFieldValue(rv: TCustomRichView; const field: String): String; +var ItemNo: Integer; + RVData: TCustomRVData; +begin + if GetFieldLocation(rv.RVData, field, RVData, ItemNo) then + Result := RVData.GetRVData.GetItemText(ItemNo) + else + Result := ''; +end; + +procedure SetFieldValue(rv: TCustomRichViewEdit; const field, value: String); +var ItemNo: Integer; + RVData: TCustomRVData; + Ctrl: TWinControl; + AutoSelect: Boolean; +begin + if GetFieldLocation(rv.RVData, field, RVData, ItemNo) then begin + if RVData.GetRVData is TRVTableCellData then begin + ctrl := GetParentForm(rv).ActiveControl; + TRVTableCellData(RVData).Edit; + AutoSelect := False; + if (ctrl<>nil) and (ctrl is TEdit) then begin + AutoSelect := TEdit(ctrl).AutoSelect; + TEdit(ctrl).AutoSelect := False; + end; + GetParentForm(rv).ActiveControl := ctrl; + if (ctrl<>nil) and (ctrl is TEdit) then + TEdit(ctrl).AutoSelect := AutoSelect; + end; + if RVData.GetRVData is TRVEditRVData then + (TRVEditRVData(RVData.GetRVData).RichView as TCustomRichViewEdit).SetItemTextEd(ItemNo, value); + end; +end; + + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var table: TRVTableItemInfo; +begin + RichViewEdit1.Clear; + table := TRVTableItemInfo.CreateEx(1,2,RichViewEdit1.RVData); + table.Cells[0,0].Clear; + table.Cells[0,0].AddNL('Name: ',0,1); + table.Cells[0,0].AddNLTag(Edit1.Text,6,-1,Integer(StrNew('name'))); + table.Cells[0,1].Clear; + table.Cells[0,1].AddNL('Date: ',0,1); + table.Cells[0,1].AddNLTag(Edit2.Text,6,-1,Integer(StrNew('date'))); + table.BorderWidth := 1; + table.CellBorderWidth := 1; + RichViewEdit1.AddItem('',table); + RichViewEdit1.Format; +end; + +procedure TForm1.InsertField(const field, value: String); +var StyleNo: Integer; +begin + if GetFieldValue(RichViewEdit1, field)<>'' then begin + Application.MessageBox('Field already exists!','', 0); + exit; + end; + StyleNo := RichViewEdit1.CurTextStyleNo; + RichViewEdit1.CurTextStyleNo := 6; + RichViewEdit1.InsertStringTag(value, Integer(StrNew(PChar(field)))); + RichViewEdit1.CurTextStyleNo := StyleNo; + RichViewEdit1.SetFocus; +end; + + +procedure TForm1.Button1Click(Sender: TObject); + +begin + InsertField('name', Edit1.Text); +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + InsertField('date', Edit2.Text); +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + RichViewEdit1.ApplyTextStyle(0); + RichViewEdit1.SetFocus; +end; + +procedure TForm1.Edit1Change(Sender: TObject); +begin + if Freeze then + exit; + Freeze := True; + try + SetFieldValue(RichViewEdit1, 'name', Edit1.Text); + finally + Freeze := False; + end; +end; + +procedure TForm1.Edit2Change(Sender: TObject); +begin + if Freeze then + exit; + Freeze := True; + try + SetFieldValue(RichViewEdit1, 'date', Edit2.Text); + finally + Freeze := False; + end; +end; + +procedure TForm1.RichViewEdit1Change(Sender: TObject); +var s: String; +begin + if Freeze then + exit; + Freeze := True; + try + s := GetFieldValue(RichViewEdit1, 'name'); + if s<>'' then + Edit1.Text := s; + s := GetFieldValue(RichViewEdit1, 'date'); + if s<>'' then + Edit2.Text := s; + finally + Freeze := False; + end; +end; + + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/Customers.txt b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/Customers.txt new file mode 100644 index 0000000..a264d2f --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/Customers.txt @@ -0,0 +1,37 @@ +18 +cid0001 +Roberto Nelson +cid0002 +Bruce Young +cid0003 +Kim Lambert +cid0004 +Leslie Johnson +cid0005 +Phil Forest +cid0006 +K.J. Weston +cid0007 +Lee Terry +cid0008 +Stewart Hall +cid0009 +Katherine Young +cid0010 +Chris Papadopulos +cid0011 +Pete Fisher +cid0012 +Ann Bennet +cid0013 +Roger De Sousa +cid0014 +Janet Boldwin +cid0015 +Roger Reeves +cid0016 +Willie Stansbury +cid0017 +Leslie Phong +cid0018 +Ashok Ramanathan \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.dfm new file mode 100644 index 0000000..eb3c8ea Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.pas b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.pas new file mode 100644 index 0000000..2518465 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.pas @@ -0,0 +1,174 @@ +unit MMMainFrm; +{------------------------------------------------------------------------------} +{ + Very simple "mail merging" application (LabelItem Version). + It loads a template from TEMPLATE.RVF, and data from CUSTOMERS.TXT. + Template can be modified with another application in this directory: + TEMPLATEEDITORLI. + + Main settings: + - since field names are stored in tags (see the help topic about tags) + as strings, rvoTagsArePChars is included in Options of rvTemplate and + rvOutput. + - fields are represented with LabelItem item type. + - rvOutput.Style = rvsOutput, rvTemplate.Style = rvsTemplate. + In rvOutput, fields are not highlighted, in rvTemplate they are always + highlighted. +} +{------------------------------------------------------------------------------} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, StdCtrls, RVStyle, RVTable, CRVData, + RVLabelItem, RVSeqItem; + +type + TfrmMainMerge = class(TForm) + ListBox1: TListBox; + rvOutput: TRichView; + rvsOutput: TRVStyle; + rvsTemplate: TRVStyle; + rvTemplate: TRichView; + Label1: TLabel; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + procedure ListBox1Click(Sender: TObject); + procedure FormDestroy(Sender: TObject); + private + { Private declarations } + Codes: TStringList; + procedure LoadCustomers; + function IsFieldCode(const FieldName: String): Boolean; + function GetFieldValueFromDatabase(const FieldName: String): String; + procedure FillFields(RVData: TCustomRVData); + public + { Public declarations } + end; + +var + frmMainMerge: TfrmMainMerge; + +implementation + +{$R *.dfm} + +{ TForm1 } + +{------------------------------------------------------------------------------} +{ This procedure loads file CUSTOMERS.TXT into: + - ListBox1.Items (<- names of customers) + - Codes (<- codes of customers) + In real applications data can be stored in some database } +procedure TfrmMainMerge.LoadCustomers; +var F: TextFile; + i, Count: Integer; + s: String; +begin + AssignFile(F, ExtractFilePath(Application.ExeName)+'Customers.txt'); + Reset(F); + try + Readln(F, Count); + for i := 0 to Count-1 do + begin + Readln(F, s); + Codes.Add(s); + Readln(F, s); + ListBox1.Items.Add(Trim(s)) + end; + finally + CloseFile(F); + end; +end; +{------------------------------------------------------------------------------} +{ Initialization: loading template into rvOutput, loading customers data. } +procedure TfrmMainMerge.FormCreate(Sender: TObject); +begin + Codes := TStringList.Create; + LoadCustomers; + rvTemplate.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + rvTemplate.Format; + if ListBox1.Items.Count>0 then + begin + ListBox1.ItemIndex := 0; + ListBox1.OnClick(nil); + end; +end; +{------------------------------------------------------------------------------} +procedure TfrmMainMerge.FormDestroy(Sender: TObject); +begin + Codes.Free; + Codes := nil; +end; +{------------------------------------------------------------------------------} +{ Returns True if FieldName is a valid field code } +function TfrmMainMerge.IsFieldCode(const FieldName: String): Boolean; +begin + Result := (FieldName='name') or (FieldName='code') or + (Copy(FieldName, 1, 5)='date:'); +end; +{------------------------------------------------------------------------------} +{ This function returns the current field value by the field name. + In this example, we have two data fields: "name" and "code", + and "date" field } +function TfrmMainMerge.GetFieldValueFromDatabase(const FieldName: String): String; +var Index: Integer; +begin + Index := ListBox1.ItemIndex; + if FieldName='name' then + Result := ListBox1.Items[Index] + else if FieldName='code' then + Result := Codes[Index] + else if Copy(FieldName, 1, 5)='date:' then begin + Result := Copy(FieldName, 6, Length(FieldName)); + Result := DateToStr(StrToFloat(Result)); + end + else + Result := '{error: illegal field code}'; +end; +{------------------------------------------------------------------------------} +{ This function iterates through all items in RVData, and if tag of + some label item is a data field, it calls GetFieldValueFromDatabase(tag) + and replaces the label item's text with the returned value. + You can move this function to your application unchanged. + Initial call: FillFields(RichView.RVData); } +procedure TfrmMainMerge.FillFields(RVData: TCustomRVData); +var i,r,c: Integer; + table: TRVTableItemInfo; + FieldName: String; +begin + for i := 0 to RVData.ItemCount-1 do + case RVData.GetItemStyle(i) of + rvsTable: + begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.RowCount-1 do + for c := 0 to table.ColCount-1 do + if table.Cells[r,c]<>nil then + FillFields(table.Cells[r,c].GetRVData); + end; + rvsLabel: + begin + FieldName := PChar(RVData.GetItemTag(i)); + if IsFieldCode(FieldName) then + TRVLabelItemInfo(RVData.GetItem(i)).Text := GetFieldValueFromDatabase(FieldName); + end; + end; +end; +{------------------------------------------------------------------------------} +{ On highlighting a new list box item: updating document in rvOutput. } +procedure TfrmMainMerge.ListBox1Click(Sender: TObject); +begin + rvOutput.Clear; + if ListBox1.ItemIndex>=0 then + begin + rvOutput.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + FillFields(rvOutput.RVData); + rvOutput.Format; + end; +end; + + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.bdsproj new file mode 100644 index 0000000..af4b3c8 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + MailMergeLI.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.dpr new file mode 100644 index 0000000..f611a13 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.dpr @@ -0,0 +1,13 @@ +program MailMergeLI; + +uses + Forms, + MMMainFrm in 'MMMainFrm.pas' {frmMainMerge}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMainMerge, frmMainMerge); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.res b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.res new file mode 100644 index 0000000..08ba56e Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/PopupFrm.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/PopupFrm.dfm new file mode 100644 index 0000000..023893e Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/PopupFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/PopupFrm.pas b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/PopupFrm.pas new file mode 100644 index 0000000..1949a56 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/PopupFrm.pas @@ -0,0 +1,53 @@ +unit PopupFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, ComCtrls, StdCtrls, ExtCtrls; + +type + TfrmPopup = class(TForm) + Panel1: TPanel; + Panel2: TPanel; + Button1: TButton; + Button2: TButton; + cal: TMonthCalendar; + procedure FormDeactivate(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +implementation +uses TEMainFrm; + +{$R *.dfm} + +procedure TfrmPopup.FormDeactivate(Sender: TObject); +begin + Close; +end; + +procedure TfrmPopup.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; + frmTemplateEditor.rve.SmartPopupProperties.SetButtonState(False); +end; + +procedure TfrmPopup.Button1Click(Sender: TObject); +begin + frmTemplateEditor.ChangeDate(cal.Date); + Close; +end; + +procedure TfrmPopup.Button2Click(Sender: TObject); +begin + Close; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.dfm new file mode 100644 index 0000000..8d44b4e Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.pas b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.pas new file mode 100644 index 0000000..32ac689 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.pas @@ -0,0 +1,408 @@ +unit TEMainFrm; + +{------------------------------------------------------------------------------} +{ + TEMPLATE EDITOR (LABEL ITEM VERSION) + This demo creates template and saves it in TEMPLATE.RVF. + + This demo shows how to: + - use TRVLabelItemInfo as field; + - use TRVSeqItemInfo (only one numbered sequence ("Num") is inserted in + this demo, but you can paste RTF files with additional sequences). + - use "smart popups" to edit item properties. + + See mail merging application in the same directory - MAILMERGELI. + + Main settings: + - since field names are stored in tags (see the help topic about tags) + as strings, rvoTagsArePChars is included in Options of rve. + - this demo uses free formatting of template (right click richviews, + choose "Settings" from the context menu, choose "Allow adding styles + dynamically"). +} +{------------------------------------------------------------------------------} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + StdCtrls, ExtCtrls, Menus, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, + RVLabelItem, RVSeqItem, ImgList; + +type + TfrmTemplateEditor = class(TForm) + rve: TRichViewEdit; + RVStyle1: TRVStyle; + MainMenu1: TMainMenu; + mitFile: TMenuItem; + mitSave: TMenuItem; + N1: TMenuItem; + mitExit: TMenuItem; + mitInsert: TMenuItem; + mitView: TMenuItem; + mitShowNever: TMenuItem; + mitShowCurrent: TMenuItem; + mitShowAlways: TMenuItem; + mitName: TMenuItem; + mitCode: TMenuItem; + N2: TMenuItem; + mitNumber: TMenuItem; + mitDate: TMenuItem; + ImageList1: TImageList; + pmField: TPopupMenu; + pmSeq: TPopupMenu; + mitDecimal: TMenuItem; + mitLowerAlpha: TMenuItem; + mitUpperAlpha: TMenuItem; + mitLowerRoman: TMenuItem; + mitUpperRoman: TMenuItem; + N3: TMenuItem; + mitContinue: TMenuItem; + mitResetTo: TMenuItem; + mitToName: TMenuItem; + mitToCode: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure mitShowNeverClick(Sender: TObject); + procedure mitShowCurrentClick(Sender: TObject); + procedure mitShowAlwaysClick(Sender: TObject); + procedure mitNameClick(Sender: TObject); + procedure mitCodeClick(Sender: TObject); + procedure mitSaveClick(Sender: TObject); + procedure mitExitClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure mitDateClick(Sender: TObject); + procedure mitNumberClick(Sender: TObject); + procedure rveCaretMove(Sender: TObject); + procedure mitNumberTypeClick(Sender: TObject); + procedure pmSeqPopup(Sender: TObject); + procedure mitResetToClick(Sender: TObject); + procedure mitContinueClick(Sender: TObject); + procedure mitToNameClick(Sender: TObject); + procedure mitToCodeClick(Sender: TObject); + procedure pmFieldPopup(Sender: TObject); + procedure rveSmartPopupClick(Sender: TCustomRichView; + Button: TCustomControl); + private + { Private declarations } + procedure InsertField(const FieldCode, DisplayString: String); + procedure SetNumberTypeToMenu(NumberType: TRVSeqType); + procedure ResetCurrentSeqTo(Value: Integer; Reset: Boolean); + procedure ChangeFieldTo(const FieldCode, DisplayString: String); + public + { Public declarations } + procedure ChangeDate(Date: TDate); + end; + +var + frmTemplateEditor: TfrmTemplateEditor; + +implementation + +uses PopupFrm; + +{$R *.dfm} + +procedure TfrmTemplateEditor.FormCreate(Sender: TObject); +begin + rve.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + rve.Format; +end; +{============================= Menu "File" =====================================} +procedure TfrmTemplateEditor.mitSaveClick(Sender: TObject); +begin + rve.SaveRVF(ExtractFilePath(Application.ExeName)+'template.rvf', False); + rve.Modified := False; +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitExitClick(Sender: TObject); +begin + Close; +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if rve.Modified then + case Application.MessageBox('Template was modified'#13'Save?', 'Closing', + MB_YESNOCANCEL or MB_ICONQUESTION) of + ID_YES: + mitSaveClick(Sender); + ID_CANCEL: + CanClose := False; + end; +end; +{=========================== Menu "Insert" ====================================} +{ Inserting field. + FieldCode - field code, saved in item's tag. Main application will search + field by its code. + DisplayString - will be displayed in place of field by default. Any string. } +procedure TfrmTemplateEditor.InsertField(const FieldCode, DisplayString: String); +var li: TRVLabelItemInfo; +begin + li := TRVLabelItemInfo.CreateEx(rve.RVData, rve.CurTextStyleNo, DisplayString); + li.Tag := Integer(StrNew(PChar(FieldCode))); + rve.InsertItem('', li); +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitNameClick(Sender: TObject); +begin + InsertField('name', ''); +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitCodeClick(Sender: TObject); +begin + InsertField('code', ''); +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitDateClick(Sender: TObject); +var LDate: TDate; +begin + LDate := Date; + InsertField('date:'+FloatToStr(LDate), '<'+DateToStr(LDate)+'>'); +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitNumberClick(Sender: TObject); +var si: TRVSeqItemInfo; +begin + si := TRVSeqItemInfo.CreateEx(rve.RVData, 'Num', rvseqDecimal, + rve.CurTextStyleNo, 1, False); + rve.InsertItem('', si); +end; +{========================== Menu "View" =======================================} +procedure TfrmTemplateEditor.mitShowNeverClick(Sender: TObject); +begin + RVStyle1.FieldHighlightType := rvfhNever; + rve.RefreshAll; + mitShowNever.Checked := True; + mitShowCurrent.Checked := False; + mitShowAlways.Checked := False; +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitShowCurrentClick(Sender: TObject); +begin + RVStyle1.FieldHighlightType := rvfhCurrent; + rve.RefreshAll; + mitShowNever.Checked := False; + mitShowCurrent.Checked := True; + mitShowAlways.Checked := False; +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitShowAlwaysClick(Sender: TObject); +begin + RVStyle1.FieldHighlightType := rvfhAlways; + rve.RefreshAll; + mitShowNever.Checked := False; + mitShowCurrent.Checked := False; + mitShowAlways.Checked := True; +end; +{======================= Smart Popups =========================================} +procedure TfrmTemplateEditor.rveCaretMove(Sender: TObject); +var tle: TCustomRichViewEdit; + FieldCode: String; +begin + tle := rve.TopLevelEditor; + case tle.GetItemStyle(tle.CurItemNo) of + rvsLabel: + begin + FieldCode := PChar(tle.GetItemTag(tle.CurItemNo)); + if Copy(FieldCode, 1, 5)='date:' then begin + rve.SmartPopupProperties.Hint := 'Change Date'; + rve.SmartPopupProperties.ImageIndex := 1; + rve.SmartPopupProperties.Menu := nil; + rve.OnSmartPopupClick := rveSmartPopupClick; + end + else begin + rve.SmartPopupProperties.Hint := 'Change Field Code'; + rve.SmartPopupProperties.ImageIndex := 0; + rve.SmartPopupProperties.Menu := pmField; + rve.OnSmartPopupClick := nil; + end; + rve.SmartPopupVisible := True; + end; + rvsSequence: + begin + rve.SmartPopupProperties.Hint := 'Change Numbering'; + rve.SmartPopupProperties.ImageIndex := 2; + rve.SmartPopupProperties.Menu := pmSeq; + rve.SmartPopupVisible := True; + rve.OnSmartPopupClick := nil; + end; + else + rve.SmartPopupVisible := False; + end; +end; +{------------------------------------------------------------------------------} +{ Sequences: checking appropriate numbering type in pmSeq } +procedure TfrmTemplateEditor.SetNumberTypeToMenu(NumberType: TRVSeqType); +var i: TRVSeqType; +begin + for i := Low(TRVSeqType) to High(TRVSeqType) do + pmSeq.Items[ord(i)].Checked := pmSeq.Items[ord(i)].Tag=ord(NumberType); + +end; +{------------------------------------------------------------------------------} +{ Sequences: checking pmSeq items before it is displayed } +procedure TfrmTemplateEditor.pmSeqPopup(Sender: TObject); +begin + if rve.CurItemStyle<>rvsSequence then begin + Beep; + abort; + end; + SetNumberTypeToMenu(TRVSeqItemInfo(rve.GetCurrentItem).NumberType); + mitResetTo.Checked := TRVSeqItemInfo(rve.GetCurrentItem).Reset; + mitContinue.Checked := not mitResetTo.Checked; +end; +{------------------------------------------------------------------------------} +{ Sequences: changing StartFrom and Reset properties of the current sequence + item as an editing operation } +procedure TfrmTemplateEditor.ResetCurrentSeqTo(Value: Integer; Reset: Boolean); +var oldsi,si: TRVSeqItemInfo; + tle: TCustomRichViewEdit; +begin + if rve.CurItemStyle<>rvsSequence then begin + Beep; + exit; + end; + // creating a new item with the desired properties and inserting it + // instead the old item + oldsi := TRVSeqItemInfo(rve.GetCurrentItem); + si := TRVSeqItemInfo.Create(rve.RVData); + si.Assign(oldsi); + if Reset then + si.StartFrom := Value; + si.Reset := Reset; + tle := rve.TopLevelEditor; + tle.SetSelectionBounds(tle.CurItemNo, 0, tle.CurItemNo, 1); + rve.InsertItem('', si); +end; +{------------------------------------------------------------------------------} +{ Sequences: changing NumberType property of the current sequence + item as an editing operation } +procedure TfrmTemplateEditor.mitNumberTypeClick(Sender: TObject); +var oldsi,si: TRVSeqItemInfo; + tle: TCustomRichViewEdit; +begin + if rve.CurItemStyle<>rvsSequence then begin + Beep; + exit; + end; + // creating a new item with the desired properties and inserting it + // instead the old item + oldsi := TRVSeqItemInfo(rve.GetCurrentItem); + si := TRVSeqItemInfo.Create(rve.RVData); + si.Assign(oldsi); + si.NumberType := TRVSeqType(TMenuItem(Sender).Tag); + tle := rve.TopLevelEditor; + tle.SetSelectionBounds(tle.CurItemNo, 0, tle.CurItemNo, 1); + rve.InsertItem('', si); +end; +{------------------------------------------------------------------------------} +{ Sequences: Reset to... } +procedure TfrmTemplateEditor.mitResetToClick(Sender: TObject); +var s,s2: String; +begin + if rve.CurItemStyle<>rvsSequence then begin + Beep; + exit; + end; + s := IntToStr(TRVSeqItemInfo(rve.GetCurrentItem).StartFrom); + s2 := s; + if InputQuery('Reset','Reset &to:', s2) then begin + if s=s2 then + exit; + ResetCurrentSeqTo(StrToIntDef(s2, 1), True); + end; +end; +{------------------------------------------------------------------------------} +{ Sequences: Continue numbering } +procedure TfrmTemplateEditor.mitContinueClick(Sender: TObject); +begin + ResetCurrentSeqTo(1{<-ignored}, False); +end; +{------------------------------------------------------------------------------} +{ Fields: changing field code and text as an editing operation} +procedure TfrmTemplateEditor.ChangeFieldTo(const FieldCode, DisplayString: String); +var oldli, li: TRVLabelItemInfo; + tle: TCustomRichViewEdit; +begin + if rve.CurItemStyle<>rvsLabel then begin + Beep; + exit; + end; + // creating a new item with the desired properties and inserting it + // instead the old item + oldli := TRVLabelItemInfo(rve.GetCurrentItem); + li := TRVLabelItemInfo.Create(rve.RVData); + li.Assign(oldli); + li.Text := DisplayString; + // assign does not copy tag, + // so it's not necessary to call StrDispose(PChar(li.Tag)) + li.Tag := Integer(StrNew(PChar(FieldCode))); + tle := rve.TopLevelEditor; + tle.SetSelectionBounds(tle.CurItemNo, 0, tle.CurItemNo, 1); + rve.InsertItem('', li); +end; +{------------------------------------------------------------------------------} +{ Fields: changing the current field to "name" } +procedure TfrmTemplateEditor.mitToNameClick(Sender: TObject); +begin + ChangeFieldTo('name', ''); +end; +{------------------------------------------------------------------------------} +{ Fields: changing the current field to "code" } +procedure TfrmTemplateEditor.mitToCodeClick(Sender: TObject); +begin + ChangeFieldTo('code', ''); +end; +{------------------------------------------------------------------------------} +{ Fields: checking items in pmFields before it is displayed } +procedure TfrmTemplateEditor.pmFieldPopup(Sender: TObject); +begin + if rve.CurItemStyle<>rvsLabel then begin + Beep; + abort; + end; + mitToName.Checked := PChar(rve.GetCurrentTag)='name'; + mitToCode.Checked := PChar(rve.GetCurrentTag)='code'; +end; +{------------------------------------------------------------------------------} +{ Date field: displaying calendar popup } +procedure TfrmTemplateEditor.rveSmartPopupClick(Sender: TCustomRichView; + Button: TCustomControl); +var CalendarForm: TfrmPopup; + pt: TPoint; + FieldCode: String; + li: TRVLabelItemInfo; +begin + if rve.CurItemStyle<>rvsLabel then begin + Beep; + exit; + end; + li := TRVLabelItemInfo(rve.GetCurrentItem); + FieldCode := PChar(li.Tag); + if Copy(FieldCode, 1, 5)<>'date:' then begin + Beep; + exit; + end; + CalendarForm := TfrmPopup.Create(Application); + CalendarForm.cal.Date := StrToInt(Copy(FieldCode, 6, Length(FieldCode))); + pt.X := 0; + pt.Y := Button.Height; + pt := Button.ClientToScreen(pt); + if pt.X+CalendarForm.Width>Screen.Width then + pt.X := Screen.Width-CalendarForm.Width; + if pt.Y+CalendarForm.Height>Screen.Height then + pt.Y := Screen.Height-CalendarForm.Height; + CalendarForm.Left := pt.X; + CalendarForm.Top := pt.Y; + CalendarForm.Show; + rve.SmartPopupProperties.SetButtonState(True); +end; +{------------------------------------------------------------------------------} +{ Date field: this method is called by the calendar form } +procedure TfrmTemplateEditor.ChangeDate(Date: TDate); +begin + ChangeFieldTo('date:'+FloatToStr(Date), '<'+DateToStr(Date)+'>'); +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.bdsproj new file mode 100644 index 0000000..a915079 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + TemplateEditorLI.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.dpr new file mode 100644 index 0000000..91ceaba --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.dpr @@ -0,0 +1,14 @@ +program TemplateEditorLI; + +uses + Forms, + TEMainFrm in 'TEMainFrm.pas' {frmTemplateEditor}, + PopupFrm in 'PopupFrm.pas' {frmPopup}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmTemplateEditor, frmTemplateEditor); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.res b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.res new file mode 100644 index 0000000..08ba56e Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/template.rvf b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/template.rvf new file mode 100644 index 0000000..80930cc Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge-LabelItems/template.rvf differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/Customers.txt b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/Customers.txt new file mode 100644 index 0000000..a264d2f --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/Customers.txt @@ -0,0 +1,37 @@ +18 +cid0001 +Roberto Nelson +cid0002 +Bruce Young +cid0003 +Kim Lambert +cid0004 +Leslie Johnson +cid0005 +Phil Forest +cid0006 +K.J. Weston +cid0007 +Lee Terry +cid0008 +Stewart Hall +cid0009 +Katherine Young +cid0010 +Chris Papadopulos +cid0011 +Pete Fisher +cid0012 +Ann Bennet +cid0013 +Roger De Sousa +cid0014 +Janet Boldwin +cid0015 +Roger Reeves +cid0016 +Willie Stansbury +cid0017 +Leslie Phong +cid0018 +Ashok Ramanathan \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MMMainFrm.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MMMainFrm.dfm new file mode 100644 index 0000000..2346f86 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MMMainFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MMMainFrm.pas b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MMMainFrm.pas new file mode 100644 index 0000000..134de55 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MMMainFrm.pas @@ -0,0 +1,174 @@ +unit MMMainFrm; +{------------------------------------------------------------------------------} +{ + Very simple "mail merging" application. + It loads a template from TEMPLATE.RVF, and data from CUSTOMERS.TXT. + Template can be modified with another application in this directory: + TEMPLATEEDITOR. + + Main settings: + - since field names are stored in tags (see the help topic about tags) + as strings, rvoTagsArePChars is included in Options of rvTemplate and + rvOutput. + - this demo uses a predefined set of styles (right click richviews, + choose "Settings" from the context menu, choose "Use a predefined + set of styles"). That means - only two text styles (see below) will be used. + - rvOutput.Style = rvsOutput, rvTemplate.Style = rvsTemplate. + - rvsTemplate has absolutely the same set of TextStyles as in template editor + (0th style - normal text, 1th - field code) + - rvsOutput has a similar set of styles, but 1th text style looks like + normal text. +} +{------------------------------------------------------------------------------} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, StdCtrls, RVStyle, RVTable, CRVData; + +type + TForm1 = class(TForm) + ListBox1: TListBox; + rvOutput: TRichView; + rvsOutput: TRVStyle; + rvsTemplate: TRVStyle; + rvTemplate: TRichView; + Label1: TLabel; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + procedure ListBox1Click(Sender: TObject); + procedure FormDestroy(Sender: TObject); + private + { Private declarations } + Codes: TStringList; + procedure LoadCustomers; + function GetFieldValueFromDatabase(const FieldName: String): String; + procedure FillFields(RVData: TCustomRVData); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +{ TForm1 } + +{------------------------------------------------------------------------------} +{ + This procedure loads file CUSTOMERS.TXT into: + - ListBox1.Items (<- names of customers) + - Codes (<- codes of customers) + + In real applications data can be stored in some database +} +procedure TForm1.LoadCustomers; +var F: TextFile; + i, Count: Integer; + s: String; +begin + AssignFile(F, ExtractFilePath(Application.ExeName)+'Customers.txt'); + Reset(F); + try + Readln(F, Count); + for i := 0 to Count-1 do + begin + Readln(F, s); + Codes.Add(s); + Readln(F, s); + ListBox1.Items.Add(Trim(s)) + end; + finally + CloseFile(F); + end; +end; +{------------------------------------------------------------------------------} +{ + Initialization: loading template into rvOutput, loading customers data. +} +procedure TForm1.FormCreate(Sender: TObject); +begin + Codes := TStringList.Create; + LoadCustomers; + rvTemplate.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + rvTemplate.Format; + if ListBox1.Items.Count>0 then + begin + ListBox1.ItemIndex := 0; + ListBox1.OnClick(nil); + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FormDestroy(Sender: TObject); +begin + Codes.Free; + Codes := nil; +end; +{------------------------------------------------------------------------------} +{ + This function returns a current field value by the field name. + In this example, we have two fields: "name" and "code" +} +function TForm1.GetFieldValueFromDatabase(const FieldName: String): String; +var Index: Integer; +begin + Index := ListBox1.ItemIndex; + if FieldName='name' then + Result := ListBox1.Items[Index] + else if FieldName='code' then + Result := Codes[Index] + else + Result := '{error: illegal field code}'; +end; +{------------------------------------------------------------------------------} +{ + This function iterates through all items in RVData, and if tag of + some text contains non-empty text, it calls GetFieldValueFromDatabase(tag) and + replace this text with returned value. + You can move this function to your application unchanged. + Initial call: FillFields(RichView.RVData); +} +procedure TForm1.FillFields(RVData: TCustomRVData); +var i,r,c: Integer; + table: TRVTableItemInfo; + FieldName: String; +begin + for i := 0 to RVData.ItemCount-1 do + if RVData.GetItemStyle(i)=rvsTable then + begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + FillFields(table.Cells[r,c].GetRVData); + table.Changed; + end + else if RVData.GetItemStyle(i)>=0 then + begin + FieldName := PChar(RVData.GetItemTag(i)); + if FieldName<>'' then + RVData.SetItemText(i, GetFieldValueFromDatabase(FieldName)); + end; +end; +{------------------------------------------------------------------------------} +{ + On highlighting a new list box item: updating document in rvOutput. +} +procedure TForm1.ListBox1Click(Sender: TObject); +begin + rvOutput.Clear; + if ListBox1.ItemIndex>=0 then + begin + rvOutput.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + FillFields(rvOutput.RVData); + rvOutput.Format; + end; +end; + + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MailMerge.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MailMerge.bdsproj new file mode 100644 index 0000000..2941cd9 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MailMerge.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + MailMerge.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MailMerge.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MailMerge.dpr new file mode 100644 index 0000000..6a2b062 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MailMerge.dpr @@ -0,0 +1,13 @@ +program MailMerge; + +uses + Forms, + MMMainFrm in 'MMMainFrm.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MailMerge.res b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MailMerge.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/MailMerge.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TEMainFrm.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TEMainFrm.dfm new file mode 100644 index 0000000..717f589 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TEMainFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TEMainFrm.pas b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TEMainFrm.pas new file mode 100644 index 0000000..e29fa67 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TEMainFrm.pas @@ -0,0 +1,90 @@ +unit TEMainFrm; + +{------------------------------------------------------------------------------} +{ + Very simple template editor for "mail merging" + It loads and saves a template in TEMPLATE.RVF. + + See mail merging application in the same directory - MAILMERGE. + + Main settings: + - since field names are stored in tags (see the help topic about tags) + as strings, rvoTagsArePChars is included in Options of rve. + - this demo uses a predefined set of styles (right click richviews, + choose "Settings" from the context menu, choose "Use a predefined + set of styles"). That means - only two text styles (see below) will be used. + - rve.Style has two styles: + 0th style - normal text, + 1st - field code (bold, with background, protected) +} +{------------------------------------------------------------------------------} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, StdCtrls, ExtCtrls; + +type + TForm1 = class(TForm) + Panel1: TPanel; + Button1: TButton; + Button2: TButton; + rve: TRichViewEdit; + RVStyle1: TRVStyle; + Button4: TButton; + procedure Button4Click(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + rve.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + rve.Format; +end; + +procedure TForm1.Button4Click(Sender: TObject); +begin + rve.SaveRVF(ExtractFilePath(Application.ExeName)+'template.rvf', False); +end; + +{------------------------------------------------------------------------------} +{ + Inserting a field "code". Text of this item does not matter, but tag + is important and equal to "code". + Since rvprDoNotAutoSwitch is in Protection of the 1st text style, + a current style will be switched back to previous value after insertion. +} +{------------------------------------------------------------------------------} +procedure TForm1.Button1Click(Sender: TObject); +begin + rve.CurTextStyleNo := 1; + rve.InsertStringTag('Code', Integer(StrNew('code'))); + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +{ + Inserting a field "name". +} +{------------------------------------------------------------------------------} +procedure TForm1.Button2Click(Sender: TObject); +begin + rve.CurTextStyleNo := 1; + rve.InsertStringTag('Name', Integer(StrNew('name'))); + rve.SetFocus; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TemplateEditor.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TemplateEditor.bdsproj new file mode 100644 index 0000000..cdd4ce6 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TemplateEditor.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + TemplateEditor.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TemplateEditor.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TemplateEditor.dpr new file mode 100644 index 0000000..0f7f9fe --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TemplateEditor.dpr @@ -0,0 +1,13 @@ +program TemplateEditor; + +uses + Forms, + TEMainFrm in 'TEMainFrm.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TemplateEditor.res b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TemplateEditor.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/TemplateEditor.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/template.rvf b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/template.rvf new file mode 100644 index 0000000..ebffcc6 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge/template.rvf @@ -0,0 +1,9 @@ +-8 1 2 +0 1 0 0 0 0 +This is +1 1 -1 1 0 name +Name +0 1 0 4 0 0 +and code is +1 1 -1 1 0 code +Code diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/Database.MB b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/Database.MB new file mode 100644 index 0000000..ddd9eb0 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/Database.MB differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/Database.PX b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/Database.PX new file mode 100644 index 0000000..8d310e2 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/Database.PX differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/Database.db b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/Database.db new file mode 100644 index 0000000..0f0c88f Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/Database.db differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainAppFrm.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainAppFrm.dfm new file mode 100644 index 0000000..9917261 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainAppFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainAppFrm.pas b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainAppFrm.pas new file mode 100644 index 0000000..bb188d4 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainAppFrm.pas @@ -0,0 +1,146 @@ +{==============================================================================} +{ + Mail merge application: part 2 - displaying processed template. + + How it works: + - RVStyle2 has two predefined styles (the same as in the template editor; + 1th text style is reserved for fields). + - RichView1 and RichView2 are linked to the same RVStyle (RVStyle2) + - Template is loaded in RichView1 (styles can be added dynamically in RVStyle2) + - RichView1 is scanned for fields. When field is found, it is deleted, + and its value is inserted in its place: + * field value is loaded in invisible RichView2 (styles can be added in RVStyle2) + * contents of RichView2 is inserted in the proper place of RichView1. +} +{==============================================================================} + +unit MainAppFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, RVStyle, DB, DBTables, CRVData, CRVFData, + RVItem, RVTable; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RichView2: TRichView; + Table1: TTable; + RVStyle2: TRVStyle; + procedure FormCreate(Sender: TObject); + private + procedure ReplaceFields(RVData: TCustomRVFormattedData); + { Private declarations } + public + { Public declarations } + function LoadData(const Code: String): TMemoryStream; + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // Loading template with fields + RichView1.LoadRVF(ExtractFilePath(Application.ExeName)+'Template.rvf'); + // RVData.InsertFromStream (we will call it later) does not support + // style merging. So changing mode to style ignoring: + RichView1.RVFParaStylesReadMode := rvf_sIgnore; + RichView1.RVFTextStylesReadMode := rvf_sIgnore; + // Replace styles with values + ReplaceFields(RichView1.RVData); + RichView1.Format; +end; + +procedure TForm1.ReplaceFields(RVData: TCustomRVFormattedData); +var i,j: Integer; + Stream: TMemoryStream; + Dummy1: TColor; + Dummy2, Dummy3: Pointer; + ParaNo: Integer; + BR, ContinuePara: Boolean; + table: TRVTableItemInfo; + r,c: Integer; +begin + Dummy1 := clNone; + Dummy2 := nil; + Dummy3 := nil; + i := RVData.ItemCount-1; + while i>=0 do begin + case RVData.GetItemStyle(i) of + 1: // the first text style is used for fields + begin + // storing parameters of deleted items + ParaNo := RVData.GetItemPara(i); + BR := RVData.GetItem(i).BR; + ContinuePara := RVData.GetItem(i).SameAsPrev; + // loading field value in the stream + Stream := LoadData(RVData.GetItemText(i)); + if Stream<>nil then begin + // deleting the field code + RVData.DeleteItems(i,1); + // inserting the field value + RVData.InsertRVFFromStream(Stream, i, Dummy1, Dummy2, Dummy3, False); + // applying stored parameters to the inserted items + if (i>0) and (RVData.GetItemStyle(i-1)=rvsListMarker) and + (RVData.GetItemStyle(i)=rvsListMarker) then + RVData.DeleteItems(i, 1); + for j := i to RVData.ItemCount-1 do begin + if (i=j) then begin + if RVData.GetItem(j).GetBoolValue(rvbpFullWidth) then begin + if (i>0) and (RVData.GetItemStyle(i-1)=rvsListMarker) then begin + dec(i); + RVData.DeleteItems(i, 1); + end; + break; + end; + RVData.GetItem(j).SameAsPrev := ContinuePara; + if BR then + RVData.GetItem(j).BR := True; + end; + if (j>i) and RVData.IsParaStart(j) then + break; + RVData.GetItem(j).ParaNo := ParaNo; + end; + Stream.Free; + end; + end; + rvsTable: + begin + // recursive call for table cells + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + ReplaceFields(table.Cells[r,c]); + end; + end; + dec(i); + end; + RVData.Normalize; +end; + +// Loading field code +function TForm1.LoadData(const Code: String): TMemoryStream; +begin + Result := nil; + if not Table1.Locate('Code', Code, []) then + exit; + Result := TMemoryStream.Create; + TBlobField(Table1.FieldByName('Data')).SaveToStream(Result); + Result.Position := 0; + RichView2.Clear; + RichView2.InsertRVFFromStream(Result, 0); // inserting will merge styles; + // RichView1 and RichView2 have the same collections of styles + Result.Clear; + RichView2.SaveRVFToStream(Result, False); + Result.Position := 0; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainApplication.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainApplication.bdsproj new file mode 100644 index 0000000..467aa52 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainApplication.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + MainApplication.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainApplication.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainApplication.dpr new file mode 100644 index 0000000..c547aed --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainApplication.dpr @@ -0,0 +1,13 @@ +program MainApplication; + +uses + Forms, + MainAppFrm in 'MainAppFrm.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainApplication.res b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainApplication.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/MainApplication.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TEFrm.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TEFrm.dfm new file mode 100644 index 0000000..e270136 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TEFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TEFrm.pas b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TEFrm.pas new file mode 100644 index 0000000..b38b34c --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TEFrm.pas @@ -0,0 +1,101 @@ +{==============================================================================} +{ + Mail merge application: part 1 - template editor. + Editing template and data for fields. + + Template: RVStyle for template (RVStyle2) has two text styles + (0-th for normal text, 1 - for fields (with special Protection options) + Other styles can be added dynamically (right-click editor in Delphi, + "Settings" in the context menu). + Template is stored in Template.rvf. + + Data for fields: stored in Database.db. + There are two fields: + - Code - string field + - Data - rvf field. + Styles can be added dynamically in Data editor. +} +{==============================================================================} +unit TEFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, DB, DBTables, RVScroll, RichView, RVEdit, DBRV, ComCtrls, + StdCtrls, Mask, DBCtrls, RVStyle, ExtCtrls; + +type + TfrmTE = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + DBRichViewEdit1: TDBRichViewEdit; + DataSource1: TDataSource; + Table1: TTable; + DBNavigator1: TDBNavigator; + RVStyle1: TRVStyle; + DBEdit1: TDBEdit; + Label1: TLabel; + Label2: TLabel; + OpenDialog1: TOpenDialog; + RVStyle2: TRVStyle; + RichViewEdit1: TRichViewEdit; + Button1: TButton; + Label3: TLabel; + procedure DataSource1DataChange(Sender: TObject; Field: TField); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure Button1Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmTE: TfrmTE; + +implementation + +{$R *.dfm} + +procedure TfrmTE.DataSource1DataChange(Sender: TObject; Field: TField); +begin + if Table1.RecordCount=0 then + Label2.Caption := '(empty)' + else if Table1.RecNo<1 then + Label2.Caption := '(new)' + else + Label2.Caption := Format('Record %d of %d', [Table1.RecNo, Table1.RecordCount]); +end; + +procedure TfrmTE.FormCreate(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit1.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + RichViewEdit1.Format; +end; + +procedure TfrmTE.FormClose(Sender: TObject; var Action: TCloseAction); +begin + if Table1.State in [dsEdit, dsInsert] then + Table1.Post; + RichViewEdit1.SaveRVF(ExtractFilePath(Application.ExeName)+'template.rvf', False); +end; + +procedure TfrmTE.Button1Click(Sender: TObject); +var s: String; +begin + s := ''; + if InputQuery('Insert Field', 'Field code:', s) then begin + if s='' then + exit; + // s must be equal to one of Codes in the database + RichViewEdit1.SetFocus; + RichViewEdit1.CurTextStyleNo := 1; + RichViewEdit1.InsertText(s, False); + end; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TemplateEditor2.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TemplateEditor2.bdsproj new file mode 100644 index 0000000..33c88fd --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TemplateEditor2.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + TemplateEditor2.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TemplateEditor2.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TemplateEditor2.dpr new file mode 100644 index 0000000..1c4e040 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TemplateEditor2.dpr @@ -0,0 +1,13 @@ +program TemplateEditor2; + +uses + Forms, + TEFrm in 'TEFrm.pas' {frmTE}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmTE, frmTE); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TemplateEditor2.res b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TemplateEditor2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/TemplateEditor2.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/template.rvf b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/template.rvf new file mode 100644 index 0000000..bd7d96e Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/MailMerge2/template.rvf differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Spreadsheet.bdsproj b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Spreadsheet.bdsproj new file mode 100644 index 0000000..25a1ef9 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Spreadsheet.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Spreadsheet.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Spreadsheet.dpr b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Spreadsheet.dpr new file mode 100644 index 0000000..f9755b9 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Spreadsheet.dpr @@ -0,0 +1,13 @@ +program Spreadsheet; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Spreadsheet.res b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Spreadsheet.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Spreadsheet.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Unit1.dfm new file mode 100644 index 0000000..6fdd15c Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Unit1.pas new file mode 100644 index 0000000..12981df --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Fields/Spreadsheet/Unit1.pas @@ -0,0 +1,229 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, RVEdit, RVStyle, ExtCtrls, RVTable, StdCtrls, Clipbrd; + +{------------------------------------------------------------------------------} +{ + Notes: + 1. Making sure that all cells contain one item (and only one) + - adding rvpaoDoNotWantReturns in Options of all paragraph styles + - allowing to paste only one line of plain text (see OnPaste) + 2. Protecting autocalculated text + - the 1st paragraph style ("Read-Only") has rvpaoReadOnly + - RichView allows to delete read-only paragraphs when they are parts + of lager selection (for example, multicell selection) + An event, allowing to avoid this problem, was added in version 1.6.11 + (OnCellEditing) + 3. Table cannot be deleted because it is added in read-only paragraph. + 4. EConvertError exception occurs if Income column contains non numeric data. + If running in Delphi IDE, Delphi stops on exception. Just click OK and + press F9 to continue. + 5. AcceptDragDropFormats is set to [] +} +{------------------------------------------------------------------------------} + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + rve: TRichViewEdit; + Panel1: TPanel; + Button1: TButton; + Button2: TButton; + procedure FormCreate(Sender: TObject); + procedure rveChange(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure rvePaste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); + private + { Private declarations } + procedure Calculate; + procedure OnCellEditing(Sender: TRVTableItemInfo; + Row, Col : Integer; + Automatic: Boolean; + var AllowEdit: Boolean); + public + { Public declarations } + table: TRVTableItemInfo; + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var r,c: Integer; +begin + table := TRVTableItemInfo.CreateEx(5,4, rve.RVData); + table.BorderWidth := 1; + table.CellBorderWidth := 1; + table.CellBorderStyle := rvtbColor; + table.CellBorderColor := clBtnFace; + table.BorderStyle := rvtbColor; + + table.OnCellEditing := OnCellEditing; + + // Each cell initially contains one empty text item. Deleting it + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + table.Cells[r,c].Clear; + + // First Row + table.Cells[0,0].AddNL('Name',1,1); + table.Cells[0,1].AddNL('Income',1,1); + table.Cells[0,2].AddNL('Tax Rate',1,1); + table.Cells[0,3].AddNL('Tax',1,1); + + // Last Row + r := table.Rows.Count-1; + table.Cells[r,0].AddNL('TOTAL:',1,1); + table.Cells[r,1].AddNL('',1,1); + table.Cells[r,2].AddNL('',1,1); + table.Cells[r,3].AddNL('',1,1); + + // First Column + table.Cells[1,0].AddNL('John Smith', 0,0); + table.Cells[2,0].AddNL('John Brown', 0,0); + table.Cells[3,0].AddNL('Phil Forest', 0,0); + + // Second Column + table.Cells[1,1].AddNL('2000', 0,0); + table.Cells[2,1].AddNL('2500', 0,0); + table.Cells[3,1].AddNL('1000', 0,0); + + for r := 1 to table.Rows.Count-2 do begin + table.Cells[r,2].Color := clSilver; + table.Cells[r,3].Color := clSilver; + table.Cells[r,2].AddNL('0.20',0,1); + table.Cells[r,3].AddNL('',0,1); + end; + + for c := 0 to table.Rows[0].Count-1 do begin + table.Cells[0,c].Color := clSilver; + table.Cells[table.Rows.Count-1,c].Color := clSilver; + end; + + DecimalSeparator := '.'; + + Calculate; + + rve.InsertItem('Spreadsheet', table); + rve.ApplyParaStyle(1); // read-only style; + +end; + + +procedure TForm1.Calculate; +var r: Integer; + s: String; + total, totaltax, val, valtax: Double; + totalOK: Boolean; +begin + // Last Column + totalOK := True; + total := 0.0; + totaltax := 0.0; + for r := 1 to table.Rows.Count-2 do begin + try + // val <- income + val := StrToFloat(table.Cells[r,1].GetRVData.GetItemText(0)); + // valtax <- income * tax rate + valtax := val*StrToFloat(table.Cells[r,2].GetRVData.GetItemText(0)); + s := FloatToStr(valtax); + total := total + val; + totaltax := totaltax + valtax; + except + s := '?'; + totalOK := False; + end; + table.Cells[r,3].GetRVData.SetItemText(0,s); + end; + + if totalOK then begin + table.Cells[table.Rows.Count-1,3].GetRVData.SetItemText(0, FloatToStr(totaltax)); + table.Cells[table.Rows.Count-1,1].GetRVData.SetItemText(0, FloatToStr(total)); + end + else begin + table.Cells[table.Rows.Count-1,3].GetRVData.SetItemText(0, '?'); + table.Cells[table.Rows.Count-1,1].GetRVData.SetItemText(0, '?'); + end; + table.Changed; +end; + +// OnChange: recalculating +procedure TForm1.rveChange(Sender: TObject); +begin + Calculate; + rve.Reformat; + if rve.InplaceEditor<>nil then + rve.InplaceEditor.Invalidate; + // Some ideas: + // - you can use table.GetEditedCell to get a cell which was changed +end; + +// Adding a new row +procedure TForm1.Button1Click(Sender: TObject); +var ItemNo, Data, r,c: Integer; +begin + ItemNo := rve.GetItemNo(table); + rve.BeginItemModify(ItemNo, Data); + r := table.Rows.Count-1; + table.InsertRows(r, 1, -1); + + for c := 1 to table.Rows[r].Count-1 do + table.Cells[r,c].Clear; + + table.Cells[r,1].AddNL('0', 0,0); + table.Cells[r,2].AddNL('0.20', 0,1); + table.Cells[r,3].AddNL('', 0,1); + table.Cells[r,2].Color := clSilver; + table.Cells[r,3].Color := clSilver; + + rve.EndItemModify(ItemNo, Data); + rve.Change; +end; + +// Deleting a row with caret +procedure TForm1.Button2Click(Sender: TObject); +var ItemNo, Data, r,c: Integer; +begin + if (table.GetEditedCell(r,c)<>nil) and (r<>0) and (r<>table.Rows.Count-1) then begin + ItemNo := rve.GetItemNo(table); + rve.BeginItemModify(ItemNo, Data); + table.DeleteRows(r,1,False); + rve.EndItemModify(ItemNo, Data); + rve.Change; + end + else + Beep; +end; + +// OnPaste: allowing to paste only one line of text +procedure TForm1.rvePaste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); +var s: String; +begin + if Clipboard.HasFormat(CF_TEXT) then begin + s := Clipboard.AsText; + if (Pos(#13,s)=0) and (Pos(#10,s)=0) then + rve.InsertText(s, False); + end; + DoDefault := False; +end; + +procedure TForm1.OnCellEditing(Sender: TRVTableItemInfo; Row, Col: Integer; + Automatic: Boolean; var AllowEdit: Boolean); +begin + if Automatic then + AllowEdit := (Row<>0) and (Row<>table.Rows.Count-1) and (Col<2); +end; + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/DragImg.bdsproj b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/DragImg.bdsproj new file mode 100644 index 0000000..4b9c428 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/DragImg.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + DragImg.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/DragImg.dpr b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/DragImg.dpr new file mode 100644 index 0000000..c4feced --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/DragImg.dpr @@ -0,0 +1,13 @@ +program DragImg; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/DragImg.res b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/DragImg.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/DragImg.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/Unit1.dfm new file mode 100644 index 0000000..5014900 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/Unit1.pas new file mode 100644 index 0000000..a9cfd80 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/DragImg/Unit1.pas @@ -0,0 +1,113 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, ExtCtrls, RVStyle, RVScroll, RichView, RVEdit, CRVFData, RVTable; + +const WM_SETCARETPOS = WM_USER+10; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Image1: TImage; + Image2: TImage; + Image3: TImage; + procedure RichViewEdit1DragOver(Sender, Source: TObject; X, Y: Integer; + State: TDragState; var Accept: Boolean); + procedure RichViewEdit1DragDrop(Sender, Source: TObject; X, + Y: Integer); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + procedure WMSetCaretPos(var Msg: TMessage); message WM_SETCARETPOS; + public + { Public declarations } + procedure MoveCaretTo(X,Y: Integer); + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.RichViewEdit1DragOver(Sender, Source: TObject; X, + Y: Integer; State: TDragState; var Accept: Boolean); +begin + Accept := Source is TImage; + // We cannot create/destroy inplace editors for cells just + // in OnDragOver, so we position caret in OnWMSetCaretPos + if Accept then + PostMessage(Handle, WM_SETCARETPOS, X,Y); +end; + +procedure TForm1.WMSetCaretPos(var Msg: TMessage); +begin + MoveCaretTo(Msg.WParam, Msg.LParam); +end; + +procedure TForm1.MoveCaretTo(X, Y: Integer); +var RVData: TCustomRVFormattedData; + ItemNo, Offs: Integer; +begin + inc(X, RichViewEdit1.HScrollPos); + inc(Y, RichViewEdit1.VScrollPos*RichViewEdit1.VSmallStep); + RichViewEdit1.GetItemAt(X,Y,RVData,ItemNo,Offs, False); + RVData := RVData.Edit as TCustomRVFormattedData; + if ItemNo<0 then + exit; + RVData.SetSelectionBounds(ItemNo, Offs, ItemNo, Offs); + RVData.Invalidate; +end; + +procedure TForm1.RichViewEdit1DragDrop(Sender, Source: TObject; X, + Y: Integer); +var bmp: TBitmap; +begin + // Dragging is finished. Inserting picture. + MoveCaretTo(X, Y); + bmp := TBitmap.Create; + bmp.Assign(TImage(Source).Picture.Bitmap); + RichViewEdit1.InsertPicture('', bmp, rvvaBaseLine); +end; + +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; + table: TRVTableItemInfo; +begin + RichViewEdit1.Clear; + RichViewEdit1.AddNL( + 'This demo shows dragging TImage to TRichViewEdit using VCL drag&drop procedures.', + 2,0); + RichViewEdit1.AddNL( + 'TRichViewEdit has its own drag&drop implementation: '+ + 'you can drag inside TRichViewEdit, '+ + 'from TRichViewEdit to another window/application, '+ + 'from another window/application to TRichViewEdit.', + 2,0); + for i := 0 to 5 do + RichViewEdit1.AddNL( + 'Drag images from the right and drop them here',0,0); + + table := TRVTableItemInfo.CreateEx(1,2, RichViewEdit1.RVData); + table.CellBorderWidth := 1; + table.BorderWidth := 1; + table.Cells[0,0].Clear; + table.Cells[0,0].AddNL('Drag images from the right and drop them here', + 0,0); + table.Cells[0,1].Clear; + table.Cells[0,1].AddNL('Drag images from the right and drop them here', + 0,0); + RichViewEdit1.AddItem('', table); + + for i := 0 to 50 do + RichViewEdit1.AddNL('Drag images from the right and drop them here', + 0,0); + RichViewEdit1.Format; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Emoticons.bdsproj b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Emoticons.bdsproj new file mode 100644 index 0000000..ccba592 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Emoticons.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Emoticons.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Emoticons.dpr b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Emoticons.dpr new file mode 100644 index 0000000..f714934 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Emoticons.dpr @@ -0,0 +1,13 @@ +program Emoticons; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Emoticons.res b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Emoticons.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Emoticons.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Unit1.dfm new file mode 100644 index 0000000..d44774e Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Unit1.pas new file mode 100644 index 0000000..9e19f1b --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/Emoticons/Unit1.pas @@ -0,0 +1,282 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, ImgList, + RVStyle, RVScroll, RichView, RVEdit, ComCtrls, StdCtrls, RVTypes; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + TabSheet3: TTabSheet; + rve1: TRichViewEdit; + RVStyle1: TRVStyle; + Button1: TButton; + Edit1: TEdit; + Button2: TButton; + rv2: TRichView; + rv3: TRichView; + rve4: TRichViewEdit; + Button3: TButton; + Label1: TLabel; + TabSheet4: TTabSheet; + rv5: TRichView; + rve6: TRichViewEdit; + Label2: TLabel; + Button4: TButton; + ImageList1: TImageList; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure rve6KeyPress(Sender: TObject; var Key: Char); + procedure rve6KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rv5RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + private + { Private declarations } + procedure AddWithIcons(rv: TCustomRichView; s: String; StyleNo: Integer; var ParaNo: Integer); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + rve1.Clear; + rve1.AddNL('John: ', 3, 0); + rve1.Add('Funny, very funny :)', 0); + rve1.AddNL('Rob: ', 3, 0); + rve1.Add('I do not think so :(...', 0); + rve1.Format; + + rve4.Clear; + rve4.AddNL('La la la:):):):)', 1, 0); + rve4.Add('La la la:):):):)', 2); + rve4.Add('La la la:):):):)', 0); + rve4.Format; +end; + + +{------------------------------------------------------------------------------} +// Using Search feature of RichViewEdit to insert emotion icons + +procedure TForm1.Button1Click(Sender: TObject); + + procedure SearchAndInsertIcon(const Code: String; ImageIndex: Integer); + begin + rve1.SetSelectionBounds(0, rve1.GetOffsBeforeItem(0), 0, rve1.GetOffsBeforeItem(0)); + while rve1.SearchText(Code, [rvseoDown]) do + rve1.InsertBullet(ImageIndex, ImageList1); + end; + +begin + LockWindowUpdate(rve1.Handle); + try + SearchAndInsertIcon(':)', 0); + SearchAndInsertIcon(':|', 1); + SearchAndInsertIcon(':(', 2); + finally + LockWindowUpdate(0); + end; +end; + +{------------------------------------------------------------------------------} +function GetImageIndex(mouth: Char): Integer; +begin + case mouth of + ')': Result := 0; + '|': Result := 1; + else Result := 2; + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.AddWithIcons(rv: TCustomRichView; s: String; StyleNo: Integer; var ParaNo: Integer); +var s2: String; + p: Integer; +begin + s2 := ''; + while s<>'' do + begin + p := Pos(':', s); // searching for "eyes" + if p=0 then + begin + // not found + rv.AddNL(s2+s, StyleNo, ParaNo); + ParaNo := -1; + exit; + end; + // is it really "eyes"? + if (Length(s)>p) and (s[p+1] in [')','|','(']) then + begin + // a smile is found + s2 := s2+Copy(s, 1, p-1); + if s2<>'' then + begin + rv.AddNL(s2, StyleNo, ParaNo); + s2 := ''; + ParaNo := -1; + end; + rv.AddBulletEx( '', GetImageIndex(s[p+1]), ImageList1, ParaNo); + ParaNo := -1; + s := Copy(s, p+2, Length(s)); + end + else + begin + // this is not a smile + s2 := Copy(s, 1, p); + s := Copy(s, p+1, Length(s)); + end; + end; + + if s2<>'' then + begin + rv.AddNL(s2, StyleNo, ParaNo); + s2 := ''; + ParaNo := -1; + end; +end; +{------------------------------------------------------------------------------} +// From TEdit +procedure TForm1.Button2Click(Sender: TObject); +var ParaNo: Integer; +begin + if Edit1.Text<>'' then + begin + rv2.AddNL('Me: ',3,0); + ParaNo := -1; // adding to the same line + AddWithIcons(rv2, Edit1.Text, 0, ParaNo); + rv2.FormatTail; + Edit1.Text := ''; + end + else + Beep; +end; +{------------------------------------------------------------------------------} +// From TRichViewEdit with emoticons detection +procedure TForm1.Button3Click(Sender: TObject); +var i: Integer; + ParaNo: Integer; +begin + // this example has the following limitations: + // - non-text will be ignored + // - assumes that styles of rv3 and rve4 are the same + ParaNo := 0; + for i := 0 to rve4.ItemCount-1 do + begin + if rve4.IsFromNewLine(i) then + ParaNo := rve4.GetItemPara(i); + if rve4.GetItemStyle(i)>=0 then + AddWithIcons(rv3, rve4.GetItemText(i), rve4.GetItemStyle(i), ParaNo); + end; + rv3.FormatTail; + rve4.SetFocus; +end; +{------------------------------------------------------------------------------} +// From TRichViewEdit as is +procedure TForm1.Button4Click(Sender: TObject); +var Stream: TMemoryStream; +begin + Stream := TMemoryStream.Create; + rve6.SaveRVFToStream(Stream, False); + Stream.Position := 0; + rv5.InsertRVFFromStream(Stream, rv5.ItemCount); + Stream.Free; + rv5.FormatTail; + rve6.SetFocus; +end; +{------------------------------------------------------------------------------} +// Emoticons autodetection on typing +procedure TForm1.rve6KeyPress(Sender: TObject; var Key: Char); +var + rve: TCustomRichViewEdit; + ItemNo, Offs: Integer; + s: String; + + function GetImageIndex(mouth: Char): Integer; + begin + case mouth of + ')': Result := 0; + '|': Result := 1; + else Result := 2; + end; + end; + +begin + if not (Key in [')', '(', '|']) then + exit; + rve := (Sender as TCustomRichViewEdit).TopLevelEditor; + ItemNo := rve.CurItemNo; + if rve.GetItemStyle(ItemNo)<0 then + exit; + Offs := rve.OffsetInCurItem; + s := rve.GetItemText(ItemNo); + if (s='') or (Offs=1) then + exit; + if s[Offs-1]=':' then begin + rve.SetSelectionBounds(ItemNo, Offs-1, ItemNo, Offs); + rve.InsertBullet(GetImageIndex(Key), ImageList1); + Key := #0; + end; +end; +{------------------------------------------------------------------------------} +// BACKSPACE disassembles emoticon +procedure TForm1.rve6KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +var + rve: TCustomRichViewEdit; + ItemNo, Offs: Integer; + + function GetBulletImageIndex: Integer; + var s: TRVAnsiString; + tag: Integer; + il: TCustomImageList; + begin + rve.GetBulletInfo(ItemNo, s, Result, il, tag); + end; + + function GetSmile(ImageIndex: Integer): String; + begin + case ImageIndex of + 0: Result := ':)'; + 1: Result := ':|'; + else Result := ':('; + end; + end; + +begin + if Key<>VK_BACK then + exit; + rve := (Sender as TCustomRichViewEdit).TopLevelEditor; + if rve.SelectionExists then + exit; + ItemNo := rve.CurItemNo; + Offs := rve.OffsetInCurItem; + if (rve.GetItemStyle(ItemNo)=rvsBullet) and (Offs=1) then begin + Key := 0; + rve.SetSelectionBounds(ItemNo, 0, ItemNo, 1); + rve.InsertText(GetSmile(GetBulletImageIndex), False); + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.rv5RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + il := ImageList1; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/SharedImages.bdsproj b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/SharedImages.bdsproj new file mode 100644 index 0000000..96b5b03 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/SharedImages.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + SharedImages.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/SharedImages.dpr b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/SharedImages.dpr new file mode 100644 index 0000000..4f9ee8a --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/SharedImages.dpr @@ -0,0 +1,13 @@ +program SharedImages; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/SharedImages.res b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/SharedImages.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/SharedImages.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/Unit1.dfm new file mode 100644 index 0000000..633a29d Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/Unit1.pas new file mode 100644 index 0000000..e5217a2 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/Unit1.pas @@ -0,0 +1,322 @@ +{------------------------------------------------------------------------------- + Working with RVF and RTF files containing shared images. + This demo stores them in the special subdirectory, but you can store them + in a database, etc. + How to save pictures as references in RVF: + rvfoSavePicturesBody is EXCLUDED from RichViewEdit1.RVFOptions. + How to save pictures as references in RTF: + see RichViewEdit1SaveItemToFile. + How to load pictures when reading such RVF files: + see RichViewEdit1RVFPictureNeeded. + How to load pictures when reading such RTF files: + see RichViewEdit1ImportPicture. + + Paths to image file names are stored in rvespImageFileName properties. + Normally, full paths to images are stored there. + In this demo, path is stored relative to the application directory. + Saved RTF and HTML files will be opened normally in other applications + only if they are stored in the application directory. +-------------------------------------------------------------------------------} +{ This is the second version of this demo. + Changes: + - RTF support; + - HTML saving; + - storing file names in rvespImageFileName property instead of item names; + - storing paths relative to the application path instead of storing just + file names (allows external applications to open RTF and HTML files + correctly, if they are saved in the application path) +-------------------------------------------------------------------------------} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, RVFuncs, StdCtrls, + CRVData, RVTable, RVItem, RVTypes; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Button1: TButton; + OpenDialog1: TOpenDialog; + Button2: TButton; + Button3: TButton; + OpenDialog2: TOpenDialog; + SaveDialog1: TSaveDialog; + procedure RichViewEdit1RVFPictureNeeded(Sender: TCustomRichView; + Name: String; Tag: Integer; var gr: TGraphic); + procedure Button1Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure RichViewEdit1Copy(Sender: TObject); + procedure RichViewEdit1ImportPicture(Sender: TCustomRichView; + const Location: String; Width, Height: Integer; + var Graphic: TGraphic); + procedure RichViewEdit1SaveItemToFile(Sender: TCustomRichView; + const Path: String; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; Unicode: Boolean; var OutStr: TRVRawByteString; + var DoDefault: Boolean); + private + { Private declarations } + function CopyImageToTheImagesDir(ImageFileName: String; gr: TGraphic): String; + procedure SaveAllUnknownImages(RVData: TCustomRVData); + procedure ConvertAllPathsToRelativePaths(RVData: TCustomRVData); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + Randomize; + OpenDialog2.InitialDir := ExtractFilePath(Application.ExeName); + SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName); + RichViewEdit1.LoadRVF(ExtractFilePath(Application.ExeName)+'demo.rvf'); + RichViewEdit1.Format; +end; +{------------------------------------------------------------------------------} +// RichViewEdit1.OnRVFPictureNeeded +// This event occurs when reading RVF files. +// Image file name is stored in the Name parameter. +// This event load this image from the Images subdirectory. +procedure TForm1.RichViewEdit1RVFPictureNeeded(Sender: TCustomRichView; + Name: String; Tag: Integer; var gr: TGraphic); +var pic: TPicture; +begin + // First time, this event is called with item name (empty) + // Second time, this event is called with rvespImageFileName property + if Name='' then + exit; + Name := ExtractFilePath(Application.ExeName)+Name; // path is relative to the application path + pic := TPicture.Create; + try + try + pic.LoadFromFile(Name); + except + pic.Assign(RVStyle1.InvalidPicture); + end; + gr := RV_CreateGraphics(TGraphicClass(pic.Graphic.ClassType)); + gr.Assign(pic.Graphic); + finally + pic.Free; + end; +end; +{------------------------------------------------------------------------------} +// RichViewEdit1.OnImportPicture +// This event occurs when loading RTF files with external pictures +procedure TForm1.RichViewEdit1ImportPicture(Sender: TCustomRichView; + const Location: String; Width, Height: Integer; var Graphic: TGraphic); +var FileName: String; +begin + FileName := ExtractRelativePath(ExtractFilePath(Application.ExeName), Location); + RichViewEdit1RVFPictureNeeded(Sender, FileName, 0, Graphic); +end; +{------------------------------------------------------------------------------} +// RichViewEdit1.OnSaveItemToFile +// Modifying how pictures are saved in RTF: saving as external pictures +procedure TForm1.RichViewEdit1SaveItemToFile(Sender: TCustomRichView; + const Path: String; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; Unicode: Boolean; var OutStr: TRVRawByteString; + var DoDefault: Boolean); +var FileName: String; +begin + if (SaveFormat=rvsfRTF) and + ((RVData.GetItemStyle(ItemNo)=rvsPicture) or + (RVData.GetItemStyle(ItemNo)=rvsHotPicture)) then begin + RVData.GetItemExtraStrProperty(ItemNo, rvespImageFileName, FileName); + OutStr := Format('{\field{\*\fldinst INCLUDEPICTURE "%s" \\d }}', + [RVMakeRTFFileNameStr(FileName, RichViewEdit1.Style.DefCodePage, + rvrtfDuplicateUnicode in RichViewEdit1.RTFOptions)]); + DoDefault := False; + end; +end; +{------------------------------------------------------------------------------} +// Inserting image. +// If this image is not from the Images subdirectory, copying it there +// (under the unique file name) +// Image file name is written in rvespImageFileName +// (relative to the application path) +procedure TForm1.Button1Click(Sender: TObject); +var pic: TPicture; + gr: TGraphic; + ImageName: String; +begin + if OpenDialog1.Execute then begin + try + pic := TPicture.Create; + try + pic.LoadFromFile(OpenDialog1.FileName); + gr := RV_CreateGraphics(TGraphicClass(pic.Graphic.ClassType)); + gr.Assign(pic.Graphic); + // using relative path + ImageName := ExtractRelativePath(ExtractFilePath(Application.ExeName), + CopyImageToTheImagesDir(OpenDialog1.FileName, nil)); + RichViewEdit1.TopLevelEditor.BeginUndoGroup(rvutInsert); + RichViewEdit1.TopLevelEditor.SetUndoGroupMode(True); + try + if RichViewEdit1.InsertPicture('', gr, rvvaBaseline) then + RichViewEdit1.SetCurrentItemExtraStrProperty(rvespImageFileName, ImageName, True); + finally + RichViewEdit1.TopLevelEditor.SetUndoGroupMode(False); + end; + finally + pic.Free; + end; + except + Application.MessageBox('Image loading error', 'Error', 0); + end; + end; +end; +{------------------------------------------------------------------------------} +// Copying the file ImageFileName to the images subdirectory (if gr=nil) +// or saving gr in the images subdirectory. +// Assigning an unique file name. +// Both ImageFileName and returned value are fully qualified paths. +function TForm1.CopyImageToTheImagesDir(ImageFileName: String; gr: TGraphic): String; +var ImagesDir, NewImageFileName, ImageExt: String; + RandomValue: Integer; +begin + ImageFileName := AnsiLowerCase(ImageFileName); + ImagesDir := AnsiLowerCase(ExtractFilePath(Application.ExeName)+'Images\'); + if Pos(ImagesDir,ImageFileName)<>1 then begin + NewImageFileName := ImagesDir+ExtractFileName(ImageFileName); + if FileExists(NewImageFileName) then begin + ImageExt := ExtractFileExt(NewImageFileName); + NewImageFileName := Copy(NewImageFileName, 1, Length(NewImageFileName)-Length(ImageExt)); + RandomValue := Random(MaxInt); + while FileExists(NewImageFileName+IntToStr(RandomValue)+ImageExt) do + inc(RandomValue); + NewImageFileName := NewImageFileName+IntToStr(RandomValue)+ImageExt; + end; + if gr=nil then + CopyFile(PChar(ImageFileName), PChar(NewImageFileName), False) + else + gr.SaveToFile(NewImageFileName); + Result := NewImageFileName; + end + else + Result := ImageFileName; +end; +{------------------------------------------------------------------------------} +// Saving all images that not in the images directory +// Such images can appear when loading or pasting files with images +procedure TForm1.SaveAllUnknownImages(RVData: TCustomRVData); +var i,r,c, Tag: Integer; + VAlign: TRVVAlign; + table: TRVTableItemInfo; + gr: TGraphic; + s: TRVAnsiString; + ImageFileName, Ext: String; +begin + for i := 0 to RVData.ItemCount-1 do + case RVData.GetItemStyle(i) of + rvsPicture, rvsHotPicture: + begin + RVData.GetItemExtraStrProperty(i, rvespImageFileName, ImageFileName); + ImageFileName := ExtractFilePath(Application.ExeName)+ImageFileName; + if not (FileExists(ImageFileName)) then begin + RVData.GetPictureInfo(i, s, gr, VAlign, Tag); + Ext := GraphicExtension(TGraphicClass(gr.ClassType)); + // using relative path + ImageFileName := ExtractRelativePath(ExtractFilePath(Application.ExeName), + CopyImageToTheImagesDir('Image.'+Ext, gr)); + RVData.SetItemExtraStrProperty(i, rvespImageFileName, ImageFileName); + end; + end; + rvsTable: + begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + SaveAllUnknownImages(table.Cells[r,c].GetRVData); + end; + end; +end; +{------------------------------------------------------------------------------} +// After loading from RTF, full file names are assigned to rvespImageFileName +// properties. This procedure is called to convert them to relative paths. +procedure TForm1.ConvertAllPathsToRelativePaths(RVData: TCustomRVData); +var i,r,c: Integer; + table: TRVTableItemInfo; + ImageFileName: String; +begin + for i := 0 to RVData.ItemCount-1 do + case RVData.GetItemStyle(i) of + rvsPicture, rvsHotPicture: + begin + RVData.GetItemExtraStrProperty(i, rvespImageFileName, ImageFileName); + ImageFileName := ExtractRelativePath(ExtractFilePath(Application.ExeName), + ImageFileName); + RVData.SetItemExtraStrProperty(i, rvespImageFileName, ImageFileName); + end; + rvsTable: + begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + ConvertAllPathsToRelativePaths(table.Cells[r,c].GetRVData); + end; + end; +end; +{------------------------------------------------------------------------------} +// Before copying to the clipboard +procedure TForm1.RichViewEdit1Copy(Sender: TObject); +begin + SaveAllUnknownImages(RichViewEdit1.RVData); +end; +{------------------------------------------------------------------------------} +// Loading doc +procedure TForm1.Button3Click(Sender: TObject); +var r: Boolean; +begin + if OpenDialog2.Execute then begin + RichViewEdit1.Clear; + r := False; + case OpenDialog2.FilterIndex of + 1: r := RichViewEdit1.LoadRVF(OpenDialog2.FileName); + 2: begin + r := RichViewEdit1.LoadRTF(OpenDialog2.FileName); + ConvertAllPathsToRelativePaths(RichViewEdit1.RVData); + end; + end; + RichViewEdit1.Format; + if not r then + Application.MessageBox('Document loading error', 'Error', 0); + end; +end; +{------------------------------------------------------------------------------} +// Saving doc +procedure TForm1.Button2Click(Sender: TObject); +var r: Boolean; +begin + if SaveDialog1.Execute then begin + SaveAllUnknownImages(RichViewEdit1.RVData); + r := False; + case SaveDialog1.FilterIndex of + 1: r := RichViewEdit1.SaveRVF(SaveDialog1.FileName, False); + 2: r := RichViewEdit1.SaveRTF(SaveDialog1.FileName, False); + 3: r := RichViewEdit1.SaveHTMLEx(SaveDialog1.FileName, 'Shared Image Demo', + 'img', '', '', '', [rvsoUseCheckpointsNames, rvsoUseItemImageFileNames]); + end; + if not r then + Application.MessageBox('Document saving error', 'Error', 0); + end; +end; + + + + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/demo.rtf b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/demo.rtf new file mode 100644 index 0000000..da011e6 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/demo.rtf @@ -0,0 +1,12 @@ +{\rtf1\ansi\ansicpg0\uc1\deff0\deflang0\deflangfe0{\fonttbl{\f0\fnil Arial;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} + +\uc1 +\pard\fi0\li0\ql\ri0\sb0\sa0\itap0 \plain \f0\fs20 This demo shows how to work with RVF and RTF files containing external images, like this one: +\par {\field{\*\fldinst INCLUDEPICTURE "images\\\\image.bmp" \\d }} +\par \plain \f0\fs20 This image is actually stored in the Images subdirectory (as well as other images that you can paste here). +\par Only one problem is not covered - deleting pictures that are not used by any RVF file. +\par +\par This is the second reference to the same image: +\par {\field{\*\fldinst INCLUDEPICTURE "images\\\\image.bmp" \\d }} +\par \plain \f0\fs20 +\par \par} \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/demo.rvf b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/demo.rvf new file mode 100644 index 0000000..60128a9 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/demo.rvf differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/images/image.bmp b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/images/image.bmp new file mode 100644 index 0000000..11f1929 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/SharedImages/images/image.bmp differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/ToImage.bdsproj b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/ToImage.bdsproj new file mode 100644 index 0000000..27b620f --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/ToImage.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + ToImage.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/ToImage.dpr b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/ToImage.dpr new file mode 100644 index 0000000..2fe31eb --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/ToImage.dpr @@ -0,0 +1,13 @@ +program ToImage; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/ToImage.res b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/ToImage.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/ToImage.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/Unit1.dfm new file mode 100644 index 0000000..b262d6d Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/Unit1.pas new file mode 100644 index 0000000..7edbd46 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Graphics/ToImage/Unit1.pas @@ -0,0 +1,112 @@ +{==============================================================================} +{ Example: two ways of drawing RichView document onto Canvas } +{==============================================================================} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ExtCtrls, RVScroll, RichView, RVStyle, ComCtrls, + PtblRV, RVReport; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + RVStyle1: TRVStyle; + RichView1: TRichView; + Image1: TImage; + Button1: TButton; + Image2: TImage; + Button2: TButton; + RVReportHelper1: TRVReportHelper; + Label1: TLabel; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; +begin + // For Example 1 + RichView1.AddNL('This is a line of text',1,1); + for i := 1 to 20 do + RichView1.AddNL('This is a line of text',0,0); + RichView1.Format; + + // For Example 2 + RVReportHelper1.RichView.Style := RVStyle1; + RVReportHelper1.RichView.AddNL('This is a line of text',1,1); + for i := 1 to 20 do + RVReportHelper1.RichView.AddNL('This is a line of text',0,0); +end; + +const VERYLARGEVALUE = $FFFFFFF; + +// Example 1 +procedure TForm1.Button1Click(Sender: TObject); +var wmf: TMetafile; + Canvas: TMetafileCanvas; + Width, Height: Integer; +begin + RichView1.HScrollPos := 0; + RichView1.VScrollPos := 0; + RichView1.Deselect; + RichView1.Invalidate; + Width := RichView1.RVData.DocumentWidth+RichView1.LeftMargin+RichView1.RightMargin; + Height := RichView1.RVData.DocumentHeight; + + wmf := TMetafile.Create; + wmf.Width := Width; + wmf.Height := Height; + + Canvas := TMetafileCanvas.Create(wmf, 0); + Canvas.Brush.Color := clWindow; + Canvas.FillRect(Rect(0,0,Width,Height)); + RichView1.RVData.PaintTo(Canvas, Rect(0,0,VERYLARGEVALUE,VERYLARGEVALUE), + False, False, False, False, 0, 0); + Canvas.Free; + + Image1.Picture.Graphic := wmf; + wmf.Free; +end; + +// Example 2 + +procedure TForm1.Button2Click(Sender: TObject); +var wmf: TMetafile; + Canvas: TMetafileCanvas; +const Width = 200; +begin + RVReportHelper1.Init(Self.Canvas, Width); + while RVReportHelper1.FormatNextPage(VERYLARGEVALUE) do; + + wmf := TMetafile.Create; + wmf.Width := Width; + wmf.Height := RVReportHelper1.EndAt; + + Canvas := TMetafileCanvas.Create(wmf, 0); + RVReportHelper1.DrawPage(1,Canvas,True,RVReportHelper1.EndAt); + Canvas.Free; + + Image2.Picture.Graphic := wmf; + wmf.Free; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.bdsproj b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.bdsproj new file mode 100644 index 0000000..0db0cce --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + CreateHyperlink.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.dpr b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.dpr new file mode 100644 index 0000000..576161e --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.dpr @@ -0,0 +1,15 @@ +program CreateHyperlink; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + Unit2 in 'Unit2.pas' {Form2}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.res b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit1.dfm new file mode 100644 index 0000000..5f2523b Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit1.pas new file mode 100644 index 0000000..acc9308 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit1.pas @@ -0,0 +1,295 @@ +unit Unit1; + +{ Properties: + rvoTagsArePChars is added in Options + rvoCtrlJumps is added in EditorOptions + "Allow adding styles dynamically" in the "Settings" in the context menu +} +{ + This demo shows: + - how to create document with hyperlinks; + - how to make hyperlink from the selected text (hyperlink is blue and underlined); + - how to insert new hyperlinks (when the selection is empty) + - how to remove hyperlinks from the selected text (if user entered empty hyperlink target); + - how to close hyperlinks when user presses Space, Tab or Enter key; + - how to get hypertext style (having all properties of normal style, but + blue, underlined and hypertext), and vice versa. +} + + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, RVEdit, Buttons, ExtCtrls, Unit2, CRVFData, + ShellApi, StdCtrls; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Panel1: TPanel; + SpeedButton1: TSpeedButton; + CheckBox1: TCheckBox; + procedure SpeedButton1Click(Sender: TObject); + procedure RichViewEdit1Jump(Sender: TObject; id: Integer); + procedure FormCreate(Sender: TObject); + procedure CheckBox1Click(Sender: TObject); + procedure RichViewEdit1StyleConversion(Sender: TCustomRichViewEdit; + StyleNo, UserData: Integer; AppliedToText: Boolean; + var NewStyleNo: Integer); + procedure RichViewEdit1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + private + procedure SetTargetToSelection(const Target: String); + function GetTargetFromSelection: String; + procedure ExpandSelectionToHyperlink; + function GetHypertextStyleNo(StyleNo: Integer): Integer; + function GetNonHypertextStyleNo(StyleNo: Integer): Integer; + procedure TerminateHyperlink; + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{ Constants for calling RichViewEdit1.OnStyleConversion } +const CONVERT_TO_HYPERTEXT = 1; + CONVERT_TO_NONHYPERTEXT = 2; + + +procedure TForm1.FormCreate(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit1.AddNL('Select text and click the button. ',0,0); + RichViewEdit1.AddNLTag('Hyperlink example', GetHypertextStyleNo(0), -1, + Integer(StrNew('http://www.trichview.com'))); + RichViewEdit1.Format; +end; +{------------------------------------------------------------------------------} +{ This function sets tags of all selected items. + If Target is an empty string, it sets tags = 0, otherwise tags are pointers + to dynamically allocated copies of Target. } +procedure TForm1.SetTargetToSelection(const Target: String); +var i, StartNo, EndNo, StartOffs, EndOffs: Integer; + rve: TCustomRichViewEdit; +begin + { Important: when working with the selection item indices, always use + TopLevelEditor. } + rve := RichViewEdit1.TopLevelEditor; + { Receiving the range of selected items } + rve.GetSelectionBounds(StartNo, StartOffs, EndNo, EndOffs, True); + { If nothing is selected, exiting } + if StartNo<0 then + exit; + { May be the outermost items are not included in the selection? In this case, + excluding them } + if StartOffs >= rve.GetOffsAfterItem(StartNo) then + inc(StartNo); + if EndOffs <= rve.GetOffsBeforeItem(EndNo) then + dec(EndNo); + { Changing tags of the selected items } + rve.BeginUndoGroup(rvutTag); + rve.SetUndoGroupMode(True); + if Target<>'' then + for i := StartNo to EndNo do + rve.SetItemTagEd(i, Integer(StrNew(PChar(Target)))) + else + for i := StartNo to EndNo do + rve.SetItemTagEd(i, 0); + rve.SetUndoGroupMode(False); +end; +{------------------------------------------------------------------------------} +{ Returns the first non-empty tag of the selected items } +function TForm1.GetTargetFromSelection: String; +var i, StartNo, EndNo, StartOffs, EndOffs: Integer; + rve: TCustomRichViewEdit; +begin + Result := ''; + rve := RichViewEdit1.TopLevelEditor; + { Receiving the range of selected items } + rve.GetSelectionBounds(StartNo, StartOffs, EndNo, EndOffs, True); + if StartNo<0 then + exit; + if StartOffs >= rve.GetOffsAfterItem(StartNo) then + inc(StartNo); + if EndOffs <= rve.GetOffsBeforeItem(EndNo) then + dec(EndNo); + { Finding the first selected item with non-empty tag } + for i := StartNo to EndNo do + if rve.GetItemTag(i)<>0 then begin + Result := PChar(rve.GetItemTag(i)); + exit; + end; +end; +{------------------------------------------------------------------------------} +{ Expand the selection: if hyperlink is selected partially, selects it completely } +procedure TForm1.ExpandSelectionToHyperlink; +var StartNo, EndNo, StartOffs, EndOffs: Integer; + rve: TCustomRichViewEdit; +begin + rve := RichViewEdit1.TopLevelEditor; + { Receiving a range of selected items } + rve.GetSelectionBounds(StartNo, StartOffs, EndNo, EndOffs, True); + { If no selection exists, using caret position } + if StartNo<0 then begin + StartNo := rve.CurItemNo; + StartOffs := rve.OffsetInCurItem; + EndNo := StartNo; + EndOffs := StartOffs; + end; + if StartOffs >= rve.GetOffsAfterItem(StartNo) then begin + inc(StartNo); + if StartNo=rve.ItemCount then + exit; + end; + if EndOffs <= rve.GetOffsBeforeItem(EndNo) then begin + dec(EndNo); + if EndNo<0 then + exit; + end; + { Expanding the selection to the whole items, if necessary } + if (rve.GetItemStyle(StartNo)>=0) and RVStyle1.TextStyles[rve.GetItemStyle(StartNo)].Jump then + StartOffs := rve.GetOffsBeforeItem(StartNo); + if (rve.GetItemStyle(EndNo)>=0) and RVStyle1.TextStyles[rve.GetItemStyle(EndNo)].Jump then + EndOffs := rve.GetOffsAfterItem(EndNo); + rve.SetSelectionBounds(StartNo, StartOffs, EndNo, EndOffs); + rve.Invalidate; +end; +{------------------------------------------------------------------------------} +{ Clicking "Create Hyperlink" button. If user enters non-empty Target, making + the selection hypertext. If user enters empty Target, making the selection + non-hypertext. Then assigning Target to tags of the selected items. } +procedure TForm1.SpeedButton1Click(Sender: TObject); +var Target: String; +begin + ExpandSelectionToHyperlink; + Target := GetTargetFromSelection; + Form2.Edit1.Text := Target; + if Form2.ShowModal=mrOk then begin + Target := Form2.Edit1.Text; + if RichViewEdit1.SelectionExists then begin + if Target='' then + RichViewEdit1.ApplyStyleConversion(CONVERT_TO_NONHYPERTEXT) + else + RichViewEdit1.ApplyStyleConversion(CONVERT_TO_HYPERTEXT); + SetTargetToSelection(Target); + end + else + if Target='' then + Beep + else begin + RichViewEdit1.CurTextStyleNo := GetHypertextStyleNo(RichViewEdit1.CurTextStyleNo); + RichViewEdit1.InsertStringTag('New link', Integer(StrNew(PChar(Target)))); + end; + end; +end; +{------------------------------------------------------------------------------} +{ Clicking hyperlink. } +procedure TForm1.RichViewEdit1Jump(Sender: TObject; id: Integer); +var URL: String; + RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo); + URL := PChar(RVData.GetItemTag(ItemNo)); + ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOW); +end; +{------------------------------------------------------------------------------} +{ Switching readonly/editing mode. In editing mode, hypertext works only + if holding Ctrl key. } +procedure TForm1.CheckBox1Click(Sender: TObject); +begin + RichViewEdit1.ReadOnly := CheckBox1.Checked; + if CheckBox1.Checked then + RichViewEdit1.Color := clBtnFace + else + RichViewEdit1.Color := clWindow; + SpeedButton1.Enabled := not CheckBox1.Checked; + RichViewEdit1.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Returns the index of text style having the same properties as + RVStyle1.TextStyles[StyleNo], but blue, underlined and hypertext. + If such text style does not exist, creates it and returns its index. } +function TForm1.GetHypertextStyleNo(StyleNo: Integer): Integer; +var fi: TFontInfo; +begin + fi := TFontInfo.Create(nil); + fi.Assign(RVStyle1.TextStyles[StyleNo]); + fi.Color := clBlue; + fi.Style := fi.Style + [fsUnderline]; + fi.Jump := True; + Result := RVStyle1.TextStyles.FindSuchStyle(StyleNo, fi, RVAllFontInfoProperties); + if Result<0 then begin + RVStyle1.TextStyles.Add; + Result := RVStyle1.TextStyles.Count-1; + RVStyle1.TextStyles[Result].Assign(fi); + RVStyle1.TextStyles[Result].Standard := False; + end; +end; +{------------------------------------------------------------------------------} +{ Returns the index of text style having the same properties as + RVStyle1.TextStyles[StyleNo], but with normal color, not underlined and + not hypertext. + If such text style does not exist, creates it and returns its index. } +function TForm1.GetNonHypertextStyleNo(StyleNo: Integer): Integer; +var fi: TFontInfo; +begin + fi := TFontInfo.Create(nil); + fi.Assign(RVStyle1.TextStyles[StyleNo]); + fi.Color := clWindowText; + fi.Style := fi.Style - [fsUnderline]; + fi.Jump := False; + Result := RVStyle1.TextStyles.FindSuchStyle(StyleNo, fi, RVAllFontInfoProperties); + if Result<0 then begin + RVStyle1.TextStyles.Add; + Result := RVStyle1.TextStyles.Count-1; + RVStyle1.TextStyles[Result].Assign(fi); + RVStyle1.TextStyles[Result].Standard := False; + end; +end; +{------------------------------------------------------------------------------} +{ This event is called for all selected text items when you call + ApplyStyleConversion, see SpeedButton1Click } +procedure TForm1.RichViewEdit1StyleConversion(Sender: TCustomRichViewEdit; + StyleNo, UserData: Integer; AppliedToText: Boolean; + var NewStyleNo: Integer); +begin + case UserData of + CONVERT_TO_HYPERTEXT: + NewStyleNo := GetHypertextStyleNo(StyleNo); + CONVERT_TO_NONHYPERTEXT: + NewStyleNo := GetNonHypertextStyleNo(StyleNo); + end; +end; +{------------------------------------------------------------------------------} +{ If the caret is at the end of hyperlink, and there is no selection, + switching the current text style to non-hypertext } +procedure TForm1.TerminateHyperlink; +var rve: TCustomRichViewEdit; +begin + rve := RichViewEdit1.TopLevelEditor; + if (rve.CurTextStyleNo=rve.CurItemStyle) and + RVStyle1.TextStyles[rve.CurTextStyleNo].Jump and + not rve.SelectionExists and + (rve.OffsetInCurItem>=rve.GetOffsAfterItem(rve.CurItemNo)) then + rve.CurTextStyleNo := GetNonHypertextStyleNo(rve.CurTextStyleNo); +end; +{------------------------------------------------------------------------------} +{ Closing hypelinks when user presses Space, Tab, or Enter } +procedure TForm1.RichViewEdit1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key in [VK_SPACE, VK_TAB, VK_RETURN]) and not RichViewEdit1.ReadOnly then + TerminateHyperlink; +end; + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit2.dfm b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit2.dfm new file mode 100644 index 0000000..0a1734f Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit2.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit2.pas b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit2.pas new file mode 100644 index 0000000..466badf --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/CreateHyperlink/Unit2.pas @@ -0,0 +1,29 @@ +unit Unit2; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ExtCtrls; + +type + TForm2 = class(TForm) + Button1: TButton; + Button2: TButton; + Panel1: TPanel; + Edit1: TEdit; + Label1: TLabel; + private + { Private declarations } + public + { Public declarations } + end; + +var + Form2: TForm2; + +implementation + +{$R *.DFM} + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/PhoneBook.bdsproj b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/PhoneBook.bdsproj new file mode 100644 index 0000000..216a2a9 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/PhoneBook.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + PhoneBook.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/PhoneBook.dpr b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/PhoneBook.dpr new file mode 100644 index 0000000..ff05471 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/PhoneBook.dpr @@ -0,0 +1,15 @@ +program PhoneBook; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + Unit2 in 'Unit2.pas' {Form2}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/PhoneBook.res b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/PhoneBook.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/PhoneBook.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit1.dfm new file mode 100644 index 0000000..ffeb56c Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit1.pas new file mode 100644 index 0000000..79bb2c0 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit1.pas @@ -0,0 +1,182 @@ +{==============================================================================} +{ + This demo shows how to implement listbox-like selection using hypertext. + Property settings: + - rvoTagsArePChars is included in rv.Options + - rvoAllowSelection is excluded from rv.Options + - rv.TabNavigation = rvtnNone + - rv.Style = RVStyle1 + - 3 text styles are created in RVStyle.TextStyles + TextStyles[0] - normal text + TextStyles[1] - hypertext + TextStyles[2] - hypertext with background + + NOTE: This demo is a bit overcomplicated. + If you do not use tables (TRVTableItemInfo), you do not need to + work with RVData variables (because documents without tables + have only one RVData - rv.RVData) + NOTE2: phonebook can be saved (rv.SaveRVFFromFile) + and loaded (rv.LoadRVFFromFile). In order to load bullets (images with phones), + process OnRVFImageListNeeded. +} +{==============================================================================} +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + ImgList, + Dialogs, StdCtrls, RVScroll, RichView, RVStyle, CRVFData; + +type + TForm1 = class(TForm) + ImageList1: TImageList; + RVStyle1: TRVStyle; + rv: TRichView; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Label1: TLabel; + Label2: TLabel; + Edit1: TEdit; + procedure FormCreate(Sender: TObject); + procedure rvJump(Sender: TObject; id: Integer); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + private + { Private declarations } + FSelectedRVData: TCustomRVFormattedData; + FSelectedItemNo: Integer; + function MakeTag(s: String): Integer; + function GetTagStr(tag: Integer): String; + procedure Select(RVData: TCustomRVFormattedData; ItemNo: Integer); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +uses Unit2; + +{$R *.dfm} + +{ TForm1 } + +const + TEXTSTYLE_NOTMALTEXT = 0; + TEXTSTYLE_JUMP = 1; + TEXTSTYLE_SELECTED = 2; + +function TForm1.MakeTag(s: String): Integer; +begin + Result := Integer(StrNew(PChar(s))); +end; + +function TForm1.GetTagStr(tag: Integer): String; +var i: Integer; +begin + // reverse function + Result := PChar(tag); + for i := 1 to Length(Result) do + if Result[i]=#1 then + Result[i] := ' '; +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + rv.AddNL('Telephone directory:',0,0); + rv.AddBulletEx('',0, ImageList1, 0); + rv.AddNLTag('Kim Lumber',TEXTSTYLE_JUMP, -1, MakeTag('123-4567')); + rv.AddBulletEx('',0, ImageList1, 0); + rv.AddNLTag('Phil Forest',TEXTSTYLE_JUMP, -1, MakeTag('234-5678')); + rv.AddBulletEx('',0, ImageList1, 0); + rv.AddNLTag('Woody Young',TEXTSTYLE_JUMP, -1, MakeTag('345-6789')); + rv.Format; +end; + +procedure TForm1.Select(RVData: TCustomRVFormattedData; ItemNo: Integer); +begin + if (FSelectedRVData<>nil) and (FSelectedRVData=RVData) and + (FSelectedItemNo=ItemNo) then begin + Button2.Click; + exit; + end; + if FSelectedRVData<>nil then + FSelectedRVData.GetItem(FSelectedItemNo).StyleNo := TEXTSTYLE_JUMP; + if RVData<>nil then begin + Edit1.Text := GetTagStr(RVData.GetItemTag(ItemNo)); + RVData.GetItem(ItemNo).StyleNo := TEXTSTYLE_SELECTED; + end; + FSelectedRVData := RVData; + FSelectedItemNo := ItemNo; + rv.Refresh; + { + In this demo, two text styles (TEXTSTYLE_SELECTED and TEXTSTYLE_JUMP) + have difference only in colors. + But if they had different font name/size/style, or different jump flag, + Refresh would be not enough - change this line to rv.Format; + } +end; +{------------------------------------------------------------------------------} +procedure TForm1.rvJump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + rv.GetJumpPointLocation(id, RVData, ItemNo); + Select(RVData, ItemNo); +end; +{------------------------------------------------------------------------------} + +procedure TForm1.Button1Click(Sender: TObject); +begin + Form2.Edit1.Text := ''; + Form2.Edit2.Text := ''; + if Form2.ShowModal=mrOk then begin + rv.AddBulletEx('',0, ImageList1, 0); + rv.AddNLTag(Form2.Edit1.Text ,TEXTSTYLE_JUMP, -1, MakeTag(Form2.Edit2.Text)); + rv.FormatTail; + Select(rv.RVData, rv.ItemCount-1); + end; +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + if FSelectedRVData=nil then begin + Beep; + exit; + end; + Form2.Edit1.Text := FSelectedRVData.GetItemText(FSelectedItemNo); + Form2.Edit2.Text := GetTagStr(FSelectedRVData.GetItemTag(FSelectedItemNo)); + if Form2.ShowModal=mrOk then begin + FSelectedRVData.SetItemText(FSelectedItemNo, Form2.Edit1.Text); + FSelectedRVData.SetItemTag(FSelectedItemNo, MakeTag(Form2.Edit2.Text)); + rv.Format; + Edit1.Text := Form2.Edit2.Text; + end; +end; + + +procedure TForm1.Button3Click(Sender: TObject); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + if FSelectedRVData=nil then begin + Beep; + exit; + end; + RVData := FSelectedRVData; + ItemNo := FSelectedItemNo; + Select(nil, -1); + RVData.DeleteItems(ItemNo-1, 2); // deleting two items: image and text + rv.Format; + Edit1.Text := ''; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit2.dfm b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit2.dfm new file mode 100644 index 0000000..4fa7d27 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit2.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit2.pas b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit2.pas new file mode 100644 index 0000000..cd6f7ba --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/PhoneBook/Unit2.pas @@ -0,0 +1,35 @@ +unit Unit2; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls; + +type + TForm2 = class(TForm) + Button1: TButton; + Button2: TButton; + Edit1: TEdit; + Edit2: TEdit; + Label1: TLabel; + Label2: TLabel; + procedure Edit1Change(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var Form2: TForm2; + +implementation + +{$R *.dfm} + +procedure TForm2.Edit1Change(Sender: TObject); +begin + Button1.Enabled := (Edit1.Text<>'') and (Edit2.Text<>''); +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/ScanURLs.bdsproj b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/ScanURLs.bdsproj new file mode 100644 index 0000000..3803415 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/ScanURLs.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + ScanURLs.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/ScanURLs.dpr b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/ScanURLs.dpr new file mode 100644 index 0000000..44285e0 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/ScanURLs.dpr @@ -0,0 +1,14 @@ +program ScanURLs; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + URLScan in 'URLScan.pas'; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/ScanURLs.res b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/ScanURLs.res new file mode 100644 index 0000000..7628804 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/ScanURLs.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/URLScan.pas b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/URLScan.pas new file mode 100644 index 0000000..d414921 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/URLScan.pas @@ -0,0 +1,596 @@ +unit URLScan; +{==============================================================================} +{ Scanning RichView for URLs } +{ Copyright (c) Sergey Tkachenko } +{ StrPosW is from http://www.delphi-unicode.net/Library.php } +{==============================================================================} +{ Unicode uppercase URLs can be processed only in WinNT/2000/XP } +{==============================================================================} + +interface + +{$I RV_Defs.inc} + +uses Windows, Messages, SysUtils, Classes, Clipbrd, + RVStyle, RVScroll, RichView, CRVFData, RVTable, RVEdit, RVFuncs, RVItem, + RVUni, RVStr; + +type + TRVURLScanProcedure = procedure (OldStyleNo: Integer; + var NewStyleNo: Integer; ToHypertext: Boolean) of object; + +//--------------------- Document scanning ------------------------------------- +// Detecting URLs +function ScanURLs(RVData: TCustomRVFormattedData; + URLScanProcedure: TRVURLScanProcedure; AssignTags: Boolean): Boolean; +// Removing all URLs +function ClearHypertext(RVData: TCustomRVFormattedData; + URLScanProcedure: TRVURLScanProcedure; ClearTags: Boolean): Boolean; +//---------------------- Detect on typing ------------------------------------- +// Closing hyperlink +procedure TerminateHyperlink(rve: TCustomRichViewEdit; + URLScanProcedure: TRVURLScanProcedure; Forced: Boolean); +// Detecting URL on typing +procedure DetectURL(rve: TCustomRichViewEdit; URLScanProcedure: TRVURLScanProcedure; + AssignTags: Boolean); +//----------------------- Clipboard ------------------------------------------- +// Pasting text with URL detection +function PasteTextWithURLs(rve: TCustomRichViewEdit; + URLScanProc: TRVURLScanProcedure): Boolean; + +implementation + +uses CRVData; + +{======================= Processing ANSI text =================================} +function FindChar(pc: PChar; Len: Integer): Integer; +var i: Integer; +begin + for i := 0 to Len-1 do + if pc[i] in [' ',',','(',')',';','"','''', '‘', '’', '“', '”', '<','>' ] then begin + Result := i+1; + exit; + end; + Result := 0; +end; +{--------------------------------------------------------------} +// This function uses some undocumented methods +function DetectURLs(var RVData: TCustomRVFormattedData; Index: Integer; + URLScanProcedure: TRVURLScanProcedure; AssignTags: Boolean): Boolean; +var CurrentWord: String; + i,p: Integer; + s,s1, tagstr : String; + pc, pcstart: PChar; + Len, URLStyle: Integer; + StringList: TStringList; + sourceitem,item: TCustomRVItemInfo; +begin + s := RVData.GetItemTextA(Index); + pc := PChar(s); + pcstart := pc; + Len := Length(s); + StringList := nil; + while Len>0 do begin + p := FindChar(pc, Len); + if p=1 then begin + inc(pc); + dec(Len); + continue; + end; + if p=0 then + p := Len+1; + SetLength(CurrentWord, p-1); + Move(pc^, PChar(CurrentWord)^, p-1); + if (RV_CharPos(PChar(CurrentWord), '.', p-1)<>0) and + (RVIsURL(CurrentWord) or RVIsEmail(CurrentWord)) then begin + if StringList=nil then + StringList := TStringList.Create; + if pcstartnil; + if Result then begin + URLStyle := RVData.GetItemStyle(Index); + URLScanProcedure(URLStyle, URLStyle, True); + if URLStyle=RVData.GetItemStyle(Index) then begin + StringList.Free; + Result := False; + exit; + end; + if pcstartnil then begin + item.StyleNo := UrlStyle; + if AssignTags then begin + tagstr := StringList[i]; + if RVIsEmail(tagstr) and not RVIsURL(tagstr) then + tagstr := 'mailto:'+tagstr; + item.Tag := Integer(StrNew(PChar(tagstr))); + end; + end; + RVData.Items.InsertObject(Index+1,StringList[i],item); + end; + if StringList.Objects[0]<>nil then begin + sourceitem.StyleNo := UrlStyle; + if AssignTags then begin + tagstr := StringList[0]; + if RVIsEmail(tagstr) and not RVIsURL(tagstr) then + tagstr := 'mailto:'+tagstr; + sourceitem.Tag := Integer(StrNew(PChar(tagstr))); + end; + end; + RVData.Items[Index] := StringList[0]; + end; + StringList.Free; +end; +{======================= Processing Unicode text ==============================} +{$IFDEF RICHVIEWDEF3} +function StrPosW(Str, SubStr: PWideChar): PWideChar; + +// returns a pointer to the first occurance of SubStr in Str + +asm + PUSH EDI + PUSH ESI + PUSH EBX + OR EAX, EAX + JZ @@2 + OR EDX, EDX + JZ @@2 + MOV EBX, EAX + MOV EDI, EDX + XOR AX, AX + MOV ECX, 0FFFFFFFFH + REPNE SCASW + NOT ECX + DEC ECX + JZ @@2 + MOV ESI, ECX + MOV EDI, EBX + MOV ECX, 0FFFFFFFFH + REPNE SCASW + NOT ECX + SUB ECX, ESI + JBE @@2 + MOV EDI, EBX + LEA EBX, [ESI - 1] // Note: 2 would be wrong here, we are dealing with numbers not an address +@@1: MOV ESI, EDX + LODSW + REPNE SCASW + JNE @@2 + MOV EAX, ECX + PUSH EDI + MOV ECX, EBX + REPE CMPSW + POP EDI + MOV ECX, EAX + JNE @@1 + LEA EAX, [EDI - 2] + JMP @@3 + +@@2: XOR EAX, EAX +@@3: POP EBX + POP ESI + POP EDI +end; +{------------------------------------------------------------------------------} +function CharPosW(const Str: PWideChar {EAX}; Chr: WideChar {DX} ; Length: Integer {ECX}): Integer; assembler; +asm + TEST EAX,EAX + JE @@2 + PUSH EDI + PUSH EBX + MOV EDI,Str + MOV EBX,Str + MOV AX,Chr + REPNE SCASW + MOV EAX,0 + JNE @@1 + MOV EAX,EDI + SUB EAX,EBX +@@1: POP EBX + POP EDI +@@2: +end; +{--------------------------------------------------------------} +function LowerCaseW(const s: WideString): WideString; +var + Len: Integer; +begin + Len := Length(s); + SetLength(Result, Length(s)); + Move(PWideChar(s)^, PWideChar(Result)^, Length(s)*2); + if Len > 0 then + CharLowerBuffW(Pointer(Result), Len); +end; +{--------------------------------------------------------------} +function IsURLW(const str: WideString): Boolean; +var s: WideString; + ps: PWideChar; + {....................................} + function CheckPrefix(Prefix: PWideChar): Boolean; + begin + Result := (Length(str)>Length(Prefix)) and (StrPosW(ps, Prefix)=ps); + end; + {....................................} +begin + if Assigned(RVIsCustomURL) then + Result := RVIsCustomURL(s) + else + Result := False; + if not Result then begin + // LowerCaseW will work only for WinNT-based systems + s := LowerCaseW(str); + ps := PWideChar(s); + Result := + CheckPrefix('http://') or + CheckPrefix('ftp://') or + CheckPrefix('file://') or + CheckPrefix('gopher://') or + CheckPrefix('mailto:') or + CheckPrefix('https://') or + CheckPrefix('news:') or + CheckPrefix('telnet:') or + CheckPrefix('wais:') or + CheckPrefix('www.') or + CheckPrefix('ftp.'); + end; +end; +{--------------------------------------------------------------} +function IsEmailW(const s: WideString): Boolean; +var i: Integer; + at: Boolean; +begin + //'@' must exist and '.' must be after it. This is not comprehensive test, + //but I think that it's ok + at := False; + Result := False; + for i := 1 to Length(s) do + case s[i] of + '@': + begin + if at then + exit; + at := True; + end; + '.': + begin + if at then begin + Result := True; + exit; + end; + end; + end; +end; +{--------------------------------------------------------------} +function FindCharW(pc: PWideChar; Len: Integer): Integer; +var i: Integer; +begin + for i := 0 to Len-1 do + if pc[i] in [WideChar(' '),WideChar(','),WideChar('('),WideChar(')'), + WideChar(';'),WideChar('"'),WideChar(''''), + WideChar('‘'), WideChar('’'), WideChar('“'), WideChar('”'), WideChar('<'), + WideChar('>')] then begin + Result := i+1; + exit; + end; + Result := 0; +end; +{--------------------------------------------------------------} +// This function uses some undocumented methods +function DetectURLsW(var RVData: TCustomRVFormattedData; Index: Integer; + URLScanProcedure: TRVURLScanProcedure; AssignTags: Boolean): Boolean; +var CurrentWord: WideString; + i,p: Integer; + s : WideString; + s1: String; + pc, pcstart: PWideChar; + tagstr: String; + Len, URLStyle: Integer; + StringList: TStringList; + sourceitem,item: TCustomRVItemInfo; +begin + s := RVData.GetItemTextW(Index); + pc := PWideChar(s); + pcstart := pc; + Len := Length(s); + StringList := nil; + while Len>0 do begin + p := FindCharW(pc, Len); + if p=1 then begin + inc(pc); + dec(Len); + continue; + end; + if p=0 then + p := Len+1; + SetLength(CurrentWord, p-1); + Move(pc^, PWideChar(CurrentWord)^, (p-1)*2); + if (CharPosW(PWideChar(CurrentWord), '.', p-1)<>0) and + (IsURLW(CurrentWord) or IsEmailW(CurrentWord)) then begin + if StringList=nil then + StringList := TStringList.Create; + if pcstartnil; + if Result then begin + URLStyle := RVData.GetItemStyle(Index); + URLScanProcedure(URLStyle, URLStyle, True); + if URLStyle=RVData.GetItemStyle(Index) then begin + StringList.Free; + Result := False; + exit; + end; + if pcstartnil then begin + item.StyleNo := UrlStyle; + if AssignTags then begin + tagstr := RVU_UnicodeToAnsi(RVData.GetStyleCodePage(UrlStyle), StringList[i]); + if RVIsEmail(tagstr) and not RVIsURL(tagstr) then + tagstr := 'mailto:'+tagstr; + item.Tag := Integer(StrNew(PChar(tagstr))); + end; + end; + RVData.Items.InsertObject(Index+1, StringList[i],item); + end; + if StringList.Objects[0]<>nil then begin + sourceitem.StyleNo := UrlStyle; + if AssignTags then begin + tagstr := RVU_UnicodeToAnsi(RVData.GetStyleCodePage(UrlStyle), StringList[0]); + if RVIsEmail(tagstr) and not RVIsURL(tagstr) then + tagstr := 'mailto:'+tagstr; + sourceitem.Tag := Integer(StrNew(PChar(tagstr))); + end; + end; + RVData.Items[Index] := StringList[0]; + end; + StringList.Free; +end; +{$ENDIF} +{========================== Common functions ==================================} +function ScanURLs(RVData: TCustomRVFormattedData; + URLScanProcedure: TRVURLScanProcedure; AssignTags: Boolean): Boolean; +var i,r,c: Integer; + table: TRVTableItemInfo; + RVStyle: TRVStyle; + StyleNo: Integer; +begin + Result := False; + RVStyle := RVData.GetRVStyle; + for i := RVData.Items.Count-1 downto 0 do begin + StyleNo := RVData.GetItemStyle(i); + if StyleNo=rvsTable then begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + if ScanURLs(TCustomRVFormattedData(table.Cells[r,c].GetRVData), URLScanProcedure, + AssignTags) then begin + Result := True; + table.Changed; + end; + end + else if (StyleNo>=0) then + if not RVStyle.TextStyles[StyleNo].Unicode then + Result := DetectURLs(RVData, i, URLScanProcedure, AssignTags) or Result + {$IFDEF RICHVIEWDEF3} + else + Result := DetectURLsW(RVData, i, URLScanProcedure, AssignTags) or Result + {$ENDIF}; + end; +end; +{--------------------------------------------------------------} +function ClearHypertext(RVData: TCustomRVFormattedData; + URLScanProcedure: TRVURLScanProcedure; ClearTags: Boolean): Boolean; +var i,r,c: Integer; + table: TRVTableItemInfo; + RVStyle: TRVStyle; + StyleNo: Integer; +begin + Result := False; + RVStyle := RVData.GetRVStyle; + for i := RVData.Items.Count-1 downto 0 do begin + StyleNo := RVData.GetItemStyle(i); + if StyleNo=rvsTable then begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + if ClearHypertext(TCustomRVFormattedData(table.Cells[r,c].GetRVData), + URLScanProcedure, ClearTags) then begin + Result := True; + table.Changed; + end; + end + else if (StyleNo>=0) and RVStyle.TextStyles[StyleNo].Jump then begin + URLScanProcedure(StyleNo,StyleNo,False); + if StyleNo<>RVData.GetItemStyle(i) then begin + RVData.GetItem(i).StyleNo := StyleNo; + if ClearTags then + RVData.SetItemTag(i, 0); + Result := True; + end; + end; + end; + if Result then + RVData.Normalize; +end; +{------------------------------------------------------------------------------} +procedure DetectURL(rve: TCustomRichViewEdit; URLScanProcedure: TRVURLScanProcedure; + AssignTags: Boolean); +var ItemNo, WordEnd, WordStart, CurStyleNo, HypStyleNo: Integer; + s: String; + EndShifted: Boolean; +begin + rve := rve.TopLevelEditor; + if rve.SelectionExists then + exit; + ItemNo := rve.CurItemNo; + if (rve.GetItemStyle(ItemNo)<0) or rve.Style.TextStyles[rve.GetItemStyle(ItemNo)].Jump then + exit; + WordEnd := rve.OffsetInCurItem; + if WordEnd<=1 then + exit; + s := rve.GetItemTextA(ItemNo); + WordStart := WordEnd-1; + while (WordStart>1) and (s[WordStart-1]<>' ') do + dec(WordStart); + EndShifted := False; + s := Copy(s, WordStart, WordEnd-WordStart); + if (Length(s)>0) and (s[1] in ['<','(','{','[','''','"','‘','’','“','”']) then begin + inc(WordStart); + s := Copy(s, 2, Length(s)-1); + end; + if (Length(s)>0) and (s[Length(s)] in ['>',')','}',']','''','"','‘','’','“','”',',',':',';']) then begin + dec(WordEnd); + s := Copy(s, 1, Length(s)-1); + EndShifted := True; + end; + if RVIsEmail(s) or RVIsURL(s) then begin + CurStyleNo := rve.CurTextStyleNo; + rve.SetSelectionBounds(ItemNo, WordStart, ItemNo, WordEnd); + HypStyleNo := rve.GetItemStyle(ItemNo); + URLScanProcedure(HypStyleNo, HypStyleNo, True); + rve.ApplyTextStyle(HypStyleNo); + if not RVIsURL(s) and RVIsEmail(s) then + s := 'mailto:'+s; + if AssignTags and (rvoTagsArePChars in rve.Options) then + rve.SetCurrentTag(Integer(StrNew(PChar(s)))); + rve.SetSelectionBounds(rve.CurItemNo, rve.OffsetInCurItem, rve.CurItemNo, rve.OffsetInCurItem); + if EndShifted then + SendMessage(rve.Handle, WM_KEYDOWN, VK_RIGHT, 0); + rve.CurTextStyleNo := CurStyleNo; + end; +end; +{------------------------------------------------------------------------------} +procedure TerminateHyperlink(rve: TCustomRichViewEdit; + URLScanProcedure: TRVURLScanProcedure; Forced: Boolean); +var StyleNo: Integer; +begin + if (rve.CurTextStyleNo=rve.CurItemStyle) and + rve.Style.TextStyles[rve.CurTextStyleNo].Jump and + not rve.SelectionExists then begin + rve := rve.TopLevelEditor; + if (rve.OffsetInCurItem>=rve.GetOffsAfterItem(rve.CurItemNo)) or Forced then begin + StyleNo := rve.CurTextStyleNo; + URLScanProcedure(StyleNo, StyleNo, False); + rve.CurTextStyleNo := StyleNo; + end; + end; +end; +{------------------------------------------------------------------------------} +// Returns WideString from the Clipboard +function GetTextFromClipboardW: WideString; +var + mem: Cardinal; + ptr: Pointer; + s: String; +begin + Result := ''; + Clipboard.Open; + try + mem := Clipboard.GetAsHandle(CF_UNICODETEXT); + SetLength(s, GlobalSize(mem)); + ptr := GlobalLock(mem); + Move(ptr^,PChar(s)^, Length(s)); + GlobalUnlock(mem); + finally + Clipboard.Close; + end; + if Length(s)=0 then exit; + ptr := RVU_StrScanW(Pointer(s), 0, Length(s) div 2); + if ptr<>nil then + SetLength(s, PChar(ptr)-PChar(s)); + Result := RVU_RawUnicodeToWideString(s); +end; +{------------------------------------------------------------------------------} +// Pastes plain text from the Clipboard with URL detection +// Works only if RVF and RTF is not available in the Clipboard +function PasteTextWithURLs(rve: TCustomRichViewEdit; + URLScanProc: TRVURLScanProcedure): Boolean; +var RichView: TRichView; + Stream: TMemoryStream; +begin + Result := False; + if not Clipboard.HasFormat(CF_TEXT) or + Clipboard.HasFormat(CFRV_RVF) or + Clipboard.HasFormat(CFRV_RTF) then + exit; + RichView := TRichView.Create(nil); + try + RichView.Style := rve.Style; + RichView.Visible := False; + RichView.Options := rve.Options; + RichView.Parent := rve.Parent; + if rve.Style.TextStyles[rve.CurItemStyle].Unicode and + Clipboard.HasFormat(CF_UNICODETEXT) then + RichView.AddTextNLW(GetTextFromClipboardW, rve.CurItemStyle, rve.CurParaStyleNo, + rve.CurParaStyleNo, False) + else + RichView.AddTextNLA(Clipboard.AsText, rve.CurItemStyle, rve.CurParaStyleNo, + rve.CurParaStyleNo); + ScanURLs(RichView.RVData, URLScanProc, True); + Stream := TMemoryStream.Create; + try + RichView.SaveRVFToStream(Stream, False); + Stream.Position := 0; + rve.InsertRVFFromStreamEd(Stream); + Result := True; + finally + Stream.Free; + end; + finally + RichView.Free; + end; +end; + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/Unit1.dfm new file mode 100644 index 0000000..00dd64c Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/Unit1.pas new file mode 100644 index 0000000..89072f5 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Hypertext/URLs/Unit1.pas @@ -0,0 +1,338 @@ + +{*******************************************************} +{ } +{ RichView } +{ Demo: URL detection } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{ + This demo shows: + - how to detect all URLs in text; + - how to detect URLs in pasted text; + - how to detect URLs on typing; + - how to close hyperlink when user presses Space, Enter or punctuation character; + - how to remove hyperlink using popup menu; + - how to implement hypertext in editor without using Ctrl key; + - how to modify hyperlink's tag when its visible text is changed; + - how to remove hyperlink when its visible text was changed to non-URL; + - how to display hyperlinks targets in hints. +} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, StdCtrls, ExtCtrls, ShellApi, + RVStyle, RVScroll, RichView, RVEdit, CRVData, CRVFData, + RVUni, RVFuncs, RVItem, RVLinear, + URLScan, Menus, RVTypes; + +type + TForm1 = class(TForm) + Panel1: TPanel; + btnOpen: TButton; + btnScan: TButton; + rve: TRichViewEdit; + RVStyle1: TRVStyle; + od: TOpenDialog; + cbAutodetect: TCheckBox; + cbAutoremove: TCheckBox; + StatusBar1: TStatusBar; + cbUseCtrl: TCheckBox; + PopupMenu1: TPopupMenu; + mitRemoveHyperlink: TMenuItem; + cbPasteDetect: TCheckBox; + procedure btnOpenClick(Sender: TObject); + procedure btnScanClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure rveJump(Sender: TObject; id: Integer); + procedure rveItemTextEdit(Sender: TCustomRichViewEdit; + const OldText: TRVRawByteString; RVData: TCustomRVData; ItemNo: Integer; + var NewTag, NewStyleNo: Integer); + procedure rveItemHint(Sender: TCustomRichView; RVData: TCustomRVData; + ItemNo: Integer; var HintText: String); + procedure cbUseCtrlClick(Sender: TObject); + procedure rveRVMouseUp(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure rveKeyPress(Sender: TObject; var Key: Char); + procedure PopupMenu1Popup(Sender: TObject); + procedure mitRemoveHyperlinkClick(Sender: TObject); + procedure rvePaste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); + procedure rveGetItemCursor(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; var Cursor: TCursor); + private + { Private declarations } + SimpleClickHypertext: Boolean; + procedure URLScanEvent(OldStyleNo: Integer; var NewStyleNo: Integer; + ToHypertext: Boolean); + procedure DisplayHint(Sender: TObject); + public + { Public declarations } + + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +begin + // Uncomment this line to test working with Unicode + // RVStyle1.TextStyles[0].Unicode := True; + rve.Clear; + rve.AddNL('This demo shows how to implement URL scanning',0,0); + rve.AddNL('Click the button, and URLs (like this - "www.richedit.com/") will be highlighted.',0,0); + rve.AddNL('Ctrl+click URL to launch browser or e-mail client',0,0); + rve.Format; + Application.OnHint := DisplayHint; +end; +{------------------------------------------------------------------------------} +{ Opening text or RTF file } +procedure TForm1.btnOpenClick(Sender: TObject); +var r: Boolean; +begin + if not od.Execute then + exit; + Screen.Cursor := crHourglass; + rve.Clear; + rve.DeleteUnusedStyles(True,True,True); + case od.FilterIndex of + 1: r := rve.LoadText(od.FileName,0,0,False); + 2: r := rve.LoadRTF(od.FileName); + else r := False; + end; + rve.Format; + Screen.Cursor := crDefault; + if not r then + Application.MessageBox('Error loading file', 'Error', MB_OK or MB_ICONSTOP); +end; +{------------------------------------------------------------------------------} +{ Removing all hyperlinks, then rescanning the whole document for URLs. + Clearing undo buffers. } +procedure TForm1.btnScanClick(Sender: TObject); +var r: Boolean; +begin + Screen.Cursor := crHourglass; + // Moving caret to the beginning + rve.SetSelectionBounds(0, rve.GetOffsBeforeItem(0), 0, rve.GetOffsBeforeItem(0)); + // Clearing undo/redo buffers + rve.ClearUndo; + // removing old hypertext links + r := ClearHypertext(rve.RVData, URLScanEvent, True); + // scanning for URLs + r := ScanURLs(rve.RVData, URLScanEvent, True) or r; + if r then + rve.Format; + Screen.Cursor := crDefault; + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Callback procedure, called from ClearHypertext and ScanURLs. Also used in + rve.OnItemTextEdit and OnPaste events. + Returns index of style (NewStyleNo) for converting the original style + (OldStyleNo) to. + If ToHypertext=True, this procedure converts style to hyperlink. + If ToHypertext=False, this procedure converts style to normal text. } +procedure TForm1.URLScanEvent(OldStyleNo: Integer; var NewStyleNo: Integer; + ToHypertext: Boolean); +var Style: TFontInfo; +begin + // Constructing the desired style + Style := TFontInfo.Create(nil); + Style.Assign(RVStyle1.TextStyles[OldStyleNo]); + Style.Jump := ToHypertext; + if ToHypertext then begin + // Hypertext links will be blue and underlined + Style.Style := Style.Style+[fsUnderline]; + Style.Color := clBlue; + Style.JumpCursor := crJump; + end + else begin + // Plain text will be black and not underlined + Style.Style := Style.Style-[fsUnderline]; + Style.Color := clWindowText; + end; + // May be such style already exists? + NewStyleNo := RVStyle1.TextStyles.FindSuchStyle(OldStyleNo,Style,RVAllFontInfoProperties); + if NewStyleNo=-1 then begin + // Does not exist, adding... + RVStyle1.TextStyles.Add.Assign(Style); + NewStyleNo := RVStyle1.TextStyles.Count-1; + RVStyle1.TextStyles[NewStyleNo].Standard := False; + end; + Style.Free; +end; +{------------------------------------------------------------------------------} +{ STANDARD HIPERTEXT PROCESSING. + OnJump event. Called when the user clicks hyperlink in standard hypertext mode + (holding Ctrl key) } +procedure TForm1.rveJump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; + url: String; +begin + if SimpleClickHypertext then + exit; + rve.GetJumpPointLocation(id, RVData, ItemNo); + url := PChar(RVData.GetItemTag(ItemNo)); + ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOW); +end; +{------------------------------------------------------------------------------} +{ ALTERNATIVE HYPERTEXT PROCESSING + OnRVMouseUp event. We use it to process click on hyperlink in the simple click + mode (without using Ctrl key) } +procedure TForm1.rveRVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); +var LRVData: TCustomRVFormattedData; + LItemNo, LOffs: Integer; + url: String; + pt: TPoint; +begin + if not SimpleClickHypertext or (Button<>mbLeft) or + Sender.SelectionExists then + exit; + pt := Sender.ClientToDocument(Point(X,Y)); + if Sender.GetItemAt(pt.X, pt.Y, LRVData, LItemNo, LOffs, True) and + LRVData.GetItem(LItemNo).GetBoolValueEx(rvbpJump, Sender.Style) then begin + url := PChar(LRVData.GetItemTag(LItemNo)); + ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOW); + end; +end; +{------------------------------------------------------------------------------} +{ ALTERNATIVE HYPERTEXT PROCESSING + Returning hypertext cursor } +procedure TForm1.rveGetItemCursor(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; var Cursor: TCursor); +begin + if SimpleClickHypertext and + RVData.GetItem(ItemNo).GetBoolValueEx(rvbpJump, Sender.Style) then + if RVData.GetItemStyle(ItemNo)>=0 then + Cursor := Sender.Style.TextStyles[RVData.GetItemStyle(ItemNo)].JumpCursor + else + Cursor := Sender.Style.JumpCursor; +end; +{------------------------------------------------------------------------------} +{ OnKeyPress. Detecting URLs on typing (if cbAutodetect is checked). + URL is detected when the user presses Space, Enter, Tab, semicolon, comma. + This procedure also closes hyperlink (sets current style to normal text) } +procedure TForm1.rveKeyPress(Sender: TObject; var Key: Char); +begin + if Key in [' ', #13, #9, ';', ','] then begin + // url detection + if cbAutodetect.Checked then + DetectURL(rve, URLScanEvent, True); + // closing url if necessary + TerminateHyperlink(rve, URLScanEvent, Key in [' ', #9, ';', ',']); + end; +end; +{------------------------------------------------------------------------------} +{ OnItemTextEdit. Updating tag when text of hyperlink is edited. + Removing hyperlink when the text is not an URL any more (if cbAutoremove is + checked) } +procedure TForm1.rveItemTextEdit(Sender: TCustomRichViewEdit; + const OldText: TRVRawByteString; RVData: TCustomRVData; ItemNo: Integer; + var NewTag, NewStyleNo: Integer); +var OldText2, NewText: String; + StyleNo: Integer; +begin + if NewTag=0 then + exit; + StyleNo := RVData.GetItemStyle(ItemNo); + if Sender.Style.TextStyles[StyleNo].Unicode then + OldText2 := RVU_UnicodeToAnsi(RVData.GetStyleCodePage(StyleNo), OldText) + else + OldText2 := OldText; + NewText := RVData.GetItemText(ItemNo); + if cbAutoremove.Checked and (NewText='') then begin + // If new text is empty, removing hyperlink + NewTag := 0; + URLScanEvent(NewStyleNo, NewStyleNo, False); + exit; + end; + if (StrComp(PChar(OldText2), PChar(NewTag))=0) then begin + // If text before editing was equal to tag ... + if cbAutoremove.Checked and + (RVIsURL(OldText2) or RVIsEmail(OldText2)) and + not (RVIsURL(NewText) or RVIsEmail(NewText)) then begin + // ... if text is not URL any more, removing hyperlink + NewTag := 0; + URLScanEvent(NewStyleNo, NewStyleNo, False); + exit; + end; + // ... update tag to new text + NewTag := Integer(StrNew(PChar(NewText))); + end; +end; +{------------------------------------------------------------------------------} +{ OnItemHint. Displaying tag strings in hints } +procedure TForm1.rveItemHint(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; var HintText: String); +begin + HintText := PChar(RVData.GetItemTag(ItemNo)); +end; +{------------------------------------------------------------------------------} +{ Switching the standard and the simple-click hypertext modes } +procedure TForm1.cbUseCtrlClick(Sender: TObject); +begin + SimpleClickHypertext := not cbUseCtrl.Checked; +end; +{------------------------------------------------------------------------------} +{ Disabling/enabling the popup menu items on popup } +procedure TForm1.PopupMenu1Popup(Sender: TObject); +begin + mitRemoveHyperlink.Enabled := rve.TopLevelEditor.GetItem + (rve.TopLevelEditor.CurItemNo).GetBoolValueEx(rvbpJump, RVStyle1); +end; +{------------------------------------------------------------------------------} +{ Removing hyperlink at the caret position } +procedure TForm1.mitRemoveHyperlinkClick(Sender: TObject); +var LStyleNo: Integer; + LPos: Integer; +begin + with rve.TopLevelEditor do begin + if not GetItem(CurItemNo).GetBoolValueEx(rvbpJump, RVStyle1) then + exit; + LPos := RVGetLinearCaretPos(rve.TopLevelEditor); + SetSelectionBounds(CurItemNo, GetOffsBeforeItem(CurItemNo), + CurItemNo, GetOffsAfterItem(CurItemNo)); + BeginUndoGroup(rvutTag); + SetUndoGroupMode(True); + try + SetCurrentTag(0); + URLScanEvent(CurItemStyle, LStyleNo, False); + ApplyTextStyle(LStyleNo); + finally + SetUndoGroupMode(False); + end; + RVSetLinearCaretPos(rve.TopLevelEditor, LPos); + end; +end; +{------------------------------------------------------------------------------} +{ Displaying hints in status bar } +procedure TForm1.DisplayHint(Sender: TObject); +begin + StatusBar1.SimpleText := GetLongHint(Application.Hint); +end; +{------------------------------------------------------------------------------} +{ Detecting URLs on pasting plain text (only if RVF or RTF is not available) } +procedure TForm1.rvePaste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); +begin + if cbPasteDetect.Checked then + DoDefault := not PasteTextWithURLs(Sender, URLScanEvent); +end; + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/International/Accents/Accents.bdsproj b/12.0.4/Demos/Delphi/Assorted/International/Accents/Accents.bdsproj new file mode 100644 index 0000000..5110d29 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/International/Accents/Accents.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Accents.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/International/Accents/Accents.dpr b/12.0.4/Demos/Delphi/Assorted/International/Accents/Accents.dpr new file mode 100644 index 0000000..e7900b0 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/International/Accents/Accents.dpr @@ -0,0 +1,13 @@ +program Accents; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/International/Accents/Accents.res b/12.0.4/Demos/Delphi/Assorted/International/Accents/Accents.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/International/Accents/Accents.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/International/Accents/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/International/Accents/Unit1.dfm new file mode 100644 index 0000000..684dcaa Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/International/Accents/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/International/Accents/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/International/Accents/Unit1.pas new file mode 100644 index 0000000..6637558 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/International/Accents/Unit1.pas @@ -0,0 +1,52 @@ +{==============================================================================} +{ + This demo shows working with Unicode composite characters. + Special processing for these characters is available only in WinNT/2000/XP. + (and depends on Windows version...) +} +{==============================================================================} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, RVEdit, RVStyle; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichViewEdit1: TRichViewEdit; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; +begin + for i := 0 to RVStyle1.TextStyles.Count-1 do + RVStyle1.TextStyles[i].Unicode := True; + + RichViewEdit1.Clear; + RichViewEdit1.LoadRVF(ExtractFilePath(Application.ExeName)+'test.rvf'); + // May be your computer does not have 'Arial Unicode MS' font + if Screen.Fonts.IndexOf('Arial Unicode MS')<0 then + for i := 0 to RVStyle1.TextStyles.Count-1 do + if RVStyle1.TextStyles[i].FontName = 'Arial Unicode MS' then + RVStyle1.TextStyles[i].FontName := 'Lucida Sans Unicode'; + + RichViewEdit1.Format; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/International/Accents/test.rvf b/12.0.4/Demos/Delphi/Assorted/International/Accents/test.rvf new file mode 100644 index 0000000..1dba07f Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/International/Accents/test.rvf differ diff --git a/12.0.4/Demos/Delphi/Assorted/International/RTL/RTL.bdsproj b/12.0.4/Demos/Delphi/Assorted/International/RTL/RTL.bdsproj new file mode 100644 index 0000000..36b8e86 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/International/RTL/RTL.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + RTL.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/International/RTL/RTL.dpr b/12.0.4/Demos/Delphi/Assorted/International/RTL/RTL.dpr new file mode 100644 index 0000000..b9c769c --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/International/RTL/RTL.dpr @@ -0,0 +1,13 @@ +program RTL; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/International/RTL/RTL.res b/12.0.4/Demos/Delphi/Assorted/International/RTL/RTL.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/International/RTL/RTL.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/International/RTL/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/International/RTL/Unit1.dfm new file mode 100644 index 0000000..f28316d Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/International/RTL/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/International/RTL/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/International/RTL/Unit1.pas new file mode 100644 index 0000000..6317e79 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/International/RTL/Unit1.pas @@ -0,0 +1,173 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ComCtrls, RVStyle, RVScroll, RichView, RVEdit, + ExtCtrls, CRVData, RVTable; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + Panel1: TPanel; + cmbA: TComboBox; + rveA: TRichViewEdit; + rvsA: TRVStyle; + btnOpenA: TButton; + Label1: TLabel; + Panel2: TPanel; + Label2: TLabel; + cmbH: TComboBox; + btnOpenH: TButton; + rveH: TRichViewEdit; + rvsH: TRVStyle; + od: TOpenDialog; + procedure FormCreate(Sender: TObject); + procedure cmbAClick(Sender: TObject); + procedure cmbHClick(Sender: TObject); + procedure btnOpenAClick(Sender: TObject); + procedure btnOpenHClick(Sender: TObject); + private + { Private declarations } + CurrentCharset: TFontCharset; + Found: Boolean; + procedure FillComboBox(cmb: TComboBox; Charset: TFontCharset); + procedure ApplyFont(const FontName: String; rvs: TRVStyle; + Charset: TFontCharset; + rve: TRichViewEdit); + public + { Public declarations } + procedure OpenFile(rve: TRichViewEdit); + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} +// Callback function for EnumFontFamilies +function EnumFontCharsets(var EnumLogFont: TEnumLogFontEx; + PTextMetric: PNewTextMetricEx; FontType: Integer; Data: LPARAM): Integer; + export; stdcall; +var frm: TForm1; +begin + frm := TForm1(Data); + frm.Found := EnumLogFont.elfLogFont.lfCharSet=frm.CurrentCharset; + if frm.Found then + Result := 0 + else + Result := 1; +end; +{=============================== TForm1 =======================================} +procedure TForm1.FormCreate(Sender: TObject); +begin + Screen.Cursor := crHourGlass; + FillComboBox(cmbA, ARABIC_CHARSET); + FillComboBox(cmbH, HEBREW_CHARSET); + rveA.Clear; + rveH.Clear; + if cmbA.Items.Count>0 then begin + rveA.AddNL('Open Arabic RTF or text file, for example ARABIC.RTF',0,0); + rveA.Format; + cmbA.ItemIndex := 0; + cmbAClick(cmbA); + end + else begin + rveA.AddNL('There are no Arabic fonts installed',0,0); + rveA.Format; + btnOpenA.Enabled := False; + end; + if cmbH.Items.Count>0 then begin + rveH.AddNL('Open Hebrew RTF or text file, for example HEBREW.RTF',0,0); + rveH.Format; + cmbH.ItemIndex := 0; + cmbHClick(cmbH); + end + else begin + rveH.AddNL('There are no Hebrew fonts installed',0,0); + rveH.Format; + btnOpenH.Enabled := False; + end; + + Screen.Cursor := crDefault; +end; +{------------------------------------------------------------------------------} +// Filling combobox with fonts with given charset +procedure TForm1.FillComboBox(cmb: TComboBox; Charset: TFontCharset); +var DC: HDC; + i: Integer; +begin + CurrentCharset := Charset; + DC := GetDC(0); + cmb.Items.BeginUpdate; + try + for i := 0 to Screen.Fonts.Count-1 do begin + Found := False; + EnumFontFamilies(DC, PChar(Screen.Fonts[i]), @EnumFontCharsets, Longint(Self)); + if Found then + cmb.Items.Add(Screen.Fonts[i]); + end; + finally + cmb.Items.EndUpdate; + ReleaseDC(0, DC); + end; +end; +{------------------------------------------------------------------------------} +// Changing font of all text styles +procedure TForm1.ApplyFont(const FontName: String; rvs: TRVStyle; + Charset: TFontCharset; rve: TRichViewEdit); +var i: Integer; +begin + for i := 0 to rvs.TextStyles.Count-1 do begin + rvs.TextStyles[i].FontName := FontName; + rvs.TextStyles[i].Charset := Charset; + end; + rve.SetSelectionBounds(0, rve.GetOffsBeforeItem(0),0, rve.GetOffsBeforeItem(0)); + rve.Format; +end; +{------------------------------------------------------------------------------} +procedure TForm1.OpenFile(rve: TRichViewEdit); +var r: Boolean; +begin + if not od.Execute then + exit; + rve.Clear; + r := False; + case od.FilterIndex of + 1: r := rve.LoadRTF(od.FileName); + 2: r := rve.LoadText(od.FileName,0,0,False); + end; + if not r then + Application.MessageBox('Error loading file', 'Error', MB_OK or MB_ICONSTOP); + rve.Format; +end; +{------------------------------------------------------------------------------} +procedure TForm1.cmbAClick(Sender: TObject); +begin + if cmbA.ItemIndex>=0 then + ApplyFont(cmbA.Items[cmbA.ItemIndex], rvsA, ARABIC_CHARSET, rveA); +end; +{------------------------------------------------------------------------------} +procedure TForm1.cmbHClick(Sender: TObject); +begin + if cmbH.ItemIndex>=0 then + ApplyFont(cmbH.Items[cmbH.ItemIndex], rvsH, HEBREW_CHARSET, rveH); +end; +{------------------------------------------------------------------------------} +procedure TForm1.btnOpenAClick(Sender: TObject); +begin + OpenFile(rveA); + cmbAClick(cmbA); +end; +{------------------------------------------------------------------------------} +procedure TForm1.btnOpenHClick(Sender: TObject); +begin + OpenFile(rveH); + cmbHClick(cmbH); +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/International/RTL/arabic.rtf b/12.0.4/Demos/Delphi/Assorted/International/RTL/arabic.rtf new file mode 100644 index 0000000..f9dcd2c --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/International/RTL/arabic.rtf @@ -0,0 +1,554 @@ +{\rtf1\ansi\ansicpg1251\uc1 \deff0\deflang1049\deflangfe1049{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f28\fswiss\fcharset128\fprq2{\*\panose 020b0604020202020204}Arial Unicode MS;} +{\f29\fswiss\fcharset128\fprq2 @Arial Unicode MS;}{\f31\froman\fcharset178\fprq2{\*\panose 00000000000000000000}Times New Roman (Arabic);}{\f33\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Arabic){\*\falt Arial};} +{\f161\froman\fcharset238\fprq2 Times New Roman CE;}{\f162\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f164\froman\fcharset161\fprq2 Times New Roman Greek;}{\f165\froman\fcharset162\fprq2 Times New Roman Tur;} +{\f166\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f167\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f168\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f387\fswiss\fcharset0\fprq2 Arial Unicode MS Western;} +{\f385\fswiss\fcharset238\fprq2 Arial Unicode MS CE;}{\f386\fswiss\fcharset204\fprq2 Arial Unicode MS Cyr;}{\f388\fswiss\fcharset161\fprq2 Arial Unicode MS Greek;}{\f389\fswiss\fcharset162\fprq2 Arial Unicode MS Tur;} +{\f390\fswiss\fcharset177\fprq2 Arial Unicode MS (Hebrew);}{\f391\fswiss\fcharset178\fprq2 Arial Unicode MS (Arabic);}{\f392\fswiss\fcharset186\fprq2 Arial Unicode MS Baltic;}{\f395\fswiss\fcharset0\fprq2 @Arial Unicode MS Western;} +{\f393\fswiss\fcharset238\fprq2 @Arial Unicode MS CE;}{\f394\fswiss\fcharset204\fprq2 @Arial Unicode MS Cyr;}{\f396\fswiss\fcharset161\fprq2 @Arial Unicode MS Greek;}{\f397\fswiss\fcharset162\fprq2 @Arial Unicode MS Tur;} +{\f398\fswiss\fcharset177\fprq2 @Arial Unicode MS (Hebrew);}{\f399\fswiss\fcharset178\fprq2 @Arial Unicode MS (Arabic);}{\f400\fswiss\fcharset186\fprq2 @Arial Unicode MS Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255; +\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0; +\red128\green128\blue128;\red192\green192\blue192;\red240\green0\blue6;\red242\green232\blue180;\red255\green255\blue255;\red226\green221\blue156;\red255\green250\blue230;\red253\green211\blue149;}{\stylesheet{ +\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \ul\cf2 \sbasedon10 Hyperlink;}{ +\s16\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\cf1\lang1049\langfe1049\loch\f28\hich\af28\dbch\af28\cgrid\langnp1049\langfenp1049 \sbasedon0 \snext16 Normal (Web);}{\*\cs17 \additive +\ul\cf12 \sbasedon10 FollowedHyperlink;}}{\info{\title This page is from http://weather}{\author Sergey Tkachenko}{\operator Sergey Tkachenko}{\creatim\yr2001\mo11\dy19\hr15\min50}{\revtim\yr2001\mo11\dy19\hr15\min57}{\version3}{\edmins7}{\nofpages1} +{\nofwords0}{\nofchars0}{\*\company Home}{\nofcharsws0}{\vern8249}}\paperw11906\paperh16838\margl1701\margr850\margt1134\margb1134 +\deftab708\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1701\dgvorigin1134\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl +{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5 +\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 { +\lang1033\langfe1049\langnp1033 This page is from http://weather.naseej.com.sa +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f167\cf9 \loch\af167\dbch\af0\hich\f167 \'cd\'c7\'e1\'c9}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\f167\cf9 +\loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d8\'de\'d3}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\f167\cf9 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'e3\'ca\'e6\'de\'da\'c9}{\b\cf9\lang1033\langfe1049\langnp1033 +\hich\af0\dbch\af0\loch\f0 }{\b\f167\cf9 \loch\af167\dbch\af0\hich\f167 \'e1\'e3\'cf\'ed\'e4\'c9}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\f167\fs36\cf17 \loch\af167\dbch\af0\hich\f167 \'c7\'d3\'d8\'e4\'c8\'e6\'e1}{ +\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\cf9\lang1033\langfe1049\langnp1033 \line }{\b\f167\cf9 \loch\af167\dbch\af0\hich\f167 \'e1\'ed\'e6\'e3}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\f167\cf9 +\loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d3\'c8\'ca}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\cf9\lang1033\langfe1049\langnp1033 \~}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 17-11-2001 }{ +\b\fs27\cf9\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth3\trwWidth6351\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 \clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\clcbpat18\cltxlrtb\clftsWidth3\clwWidth6351 \cellx6351\nestrow}{\nonesttables +\par }}\trowd \trqc\trleft-15\trftsWidth2\trwWidth2529\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth5000 +\cellx6366\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\fs20\lang1033\langfe1049\langnp1033 \trowd \trqc\trleft-15\trftsWidth2\trwWidth2529\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth2\clwWidth5000 \cellx6366\row }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'ed\'e6\'e3\'ed\'e4}{\b\lang1033\langfe1049\langnp1033 +\hich\af0\dbch\af0\loch\f0 }{\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'de\'c7\'cf\'e3\'ed\'e4}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'ed\'e6\'e3}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat8\cltxlrtb\clftsWidth2\clwWidth3501 \cellx4497\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat8\cltxlrtb\clftsWidth2\clwWidth1413 \cellx6277 +\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'c5\'cb\'e4\'ed\'e4}{\lang1033\langfe1049\langnp1033 }{ +\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'c3\'cd\'cf}{\lang1033\langfe1049\langnp1033 }{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d3\'c8\'ca}{\lang1033\langfe1049\langnp1033 }{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat20\cltxlrtb\clftsWidth2\clwWidth1834 \cellx2356\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat20\cltxlrtb\clftsWidth2\clwWidth1639 \cellx4497\clvertalc +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat20\cltxlrtb\clftsWidth2\clwWidth1413 \cellx6277\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1027{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw1085\pich1032\picwgoal615\pichgoal585\pngblip\bliptag632555790{\*\blipuid 25b4090ee6c023eaa4f12def25cdc878}89504e470d0a1a0a0000000d49484452000000290000002708020000001d08f6d10000000373424954050605330b8d80000000017352474200aece1ce900000c +874944415458474d58cf6f2449567e558ef446bab3dc113d99dd15332e70ccb4974da3465b46b3928d765663a43dec6d971be2c6811bbb42fc0dfc055c3870d8 +037358890b2bcd01a44602a91b31c846db626aa45ec811369bc954d219d8a1ca6877b89aef6579d1e66497632a23e3fdfedefb6aa444a97353fb2e4822dcf808 +24233e25450af8ff2c7591484915ebe01d494531287c1f02097e075f9148f9cdd84b11f014bb89d2107a99a541f4d82a231f4f78ca2f6227e92847569d96c773 +ca2808aa711cbf275321593cbfdf510665d22e761a4708bc089dc25484e03a5e67069f381ec252d14b72c3e99224cbea70600ca924aba4c5f5d8da995199d294 +9e7e783a667b334db9ee73495325f72c4d6d9fe94ae93aa70e5691ebf157ca0e6766aa93ba974ae36411eade7512cf82932c8e37b0d302deeac8d58a5c16cc63 +63a746e5b8b552388675ea236b3b26c18a76be73f0277c3bb8a481be19b9509b29756e81ef529912047348b00a4af65a7421c27417f0069c99111cae62af326a +da1aaab8e854cec121b87d90c241e488dc5d637e21935a6a230d36b2d2224c7384bc36194eaeec54055773d01002d212e120a76365652363133cccdea44a67a4 +b3d1e9cbaaab2b08933e68911a248ad27a22395e31f47dc0b5113e0e83f9bc55e0e01439930adcbc55291522d97d6365489b334948a5bb9d4ab832278d00c35b +ac4dd0b1d654975355bd38435011e6723a3578940e375e8c3d642301d98ac10d635833a437dcd26321452aa342dc52619c97b47fbcb8ac7fef1b64eba72654e4 +6b8a1036a4ae24050baeb186e5014fade886a7f2e49bf3329f1e1d1c963353ee5bbbc7c14eb374a3fac6f99b78f769b6c900244a47f079749b92e8052a44c374 +45dde9134dd57318977250a02f8c1e6a811d8e12eaa614e633bd68ebf2e3133333a7c727365727f3d2ceb4992a93c38943a66d64dff95c4053180173a17b6da9 +96b00f3775703e8ad8a0fa5b870a38b152564f55a8c9392514796932c99e68617138cc91fbd22173ca239bdb43587c0073558a8afad56b02370f3002bbd964a4 +1fea08d52153a5c8e6c1aa202fcfa71e7a747ddbb9883a54734573e1c2e2b976082d29e48740981b7b7d7648b09bdc7550fbd6ec9553541417840c4875383543 +ba292c78bd317db07e4bacf547c727695644917a84cbb5faa631b17e2247e9551ba34b803a32496fbc5dfbc37b22b8cb220d07db41081fdeb693317deb1d7ff4 +304104abab447f7062f60eed04a2a3dc151439b02c680d33872073b08588e293bffc648c8ce14073de4bd2369d5a460787f20018d1711694af425b75ad53a103 +5a9c96ea641f40cbbbe6fbea7b1fd27c9fa6d99065b1d7ecc5219f39a5f950a40bfcca450800dedcd8038c80dd6afbb7bef59dd33841ed465ac778334a288b42 +2f6f2843146567e3b258c74968b5f4939da8a7d27ca0d399269dccee53715f8cbe163c053fd6c983993007619c88318d28e956d7a3ad34061f6e4284ddeb410b +7caee189f493bff8f15676931dfda60d3797e97a6984d702b1854fa20b7e7455db75fdf55d289126e4d5bb6276900b3dc91eaaa88ad18e563b42eca462478cb6 +32bf4ec4fd2288e27a2d466214c7b1bdf210e3ae7c84ec95f7c1dfc21b6f46f08458c59ffcf8275b4f4438fd6d63c40bb35ee8abc5ebfffc2c71cbe426889be5 +84bc5835f1c6d1d841eae403430fb47c686967467246a2900240aa85980959d028be8eb10d898f4902680cb7fd2a4258bce10044880ef000ff89f877153efdeb +4fb766db941674f9efcf476fddeca19e2965328de299ed26f15535720e90ae1eca099cfc2017ef1d086de89e1113235334b6106e625c033027000977d5fa15e4 +f4c94eda79f445e1bde3c87b8785c705eb57c1c1a5eef5f3bffb872d2ff3dffdfd3ff0f9ec65483ffba279f98be5af41f676d0eea2ccdcec0163efec37728158 +3eb2b46bc4fb07f4a04063e5f41d45b11ec185fe46084a12a2ebff79f9dab7f5575e6cc978e3896ec30a3623e4916f349fff0dedd5d2bff28b7f7eb145bb071f +7efbb45e459115f2a1c1e3eadf5e5e7cf1a21879f6b9a0c9036058261ebc4be94ce633dac97852100997cd7a446f9147a8a400ef67db44af5f4e9251d746f487 +f6ca75ab08d5fac15c34fc8df968ea8879f5af2fb766e3c3ef7ee7bbc5a3023914639cec1afd4e21ef6517fff5e5ed16c5316539a5f78a4c19f424da2db84cc7 +903aa1885e1ac8bb1896e2c647283af6a35505c0715f3a7fe55ffcbcb978d5a138dd2b58eefc2a3a76382eef5bec69c6bdefb8dbb4755f2d0c0583e61f9ccef5 +e17c0e904ad55d4f63f4bf464b752cefffefa1196f8621ee65b1db2c6c4e46049b5199a53a7629c370159a057002ba32fe0fa8ba7520f547bf6393d78b837b4b +7af522f355b1f67637e17612bbc97614e330d1401a41db9ad681de12ad3c79dc3521637b1ff1e53a8871f4574d58bb800abecd606741c981926627cc767cb11d +8d8c26a37c37d52a3372529ffd6c8411e9d93f7e4a6f2a9576a16b9efdcbb34fffe629700d3d0a5be707a473b2384369959740d7a1130c9321a323fef5403498 +127ced1c4686d03b7217f4ec39fba817985e06cf00db0750eb13cdb3652feb7f6ab6b43af8c33ff951ff966e1f58f14e59d88fa22eeb572427997e4f1739fa39 +2022242317c7d771dd8a7182b940c62890dfeb288004eb25ddb47185c6e3b1f7b623ff152d1dbdfc8ace5bf27ba5d307eefefb7e627107f575392db347073fff +d9c548c9f2ecc5b3c5e20c4dcc60c0c9b46bfbeea24a3100c62a5c3eeb97e78893dd235370470ad20c830ada513a60355a3e9200912684a05ef2f416a20a64ce +1a3aafa99e18caad4433951867b981a6689631fdab3ffbf32d25267ffac77fe4572e19f7f4f696f13f065d188cbcc696612d9ba68dee3ab65efb2801c55f4373 +ba156befaf6a811ebe0ef1aa97e349fbdfa15b65e7ffe1fffe1c93a512dbfadddda2286609c645914070fe4ef16e9115f7338d04ccd4f94fff76ab10fa873ffa +a1eb834013d91efaea9a1b3af775d4128998a4fabe4ec632009919105d78e56e51a1378046bfac5b7f155faf447715fd6ab2f805555f85a82172a61fcd8af76c +f6ebef678f8a740b858ef13ec12421339545faeca74fc5c001a412d2712e70d31b467b3813427a60a5de2f319657d7f4f9178dbeae4e9fa0e73afcc7dc028c22 +4a2cabcb669a4b6465f9f848ef4bf9e444ed590c0c98860cc621a27ae9eaa6e618213ac855901b0a981571f1e078374e20961c4d9e3af8093e272003ba4b58fc +02392a24e6aeaaa167e754373c22748e9e3ea7f38b500595ce4a7bfc3dfbe1b17e320fc6b80c0d1d9440dbd9d43e06f952ae75f5256632163bee65df605a41cf +049d61b730d14136c1e948ab40aabba606f4e70da59361dec3601bd5f9053dbd048782865aa35c73aa127b26cacfc9d442d68cdc8e35bfab492e4b5340038b13 +e0b0aead5196cc4b7adf77cb3a74005a500d389389cda62a917a4ddbd5108ed04cad86299456810557916a528e549f4d95b5b43f0fb97502199e52cf51431c71 +4b4c951b0db0ceb4e5816eba71ea388d69583a77e9fa16c3f65dac592ae741e8e150f4bc6b3026044a42d822d0990b9fe3e1378e1b69aaa8319b523ea51c6005 +d6c21414c5c624ae1daa8fc92c04e36b96870ab2fb8766df721a733962478b44c753052845fae0eb8e6129b8b6867fbac6d56dc53e58365dacb02dcdad9d9f48 +e124a8d47e490718aa3951f486eee0b34f915128e68053982d0f232303030ff603d1c617088fef9817810320123d30925f771d6c863f40ae40bb3b5a76c121b5 +7a32f345e57ef0fd1f180dce6130f763bf017fe316c303e4e05b3e1a6e1b46d420b3411f0622fe9a2902f35894306aa9691c5098f706b05187f8d655f5e5a281 +e0252b503715f3ab83e9e9c7a7cdb52ce7c7d618b3a7f5cc30872cf0a9914a062c3757e881e904b4958b65f0c01dd9e7055b3cfc68003db83b21d7406543a85f +56c812bc8cf5026bce46160c95404dec1ec7b206afc6f03a3fd453540e00181d02a5c15a63cd3418f1da5c4330793a1e7ea718b20774196d2fa403ef43468f41 +c3ab0b0e2a082918ea62b1383f3f83f8eab2c67c523e2e8fbe797cf2ed93938f4f8db55553e3d783e990a87282d306b3800d83894c8f399f375c15193ee8314c +c67c632f7aee3558f05d5845c840ea71133044817581db7987d59c104578d66c3047495433325d97e511436e08e91b0ce504a6cf87b2e99cce2c6d1079279849 +40baa1fce13a0c8e1c4073d04a685247e5bc7c52322dc14e741b9c9b293867833ec3054df15b833d7a7252a227fac1441427bb95e84da064e3c6cda977ceb833 +7a633ae81e0ec4f0381020de81df7a4a9a83a235be615447cc22a2e2184b016d43c20fb4fd2e6319ef86e0e1c2663ee757f8f4ddfa97fa6efefe5297e1d78e0d234344707e94ff07bb61fa6ed3bbcc810000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1085\pich1032\picwgoal615\pichgoal585\wmetafile8\bliptag632555790{\*\blipuid 25b4090ee6c023eaa4f12def25cdc878} +010009000003b809000000009409000000000400000003010800050000000b0200000000050000000c02270029000500000007010400000094090000430f2000 +cc000000270029000000000027002900000000002800000029000000270000000100180000000000e4120000c40e0000c40e0000000000000000000031002939 +0c39210021290029310c39310839210029290029310431310029310029310431290031290431210431290831210429210021210021290c312904292908292908 +2929042929042929082929082929082929082929082929082929082929083129082929082921042121002121002121042129042931003100311021b59eaddecb +d6ded3d6e7dbe7efe3e7e7dbdef7e7e7efdbdee7d3dee7d3dee7d3deded3ded6d3deb5b2bd84828cada2b5a596a5ada2adc6bacec6b6c6cec3cecebececec3ce +d6c3d6d6cbd6decbded6cbd6d6cbd6decfdedecfdedecbdee7cbe7dec7e7d6bed6c6b2c6b59eb5a592a5ad92adbd9ab53100290021101084757b7b75738c8684 +9c9e9494968c848a7b9c9a8c9c9a94b5aeadcec7c6cecbcececfceced7de94aaad4a555a84868c9c9e9ca5a6a5bdbec6c6c3c6cecfd6d6d3d6d6d7d6cecfd6d6 +d7d6d6d7ded6d7d6d6d7d6dedbdededbdeded7dee7d7e7decfe7d6cbd6cebeceb5aab5ad9aa5ad9aadbda2bd290429001804187b697b6b61737b79847b7d846b +71735a6163636563524d4a63595a7369737b75848c92a5a5b2c68496ad394d5a525d639ca29cadaeadbdc3bdc6cfceced3ced6dbd6ced7d6ced7d6d6d7d6d6d7 +d6ced3ceced3ced6d7d6d6d7d6ced3d6ded7ded6d3ded6d3d6d6cfd6c6c3c6bdb6b5bdb2bdceb6ce2904290021082194869c847584847d8c84868c949a9c8c92 +946b6d6b6b696b5a555a4a454a42455252556b63718c63759452657b313c42848684a5a6a5b5b6b5cecfceced3ced6d7d6cecfced6d7d6ced3cececfcececfce +cecfceced3ceced3ceced3d6dedbded6d7ded6d7d6d6d7d6cecfc6c6c3bdc6bac6cebace29042900210421a58aa58c7d8ca5a2a5adaeadadb2adadb2ada5aaa5 +94928c8c86847b717b635d6b39415231385239516b5a6d843938425a555a948e94a5a2a5c6c3c6d6cfd6d6cfd6cecbcecec7cec6bec6bdbabdc6bec6c6c3c6ce +c7ced6cfd6d6d7ded6d7d6d6d7d6d6dbd6d6dbced6dbced6d7ced6cfd6decbde21082900290821bda2b59c869ca59aa5b5aeb5bdbebdc6c3bdc6c3bdbdb2adad +a29c8c868c736d7b5a596b393c52212c42182c4231455a2124317b757394868cada6b5bdbecebdbacebdbac6bdb2b5b5aaadada6adb5aab5bdb6bdc6bec6d6c7 +d6ded7ded6d7d6d6dfd6d6dfd6d6dbceced7ced6d7ceded7d6decfde21042900210421ceaece9c86a5a59eb5b5b2bdc6c7ced6d3ceded7cecec7bdc6bebdada6 +ad8c86946b65734a515242494a21344200305a10385a29282173695a636d8c6b86b594a6ce8c96ad94968c9c9e949c96a5a5a2b5a5a6b5c6becedec7d6e7d3de +ded3d6d6cfced6d3ced6d7ced6d7ced6d7ced6cfc6cebec621042900210c21cebed6a59aadb5aabdbdbac6cecbced6d7d6ded7ceded7ced6cfcec6babda59aa5 +7b7d846b6d6b5a615a39556b215da5104d940814183938393155844269ad4a71ad39557b6b756b8c8a7b948e94a5a2b5a5aeb5bdc7ced6c7d6decbd6ded3d6de +d7d6ded7d6d6d3d6cecfcececbc6c6beb5bdb2b521043100181018ded3deb5b6bdbdbec6bdc7c6c6d3ced6d7d6d6d7cededbd6decfc6d6cbc6b5aaa58c8a8c73 +797b52616b2955842165ce185dc6001442001039184d9c316dce3969bd21417b52616b7b7d73948a8ca5a2a5adbab5c6d7ced6dbd6dedbdeded7ded6d7deced3 +d6ced3d6cecfceb5b6b59c9e949c929c21043100180c18e7dfe7cecbcececfcececfceced7d6cedbd6ced7d6d6dbd6d6cfc6ded3cec6bebd9ca2a5737d8c3149 +63103c731865de1865e700308400145a084db5216dde215dc600206b21416b5a697b84869c9ca2adb5c3b5c6d7c6ced7c6d6d7ceced3d6ced3dec6cbd6c6cfd6 +bdc3c694969484827b948a9421043100210421f7e3ffdecfdedecfd6d6d3ced6d3ceced3d6c6d3d6ced3debdc7ceced3d6c6cbceadb2bd738294213c5a002c63 +186dd60869de004db500309c0055ce1065d60851b5000c63003c8c3165ad6b86c6949ec6bdc7ced6dbceced7c6ced3c6c6cbd6c6d3debdcbd6b5babd9ca6a584 +868484867bad9ea529042900210429ffe3ffdecbdedecbced6cfcececfcec6cbcec6cbd6c6cbd6bdc7cec6cbd6b5bece9caac6637da521497b003c8c1069ce00 +61ce0065d60061d6006de70869d60861c60045a50859bd216dce4269bd4a65a58492ada5aebdb5becebdc7d6b5c3ceb5c3cea5aeb58c969c8c9294949a94a5a2 +94b5a6a529042900210821f7e3f7d6c7cecec3cececbcececbcecec7cececbced6cfd6d6d3debdbed68c9ebd638ac63971c6105dce0865de0075de0075de088a +e7088ae70886e70079de0875de1879e7106dd62169ce10459400246b294d844a6da56382c67b8ece8c9ab58c969c7b868c7b82848c8e8ca5a294b5aa94b59e9c +31042900210818efdfefc6bec6bdbec6c6c7cececbcecec7cedecfd6cec3ced6d3e79caace4a75ad1859ad0055bd0065e7087df71896f7219aef219ef71896ef +219ef7219eff188ef72192ff107de71879de0055ad0030841855a53165bd4269c65265ad5a698463656b73716b8c867b9492849c9684a59a84b59a8c31042100 +290810efdbdebdb2b5c6babdd6d3d6e7dfdedecbcebdaebdada6c68ca2ce5286c62171bd005db50079d6088eef109af729a2ef31a6ef39a6f742aaff42a6f731 +a2f7219af71092f71096f7088af70075de006dde1069d62969ce29519c29386b424552635952736d5a7b756384755a8c7d5a9c8663a5827339081800311021ef +dbe7cecbded6dbe7d6dbefcecfe79492a54a496b31417329518c1865b5006dc60079d6008ae7189eef21a6ef42b2f74ab2f752b2ff5ab2ff5ab2ff52aeff39ae +ff29aaff109ef70092f7008af70079e7005dce00389c00186b000c4229344a39414a42494a4a4d4a52514a63594a7365527b655a31042100180021cec3e7adbe +e79cc7f784b6ef4a82b508346b00246300206b002c840051b50065c6108ae7219aef4aaeff52b2f75abaf763baf763baf763baf763b6f75ab6f74ab2f742b2ff +29a6f70896e7009ae7008ade006dce00349400248400287b00246b002c6b08346b103863183c6329415a31414a39384a210031002908319486ad6b7da55a82b5 +396d9c31699c31619c4271b53165b51861bd0869ce0075de2196f739a2ff63b2ff6bbeff7bcfff7bd3ff84d3ff7bcfff7bc7ff6bbef75abaf74ab6f74abaff29 +a6ef089ee7089ae71882de1061bd2159b53969bd3165ad2961a529599429558c315984425d7b52657363617b18003900310018bd8ead94829473717b737d846b +7d844a5d734a658c3161a52165b50065c6087de72196f74aaeff6bb6ff84cfff8ce3ff94ebffa5ebffa5e3ff8cd7ff73c7ff5abaff4ab6f752baff39aef7089a +ef109af71071d62161b529518442597b394d6b39496331455a31415239454a42454a4a4d4a5a4d5229042900420c21b58a94ad968c9c92847b7d6b73756b5a65 +7339517b00307b0045a50055bd0079de2192ef4ab2ff73c3ff94dfff94ebff9cf3ffadf3ffadebff94dbff73c7ff5abaf752b2f752b2f74ab2ff1096ef1092ef +105db5295d9c294563394d524a515a52515a52555a5a595a5a595252514a524d425a454a290429003114089c8a7b7b755a73755a63715a39515218305a002873 +0845b50055d60061de0075e71896ef42b2f76bc3f78cdfff9cf3ffa5f7ffa5f7ff9cebff8cdbff73cbff6bbef763b6ef6bb2ff5aaeff188ede2186ce31699c5a +799c5a75846b797b7b7d8473757b7371736b71736b6d6b6b69636b695a73656b29042900180c1084868463756b425d5221414a18415a4265a54271c62961ce10 +65de0065de0065d61896f739aaf75ac3f773d3f794f3ff9cf3ff9cefff94e3ff7bcfff6bbeff6bb6f76baeef63aef74a9ee7217dbd2975a54a758c738a947b8e +948492948c8a8c848284848284848284848284847d7b7b797384717b29042900080839394d73083c6b1055843175ad3975b54a71b55271b54a71b518519c0041 +a50065ce0879de219aef39aeef5ac7f76bcfff7bcfff8cd3ff8ccfff6bbaff5ab2f763aef763b2ff52aef7318ece4282ad5a869c84a2a58c9a949c9e9c949694 +9c96949492948c8e948c8e948c92949496949c9294a58e9c290429001004396b699c4a719c39719c31699c2155843955844a598439557b29558c0851ad0059c6 +0061ce1882e7299eef31aaf74ab6ff5abaff6bbef76bbaef5ab6ff52b6ff52aeff4aa6f73192de398ac6638aa58492949caaa5a5aaa5a5a29cada6a5ada6a5ad +a6a5a5a2ada5a6ada5aaadadaeadb5aeb5bdaabd2904290031001894697b84716b7b756b7b7d7b7b7d7b7b757b6b697b525d6b3155841861c6186de72165d608 +59c60875de1892ff2196f731aaff42b2ef42aee731aaff29a6ff189ef7188ee7217dc64a8abd849aad9ca29cadb2adb5bab5adaea5bdbab5b5b2adb5b6b5b5b6 +bdb5babdbdbec6c6c3c6cec7c6d6c3d6290429004a0c18b57d7bad866b9c7d5a947d5a84755a736d6b63657352617b42699c3171c6185dbd1855ad084dad005d +d60065e71079e72192ef299ae72196de1892f7108ef70082e70079d62171bd4a79ad94a2adadaea5bdbabdc6bec6bdbebdcecbc6c6c7c6c6c7c6cecbcececfd6 +ced3d6ced3d6d6d3d6e7d3de29042900390c109c717394756394755a94825a7379634a65733155844269ad4269a542699c295173215173215594105dde0859de +105dc61065c61069ce1071d61071d6006dce0069d61071de2165bd395d94949aa5bdb6adcec3cec6c3ceced3d6ced3ced6d3ced6d3d6d6d3ded6d7ded6d7d6d6 +d7d6ded7d6e7d3de29042900290c089479739c7d6b8c755a73715a52615a42657b39658c42659c4259844a5d634a5d6342657b3169a52165ce1859ce00348410 +458c185dce1869d60051a50038840049a52165c63169bd4261948c9294c6baadd6c7d6cec7d6d6dbdeced3d6d6d7d6d6d7d6d6d3d6ced3d6ced3d6ced3d6d6cf +d6decbde29042900311c088c75637b69526b6552636d735a717b63757b636d6b4a55526b695a73694a5a5d5a315d8c3979bd2965b508387b21304a31456b3169 +c6316dd6103c84001c4a18345a395584426dbd4a75ad637d73adaa94c6babdcec7d6d6d3d6ced3cededbd6d6d7ced6d3d6cecfd6ced3d6ced3d6d6d3d6decfde +290429002914008c796384795a6b6d525a656b5a616b6b615a6b5d4a7b714a8475428471426b716329619c296dbd29558418344a5a59524a555a3169b53169c6 +1838731820394a41394a555a426da55282bd425d63848e7bada6a5cec7c6cecbceded7d6d6cfc6cecbc6c6c3c6c6c3c6c6c7c6c6cbced6cfcedecbde29042900 +3910089475637b715273714a736d5273614a8c69528c654a8c714a8471398c7942525d4a3975b5215da521344a5a55427361425a655a2165a52975c6102c5a31 +2c396b553952513931597b4a82b53155735265738c9284b5aa9cb5a6a5cec3c6c6c3bdbdbab5b5b2b5b5b2b5b5b6b5bdbebdcec7cedecbde29042900420c088c +695a7b694a7b714a84754a84694a9c6d4a9469428c71427b6d427b754a5261524a75a51030635a554a7359318469395a615221659c2171b51030523934317355 +316355313959633965844a699c18244a73756b7b715aa59284a5928cb5a69cada29ca59e9ca5a2a5adaeadbdbab5cec7cedecbde29042900390c108c615a8469 +4a846d4a846d4a7b65428c71428c7142736d3973795242554a6b7d7b4a4d525249427b5d318c6531946d39635d5229659c2169ad1838424241316b55316b5d39 +5a614a4a61635a6d9c10204a424531635d317b6d528c756394867394867b948a8c9c969cadaaa5bdb6b5cec7cedecfde290429004210188c615a84654a846942 +7b65397b65398c6d39846d39736931636942425952525d5a524531846139845d298c612994693963594a39618c215584213431524d29635131735d3173653963 +61524a5573424d6b2928106b613163552984714a8c7d6b8c7d73948684a59a9cb5aeadc6bebdd6c7cedecbde290429004a0c1084554a735d396b61297b65298c +6d319469318459218c6d296b5d296369524245396b55398461427b5d317b61318c65317359425a657b394d633938296359316b5929735d298465317359395a59 +5263695a4a41216b5d316b61217b6d39846d527b6d638c7973a59694bdb2b5cec7c6decfd6decbde290429004a081084554a84694a7b6d397b69298c6d319469 +398c61398c61298465396351396b554a7355397b59396b51317b6142845d317b5939635d6b4a49524a3c317359397359317b59298459317b5531635d42635d4a +6355396b55397b65316b5929846d528469638c7573a59694bdb6b5d6cbcedecfd6decbde2904290042102173494a73554a7359426b51296b51297351397b5542 +7b514a84515273494a7b554a8455427351316b51426b554a7355426b514263555a5245525a454a73514a7b51427b51398451397b55426b554a6b554a734d4a7b +554a7b554a734d396b49396b5142736163948284b5a6a5cec3c6decfd6e7cfe729042900290410421821310c08311400311c00311c0031140831101039081839 +0418390410421010420c004a1c00311810210c08311408291008291018210818290c18310c18390c08421008421008390c08311010290c10390c10420c10390408421010391408311408291010291018211418211418210c182108182904290005000000070101000000030000000000}}}{ +\cf1\loch\af28\hich\af28\dbch\af28 \nestcell{\nonesttables +\par }}{{\*\shppict{\pict{\*\picprop\shplid1026{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}} +\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1085\pich1032\picwgoal615\pichgoal585\pngblip\bliptag632555790{\*\blipuid 25b4090ee6c023eaa4f12def25cdc878} +89504e470d0a1a0a0000000d49484452000000290000002708020000001d08f6d10000000373424954050605330b8d80000000017352474200aece1ce900000c +874944415458474d58cf6f2449567e558ef446bab3dc113d99dd15332e70ccb4974da3465b46b3928d765663a43dec6d971be2c6811bbb42fc0dfc055c3870d8 +037358890b2bcd01a44602a91b31c846db626aa45ec811369bc954d219d8a1ca6877b89aef6579d1e66497632a23e3fdfedefb6aa444a97353fb2e4822dcf808 +24233e25450af8ff2c7591484915ebe01d494531287c1f02097e075f9148f9cdd84b11f014bb89d2107a99a541f4d82a231f4f78ca2f6227e92847569d96c773 +ca2808aa711cbf275321593cbfdf510665d22e761a4708bc089dc25484e03a5e67069f381ec252d14b72c3e99224cbea70600ca924aba4c5f5d8da995199d294 +9e7e783a667b334db9ee73495325f72c4d6d9fe94ae93aa70e5691ebf157ca0e6766aa93ba974ae36411eade7512cf82932c8e37b0d302deeac8d58a5c16cc63 +63a746e5b8b552388675ea236b3b26c18a76be73f0277c3bb8a481be19b9509b29756e81ef529912047348b00a4af65a7421c27417f0069c99111cae62af326a +da1aaab8e854cec121b87d90c241e488dc5d637e21935a6a230d36b2d2224c7384bc36194eaeec54055773d01002d212e120a76365652363133cccdea44a67a4 +b3d1e9cbaaab2b08933e68911a248ad27a22395e31f47dc0b5113e0e83f9bc55e0e01439930adcbc55291522d97d6365489b334948a5bb9d4ab832278d00c35b +ac4dd0b1d654975355bd38435011e6723a3578940e375e8c3d642301d98ac10d635833a437dcd26321452aa342dc52619c97b47fbcb8ac7fef1b64eba72654e4 +6b8a1036a4ae24050baeb186e5014fade886a7f2e49bf3329f1e1d1c963353ee5bbbc7c14eb374a3fac6f99b78f769b6c900244a47f079749b92e8052a44c374 +45dde9134dd57318977250a02f8c1e6a811d8e12eaa614e633bd68ebf2e3133333a7c727365727f3d2ceb4992a93c38943a66d64dff95c4053180173a17b6da9 +96b00f3775703e8ad8a0fa5b870a38b152564f55a8c9392514796932c99e68617138cc91fbd22173ca239bdb43587c0073558a8afad56b02370f3002bbd964a4 +1fea08d52153a5c8e6c1aa202fcfa71e7a747ddbb9883a54734573e1c2e2b976082d29e48740981b7b7d7648b09bdc7550fbd6ec9553541417840c4875383543 +ba292c78bd317db07e4bacf547c727695644917a84cbb5faa631b17e2247e9551ba34b803a32496fbc5dfbc37b22b8cb220d07db41081fdeb693317deb1d7ff4 +304104abab447f7062f60eed04a2a3dc151439b02c680d33872073b08588e293bffc648c8ce14073de4bd2369d5a460787f20018d1711694af425b75ad53a103 +5a9c96ea641f40cbbbe6fbea7b1fd27c9fa6d99065b1d7ecc5219f39a5f950a40bfcca450800dedcd8038c80dd6afbb7bef59dd33841ed465ac778334a288b42 +2f6f2843146567e3b258c74968b5f4939da8a7d27ca0d399269dccee53715f8cbe163c053fd6c983993007619c88318d28e956d7a3ad34061f6e4284ddeb410b +7caee189f493bff8f15676931dfda60d3797e97a6984d702b1854fa20b7e7455db75fdf55d289126e4d5bb6276900b3dc91eaaa88ad18e563b42eca462478cb6 +32bf4ec4fd2288e27a2d466214c7b1bdf210e3ae7c84ec95f7c1dfc21b6f46f08458c59ffcf8275b4f4438fd6d63c40bb35ee8abc5ebfffc2c71cbe426889be5 +84bc5835f1c6d1d841eae403430fb47c686967467246a2900240aa85980959d028be8eb10d898f4902680cb7fd2a4258bce10044880ef000ff89f877153efdeb +4fb766db941674f9efcf476fddeca19e2965328de299ed26f15535720e90ae1eca099cfc2017ef1d086de89e1113235334b6106e625c033027000977d5fa15e4 +f4c94eda79f445e1bde3c87b8785c705eb57c1c1a5eef5f3bffb872d2ff3dffdfd3ff0f9ec65483ffba279f98be5af41f676d0eea2ccdcec0163efec37728158 +3eb2b46bc4fb07f4a04063e5f41d45b11ec185fe46084a12a2ebff79f9dab7f5575e6cc978e3896ec30a3623e4916f349fff0dedd5d2bff28b7f7eb145bb071f +7efbb45e459115f2a1c1e3eadf5e5e7cf1a21879f6b9a0c9036058261ebc4be94ce633dac97852100997cd7a446f9147a8a400ef67db44af5f4e9251d746f487 +f6ca75ab08d5fac15c34fc8df968ea8879f5af2fb766e3c3ef7ee7bbc5a3023914639cec1afd4e21ef6517fff5e5ed16c5316539a5f78a4c19f424da2db84cc7 +903aa1885e1ac8bb1896e2c647283af6a35505c0715f3a7fe55ffcbcb978d5a138dd2b58eefc2a3a76382eef5bec69c6bdefb8dbb4755f2d0c0583e61f9ccef5 +e17c0e904ad55d4f63f4bf464b752cefffefa1196f8621ee65b1db2c6c4e46049b5199a53a7629c370159a057002ba32fe0fa8ba7520f547bf6393d78b837b4b +7af522f355b1f67637e17612bbc97614e330d1401a41db9ad681de12ad3c79dc3521637b1ff1e53a8871f4574d58bb800abecd606741c981926627cc767cb11d +8d8c26a37c37d52a3372529ffd6c8411e9d93f7e4a6f2a9576a16b9efdcbb34fffe629700d3d0a5be707a473b2384369959740d7a1130c9321a323fef5403498 +127ced1c4686d03b7217f4ec39fba817985e06cf00db0750eb13cdb3652feb7f6ab6b43af8c33ff951ff966e1f58f14e59d88fa22eeb572427997e4f1739fa39 +2022242317c7d771dd8a7182b940c62890dfeb288004eb25ddb47185c6e3b1f7b623ff152d1dbdfc8ace5bf27ba5d307eefefb7e627107f575392db347073fff +d9c548c9f2ecc5b3c5e20c4dcc60c0c9b46bfbeea24a3100c62a5c3eeb97e78893dd235370470ad20c830ada513a60355a3e9200912684a05ef2f416a20a64ce +1a3aafa99e18caad4433951867b981a6689631fdab3ffbf32d25267ffac77fe4572e19f7f4f696f13f065d188cbcc696612d9ba68dee3ab65efb2801c55f4373 +ba156befaf6a811ebe0ef1aa97e349fbdfa15b65e7ffe1fffe1c93a512dbfadddda2286609c645914070fe4ef16e9115f7338d04ccd4f94fff76ab10fa873ffa +a1eb834013d91efaea9a1b3af775d4128998a4fabe4ec632009919105d78e56e51a1378046bfac5b7f155faf447715fd6ab2f805555f85a82172a61fcd8af76c +f6ebef678f8a740b858ef13ec12421339545faeca74fc5c001a412d2712e70d31b467b3813427a60a5de2f319657d7f4f9178dbeae4e9fa0e73afcc7dc028c22 +4a2cabcb669a4b6465f9f848ef4bf9e444ed590c0c98860cc621a27ae9eaa6e618213ac855901b0a981571f1e078374e20961c4d9e3af8093e272003ba4b58fc +02392a24e6aeaaa167e754373c22748e9e3ea7f38b500595ce4a7bfc3dfbe1b17e320fc6b80c0d1d9440dbd9d43e06f952ae75f5256632163bee65df605a41cf +049d61b730d14136c1e948ab40aabba606f4e70da59361dec3601bd5f9053dbd048782865aa35c73aa127b26cacfc9d442d68cdc8e35bfab492e4b5340038b13 +e0b0aead5196cc4b7adf77cb3a74005a500d389389cda62a917a4ddbd5108ed04cad86299456810557916a528e549f4d95b5b43f0fb97502199e52cf51431c71 +4b4c951b0db0ceb4e5816eba71ea388d69583a77e9fa16c3f65dac592ae741e8e150f4bc6b3026044a42d822d0990b9fe3e1378e1b69aaa8319b523ea51c6005 +d6c21414c5c624ae1daa8fc92c04e36b96870ab2fb8766df721a733962478b44c753052845fae0eb8e6129b8b6867fbac6d56dc53e58365dacb02dcdad9d9f48 +e124a8d47e490718aa3951f486eee0b34f915128e68053982d0f232303030ff603d1c617088fef9817810320123d30925f771d6c863f40ae40bb3b5a76c121b5 +7a32f345e57ef0fd1f180dce6130f763bf017fe316c303e4e05b3e1a6e1b46d420b3411f0622fe9a2902f35894306aa9691c5098f706b05187f8d655f5e5a281 +e0252b503715f3ab83e9e9c7a7cdb52ce7c7d618b3a7f5cc30872cf0a9914a062c3757e881e904b4958b65f0c01dd9e7055b3cfc68003db83b21d7406543a85f +56c812bc8cf5026bce46160c95404dec1ec7b206afc6f03a3fd453540e00181d02a5c15a63cd3418f1da5c4330793a1e7ea718b20774196d2fa403ef43468f41 +c3ab0b0e2a082918ea62b1383f3f83f8eab2c67c523e2e8fbe797cf2ed93938f4f8db55553e3d783e990a87282d306b3800d83894c8f399f375c15193ee8314c +c67c632f7aee3558f05d5845c840ea71133044817581db7987d59c104578d66c3047495433325d97e511436e08e91b0ce504a6cf87b2e99cce2c6d1079279849 +40baa1fce13a0c8e1c4073d04a685247e5bc7c52322dc14e741b9c9b293867833ec3054df15b833d7a7252a227fac1441427bb95e84da064e3c6cda977ceb833 +7a633ae81e0ec4f0381020de81df7a4a9a83a235be615447cc22a2e2184b016d43c20fb4fd2e6319ef86e0e1c2663ee757f8f4ddfa97fa6efefe5297e1d78e0d234344707e94ff07bb61fa6ed3bbcc810000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1085\pich1032\picwgoal615\pichgoal585\wmetafile8\bliptag632555790{\*\blipuid 25b4090ee6c023eaa4f12def25cdc878} +010009000003b809000000009409000000000400000003010800050000000b0200000000050000000c02270029000500000007010400000094090000430f2000 +cc000000270029000000000027002900000000002800000029000000270000000100180000000000e4120000c40e0000c40e0000000000000000000031002939 +0c39210021290029310c39310839210029290029310431310029310029310431290031290431210431290831210429210021210021290c312904292908292908 +2929042929042929082929082929082929082929082929082929082929083129082929082921042121002121002121042129042931003100311021b59eaddecb +d6ded3d6e7dbe7efe3e7e7dbdef7e7e7efdbdee7d3dee7d3dee7d3deded3ded6d3deb5b2bd84828cada2b5a596a5ada2adc6bacec6b6c6cec3cecebececec3ce +d6c3d6d6cbd6decbded6cbd6d6cbd6decfdedecfdedecbdee7cbe7dec7e7d6bed6c6b2c6b59eb5a592a5ad92adbd9ab53100290021101084757b7b75738c8684 +9c9e9494968c848a7b9c9a8c9c9a94b5aeadcec7c6cecbcececfceced7de94aaad4a555a84868c9c9e9ca5a6a5bdbec6c6c3c6cecfd6d6d3d6d6d7d6cecfd6d6 +d7d6d6d7ded6d7d6d6d7d6dedbdededbdeded7dee7d7e7decfe7d6cbd6cebeceb5aab5ad9aa5ad9aadbda2bd290429001804187b697b6b61737b79847b7d846b +71735a6163636563524d4a63595a7369737b75848c92a5a5b2c68496ad394d5a525d639ca29cadaeadbdc3bdc6cfceced3ced6dbd6ced7d6ced7d6d6d7d6d6d7 +d6ced3ceced3ced6d7d6d6d7d6ced3d6ded7ded6d3ded6d3d6d6cfd6c6c3c6bdb6b5bdb2bdceb6ce2904290021082194869c847584847d8c84868c949a9c8c92 +946b6d6b6b696b5a555a4a454a42455252556b63718c63759452657b313c42848684a5a6a5b5b6b5cecfceced3ced6d7d6cecfced6d7d6ced3cececfcececfce +cecfceced3ceced3ceced3d6dedbded6d7ded6d7d6d6d7d6cecfc6c6c3bdc6bac6cebace29042900210421a58aa58c7d8ca5a2a5adaeadadb2adadb2ada5aaa5 +94928c8c86847b717b635d6b39415231385239516b5a6d843938425a555a948e94a5a2a5c6c3c6d6cfd6d6cfd6cecbcecec7cec6bec6bdbabdc6bec6c6c3c6ce +c7ced6cfd6d6d7ded6d7d6d6d7d6d6dbd6d6dbced6dbced6d7ced6cfd6decbde21082900290821bda2b59c869ca59aa5b5aeb5bdbebdc6c3bdc6c3bdbdb2adad +a29c8c868c736d7b5a596b393c52212c42182c4231455a2124317b757394868cada6b5bdbecebdbacebdbac6bdb2b5b5aaadada6adb5aab5bdb6bdc6bec6d6c7 +d6ded7ded6d7d6d6dfd6d6dfd6d6dbceced7ced6d7ceded7d6decfde21042900210421ceaece9c86a5a59eb5b5b2bdc6c7ced6d3ceded7cecec7bdc6bebdada6 +ad8c86946b65734a515242494a21344200305a10385a29282173695a636d8c6b86b594a6ce8c96ad94968c9c9e949c96a5a5a2b5a5a6b5c6becedec7d6e7d3de +ded3d6d6cfced6d3ced6d7ced6d7ced6d7ced6cfc6cebec621042900210c21cebed6a59aadb5aabdbdbac6cecbced6d7d6ded7ceded7ced6cfcec6babda59aa5 +7b7d846b6d6b5a615a39556b215da5104d940814183938393155844269ad4a71ad39557b6b756b8c8a7b948e94a5a2b5a5aeb5bdc7ced6c7d6decbd6ded3d6de +d7d6ded7d6d6d3d6cecfcececbc6c6beb5bdb2b521043100181018ded3deb5b6bdbdbec6bdc7c6c6d3ced6d7d6d6d7cededbd6decfc6d6cbc6b5aaa58c8a8c73 +797b52616b2955842165ce185dc6001442001039184d9c316dce3969bd21417b52616b7b7d73948a8ca5a2a5adbab5c6d7ced6dbd6dedbdeded7ded6d7deced3 +d6ced3d6cecfceb5b6b59c9e949c929c21043100180c18e7dfe7cecbcececfcececfceced7d6cedbd6ced7d6d6dbd6d6cfc6ded3cec6bebd9ca2a5737d8c3149 +63103c731865de1865e700308400145a084db5216dde215dc600206b21416b5a697b84869c9ca2adb5c3b5c6d7c6ced7c6d6d7ceced3d6ced3dec6cbd6c6cfd6 +bdc3c694969484827b948a9421043100210421f7e3ffdecfdedecfd6d6d3ced6d3ceced3d6c6d3d6ced3debdc7ceced3d6c6cbceadb2bd738294213c5a002c63 +186dd60869de004db500309c0055ce1065d60851b5000c63003c8c3165ad6b86c6949ec6bdc7ced6dbceced7c6ced3c6c6cbd6c6d3debdcbd6b5babd9ca6a584 +868484867bad9ea529042900210429ffe3ffdecbdedecbced6cfcececfcec6cbcec6cbd6c6cbd6bdc7cec6cbd6b5bece9caac6637da521497b003c8c1069ce00 +61ce0065d60061d6006de70869d60861c60045a50859bd216dce4269bd4a65a58492ada5aebdb5becebdc7d6b5c3ceb5c3cea5aeb58c969c8c9294949a94a5a2 +94b5a6a529042900210821f7e3f7d6c7cecec3cececbcececbcecec7cececbced6cfd6d6d3debdbed68c9ebd638ac63971c6105dce0865de0075de0075de088a +e7088ae70886e70079de0875de1879e7106dd62169ce10459400246b294d844a6da56382c67b8ece8c9ab58c969c7b868c7b82848c8e8ca5a294b5aa94b59e9c +31042900210818efdfefc6bec6bdbec6c6c7cececbcecec7cedecfd6cec3ced6d3e79caace4a75ad1859ad0055bd0065e7087df71896f7219aef219ef71896ef +219ef7219eff188ef72192ff107de71879de0055ad0030841855a53165bd4269c65265ad5a698463656b73716b8c867b9492849c9684a59a84b59a8c31042100 +290810efdbdebdb2b5c6babdd6d3d6e7dfdedecbcebdaebdada6c68ca2ce5286c62171bd005db50079d6088eef109af729a2ef31a6ef39a6f742aaff42a6f731 +a2f7219af71092f71096f7088af70075de006dde1069d62969ce29519c29386b424552635952736d5a7b756384755a8c7d5a9c8663a5827339081800311021ef +dbe7cecbded6dbe7d6dbefcecfe79492a54a496b31417329518c1865b5006dc60079d6008ae7189eef21a6ef42b2f74ab2f752b2ff5ab2ff5ab2ff52aeff39ae +ff29aaff109ef70092f7008af70079e7005dce00389c00186b000c4229344a39414a42494a4a4d4a52514a63594a7365527b655a31042100180021cec3e7adbe +e79cc7f784b6ef4a82b508346b00246300206b002c840051b50065c6108ae7219aef4aaeff52b2f75abaf763baf763baf763baf763b6f75ab6f74ab2f742b2ff +29a6f70896e7009ae7008ade006dce00349400248400287b00246b002c6b08346b103863183c6329415a31414a39384a210031002908319486ad6b7da55a82b5 +396d9c31699c31619c4271b53165b51861bd0869ce0075de2196f739a2ff63b2ff6bbeff7bcfff7bd3ff84d3ff7bcfff7bc7ff6bbef75abaf74ab6f74abaff29 +a6ef089ee7089ae71882de1061bd2159b53969bd3165ad2961a529599429558c315984425d7b52657363617b18003900310018bd8ead94829473717b737d846b +7d844a5d734a658c3161a52165b50065c6087de72196f74aaeff6bb6ff84cfff8ce3ff94ebffa5ebffa5e3ff8cd7ff73c7ff5abaff4ab6f752baff39aef7089a +ef109af71071d62161b529518442597b394d6b39496331455a31415239454a42454a4a4d4a5a4d5229042900420c21b58a94ad968c9c92847b7d6b73756b5a65 +7339517b00307b0045a50055bd0079de2192ef4ab2ff73c3ff94dfff94ebff9cf3ffadf3ffadebff94dbff73c7ff5abaf752b2f752b2f74ab2ff1096ef1092ef +105db5295d9c294563394d524a515a52515a52555a5a595a5a595252514a524d425a454a290429003114089c8a7b7b755a73755a63715a39515218305a002873 +0845b50055d60061de0075e71896ef42b2f76bc3f78cdfff9cf3ffa5f7ffa5f7ff9cebff8cdbff73cbff6bbef763b6ef6bb2ff5aaeff188ede2186ce31699c5a +799c5a75846b797b7b7d8473757b7371736b71736b6d6b6b69636b695a73656b29042900180c1084868463756b425d5221414a18415a4265a54271c62961ce10 +65de0065de0065d61896f739aaf75ac3f773d3f794f3ff9cf3ff9cefff94e3ff7bcfff6bbeff6bb6f76baeef63aef74a9ee7217dbd2975a54a758c738a947b8e +948492948c8a8c848284848284848284848284847d7b7b797384717b29042900080839394d73083c6b1055843175ad3975b54a71b55271b54a71b518519c0041 +a50065ce0879de219aef39aeef5ac7f76bcfff7bcfff8cd3ff8ccfff6bbaff5ab2f763aef763b2ff52aef7318ece4282ad5a869c84a2a58c9a949c9e9c949694 +9c96949492948c8e948c8e948c92949496949c9294a58e9c290429001004396b699c4a719c39719c31699c2155843955844a598439557b29558c0851ad0059c6 +0061ce1882e7299eef31aaf74ab6ff5abaff6bbef76bbaef5ab6ff52b6ff52aeff4aa6f73192de398ac6638aa58492949caaa5a5aaa5a5a29cada6a5ada6a5ad +a6a5a5a2ada5a6ada5aaadadaeadb5aeb5bdaabd2904290031001894697b84716b7b756b7b7d7b7b7d7b7b757b6b697b525d6b3155841861c6186de72165d608 +59c60875de1892ff2196f731aaff42b2ef42aee731aaff29a6ff189ef7188ee7217dc64a8abd849aad9ca29cadb2adb5bab5adaea5bdbab5b5b2adb5b6b5b5b6 +bdb5babdbdbec6c6c3c6cec7c6d6c3d6290429004a0c18b57d7bad866b9c7d5a947d5a84755a736d6b63657352617b42699c3171c6185dbd1855ad084dad005d +d60065e71079e72192ef299ae72196de1892f7108ef70082e70079d62171bd4a79ad94a2adadaea5bdbabdc6bec6bdbebdcecbc6c6c7c6c6c7c6cecbcececfd6 +ced3d6ced3d6d6d3d6e7d3de29042900390c109c717394756394755a94825a7379634a65733155844269ad4269a542699c295173215173215594105dde0859de +105dc61065c61069ce1071d61071d6006dce0069d61071de2165bd395d94949aa5bdb6adcec3cec6c3ceced3d6ced3ced6d3ced6d3d6d6d3ded6d7ded6d7d6d6 +d7d6ded7d6e7d3de29042900290c089479739c7d6b8c755a73715a52615a42657b39658c42659c4259844a5d634a5d6342657b3169a52165ce1859ce00348410 +458c185dce1869d60051a50038840049a52165c63169bd4261948c9294c6baadd6c7d6cec7d6d6dbdeced3d6d6d7d6d6d7d6d6d3d6ced3d6ced3d6ced3d6d6cf +d6decbde29042900311c088c75637b69526b6552636d735a717b63757b636d6b4a55526b695a73694a5a5d5a315d8c3979bd2965b508387b21304a31456b3169 +c6316dd6103c84001c4a18345a395584426dbd4a75ad637d73adaa94c6babdcec7d6d6d3d6ced3cededbd6d6d7ced6d3d6cecfd6ced3d6ced3d6d6d3d6decfde +290429002914008c796384795a6b6d525a656b5a616b6b615a6b5d4a7b714a8475428471426b716329619c296dbd29558418344a5a59524a555a3169b53169c6 +1838731820394a41394a555a426da55282bd425d63848e7bada6a5cec7c6cecbceded7d6d6cfc6cecbc6c6c3c6c6c3c6c6c7c6c6cbced6cfcedecbde29042900 +3910089475637b715273714a736d5273614a8c69528c654a8c714a8471398c7942525d4a3975b5215da521344a5a55427361425a655a2165a52975c6102c5a31 +2c396b553952513931597b4a82b53155735265738c9284b5aa9cb5a6a5cec3c6c6c3bdbdbab5b5b2b5b5b2b5b5b6b5bdbebdcec7cedecbde29042900420c088c +695a7b694a7b714a84754a84694a9c6d4a9469428c71427b6d427b754a5261524a75a51030635a554a7359318469395a615221659c2171b51030523934317355 +316355313959633965844a699c18244a73756b7b715aa59284a5928cb5a69cada29ca59e9ca5a2a5adaeadbdbab5cec7cedecbde29042900390c108c615a8469 +4a846d4a846d4a7b65428c71428c7142736d3973795242554a6b7d7b4a4d525249427b5d318c6531946d39635d5229659c2169ad1838424241316b55316b5d39 +5a614a4a61635a6d9c10204a424531635d317b6d528c756394867394867b948a8c9c969cadaaa5bdb6b5cec7cedecfde290429004210188c615a84654a846942 +7b65397b65398c6d39846d39736931636942425952525d5a524531846139845d298c612994693963594a39618c215584213431524d29635131735d3173653963 +61524a5573424d6b2928106b613163552984714a8c7d6b8c7d73948684a59a9cb5aeadc6bebdd6c7cedecbde290429004a0c1084554a735d396b61297b65298c +6d319469318459218c6d296b5d296369524245396b55398461427b5d317b61318c65317359425a657b394d633938296359316b5929735d298465317359395a59 +5263695a4a41216b5d316b61217b6d39846d527b6d638c7973a59694bdb2b5cec7c6decfd6decbde290429004a081084554a84694a7b6d397b69298c6d319469 +398c61398c61298465396351396b554a7355397b59396b51317b6142845d317b5939635d6b4a49524a3c317359397359317b59298459317b5531635d42635d4a +6355396b55397b65316b5929846d528469638c7573a59694bdb6b5d6cbcedecfd6decbde2904290042102173494a73554a7359426b51296b51297351397b5542 +7b514a84515273494a7b554a8455427351316b51426b554a7355426b514263555a5245525a454a73514a7b51427b51398451397b55426b554a6b554a734d4a7b +554a7b554a734d396b49396b5142736163948284b5a6a5cec3c6decfd6e7cfe729042900290410421821310c08311400311c00311c0031140831101039081839 +0418390410421010420c004a1c00311810210c08311408291008291018210818290c18310c18390c08421008421008390c08311010290c10390c10420c10390408421010391408311408291010291018211418211418210c182108182904290005000000070101000000030000000000}}}{ +\cf1\loch\af28\hich\af28\dbch\af28 \nestcell{\nonesttables +\par }}{{\*\shppict{\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn posh}{\sv 2}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}} +\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1085\pich1032\picwgoal615\pichgoal585\pngblip\bliptag1057133062{\*\blipuid 3f029206024f6b118a7b7cfe78b5d351} +89504e470d0a1a0a0000000d49484452000000290000002708020000001d08f6d10000000373424954050605330b8d80000000017352474200aece1ce9000007 +bb4944415458476d584d8b24c711cdeec99ecdf456a12a9885eee31ef738061f56078164ec837c306840c2bfc17bf62f11fe233e6b7530f817e8a083600f3af4 +c22e74811a3af11683de7b1199552d6d4ed0935d9595f1912f5e44f5661f5e8c7787e3f95452083160a4984a299c455c0a9a9530871412bfcf762d7131e67a24 +c45ce68b66cbe0e23ab489ad948a529e9fd3e6c5f0f2fee51f4b0c2525ae980b7473fbc209aedbf08d9a325dac3baeb4984175b41b57bae146296ffef3bfcd3e +dd3ffce32174f08a7b5de690a109f373a1dfd84b9f16813297e36c31e1c06268e2d76b95bc8730d0ee9cdc94252a650ee399ba6fba38fef92f9fcdb71112fb98 +9fc6b89dd39314b6521a437c12e39390728a3733428f65e53686ed7cc1d6db5020b021eee61816816a5cb9dde1f1791be614309fb75843098f33b679f7d3cf37 +cfba675f7ef5f7dd277dee77fd90fb2ef739e63fc4fe6982c4a7297531757d8f6760cd93b0d9c8c739e610378f73f93fdc9be3e32e3e8688050a01e7fa34e318 +1d59c6406c0374c7799e7efcf92685fee19baff3001d50121346dc0d5d8ef0f436efd26673bbeb71e376ce309c27d06f6e22f78553dbb003ccc226df12a81c5b +09e636e19a1811517d4d5a12b1fe31bcfbe10d4d4d5093f2388c549cd2d8a5dcf1cb38a401a31b5207cbf83976a3ce12b137e1dc4e3d57543630e30aa0830746 +804b9225426ec6ad2d1cd4760e1f6e812b423b0477618a0f05c5063044836937ffa78eb1a6321360cca3cf8c858c008c920582b9e19fa7a138531f6ecb153ee0 +895b21cdedb84ce799725652d8f132292cddf994049720d2daf63123ec8ad4f1e869a606ace1d4094446b481c042901ea49d72619c3f2c7753b4bcc3e72232cf +38ca456c21fe50ca0a8555b3694512b781af17a63554522b92def235c3af5d483b77059321af24724e2f793421f40141c7275deb01ee904127446a554c4bc48b +507629e5749e28d3349d4b99f057a67338953015dc04be16a6aaeeafd80d66217ebb2530b6da8e8c28c199f1bc19075ad13673bfcf97693a1da7132c38ca8813 +0d3052b3d3e501cb33c79f1d30b75e80c6731f62400a1fba7418c6c31de4808974db7954a3ec841000683979fc31bfc8ddcb6405836036a515bb641a5c001e49 +c8660fd700e1102ace7b2a1e9edfed0ff8db1f8835e7d95a8e8cbd49ec8a52438e54825797305a46b8844ba61814da45e47441d9180a53fc10d2400910780d23 +b70bc871484bace087a981295449cc28bb9a57a91b21234849b25c67002808b5652feeee8dac62065f33d1452a2c050e75e50c8006ee3f21c2a8005c91755716 +5e679d539b5968ace09f173b0a7bd6488679e9d1547dd3ed2d6ce3d912cbc036a713312c2f798a9540486ae20c036a3de876064950e09ef0dbee3ae85a0857e7 +a529b1f6e6ed11727c7f7cfbfead207df22664c52dda57da8d9b9cb9aa297e1c8415cbc1720004a0b35b75c3fd0961b3efee5ffdeb9f08135b17fca942726f1e +b031a2f3a295019e8b41e13ac5115b4bb0abe19543d5c33b11a26708c3abbf3e6ca112c1129e95bb96b55d0d94f8cfca83069790db592d2c8bbc7e789151ad83 +eb14c5009f6031acd41188536a03869897dcad09a2da6e5eaa50d67e4745f36a2cec66070c18bb0e43fbea93e8b91ee4f33df2fd6e20dddc8de81a44c15e241b +4bc82dd473a72d079d3c30ad4e501e39076383aa573cc329b856744bac39cfdd1df664bb018258ad4c9473f6985056aba1e0a7a2c92bad663bdadb23ae0ff526 +98e0a4b4fb1649c97ec5ab7a9bcbbf9a489e2d96603579a9b279ace6150506bc8b0e9569d2da753f26ac359274d050b7da89654358df1a8cb5ef8e34a6c02ac8 +5608ec9ef3abca8dd560bc6f40680a8a7d61bdff10ca8782af175218fcd6c3cc10d663db77d56c685bef02985466b8ba1819ddda12bdbb78ef662dc632cea7a9 +4a017dfd82afd24da3b4bfcec03b2977bd965b1eb6f1946797e7959f77f59b9d93da1b8ade1c283806c859c239da028684ba69af8007c6a07f8e29e13c8691c2 +3a683511c85852c50a43c3a059b0b401febd5d25710110dedacaef867e3e074761879a0164d3c0d618c52aa73e0f192dbca5ec8ad24517bc6abdacb78b1ec845 +f9625f8310275b12a415164b1e6f7a734279ec47efc28cb4a0840d5add9310e1c5a1277781cec85fd6322866d6aa32a3aab44425cb2be64eda5ef9c14d7832af +eb811e1620f402e0eadd85da7f0d3dfa43bc4d343aab8c6b750784d1b145c46d9007180c1ba196bc78fdfd6b78052896a857821480c35555a881222acb49394c +137840d6f42564f6d57bc9faaca32d6f23a12681541e3e7fc07b09df57013cd8b2c72bcf8c7eb430244b45526ae92548996a801242d5968bc6afb6ffcd17ab37 +56a52a7928e6a8d6e35d06a0a682b43b62c5a0171cbefd47d28429569543fa4e528cdec38a9fd4bb2cef006b1a2790886db84b8f353c909bfdf0fcf57fbf2be7 +497d09390151c5eec89fc57c7116430762aa550da06049364ac7828fb94e25e8bd6ca805951dfc41e06f2fbf602d99de4d08267aa6e37bb42c3839bc811e2e33 +5e7cc07da43fe38afa12a4f7a69d29b6d2863c347a6c3eb5b9d85a4cac860e5a8910736bf37c78f1edbfbf45cf8c5702f08e990fe791d9662ed79967cbe0cf21 +84d9ba57f95d79f6c797075b72d39a4ffff4c5e63edcc3eae93cd16684c5ca0326cbcf2a6b9c2fb1e52f41ed87a18fbc22ad6d1534daa158419ad3af83dd29f97217a6cc0000000049454e44ae426082}}{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw1085\pich1032\picwgoal615\pichgoal585\wmetafile8\bliptag1057133062{\*\blipuid 3f029206024f6b118a7b7cfe78b5d351}010009000003b809000000009409000000000400000003010800050000000b0200000000050000000c02270029000500000007010400000094090000430f2000 +cc000000270029000000000027002900000000002800000029000000270000000100180000000000e4120000c40e0000c40e0000000000000000000031003139 +0c39290029290029290431290829290829290c312104292104292104292904292904292904292900292900292904292904292904293108312904293108313108 +3129042929042929042929042929042929042929042929042929042929042929042929042129082129082129082129042129042931003100291021bda6b5d6be +cecebac6c6b2bdc6b6bdc6b6bdb5aeb5c6babdc6babdc6babdc6bac6cebec6cebac6cebac6cebac6cebac6c6bac6cebec6d6c7ced6cbcedecfd6ded3deded3de +e7d7dee7d7dee7d7dee7d7dee7d7dee7d7dee7d7dee7d7dee7d3e7e7d3e7e7d3e7efd3e7efd3e7efd3e7efd3e7efcfef31042900211018cebec6cec3c6cec7c6 +c6c3bdc6c7bdcecbc6d6d7cebdc7bdbdc7bdbdc3bdc6c3bdc6c3bdc6c3bdc6bebdc6bebdc6beb5bdbeb5c6c3bdcecbc6d6d3c6dedbd6e7dfd6dedfd6ded7ced6 +d7ceded7ced6d7ceded7ced6d7ceded7ceded7d6ded3dedecfdeded3deded3d6e7d3d6e7cfdee7cfdee7cbe729042900211018ded3d6cec7ced6cfd6d6d7d6ce +cfcec6c7bdbdc7bdc6cbc6c6cbc6c6cbc6c6cbc6c6c7c6c6c3c6c6c3bdc6bebdbdbeb5bdbeb5bdbeb5c6c7bdcecbc6ced3c6d6d7ced6d3ced6d7ced6d7ced6d7 +ced6d7ced6d7ced6d7ced6d7ced6d7d6ded3d6ded3d6ded3d6ded7d6ded7ceded3d6e7cfd6e7cbde29042900180010e7dbe7e7d3ded6cbcececbced6cfced6d7 +d6d6d7ceced3ceced3c6cecfc6cecfcececbcececbc6cec7c6c6c3bdc6bebdbdbab5bdbeb5c6c3bdcec7bdcecfc6d6d3cececfc6d6cfc6d6cfc6d6cfc6d6cfc6 +d6cfc6d6cfc6d6cfc6d6cfc6cecfcececfced6cfc6d6cfc6d6cfc6d6cfc6decbcedec7d629082100291021dec7d6dec7d6e7d3dee7d7ded6cbced6cbc6d6d3ce +d6d3ced6cfced6cfced6cfced6cfced6cbced6c7ced6c7c6cebebdc6bab5c6bab5cec3bdcec7bdd6cbc6decfced6cbc6d6cbc6d6cbc6d6cbc6d6cbc6d6cbc6d6 +cbc6d6cbc6d6cbc6cecfc6ced3c6ced3c6ced3bdd6d3bdd6cfc6d6cbcedec7d629082100290c18e7cbd6efd3dedec7ced6cbc6decfceded7d6d6cbc6d6cfced6 +cfced6cfcedecfcedecfcedecfcedecbced6cbcecec3bdcebab5cebab5cebebdd6c3bdd6cbc6decbc6d6c7bdd6cbc6d6cbc6d6cbc6d6cbc6d6cbc6d6cbc6d6cb +c6d6cbc6cecfc6cecfbdcecfbdcecfbdcecfbdd6cfbdd6cbc6d6c7ce29082100290c18decfd6decfced6cfc6cecbbdcecfc6d6cfc6cec7c6d6cbc6d6cbc6d6cb +c6d6cfc6d6cfc6d6cbc6cec7c6cec7c6cebeb5c6beb5c6baadc6beb5cec3b5cec7b5cec7bdcec7b5cec7bdcec3b5c6beb5c6baadc6b6adbdb6adbdb2a5b5aea5 +b5b2a5b5b6adbdbaadb5baa5b5b6a5b5b2a5bdb6adc6b2b529042900210c18decbd6d6cfced6cfbdcecbbdcecbbdcec7bdc6bebdcec3bdcec3bdcec3bdcec7bd +cecbbdcecbbdcec7bdcec3bdc6beb5c6baadc6baadc6beadcec3b5cec3b5cec3b5c6beadc6baadbdbaa5bdb6a5bdb2a5bdb2a5b5aea5b5ae9cb5aa9cb5aa9cb5 +aea5b5aea5b5aea5adaa9cadaa9cb5aa9cbda6a529042900210821dec7d6d6c7cecec7bdc6c7b5c6c3b5c6beb5bdb6b5bdb2b5bdb6b5c6baadc6beadc6c3adc6 +c3b5c6beb5c6beb5c6baadc6baadc6baadc6baadc6beadc6baadbdb6a5bdb6a5b5ae9cb5ae9cb5ae9cb5ae9cb5aa9cb5aa9cada69cada69cada69cadaa9cadaa +9cadaa9cada69cada694ada694b59e9c29042900210421dec3d6d6c3c6cec7bdc6c3bdc6beb5bdb6b5b5aeadb5aaa5b5aaa5b5aea5bdb2a5bdb6a5bdbaa5bdb6 +a5bdb6adc6b6a5c6b6a5c6b6a5c6baa5c6baa5bdb6a5b5ae9cb5aa9cada694b5aa94adaa9cb5aa9cb5aa9cadaa9cada69cada69cada69cada69cada694a5a694 +a5a69cada694ada694ad9e9c29042900290421debed6d6bec6cec3c6cec3b5c6bab5bdb2adb5aaa5ada29cb5a69cb5aa94b5ae94b5b294b5b29cb5b29cb5ae9c +bdb2a5c6b6a5c6b6a5bdb6a5bdb69cbdb29cb5aa94ada694ada694b5aa94b5aa9cb5aa9cb5aa9cadaa9cada69cada69cada69cada69cada69cada69cadaa9cad +aa9cb5aa94b5a2a529042900290829debed6cebec6cec3bdc6c3b5c6baadbdb2adb5aa9cada294b5a294b5a694b5aa8cb5ae94b5b294b5ae94b5ae94bdb29cc6 +b29cc6b29cbdb29cbdae9cb5ae94b5aa94ada694adaa94adaa9cb5ae9cb5aea5b5aea5adaaa5adaaa5adaaa5b5aea5b5aea5b5b2a5b5b2a5b5b2a5bdb2a5bdb6 +a5c6aead29042900290821debececebabdcebeb5c6beadc6baa5b5aea5b5a69cada294b5a294b5a68cb5aa8cbdae8cbdb294bdb294bdae94bdb29cbdb29cbdb2 +9cbdb294b5ae94b5aa94b5aa94ada694b5aa94b5ae9cb5b2a5b5b2a5b5b2adb5b2adb5b2adb5b2adbdb6adc6baadc6beb5c6beb5c6beb5c6beadcec3adcebabd +29042900290818d6bec6cebab5cebeadc6beadbdbaa5b5ae9cb5a694ada28cb5a28cb5a68cb5aa8cbdae8cbdb294bdb294bdb29cbdb294bdb294bdae94bdae94 +b5aa94b5aa94b5aa8cada694b5ae94b5b29cbdb6a5bdbaadbdbaadbdbab5c6beb5c6beb5c6bab5c6beb5cec3b5c6c3b5c6c3b5cec3b5cec7b5d6c3c629042900 +290c10ceb6b5cebaadcebea5c6be9cb5b294b5ae94ada68cad9e84b5a284b5a684b5aa84bdaa84bdae8cbdaa94bdae94bdaa8cbdaa94bdae94b5aa94b5aa8cb5 +a68cb5a68cb5aa94b5ae9cbdb6a5c6beadc6beadc6beb5c6beb5c6beb5c6beb5c6beb5c6beb5c6c3b5cec3b5cec3b5cec3b5d6c7b5d6c3c629042900290c10bd +a29cb5a694b5aa8cadaa84a5a27ba59e7ba59a7bad9e84b5a284b5a684bdaa84bdaa84bdaa8cbda68cb5aa8cb5a28cb5a68cb5aa8cb5a68cb5a28cada284ada2 +8cada68cb5ae94bdb29cc6baadc6beadc6beadc6bab5c6bab5c6baadc6baadc6baadc6beadc6beadc6beb5c6beb5cec3b5d6c3bd29042900291010a58e84a592 +7b9c96739c966b9c966b9c9673a59a7ba5967bad9a7bad9e7bb5a27bb5a67bb5a284ad9e84ad9a84b59e84b5a284b5a284b5a284ada284ada284ada284ada284 +b5aa94bdb29cc6baa5c6baadc6baadc6baadc6baadc6b6adc6b6adc6b6adc6baadc6baadc6baadc6baadcebeadd6bebd290429003110109c827b9c8a73948e6b +948e6394966b9c926ba59a7ba59a7bad9a7bb5a27bb5a67bb5a684b5a284b59e84ad9e84b59e84b5a284b5a284b5a284b5a284ada284ada284ada284b5aa8cbd +ae94bdb69cc6b6a5bdb6a5bdb6a5bdb2a5bdb2a5bdaea5bdb2a5bdb2a5bdb6adc6baadc6baadcebeadd6bebd29042900310c189c82849c8a7b9c8e73948e6b94 +926b948e6b9c8e73a5967bad9a7bad9e7bb59e7bb5a27bb5a27bb59e84b59e84b59e84b5a27bb5a27bad9e7bad9e7bad9e7bad9e7bad9e7bada284b5a68cb5aa +94b5aa94b5aa94b5aa94b5aa94b5a694b5a694b5a69cb5ae9cbdb2a5bdb6a5c6baa5c6beadd6bebd29042900310c21b5969cb59e94ada28ca59e84a59e7b9c92 +739c8e739c8e73a58e73a5926ba5966ba5966bad9673ad967bad967bad9a7bad9a7bad9a73ad9a73a59673a59673a59673a59673a59673ad9a7bad9a84ad9e84 +ad9a84ad9a84ad9a84a59684a59a8cad9e94ada694b5ae9cbdb2a5bdb6a5c6baa5cebab531042900310c21ceaebdceb6b5c6b6a5bdb29cb5aa94ada284a5927b +9c8e73a59273a5926ba5966ba5966bad9673a59673a59673a59673a59673a59273a59273a59273a5926ba5926ba5926b9c8e73a59273a59273a59273a5927ba5 +927ba5927b9c8e7ba59284a59a8cada294b5aa9cbdaea5bdb2a5c6b6a5ceb6b531042900290421d6b6c6d6bebdcebeb5c6beadbdb29cb5a6949c927b9c8a739c +8e73a58e6ba5926ba5926ba5926ba58e6ba58e6ba5926ba5926ba5926ba5926ba5926ba5926ba5926ba5926ba5926ba59273a5926b9c8e73a59273a59273a58e +739c8a739c8e84a5968cada294b5aa9cbdaea5bdb2a5c6b6a5ceb6b531042900290c21d6bac6d6bebdcec3b5c6beadbdbaa5adaa94a59a8c948e7b948a739c8e +6ba5966b9c926ba5926ba5926ba5926ba5926ba5926ba5926bad966bad966ba5926ba5926ba5966ba5966ba5966ba5966ba5926ba5926ba5926b9c8e739c8e73 +9c8a7ba5928cb5a29cbdaaa5c6aea5c6b2a5c6b2a5ceaeb531042900290c18d6bac6cebebdcebeb5c6baa5bdb6a5ada6949c9684948a7b948a73948e6b9c926b +9c8e639c8a63a58e6b9c8a6b9c8a639c8a639c8a639c8a639c8a639c8a5a9c8a5a9c8e5a9c8e639c8e639c8e639c8e639c8a639c8a639c8a6394866b9486739c +8a7ba59684b5a294bdaa94bdae9cc6b29cc6aaad31042900290c21d6bac6cebabdcebeb5bdb6a5b5b2a5ada2949c968c948a84948a73948e739c92739c8e6b9c +8a639c8a6b9c86639c8a639c8a639c8a639c8e639c8e639c8e5a9c8e5aa58e5aa58e5a9c8e5a9c8e639c8e5a9c8e639c8e639c8a639c8a639c8e6b9c926ba59a +73ada27bb5aa84bdae8cc6b28cc6aa9c31042100290c21d6b6c6cebabdcebaadbdb2a5bdb2a5ada294a59a949c928c948e849c927ba59a7ba59673a59273a592 +73a58a739c8a639c866394865a94865a9c865a9c865a9c865a9c8a5a9c8a5a9c86529c865a94865a94865a94865a94865a94865a948a5a948a5a9c8e5a9c9263 +a5966ba59a6bad9a73ad928431082100290821ceb6c6ceb6bdcebab5bdb2a5bdb2a5b5a69cada29ca59e94a59e94ada294b5a68cb5a28cb5a284b59a84ad927b +9c8a6b94866394825a94825a94825a947d52947d529482529c825294825294825294825294825294825a94825a94825294825294864a94864a94864a94865294 +865294865a9c826b31082100290821ceb6c6ceb6b5cebab5c6b6adbdb2a5b5aea5b5aaa5b5aaa5b5aaa5bdb2a5bdb29cbdb294bdaa94b5a694ad9a8ca5927b9c +8e6b9c866394825a94825a947d52947d52948252948252948252948252948252947d52948252947d5294825294825294864a94865294864a94824a9482529482 +5294796331082100290c21ceb6c6ceb6b5cebaadc6b6a5bdb6a5bdb2adbdb2adbdb2adbdb2adbdb6a5bdbaa5bdb69cbdb29cbdae9cb5a694a596739c8e6b9486 +5a947d528c7d528c794a8c794a8c7d4a8c79428c79428c79428c79428c79428c79428c794a8c794a94794a94794a94754a94794a94794a8c75529475528c6d5a +31042100290c21ceb6bdceb6b5c6baadbdb6a5bdb6a5bdb2a5bdb6adbdb6adbdb6adbdb6a5bdbaa5bdb69cbdb6a5bdb2a5b5aa9cad9e7ba5966b948a63948252 +8c7d528c794a8c794a9479428c794294794294794294794294794294794294794294794a94794a94754a94714a94754a9475529475528c714a8c655a39042100 +291021c6aeb5c6b2adcebeadbdb69cbdbaa5bdb6a5b5b2a5bdb2adbdb6adbdb6a5bdbaa5bdb69cbdb69cb5aa9cb5a694ad9a7b9c8e6b94825a94825a8c79528c +754a8c71428c794a8c75428c75428c75428c75428c71428c71428c75428c754294754a94754a94714a8c71428c714a8c714a8c6d4a84615239082100210c18c6 +aeb5c6b6adcebeadbdb69cbdb69cb5b2a5bdb6a5b5aea5b5b2a5b5b29cb5ae94b5ae94b5ae94ada694ad9e8ca592739486638c795a8c79528c754a846d428469 +398c6d428c71428c71398c71398c71398c71398c6d398c71428c71428c71428c71428c71398c71398c71428c7142846d3984614a39082100210818bda6adbdae +a5bdae9cb5ae94b5ae94ada694adaa9cada694ada294a5a28ca5a284ada28ca5a28ca59a8c9c927ba592739c8a63947d5a947d528c794a8c7142846d428c7142 +8c6d398c71398c71398c71398c6d398c6d398c6d398c71398c71318c75318c75318c75318c75398c7539846d397b614239081800291021ad969cad968ca59684 +a59e84a59e849c96849c96849c92849c92849c927b9c967ba59a7ba596849c8e7b948a739482638c7d528c754a8c754a8471428469317b693184693184693184 +6d31846d31846d31846931846931846931846d31846d29846d29847129847129846d31846d317b653173593939081800290818947984947973947d6b94866b94 +866b8c7d6b9482738c796b8c7d6b8c7d6b94826b94866b9c8a739482738c79638c79528c7942847542847539847139846d317b6929846d29846d29846d29846d +29846d29846929846929846d29846d31846931846d31846d318469318469318469317b61317355393908180031081884616b8c6d6b8c756b8c75638c715a8c71 +638c796b846d638c71638c7563947963947d63947d6b94756b8c7163846d4a846d42846d42846d42846939846539846531846931846531846531846531846531 +8465317b61317b65318465318461398461397b61397b61397b61397b61397b5d31735142390421003910296b495a6b4d5273554a7355426b514273554a73554a +6b4d4273514a73554273554273554273554a73554a73514a73554a73554a73554a73554a7355427355427b55427b55427b55427b55427b59427b55427b55427b +55427b55427b554a7b554a7b554a7b55427b55427b55427b59427b5542734d4a3900290029001842142931081031100831140831140839181031100831100839 +1408391408391400311400311000391008391010390c10310c10390c10391010390c10391010391010421410391008391008391008391008391008391008391010391010391010391010391008391008391008391408391408310c103900310005000000070101000000030000000000}}}{ +\cf1\loch\af28\hich\af28\dbch\af28 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1834 \cellx2356\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1639 \cellx4497\clvertalc +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1413 \cellx6277\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'e3\'d4\'e3\'d3\loch\f167 \hich\f167 \'cc\'d2\'c6\'ed\'c7}{ }{\cf1\loch\af28\hich\af28\dbch\af28 +\nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'e3\'d4\'e3\'d3\loch\f167 \hich\f167 \'cc\'d2\'c6\'ed\'c7}{ }{\cf1\loch\af28\hich\af28\dbch\af28 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'db\'c7\'c6\'e3}{\lang1033\langfe1049\langnp1033 }{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1834 \cellx2356\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1639 \cellx4497\clvertalc +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1413 \cellx6277\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 41}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 +\nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 5}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'df\'c8\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 39}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 4}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'df\'c8\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 50}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 10}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'df\'c8\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx623\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth409 \cellx1135\clvertalc\clbrdrt +\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx1955\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx2585 +\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth472 \cellx3174\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx3994\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx4625\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone +\clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth504 \cellx5253\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx6277\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 36}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 +\nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 2}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d5\'db\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 28}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ -2}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d5\'db\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 34}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 1}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d5\'db\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx623\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth409 \cellx1135\clvertalc\clbrdrt +\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx1955\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx2585 +\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth472 \cellx3174\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx3994\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx4625\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone +\clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth504 \cellx5253\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx6277\nestrow}{\nonesttables +\par }}\trowd \trqc\trleft-15\trftsWidth2\trwWidth2529\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth4942 +\cellx6292\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth58 \cellx6366\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1033\langfe1049\langnp1033 \cell }\pard +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1033\langfe1049\langnp1033 \trowd \trqc\trleft-15\trftsWidth2\trwWidth2529\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth4942 \cellx6292\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth58 \cellx6366 +\row }\pard\plain \s16\qc \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\cf1\lang1049\langfe1049\loch\af28\hich\af28\dbch\af28\cgrid\langnp1049\langfenp1049 {\field\fldedit{\*\fldinst { +\b\fs36\cf2\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 \hich\af28\dbch\af28\loch\f28 HYPERLINK\hich\af28\dbch\af28\loch\f28 "http://www.naseej.com" }{\b\fs36\cf2\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b2e00000068007400740070003a002f002f007700770077002e006e0061007300650065006a002e0063006f006d002f000000}}}{\fldrslt {\cs15\b\fs36\ul\cf2\lang1033\langfe1049\langnp1033 +\hich\af28\dbch\af28\loch\f28 Naseej }{{\*\shppict{\pict{\*\picprop\shplid1028{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}} +\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw794\pich661\picwgoal450\pichgoal375\pngblip\bliptag232017502{\*\blipuid 0dd44e5efa294c339c7cc3de40e83fda} +89504e470d0a1a0a0000000d494844520000001e000000190802000000a957094d0000000373424954050605330b8d80000000017352474200aece1ce9000006 +6a49444154484b555671681b5518ff96bd9517b9e28bb67091167663556ea898ce0dd73f840574d8e1742d4e4c1c8275c2c8e61fcb1cb8965146b681640e478b +e83a9049264e52b0239d389ac12aa9ac98201bc9b02519b478870dbb633976cfe5ecf9bdbb6cc3c797cbcbbbeffddef7beeff77d5fd618aecb75c89ecd739d1b +261c38da6faf07de011af030400828e5c01c0014c6014c701800051cf88b02af73cabc9f380817d21a148ca62baf1fa01089b0d83696a01005880e9fcd69ae9b +ba94c9cd96eda66bafb8aeedba38b10d7cb6c4b61f4e5cf7a182a787d60a81a1fd338cc5188d0ebd93324a6271e6422e222b0c98563292fb938cc885bc66375c +3cc3308488339a02c2b6abe269d802d017f141ab84e085130003541a18fe2c2bd61ba8acb937cbb9bda90830235f4e1d4c295ddb8046129fe60488c0758d06da +6cd84d012d6cc75d8fa15b56073c9fe1277ce24c86e3d4a9d5ce8d9ddfbd93cfe7a6f71d1e8c46691d3217ce033733df4f8742f1e96bbc721ba844b9434d2b28 +fc4d3c08e289837e6f492071300634041006aa8c1c1f072778feec7888d8fcce5c7936977865b078ad58b89a379a5573b982bbe21fc6fb770fe67f35118249b2 +c9291a44a587d0888e4a7880430394e8c06b6069d4099f3e93d74b10ea0a73d063dfa4a31fc7233de19d5b7ad3a7c6b545a8ba33ea768513535fac0cbe7978fc +94ae2dfb5c0193233e1e86e271c97b06a2af45c499c831cb60d037723c173f94d6805d3c960246f3d7b232a387df4b6e527be77eab652753d1ed11b651a5541d +3996eddb32595b1438948a23b8e79847e86bbffe76cc32add28d3b8e43c2d2d6c2e2cd76dadeb3b977e1af85853fe6f82aa9dfb376bdff41e7c60d073ed99138 +3a127feb75536f9ffd7959eee833ebed5f7e3535f8f6d6f6a7c0219c80e30021ab0430820108e0551287861499320235ab12667da9efcad0135763c9e93b9a29 +811a51f47a65f8782c7624913a3382468d1ce9579f57b965a3918a1ceddb72227f052dc6544241e798229e3804676c7766aa8a99a2b034c0184036f252317b49 +abce958d5f0ac6544e90b969978deab67d43d50692cead2eb90069a5a30030c1684696d3998b9a473f643932524c41f0d4cbb4e4fe310643029a94119dc963b8 +6e2fd86e034543a936b4c24275664e13945e7167f2883ecca48c2c650192eac6f4c4c5b2878e477b29e3e38a95a6cba4015462ac4029a2e794ae2c26b68dd04d +db6e602278a9a6095384410d37378de8684d928abb2694f5c313170a8fd0d7a64646f5bb20490e0f389bd4be4b3f4c51a7d37910ec967a6b750d17fbde086330 +25e48005e43e480cac7b1cf5491be95644aacc5e2f48b49392b05e5f5caa69bd2ff72acf60e0c8dad1d151d2064ba6d5fe84d4a38694a7372cfdbea45b2bd683 +1081d0fced5a65b9be6367f78a6986da3c128bdaa691360be09ffabd9557b76fed7c72c3d4952c63ddd67daeeb1605d6bb4591280191fe783bbca92d2e8af3cc +e7da369655a12893223a1de4b14c1e1de3dae84054169ed10ca3e0ba182e0c9dd806d08f9e913b845b6429999bc4f2e2825f2d1f163351bb8c25b73c2b9ca8c8 +19c62680a46847323be9b9b8a56cdb4d11282f5c3877b353550a18a701a50b3986de1f40cd3508ed5dd3cb269f8f40f53ad875d8a0c6b11930296c621990203b +39a6aa10964572238df1c622b91d4a09e30e0cc5c6f3572bba6950825be0f41769cc1b1fd7836e0930064106869149ec8f9b560d9dcbadcae09e9dd397e7383a +d93b1ee1d0adfec43421be77c8340d81e2705c29964a9ed57e3dc43c72d0965649c4d75862b0ea6095e87fe723fd0ed251a459fa643ab1afdf2f75be0e9aef6b +2add07b0089a960960c81d61c110614440946a1270b8d37056d739010aaba20e90003801ccec5dfa5db3b25c422e4dff34150c743edbf38224097bea7f732c3e +b44dd4bbc53fa154ac747448ce8335a6b5b476f4e8a840217e6745f47524400850eb3e561a81fe2f5ac220baa36f93aabcf85c4fb954bb5eb831f9e3240d867a +37f74812115623c02a4c5d5e98bf75c3ba6fa1897bde1d04410f1177bfffb47a4fabcd35ddaac86a91b9de3bfc768bf3067651ac4beafa68eaf844715e68608a +22e1d48d094663940c6056e3cf35082d3c855e96bcc8fbff0130389cfb5558373963182b41092a3a88b85ee59699b9787efcdcb869194a97aae9fe2e1cc1c4c104ee3b7c68c0837e345a5479bcf068e6ffe9f09ad3ffde8e1c3d1da4d4168bd824839cdbe993c86b31fe0386074dcce08397a20000000049454e44ae426082} +}{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw794\pich661\picwgoal450\pichgoal375\wmetafile8\bliptag232017502{\*\blipuid 0dd44e5efa294c339c7cc3de40e83fda} +010009000003c40400000000a004000000000400000003010800050000000b0200000000050000000c0219001e0005000000070104000000a0040000430f2000 +cc00000019001e000000000019001e0000000000280000001e000000190000000100180000000000fc080000c40e0000c40e00000000000000000000fffbffff +fbfffffbfffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffbfffffbfffffbfffffbfffffbff8c757b947d +8494797b9c797ba57d7b9c7573fffbfffffbfffffbff0000fffbfffff7fff7f3f7fffffff7ffffeffffff7fffffffffff7f7f7fffffffffffff7efe7fffff7f7 +fbeff7fff7fffffffffbfffff7ffefcbd68c717b210c10100000391c21310408390408390408420408ad7173ad797bffebeffbfffffbfffff7fff7fbfff7ffff +efffffefffffeffffff7fffffffffffffbf7f7e7defffff7fff7effffff7efffeffffff7efcbce8455632100004220299c8284e7cbcefff7f7ffe7e7efaeb56b +24295a0810520408520c10efaeb5717bfff7fffff7fff7ffffefffffe7ffffe7ffffeffffffffffffff3effffbf7fffbf7ffe7e7fffff7fffbefb5b2a5948a84 +391418390c104a2029b5969cfffbfffffbfffff7fffff7fffff3ffb559635a00005a00005a0408a5595a2029fffbfffffbfff7ffffefffffe7ffffdefbf7effb +f7fffff7fffbf7fffbf7fff7f7ffe3defff7f78c6963291808291408210000a57984ffdfe7fffbfffffbfff7e3e7ffebeffff7fffff3f7b559636b0008731418 +6304084a0000969cfff7fffffbffffffffefffffe7fbf7effffff7fffffffffffffbf7fff7f7ffefefffcbce632018390000290000290400b58a8cffeff7fffb +fffffffffffbf7fff7f7fffbfffff7ffffeff76b0c18730c106300005200006b1418fbfffff7fffffbfffffbffeffbffefffffeffffffffffffffbf7ffe7e7ff +efefc6696b6300005200004200004a1008c69694ffefeffffbfffffbf7f7fbf7f7fffff7fbf7fffbf7ffebe7f7b2b55a00085a00006300006b0c10c66d73ffff +fff7fffff7fffffbfff7fbfff7fffff7ffffffffffffebe7ffd7de5a00006b0000840c106b00006b0c08ffbab5ffe3defffbf7fffbfff7fbf7f7ffffe7fff7ef +fbf7fffffffffbf794555a6b10185a00006b04086b1018f79ea5fbf7fff7fffffbfffffbfff7fbf7f7ffffffffffffe3efffc3d6630000a518219c1010840400 +731408ffaeadfff7f7fff7f7fffbfff7fbffe7fbf7e7ffffe7fff7f7fffffffbf7deb2ad5200085200008c1c21630000520000fff7f7fffffff3fffffbffffff +f7f7f7e7f7fff7fffbffe78aa5ad1039ce0029ce0418ad0000941800f7bea5ffffefffe7f7fff3ffeff3ffe7ffffc6efefdeffffe7fffff7fff7fff7f74a0000 +6300009414186b0000730c18efaeb5fffbf7fffffffbfffff7f7efebdefffff7fffff7ce929c9c18399c0008d60008d60008b51408c66d52ffffe7efefdefff7 +fffff3fff7fbffdef3f7deffffe7ffffdeefe7fff7efce8a8c5a00009414187300006b0000bd656bffe7e7fffbfffffffff7ffffe7e7f7fffff7fff7deaead5a +0000a50410c60008ef0c21b50000d67973ffffeffffbeffffffffff3ffffeffffffbfff7ebeff7fffffffffffffbf7b57d7b5a00008c08109408106300007b30 +31efcbc6fffffff7fffffffffff7f7fffbfff7fffffffbff520c10730000c61010d60808b50000ad1c21ffeff7f7f3f7f7fbffeff3f7fffffffffff7ffe7e7ff +f7f7fffbf7fff3f7ffb6b56300007300009400086b00007b2021c6a29cfffff7effff7e7fff7fffffffbf7fff7f7fffbff946973630010940000d60400ad0000 +941810fff7f7f7dbf7f7f3ffe7f3ffe7f3ffe7f3dededbc6e7c7bdfff7f7ffebefffbebd7b0000a50c10ad0c187300008c2429d6a69cfffff7effff7e7fff7e7 +fffff3f7fffff7fff7f7deb2bd4200008c1021940000ad0000ce3031e7aaadd6c7dec6baefb5b2efefeffff7fbffdeefd6636539fff3defff7efffe3de8c0000 +c614219c0000a508108c1818e7a6a5fffff7f7fff7def7eff7fffff7ffffbebdf7f7eff7e7de6b20297304108c0000b510217b0008e79aad9c8aad1018523134 +847365bdad8ec6fff7ff73825a7b8e5affffe7ffefe7ad2c29bd0810c60000d61821840008f7aeadfff7eff7fff7f7fff7eff3effffffffffbff0000fffff794 +7573630808730000b50c217b0008a55d848c75ad29308429389c312894523494d6a2dea57584080c00ffffd6ffffe7b5796b840000c61418c60008940000ffcb +cefff7efefffefe7fff7f7fff7fffbfffffbfffffbff0810d6bebd420c087308007b00008c00109c3c63b5aae710288c1020a59c9eff311c9c8c5dbd9c598c31 +0000dec7a5ffffd67361425224108c1810940000ad1418ffd3d6fff7f7fffff7effff7e7fff7fffffffffbfffff7fffff7ff1418a5797b4200006b00008c0c08 +520000e7bae729388c0028a58ca2ff948eff845dde844da5290018ffd7d6ffffde7b5129422000290000631008e78284ffdfdefff7f7fff7f7f7f7efeffff7ef +fffffffffffffbfffffbfffff7ff0000bd7573630800840c00731000947173e7ebff101c7b1828ad0008a53928bd6b38ad52185a94798cfffbef4200005a1000 +521c08522418efc3b5fffbeffffbf7fff7effff7f7fffffffffffffffffffffffffffffffffbfffffbff82846308085200006b0c00520800ffeff7deefff7b8a +de21249c3928ad8465e718004284598cd6bec62100006b1c105a0800f7baadffd3cefffff7f7fbefe7efe7f7fffffffffffff3f7fffbfffffbfffffbfff7ffff +f7fffff7fffffbef6b0808520000520c08ad797bfff7fffff3ffe7efffd6d3ff845db5100031d6beef846d84391c21310800b5756bfff7effffbf7fffbf7f7f3 +efeffff7defbf7effffffffbfffff3fffff7fffff7fff7ffffefffffefffffeffffffbefbd69635a1010420810845563ffcfefffefffb5a2bd211831100010ef +cfe7736973180410e7bec6fff3f7fffbf7ffefefffefeffffbfff7fbf7efffffdef7f7effffff7eff7fff7fffff7fffff7fff7ffffe7ffffe7ffffe7fffffff7 +fffbef5220183100085a10316b1039420008420000b5927bffffe7a5aa84d6c3b5fffbf7ffebf7fff7fffffbffeff7f7fffbfffffbfffffbfff7f7fffffbffff +fbfffff7ffffebfffff7fffffbfff7ffffefffffefffffefffffffffffffefffe7e7bd7994b5618cb5517bffcbe7ffebdeffffd6f7ffbdf7ffd6ffffe7fff7ef +fff3ffffeffff7ffffe7fffff7fbfffffbfffffbfffff3fffffbfff7e7f7fff7fffff7fffff7fff7fbffefffffefffffeffffff7fffff7ff05000000070101000000030000000000}}}{\cs15\b\f33\fs36\ul\cf2 \loch\af33\dbch\af28\hich\f33 \'e4\'dc\'d3\'dc\'ed\'dc\'cc}}}{ +\fs36\cf2\lang1033\langfe1049\langnp1033 \line +\par }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'cd\'de\'e6\'de}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'c7\'e1\'e4\'d4\'d1}{\fs15\lang1033\langfe1049\langnp1033 +\hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'e6\'c7\'e1\'d8\'c8\'da}{\f387\fs15\lang1033\langfe1049\langnp1033 \hich\af387\dbch\af28\loch\f387 \hich\f387 \'a9\loch\f387 97-1999 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'c7 +\'e1\'e4\'d9\'e3}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'c7\'e1\'da\'d1\'c8\'ed\'c9}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 }{\f33\fs15 +\loch\af33\dbch\af28\hich\f33 \'c7\'e1\'e3\'ca\'d8\'e6\'d1\'c9}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 . }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'cc\'e3\'ed\'da}{\fs15\lang1033\langfe1049\langnp1033 +\hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'c7\'e1\'cd\'de\'e6\'de}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'e3\'cd\'dd\'e6\'d9\'c9}{ +\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 \line }{\f387\fs15\lang1033\langfe1049\langnp1033 \hich\af387\dbch\af28\loch\f387 \hich\f387 Copyright \'a9\loch\f387 1999 Arabian Advanced Systems. }{\fs15 +\hich\af28\dbch\af28\loch\f28 All rights reserved +\par }\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 { +\par }} \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/International/RTL/hebrew.rtf b/12.0.4/Demos/Delphi/Assorted/International/RTL/hebrew.rtf new file mode 100644 index 0000000..dd3cdff --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/International/RTL/hebrew.rtf @@ -0,0 +1,1367 @@ +{\rtf1\ansi\ansicpg1251\uc1 \deff0\deflang1049\deflangfe1049{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f28\fswiss\fcharset128\fprq2{\*\panose 020b0604020202020204}Arial Unicode MS;} +{\f29\fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS;}{\f30\froman\fcharset177\fprq2{\*\panose 00000000000000000000}Times New Roman (Hebrew){\*\falt Times New Roman};}{\f159\froman\fcharset238\fprq2 Times New Roman CE;} +{\f160\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f162\froman\fcharset161\fprq2 Times New Roman Greek;}{\f163\froman\fcharset162\fprq2 Times New Roman Tur;}{\f164\froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f165\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f166\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f385\fswiss\fcharset0\fprq2 Arial Unicode MS Western;}{\f383\fswiss\fcharset238\fprq2 Arial Unicode MS CE;} +{\f384\fswiss\fcharset204\fprq2 Arial Unicode MS Cyr;}{\f386\fswiss\fcharset161\fprq2 Arial Unicode MS Greek;}{\f387\fswiss\fcharset162\fprq2 Arial Unicode MS Tur;}{\f388\fswiss\fcharset177\fprq2 Arial Unicode MS (Hebrew);} +{\f389\fswiss\fcharset178\fprq2 Arial Unicode MS (Arabic);}{\f390\fswiss\fcharset186\fprq2 Arial Unicode MS Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255; +\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} +{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \ul\cf2 \sbasedon10 Hyperlink;}} +{\info{\upr{\title ????-?? }{\*\ud\uc0{\title {\uc1\u1489 ?\u1497 ?\u1489 ?\u1488 ?-\u1500 ?\u1514 ? }}}}{\author Sergey Tkachenko}{\operator Sergey Tkachenko}{\creatim\yr2001\mo11\dy19\hr16\min46}{\revtim\yr2001\mo11\dy19\hr17\min13}{\version6}{\edmins5} +{\nofpages1}{\nofwords0}{\nofchars0}{\*\company Home}{\nofcharsws0}{\vern8249}}\paperw11906\paperh16838\margl1701\margr850\margt1134\margb1134 +\deftab708\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1701\dgvorigin1984\dghshow1\dgvshow1 +\jexpand\viewkind5\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl +{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5 +\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 { +\lang1033\langfe1049\langnp1033 This page is from http://www.israelweather.co.il +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth4785 \cellx4564\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 +\cltxlrtb\clftsWidth3\clwWidth5016 \cellx9463\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\f30 \loch\af30\dbch\af0\hich\f30 \'e1\'e9\'e1\'e0}{\b\lang1033\langfe1049\langnp1033 -}{\b\f30 \loch\af30\dbch\af0\hich\f30 +\'ec\'fa}{\b\lang1033\langfe1049\langnp1033 }{\b\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\field\fldedit{\*\fldinst {\b\lang1033\langfe1049\langnp1033 HYPERLINK "http://www.israelweather.co.il/images.html" \\t "new" }{\b {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000040000006e00650077000000e0c9ea79f9bace118c8200aa004ba90b5600000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0069006d0061006700 +650073002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\b\f30\cf2 \loch\af30\dbch\af0\hich\f30 \'e0}{\cs15\b\cf2\lang1033\langfe1049\langnp1033 .}{\cs15\b\f30\cf2 \loch\af30\dbch\af0\hich\f30 \'ee}}}{\lang1033\langfe1049\langnp1033 +\nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f30 \loch\af30\dbch\af0\hich\f30 \'e0}{\b\lang1033\langfe1049\langnp1033 .}{\b\f30 \loch\af30\dbch\af0\hich\f30 \'ee}{\lang1033\langfe1049\langnp1033 +\nestcell{\nonesttables +\par }}{\b\lang1033\langfe1049\langnp1033 '}{\b\f30 \loch\af30\dbch\af0\hich\f30 \'f4\'ee\'e8}{\lang1033\langfe1049\langnp1033 \nestcell{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f30 \loch\af30\dbch\af0\hich\f30 \'ea\'e9\'f8\'e0\'fa}{\b\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw688\pich635\picwgoal390\pichgoal360\pngblip\bliptag-27807591{\*\blipuid fe57b099a6a5af771309c2fb381ea5f5}89504e470d0a1a0a0000000d494844520000001a000000180803000000d35c1df7000000017352474200aece1ce900000300504c5445b9b9b9eaeaeaffffffdb +dbdba4a4a4bb9900444444696969f5f5f55858589076003636367c7c7cffd500322b0bc3c3c3272726838383acacac969696767676473a001414148e8e8e9c9c +9cf4c700cecece302f2afcfcfc725e00fafafaffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc6daad0000000097048 +597300000ec300000ec401882e3ea3000000cb494441542853b5914912832010455b4110908844712009f7bf65988c5a890b17f90bb0eaf1a4e906771ab882c8 +7af8dbb2bf91726e348d737e77ee6881b24fceadc247c49421602b2965758bff5c2d6d2784b418e43ccf92f73b84142a7d908aa832c2d799adae0ba42cc76118 +b8e4345ba3b0d6b022224a00d86dbd6b224b51b4b40d04933aa8269721e22d293d84f521f2bbd46b43e9b34ebd024776563ad4f87e4474a79b159d4ea42efae219a14d4aef4305cbfd0def6ab5d618e329062fe743f9ccf6d294ff67bd01ad7a38b3179212ab0000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw688\pich635\picwgoal390\pichgoal360\wmetafile8\bliptag-27807591\blipupi95{\*\blipuid fe57b099a6a5af771309c2fb381ea5f5} +010009000003d60100000000b201000000000400000003010800050000000b0200000000050000000c0218001a0005000000070104000000b2010000430f2000 +cc00000018001a000000000018001a0000000000280000001a000000180000000100080000000000a0020000c30e0000c40e0000200000002000000000000000 +14141400262727000b2b32002a2f300036363600003a47004444440058585800005e72006969690076767600007690007c7c7c00838383008e8e8e0096969600 +0099bb009c9c9c00a4a4a400acacac00b9b9b900c3c3c30000c7f400cecece0000d5ff00dbdbdb00eaeaea00f5f5f500fafafa00fcfcfc00ffffff001f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f05001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f +1f1f1f1f1f1f32001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f69001f1f1f18141414141414101410101010141a1f1f1f1f1f1f1f1fbb00 +1f1f08070a0b0b0b0b0b0b0b0b0b0b0a0a02081f1f1f1f1f1f1fce001f100a1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f0e051f1f1f1f1f1fff001f071a1f1f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f0b0b1f1f1f1f1f00001f021f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f071f1f1f1f1f00001f051a1f1f1f1f1f1f1f1f1f1f0b151f +1f1f1f1f05021f1f1f1f00001f10071a1b1b180a181f1f1f1f14071f1f1f1f0e011f1f1f1f1f00001f1f0e05040401081b1f1f1f1f1f0a0715150803031f1f1f +1f1f00001f1f1f1f1f1f0e0e1f1f1f1f1f1f0e0606030c190c0a1f1f1f1f00001f1f1f1f1f1f1a021a1f1f1f1f1a021919171719110105071f1f00001f1f1f1f +1f1f1f1404101a1a14050619171919190c0b1f1f1f1f00001f1f1f1f1f1f1f1f1f0802010715041119191911031f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f +1f150204090c0c0202141f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f021f1f0e010e1f1f021f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f021f1f +1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f071f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f000005000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e7}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 .}{\f30 \loch\af30\dbch\af0\hich\f30 \'ee}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 24-17}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 16/11}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1026{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw820\pich820\picwgoal465\pichgoal465\pngblip\bliptag-147130767{\*\blipuid f73af6715607b03c3c1e14bebe891bd2}89504e470d0a1a0a0000000d494844520000001f0000001f08030000002870e60b000000017352474200aece1ce900000300504c5445000000ffffff20202b99 +99cc9797ca6d6d920303049999cb9a9acc22222d9a9acb9999c976769b9898c79696c38484a98d8db37d7d9f8080a22626307474929b9bc29393b88a8aab3232 +3e71718b57576b12121665657b2e2e385e5e727a7a935252633838436161744848565858670707081010120b0b0c9597c99798ca9b9ccc9a9bc79497ca9095c9 +8b93ca404250161820424a636f86c15f74a35466904f7ac8000f28051e450e2a571b4d9b235fbd083a8610387405050502020201010100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f4b4cc6000000097048 +597300000ec400000ec401952b0e1b0000011b49444154384fcd935b7382301085cf182b6a51410ae52a08adda6a8bb51785aafcff7f25844032a5f8d6999eb7 +ecb7bb39bb99805c17fe1337669ea3058a6849f4e72f50e8ec0e7986c07dc0b4a6771110f6eb04cef51eecdb22ee67309a5c7211b1be3ee26e95c0ea8d99f998 +a92cb876a005f7e5a1e4865318d39873699e1f7a3ee7fa129e6b9f6095359287204fa126687d886844c824a0f6f26ecbc5480a10d77c8ba9b813459e10a2648e +c0f3c00f89fc01b3060f85fefa19812adf70c9aa9d814e58cea7d0f9b832e064d125b3fd8cc3f9a033e8d4f26cb60bf1fd9e56dd4a52e587f3cdeef3b5e1b2ea +4f9e77699abeb4f2fefb7792a49b563e3e1c8ec764d5ca87f1d77effd1c4f5fdbab97d5b5fe1bf201afaebff750177351c615ae3aad30000000049454e44ae426082}}{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw820\pich820\picwgoal465\pichgoal465\wmetafile8\bliptag-147130767\blipupi96{\*\blipuid f73af6715607b03c3c1e14bebe891bd2}010009000003b602000000009202000000000400000003010800050000000b0200000000050000000c021f001f000500000007010400000092020000430f2000 +cc0000001f001f00000000001f001f0000000000280000001f0000001f0000000100080000000000e0030000c40e0000c40e0000400000004000000000000000 +01010100020202000403030005050500080707000c0b0b00280f0000121010001612120020181600451e05002b2020002d22220030262600572a0e00382e2e00 +3e3232007438100043383800863a08005042400056484800634a42009b4d1b00635252006b57570067585800725e5e00bd5f2300746161007b65650090665400 +926d6d008b717100a3745f00927474009b767600c87a4f00937a7a009f7d7d00a2808000a9848400c1866f00ab8a8a00b38d8d00ca938b00b8939300c9959000 +c3969600ca979400c9979500ca979700ca989700c7989800c9999900cb999900cc999900cb9a9a00cc9a9a00c79b9a00c29b9b00cc9c9b00ffffff0039393939 +39393939393939393939393939393939393939393939393939393902393939393939393939393939393939393939393939393939393939393939390039393939 +39393939393939393939393939393939393939393939393939393900393939393939393939393939393939393939393939393939393939393939390039393939 +3939393e1109173939393939393939393939393939393939393939003939393939393915070b0b20393939393939393939393939393939393939390039393939 +3939390b0f121218393939393939393939393939393939393939390039393939393939231418181d393939393939393939393939393939393939390039393939 +393939392b1d1d1d2e39393939393939393939393939393939393900393939393939393939392b262e3939393939393939393939393939393939390039393939 +39393939393939393939393939393939393939393939393939393900393939393939391f110d0d0d0d0d0d0d0a0d0d0d0c0c111a3d3939393939393939393939 +393d0800000000000000000000000000000000000025393939393939393939393e0000152c251f251f251f251f251f251f25251a00002c393939393939393939 +1a001a39393939393939393939393939393939391a001539393939393939393909002c39393939393939393939393939393939393d0008393939393939393939 +08002c3939393939393939393939392f252c39392c00083939393939393939391f00153939392c1a393939393939393d000839391a0011393939393939393939 +3d0000111f1a0000243939393939393911001a1100003d393939393939393939393d08000000000c2c3939393939393e11000000002539393939393939393939 +39393d1a1100002c393939393939393e08000d1a2c393939393939393939393939393939391f00153939393939393e2500113939393939393939393939393939 +39393939393d00001a39393939392500003d393939393939393939393939393939393939393925000011242c251500001f393939393939393939393939393939 +3939393939393925000000000000001f3939393939393939393939393939393939393939393939393d1f0d080c1a2d3939393939393939393939393939393939 +39393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939 +393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393905000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'f8\'f2}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e7\'e5\'f8}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 20-15}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'fa\'e1\'f9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1027{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw820\pich820\picwgoal465\pichgoal465\pngblip\bliptag-951386033{\*\blipuid c74b004fee71b5e9a7e6122ae74f9e61}89504e470d0a1a0a0000000d494844520000001f0000001f08030000002870e60b000000017352474200aece1ce900000300504c5445000000ffffffacabc6a2 +a1cc20202b9999cc9797ca6d6d920303049999cb9a9acc22222d9a9acb9999c976769b9c9ccc9898c79696c38484a99c9cc78d8db37d7d9f8080a22626307474 +929b9bc29393b88a8aab32323e71718b57576b12121665657b2e2e385e5e727a7a935252633838436161744848565858670707081010120b0b0c9597c99798ca +9b9ccc9a9bc79497ca9095c98b93ca404250161820424a636f86c15f74a35466904f7ac8000f28051e450e2a571b4d9b235fbd083a86103874eae253d2cd80cb +c8a2c0bc94b8b6b40505050202020101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f60f0e3c000000097048 +597300000ec400000ec401952b0e1b0000017d49444154384fad93d97682301086e788b16e75ab4ba10a22a8adda6aabb58b4a2510e5fd9fa8930410eaa937ed +7f0113bec9e49f2400b92cf8774e5d3f51f3bc3e752972c664d22f5ca1ae4c88b936308d8edd2444ccf75caaa4b83501ae639f30ea938c1b4e8fe65b00dd5efb +760cb29e426995901ba6845ccd837ecd811580c6df55acceb807915fe8c3b82cfd5ab0cc89a04a5dbe08726dd07d085a61cf73033af61d1f488b4034831beba0 +73516a8883bc8551463408ea14ccbe7e805ec84db0314598107c04e31a210d5bd8c3c5a6935ac1862586cc47c10ada512e7f372b0d7c0406863e1a7491e3871f +929c5114dcc3e08c8f447db9be7a04bb55b93aa9d2d203c00e958ce0a429fa3b290038f48abc7f4ff44feaa361295bcac63275b1171ebaf3e2f37d9ce5221538 +c5e3c1fd8ff862fdf19274a9787c6f95f0fc9ed68ee33c479cf92c7dfec5b7afddce5944fcecfed4b7dbfd7e374bf1e4fd2b2f3f379bf778f9f0fe7ae850f44f88da5dbdce13fcf2fd4feff65fffbf6f5f8d3c36fdceeedb0000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw820\pich820\picwgoal465\pichgoal465\wmetafile8\bliptag-951386033\blipupi96{\*\blipuid c74b004fee71b5e9a7e6122ae74f9e61} +010009000003c80200000000a402000000000400000003010800050000000b0200000000050000000c021f001f0005000000070104000000a4020000430f2000 +cc0000001f001f00000000001f001f0000000000280000001f0000001f0000000100080000000000e0030000c40e0000c40e0000490000004900000000000000 +01010100020202000403030005050500080707000c0b0b00280f0000121010001612120020181600451e05002b2020002d22220030262600572a0e00382e2e00 +3e3232007438100043383800863a08005042400056484800634a42009b4d1b00635252006b57570067585800725e5e00bd5f2300746161007b65650090665400 +926d6d008b717100a3745f00927474009b767600c87a4f00937a7a009f7d7d00a2808000a9848400c1866f00ab8a8a00b38d8d00ca938b00b8939300c9959000 +c3969600ca979400c9979500ca979700ca989700c7989800c9999900cb999900cc999900cb9a9a00cc9a9a00c79b9a00c29b9b00cc9c9b00c79c9c00cc9c9c00 +cca1a200c6abac00b4b6b80094bcc000a2c8cb0080cdd20053e2ea00ffffff003939393939393939393939393939393939393939393939393939393939393902 +39393939393939393939393939393939393939393939393939393939393939003939393939413939393939393939393939393939393939393939393939393900 +39393939110a17393939393939393939394647443939393939393939393939003939391507070b20393939393939393939464746393939434539393939393900 +3939390f0f121418393939393939393939464746393942464743393939393900393939231418181d393939393939393939464746393945474642393939393900 +393939392b1d1d1d2e39393939393939394344433942474742393939393939003939393939392b262e3939393939393939393939393945464239393943413900 +39393939393939393939393939393939393939393939393939394346474539003939391a110d0c0c0c0c0c0d0a0d0d090d0c111a3d3939393945474747453900 +393d0800000000000000000000000000000000000024393939454745423939003900001a252521212121211f251f25212125251a00002c393942423939393900 +1a001a39393939393939393939393939393939391f001539393939393939390209002c39393939393939393939393939393939392d0008393939434646464600 +08002c3939393939393939393939392c252c39392d00083939394447474747001f00154239392c1a393939393939393d000839391a0015393939434444444400 +3900000e1f1f00001f3939393939393911001a1100003d393939393939393900393d00000000000d3d3939393939393911000000002539393942433939393900 +39393d1f11000025393939393939393908000c1a2c393939394547463939390039393939391f0015423939393939392500153939393939393946474747433900 +39393939393900001a39393939412500003d393939393941393943464743390039393939393925000011252c2415000039393939393946463939393943423900 +3939393939393925080000000000001f3943464439424747433939393939390039393939393939393d1a0d080d1a2d3939464746393945474642393939393939 +39393939393939393939393939393939394647463939424647433939393939393939393939393939393939393939393939464746393939434339393939393939 +39393939393939393939393939393939394647443939393939393939393939393939393939393939393939393939393939393939393939393939393939393939 +3939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393905000000070101000000030000000000}}}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 +\nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e9\'ee\'e5\'f7\'ee}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'f9 +\'e2}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 19-12}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'e0}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'e5\'e9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1028{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw688\pich635\picwgoal390\pichgoal360\pngblip\bliptag1937214181{\*\blipuid 73778ae5d1e0906170f771562c150f73}89504e470d0a1a0a0000000d494844520000001a000000180803000000d35c1df7000000017352474200aece1ce900000300504c5445898989cda800715d002a +2a2affd700f4c700ffd100222222969696b49400977c008d74001313137474746565652c2712414141343434312f298069003432239f8400ffd8004c4c4ca1a1 +a1505050b1b1b17b7b7b33301ebababa352e0fffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011242424000000097048 +597300000ec300000ec401882e3ea300000086494441542853c591d90e84200c45d1820ae2864e6653efffffe50c3141abe8ab7d699a93dbdb45e034c46da8dd +3af3315c1c1120ec17f8e72556d5442e7df423bd8e084ecb4c264de8b9aa8a542aa56459ed55efce1a8f326dbbe7de4b2c2a5347bc86c47bcd112f50536a33e71144052a5be31318bf465897afecab8b1bb2bfdef76536c60f861c4556db8e51b20000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw688\pich635\picwgoal390\pichgoal360\wmetafile8\bliptag1937214181\blipupi95{\*\blipuid 73778ae5d1e0906170f771562c150f73} +010009000003d80100000000b401000000000400000003010800050000000b0200000000050000000c0218001a0005000000070104000000b4010000430f2000 +cc00000018001a000000000018001a0000000000280000001a000000180000000100080000000000a0020000c30e0000c40e0000210000002100000000000000 +131313002222220012272c002a2a2a000f2e3500292f31001e3033002332340034343400414141004c4c4c0050505000005d7100656565000069800074747400 +00748d007b7b7b00007c970000849f00898989000094b40096969600a1a1a10000a8cd00b1b1b100bababa0000c7f40000d1ff0000d7ff0000d8ff00ffffff00 +20202020202020202020202020202020202020202020202020200500202020202020202020202020202020202020202020202020202000002020202020202020 +20202020202020202020202020202020202000002020202020202020202020202020202020202020202020202020000020202020202020202020202020202020 +202020202020202020202c0020202020202020202020202020202020202020202020202020204100202020202020202020202020200a20202020202020202020 +20208d002020202020202020202020202004202020202020202020202020a10020202020202020202002172010000e201b022020202020202020ff0020202020 +2020202020200203111613030220202020202020202020202020202020202020202002191d1d1f19032020202020202020202020202020202020202020150d1f +1c1c1c1d130e20202020202020202020202020202020200b0901131f1c1c1d1d1601090a2020202020202020202020202020202020170d1f1d1d1c1f13102020 +20202020202020202020202020202020202009161f1f1f190220202020202020202020202020202020202020201b02080d140f08021a20202020202020202020 +20202020202020202002202015011020200220202020202020202020202020202020202020202020200320202020202020202020202020202020202020202020 +20202020200a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 +20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202005000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e0\'f0}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 20-12}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'e1}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'e5\'e9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1029{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw688\pich635\picwgoal390\pichgoal360\pngblip\bliptag1937214181{\*\blipuid 73778ae5d1e0906170f771562c150f73}89504e470d0a1a0a0000000d494844520000001a000000180803000000d35c1df7000000017352474200aece1ce900000300504c5445898989cda800715d002a +2a2affd700f4c700ffd100222222969696b49400977c008d74001313137474746565652c2712414141343434312f298069003432239f8400ffd8004c4c4ca1a1 +a1505050b1b1b17b7b7b33301ebababa352e0fffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011242424000000097048 +597300000ec300000ec401882e3ea300000086494441542853c591d90e84200c45d1820ae2864e6653efffffe50c3141abe8ab7d699a93dbdb45e034c46da8dd +3af3315c1c1120ec17f8e72556d5442e7df423bd8e084ecb4c264de8b9aa8a542aa56459ed55efce1a8f326dbbe7de4b2c2a5347bc86c47bcd112f50536a33e71144052a5be31318bf465897afecab8b1bb2bfdef76536c60f861c4556db8e51b20000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw688\pich635\picwgoal390\pichgoal360\wmetafile8\bliptag1937214181\blipupi95{\*\blipuid 73778ae5d1e0906170f771562c150f73} +010009000003d80100000000b401000000000400000003010800050000000b0200000000050000000c0218001a0005000000070104000000b4010000430f2000 +cc00000018001a000000000018001a0000000000280000001a000000180000000100080000000000a0020000c30e0000c40e0000210000002100000000000000 +131313002222220012272c002a2a2a000f2e3500292f31001e3033002332340034343400414141004c4c4c0050505000005d7100656565000069800074747400 +00748d007b7b7b00007c970000849f00898989000094b40096969600a1a1a10000a8cd00b1b1b100bababa0000c7f40000d1ff0000d7ff0000d8ff00ffffff00 +20202020202020202020202020202020202020202020202020200500202020202020202020202020202020202020202020202020202000002020202020202020 +20202020202020202020202020202020202000002020202020202020202020202020202020202020202020202020000020202020202020202020202020202020 +202020202020202020202c0020202020202020202020202020202020202020202020202020204100202020202020202020202020200a20202020202020202020 +20208d002020202020202020202020202004202020202020202020202020a10020202020202020202002172010000e201b022020202020202020ff0020202020 +2020202020200203111613030220202020202020202020202020202020202020202002191d1d1f19032020202020202020202020202020202020202020150d1f +1c1c1c1d130e20202020202020202020202020202020200b0901131f1c1c1d1d1601090a2020202020202020202020202020202020170d1f1d1d1c1f13102020 +20202020202020202020202020202020202009161f1f1f190220202020202020202020202020202020202020201b02080d140f08021a20202020202020202020 +20202020202020202002202015011020200220202020202020202020202020202020202020202020200320202020202020202020202020202020202020202020 +20202020200a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 +20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202005000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'f8\'e9\'e4\'e1}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 22-13}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'e2}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'e5\'e9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1030{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw688\pich635\picwgoal390\pichgoal360\pngblip\bliptag-27807591{\*\blipuid fe57b099a6a5af771309c2fb381ea5f5}89504e470d0a1a0a0000000d494844520000001a000000180803000000d35c1df7000000017352474200aece1ce900000300504c5445b9b9b9eaeaeaffffffdb +dbdba4a4a4bb9900444444696969f5f5f55858589076003636367c7c7cffd500322b0bc3c3c3272726838383acacac969696767676473a001414148e8e8e9c9c +9cf4c700cecece302f2afcfcfc725e00fafafaffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc6daad0000000097048 +597300000ec300000ec401882e3ea3000000cb494441542853b5914912832010455b4110908844712009f7bf65988c5a890b17f90bb0eaf1a4e906771ab882c8 +7af8dbb2bf91726e348d737e77ee6881b24fceadc247c49421602b2965758bff5c2d6d2784b418e43ccf92f73b84142a7d908aa832c2d799adae0ba42cc76118 +b8e4345ba3b0d6b022224a00d86dbd6b224b51b4b40d04933aa8269721e22d293d84f521f2bbd46b43e9b34ebd024776563ad4f87e4474a79b159d4ea42efae219a14d4aef4305cbfd0def6ab5d618e329062fe743f9ccf6d294ff67bd01ad7a38b3179212ab0000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw688\pich635\picwgoal390\pichgoal360\wmetafile8\bliptag-27807591\blipupi95{\*\blipuid fe57b099a6a5af771309c2fb381ea5f5} +010009000003d60100000000b201000000000400000003010800050000000b0200000000050000000c0218001a0005000000070104000000b2010000430f2000 +cc00000018001a000000000018001a0000000000280000001a000000180000000100080000000000a0020000c30e0000c40e0000200000002000000000000000 +14141400262727000b2b32002a2f300036363600003a47004444440058585800005e72006969690076767600007690007c7c7c00838383008e8e8e0096969600 +0099bb009c9c9c00a4a4a400acacac00b9b9b900c3c3c30000c7f400cecece0000d5ff00dbdbdb00eaeaea00f5f5f500fafafa00fcfcfc00ffffff001f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f05001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f +1f1f1f1f1f1f32001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f69001f1f1f18141414141414101410101010141a1f1f1f1f1f1f1f1fbb00 +1f1f08070a0b0b0b0b0b0b0b0b0b0b0a0a02081f1f1f1f1f1f1fce001f100a1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f0e051f1f1f1f1f1fff001f071a1f1f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f0b0b1f1f1f1f1f05001f021f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f071f1f1f1f1f00001f051a1f1f1f1f1f1f1f1f1f1f0b151f +1f1f1f1f05021f1f1f1f00001f10071a1b1b180a181f1f1f1f14071f1f1f1f0e011f1f1f1f1f00001f1f0e05040401081b1f1f1f1f1f0a0715150803031f1f1f +1f1f2c001f1f1f1f1f1f0e0e1f1f1f1f1f1f0e0606030c190c0a1f1f1f1f41001f1f1f1f1f1f1a021a1f1f1f1f1a021919171719110105071f1f8d001f1f1f1f +1f1f1f1404101a1a14050619171919190c0b1f1f1f1fa1001f1f1f1f1f1f1f1f1f0802010715041119191911031f1f1f1f1fff001f1f1f1f1f1f1f1f1f1f1f1f +1f150204090c0c0202141f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f021f1f0e010e1f1f021f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f021f1f +1f1f1f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f071f1f1f1f1f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f202005000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e7}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 .}{\f30 \loch\af30\dbch\af0\hich\f30 \'ee}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 23-14}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'e3}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'e5\'e9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1031{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw820\pich820\picwgoal465\pichgoal465\pngblip\bliptag-1674956380{\*\blipuid 9c2a31a40e510e1e1aaef54eae7aa4e1}89504e470d0a1a0a0000000d494844520000001f0000001f08030000002870e60b000000017352474200aece1ce900000300504c5445000000ffffff20202b99 +99cc9797ca6d6d920303049999cb9a9acc22222d9a9acb9999c976769b9898c79696c38484a98d8db37d7d9f8080a22626307474929b9bc29393b88a8aab3232 +3e71718b57576b12121665657b2e2e385e5e727a7a935252633838436161744848565858670707081010120b0b0c9597c99798ca9b9ccc9a9bc79497ca9095c9 +8b93ca404250161820424a636f86c15f74a35466904f7ac8000f28051e450e2a571b4d9b235fbd083a8610387405050502020201010100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f4b4cc60000011b4944 +4154384fcd935b7382301085cf182b6a51410ae52a08adda6a8bb51785aafcff7f25844032a5f8d6999eb7ecb7bb39bb99805c17fe1337669ea3058a6849f4e7 +2f50e8ec0e7986c07dc0b4a6771110f6eb04cef51eecdb22ee67309a5c7211b1be3ee26e95c0ea8d99f998a92cb876a005f7e5a1e4865318d39873699e1f7a3e +e7fa129e6b9f6095359287204fa126687d886844c824a0f6f26ecbc5480a10d77c8ba9b813459e10a2648ec0f3c00f89fc01b3060f85fefa19812adf70c9aa9d +814e58cea7d0f9b832e064d125b3fd8cc3f9a033e8d4f26cb60bf1fd9e56dd4a52e587f3cdeef3b5e1b2ea4f9e77699abeb4f2fefb7792a49b563e3e1c8ec764d5ca87f1d77effd1c4f5fdbab97d5b5fe1bf201afaebff750177351c615ae3aad30000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw820\pich820\picwgoal465\pichgoal465\wmetafile8\bliptag-1674956380{\*\blipuid 9c2a31a40e510e1e1aaef54eae7aa4e1} +010009000003b602000000009202000000000400000003010800050000000b0200000000050000000c021f001f000500000007010400000092020000430f2000 +cc0000001f001f00000000001f001f0000000000280000001f0000001f0000000100080000000000e0030000c40e0000c40e0000400000004000000000000000 +01010100020202000403030005050500080707000c0b0b00280f0000121010001612120020181600451e05002b2020002d22220030262600572a0e00382e2e00 +3e3232007438100043383800863a08005042400056484800634a42009b4d1b00635252006b57570067585800725e5e00bd5f2300746161007b65650090665400 +926d6d008b717100a3745f00927474009b767600c87a4f00937a7a009f7d7d00a2808000a9848400c1866f00ab8a8a00b38d8d00ca938b00b8939300c9959000 +c3969600ca979400c9979500ca979700ca989700c7989800c9999900cb999900cc999900cb9a9a00cc9a9a00c79b9a00c29b9b00cc9c9b00ffffff0039393939 +39393939393939393939393939393939393939393939393939393902393939393939393939393939393939393939393939393939393939393939390039393939 +39393939393939393939393939393939393939393939393939393900393939393939393939393939393939393939393939393939393939393939390039393939 +3939393e1109173939393939393939393939393939393939393939003939393939393915070b0b20393939393939393939393939393939393939390039393939 +3939390b0f121218393939393939393939393939393939393939390039393939393939231418181d393939393939393939393939393939393939390039393939 +393939392b1d1d1d2e39393939393939393939393939393939393900393939393939393939392b262e3939393939393939393939393939393939390039393939 +39393939393939393939393939393939393939393939393939393900393939393939391f110d0d0d0d0d0d0d0a0d0d0d0c0c111a3d3939393939393939393939 +393d0800000000000000000000000000000000000025393939393939393939393e0000152c251f251f251f251f251f251f25251a00002c393939393939393939 +1a001a39393939393939393939393939393939391a001539393939393939393909002c39393939393939393939393939393939393d0008393939393939393939 +08002c3939393939393939393939392f252c39392c00083939393939393939391f00153939392c1a393939393939393d000839391a0011393939393939393939 +3d0000111f1a0000243939393939393911001a1100003d393939393939393939393d08000000000c2c3939393939393e11000000002539393939393939393939 +39393d1a1100002c393939393939393e08000d1a2c393939393939393939393939393939391f00153939393939393e2500113939393939393939393939393939 +39393939393d00001a39393939392500003d393939393939393939393939393939393939393925000011242c251500001f393939393939393939393939393939 +3939393939393925000000000000001f3939393939393939393939393939393939393939393939393d1f0d080c1a2d3939393939393939393939393939393939 +39393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939 +393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393905000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'f9\'e2}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 21-12}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 22/11}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth4785 \cellx4564\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 +\cltxlrtb\clftsWidth3\clwWidth5016 \cellx9463\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 +\par \cell }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {{\*\shppict{\pict{\*\picprop\shplid1034{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw5927\pich12751\picwgoal3360\pichgoal7229\pngblip\bliptag-1490620335{\*\blipuid a726f05110190ec58a307fa3f29399ed}89504e470d0a1a0a0000000d49484452000000e0000001e2040300000003bcdd6d00000001735247420240c07dc500000012504c544579746abdbbb3f7f5eed4 +ecf9ebd8caf0d6c73eec65bc000000097048597300000ec400000ec401952b0e1b000017204944415478dad59d7d76e32acfc0e3395d8049e9ff6387bb80c459 +4071c402e61cbcffadbc08fcfd854468cff3fadeb9ed4da7f945421212c8f872f9edeb4fddd6b5727f6697aaf99792707c6921fc5763dbcb1fd5344ddd846bf8 +3a5ef5e695c50f6fe3f70f0fecf0b29d359d850e2c98cebde45eef7901f86ab25ccabdbbed81c3e5c0fe020126fc3f02f3f09a3bcae245c3f70e24fc16f156a8 +e103e404820421ad539e70ffb861b34283e3bb0ff24f7a6de367c909d40e28d03c842c85c46f4be947b0d3f23f2fa0a306e033035018043aaad005020b2d0a21 +bd62417f8dc31a808f6c4094503bf18a19d06ad1ad81b70cc00e81d203dd8540719181274d7ee053763a0c9c079612a917f44df73dac25cc7069302310bf3851 +dd5709f8cdcf00bddb8fb1cc19a43116835a0bad96dd7f0197cf2d9ed26058b1d606bb74df03fa01081765d5660cb3016721cd7aa0903833fc804a5d609b42a8 +8f6ccedfadf987bc5a75b98135da8c59205b0dcab9254e5cc32c9213f87486b804fa882a24ceac55762b7dd4cd1a0870152e9843fd23c0678d5eb1048aabd23d +1084c90c546d7347e04c10d0758d16ea2f917d0c6f41c2e97d2d38180ce94e09f9fdd06b6d2ea19ce5575576c7bf3572ca2b82cd80cb03db11985fa533197a23 +5d6490c6e456a98439d1c2bf994aa1d6d266063e252c756ae712ce073113f0be94d00117a9bc12b981621e2ef1fab790504d59541ea0de006155ac649650ae79 +1ba0cc0c342b5ea7672ac5ea2caf4aef41be19d5ce256ceb3633300467b3002e35aab38ee13d183d4cb1d4825856ab53ea9d017877c55f9fab8dbc39d04dfa0a +721a8de3198fb2c60e91542c8d346ba4c1a8e6500e29b51c814b8deaac405776fa8c1e737b94d460e6bd1ac29cb3050211e5fead315774d985fbdf3530e36cf1 +c4e1ea975db44ff165abdae518ce929a4cc071ac5cba3d0f32a3843f04acb51b4ba87f1328e52a6ce7072e96c9d494392ddcc2fc970fa897efbdc7ab75975142 +ddee327e0e08511cba4b463f940460563f5c799dfa69e0f31a17f0f78139a7a77bdc46f326c214239d879ab7819ac2cb2c2141a9225f68d3a43d878c40a863a1 +0d3f50c63411d69b2cfb12e603928cc605d3dff5c3bacc09dc12bd19b53f26616fa58b08d0baecbefd29603b517ae9c29f59aea874bedae23ef34335472b2127 +b5ea7141f1c7ac54e97981013f0fd4af665642b5f980638631b791b6ae00d3ab49de6cc0290d56f5ecdb1af067e387517924d49f0b29167ee87ed43cc6415459 +c6f0eec6e97990b3a9d70af8c7bc0f047511a2ddc5d5154a384b77b22c7dbdd4a5c030a35aa8d7e9a1fa7ccd245479220dd4a5b8ba5a5749d1aab588e2e68093 +d1c81c40a7cdbf7fbe3f84c09dd01d376c1e6378adbe5416a0fabe5c0adfee502c71ad5238887ad4e860326f6de73993406079290a51ac332970128e73e59407 +bf0bfcfbf15d78218b8db54af7376ee15518e68a695b3d1df8f708a85b37863d30d3ce4c5bb7d555fbcde51d7f54d7e619c290d29936bbbc2f80cbd9dc3fed36 +3995cdb3f743ed3710cdbbc0a78720aa5de517bdd934fd7a949b89675b96e9c058ba067e3e54506b1188c66f0dff1c5087fd2ed05700dcdd47de5b567aafcfcb +98ca6bd4c53dec3641bbf29bfb6f006504a804666de20bfb927049d32bf61dc7ffac23975f7493c66018058babb6f2ad8ea128d0996ec8474d37b462a977541a +05b69558b47d7480ed35c9c0fbb58d11c3a0cd2e6ce4f941a0127d0bc87059eccd4a0746d7f442bfc07c231ac41b7d6df7d8624215b6f81612ea2f2b5381b1ca +b75a1a4c20fec3b6a59f026e799db5003a15185b81aaa64dd1d9281a489630e68615b45333e4cc6e52c7f01905a24a3740930e8c2e044b3f396c80a92a8d0385 +b13ba3d8a51a0d01382dac67003efa94f354c260266bb34903d64d14a8f7149a1abc1fb7675c42c80a8cc66e25724a88b13b06946d66601d03e696307255d266 +0546770faacc1246fd5e4356607c0328b384f72830b35b10b6b8f202094beba2cb2a619497d90feff10da0bc1212769cf202e31b5c4a6605c6b72975d6318ccf +8647d3e14f02ff5f4b189d9c0e034d2290b069284c4e9512f6d2f57f39258c0f61e631bcfaf754e7c08c2a0d93d379b4819c40cabeafcea9d2ff49609553a594 +66882aa78494868f2ae7f40484860ff595117825a8342790d406953389f2461a536ace1483d4ef011925a4b5416504d21abdf201e34b345ec27cb5c5830694d9 +56311e149bc939868494cdab349b84b42ea88c6348c811ebac8e4ff30af5954da52423adebaf5c2aa5d94cc6d98208cc37013f097ddd75ce148328e1c1fa6c0a +906633dfbf0c54ec6246859bf46f9b1fd042f751283d043eeadb03547f0ec7e3d5f8b7c16fd595742c487bb05c7a08bc5f2e6d2d6a28eab6fa6cebbbd4b2fd96 +b7e6515d492a3dc8bb4f54fa8dc722d4d54528bcb9104489674f086a13f2accd8b0afc2bb00fe8bb2cb5e3c8ba2c8aa214e5951a492bb684775d5c8adbf74588 +b2bc08f9edf065a1252dbfa85bbe4a2bed10aa2c8b4b291cb0fa280402ef44205fa595704a5442898b9697f676ff281c517c12031b547c20f6dd3452495981b3 +95e62a0468d108a291f281fdf923def15fa3733644952658698f58469ab6d9ef7edc03a6cd169b33488e1b2296f758e9afddfd5176f0be5fe104381bc3837d12 +763fcdbdad68567ab410c5056a177428a1eda858e3abf4f2876633b980cfcb9504cc2661bbdbf5bcbd5add65011213a8fa3887fa31a0ca03a4154e7e10f3b885 +201f73a66506e0cd4d1e4411559543c21b69cd2b6834cf18de5bb24a53e6c3cdf5601c5497c52d68eb25bd4e4d67de069256117ba3b91a66e6bd3f8474609658 +4a5bbee8c730875bd092ee8c462319072ae690f07c08d562a13f292fe50da15ade268f8b18bb86ca00c68670416c4dd7d937258cb93ddeece0efc86b6b70400b +bb992919788bb93d4850aa0550d08268c3b974ef00552c9b015795978e54ca5216e2c3155fb0b70dcc00fa713aa62a89f7cf388ef0b7985ccaf26ba7fd920eac +c3ed8b8740050814a2b878a0fbbefceade9230a2d14a608d8cf740b94216d16529df0256911154175916589d3be287abce857853c2732fac2e2e45d6ce4e650b +68a17836dcfe944806ca08f08a67f9617cf323ad04b460f65c9f088c79a12a006fd4e9b74e9d8c7771b0af4e959031f9ba4bbc1ab15b22d20b52cee45b57f2f5 +94c3e951894046fee4057c36ef019f2de520836140a52b955f016813c790b086e80277ff99f08e558da753be013cf7c295f095e35ddb66b7779e08a4d78578dd +bc46fd996aa940da3906c3f56a1eba790f281926833702d6c21fa1ba55e9be956e4e157e4ac5c949658376fa04f2186e80f796b64aea4d14efe386ab3f1b3a9c +3e9da052e2664c0f845753bd3c10200d089c3003b57c3dd048f5aecd50800fe262d02022dc6a8d9ed1fbbde5035971d455158dbf09388452bb562b01c8a843f1 +12783c7be355ea8f0f5f65a7a74034d7bae169d449f7a89d91364239d9b686439090b6423a1aa983552dfe9ac62c7c9380c781d475fce1ba62e84660b81b1740 +32813be7bd9d5c2d02717e7a4a89c76be33f4c950afa6a508df9e9f5d660e8be2ba9c36dde4c099f92056c1d10437773d73db062022bd2913e732bad6fe08122 +1c96ae792ac5931f9840dcc0f1402fe23a5b8c01995e1f129a1068f0ec69cd73fc869b00bbcbcff537ff2001e1ebe1d584110112374467178e5feb81786224de +88cb929019d66a4c68dc3078b708362359123e05973702b59a79a12103d91af54126586938d51f56b73b9f03f91a45a09f9dee7d9cf1cb5164e095ad519fe6a3 +953efb67a4786d5255caf6093c27a67954086cbc7d6e1787ce800f4e323a019b1bc6d2fe786800464e43ecf3d8001f38864d380c83037c5077b417d70b7fd103 +fdfb6f6e953d01b2d2d1b9d1cc811d03486c4ad8029ba052ee7a297b9e58029fecbe36bed3e3e5cf6b9af2603af0913482c14a9b90073381bca277a1d2270281 +09dc3b2b970abc7ff6f52f1df860edc2ac55ea81cc8d92f9930d9280dc2d59d83dc58772f52ae56c053d81b92eb3068a170fd828e6bacc06d8003ed183a1d22a +cd07fda5b150d32f1e50a4da28767d34f7ab041ed0d52fe9c0eaa55da1f67a1a7a4fd453bf0174b5854b0d592ac513d5df0162b3a666180d2ec79fa7bfab75b7 +e5875378c60888fbc1a9185ba06f263d9f99d474887dbb25d6f806eb3afb1878f78b9ce765fddff263383a14dd476f809d1587ed342b609fbafe3bf5c3bfa250 +5289da69a2705fbf453dcfb6b0c2f627895180fd8e91fb84273ac5e39fbe2ffa820dae97e2fb525ec4acf7ac7531cd1c8a1716686f4dbf448a3cef3d569c4d15 +7f8ba22c4b514864627b6d213e269b11c7b46e5a117e60bd0372ac8f4fade6efd551ca4b21cb8b074a6c261eae7e19e8b063d7036b35da67bf6b7b067435186e +473af7c65dc2d26f154e40159e8f82c048a4417d9a61c7efc44cab8b1057171c04b442fa473e88fed15c3d50840c3f06d472b6dd67b53c019eb5b263592f8ff5 +3901efcb27c59ce588a753890ba4ce4ecf8801b85ed5b427c16d5a98da19e8cf171ea2aae0a02f6200de052c956e8f3be6dae97ce29deb13eb6d01c781c6fbe1 +7378c2e40c7864a6ad42095bdf10dc86efe6076c43e354fe14e7a10dfd01dd610ee42d92ce8cc615dc9f2e0dd327c00f393e856ed27b2ab07a364ab8b8753f70 +0b8c341f419ff863185f86542056252e2dc5c7151d03edf6659b98b755d825d2030f556a606bc396bfe6354a58e3aa893c4984b7407b3e419d5c7e114adc9aa3 +f377bc4a8d5d039d4ad3ea5f9f7823509edce0f161767a2620d54c954ff59fd7b396ddbd46a264470cc055685e03775eb690989b627d289be719f06357db896b +0ac31afbf918ee0213fda2050f145c9526fb85f3c4a70ba6d21ed43287c02eb52655d89ea44fa7a703e0359158eb7e763207c08f2e275085e2e254c23d6d9b64 +330525e12ca90912ae3f90fb0ca966aa2a799a7ba384bbc0d4f9a21647b73ace55ba074c0adfeaf89c9809085be01bf3853aaf66700ced2e30d54c8fef073a95 +307dbed0e70222b0db0726fac5ef034d14687681a98e480042b70bb449e11b37b5237eb817693c3065eba96eb58a010fc6d00d620ab08e4b78348669e97eccef +8f1c3fd96ab48cbbc511b0e302b148d5900e64a735d0e2daa54956293fb8b5d1111c52fd4cc070a4a78900f726e070718110e6c218f0a33b329a7fec681ad7e8 +a984ec2c4345e6c20168b200dbe3535957403892507125ac64672d017874231dcf4cdb70d3616c148384bb40cbf60b0fc4e758f4ef875fc6341bbfc229b0632f +9eac81081bd6b72c4c40730864063704cec7d0f6828def0f831fe602caee7c32b461023e5629731063195b6f34ddb16969ce20aa79e8b678af9c31f3b92398cf +39903307b7f3bac904a6f5db2ee66780f8001b7c4be31b75030886157e0b4420a7a2e90fdbb21a9fb862000b6ff7a7c3fec47f520fcb5d214d3c301a9ed5f4a1 +db9652172540212488521a2825e862ac7170c63f99c238f97e7f3254004a2874e1242c1cacf0c06e021e6cbea1de3983a847e0b7d41f4ec2029b21a5075efa1d +4cbfd975b8db677883d857150158c0c54929a0f440dca932212884a5af439572eae0e1d9048ee125f4406ca3759f40144353e469a431e8fae42682feb46918c6 +b0147e0c4b819fe022a7e0dd9de53d5a527ba0550f74dac4273c69e18d46b6d8e9ad65398de1c729906e35c3f1657e1f5fe26d01fe79eb3e0ae8e17015139590 +3e610c40d3079ace079821a4c0043c9770cff5f73fc298e4cf6e70debfff3002a4bafeee9aec36a8c424dc8935fb5654c9581943035a6a72bab73562775e8b02 +a966ba772e23f08110d9d39f69744f40be4aedaa863a8c02b12536b24aa9459b3e33199b1f48287de9408a23aad8e2c50cf827079052a85181942ca3a5a4c054 +20c9f3c943980b48d628054858c6a414f70c604bb0192a8fe0169429383390e0155f0c6006a3693547c21c564a77c3e30d4b1650180a8b08a44c8874bff7c0c8 +e2517cbaa0876e1230be5ac3f07b12303a88f4b9823486719d328c940034f1199161332409a333625ea089aa949ed06402925344aa4a639ecf88a4246074428c +ed51ae801fb1bf1e9d101991742848df04d2e58b97dc14950ab08684eb55da4596e2a32d670222db3f4be0f1cecc70c5224d7493720d3411606c102b26b08b02 +232272234d17dd4e81c8ad884c60740cb1d03f552ac3114f37bb7a5a173554a684703e867eede37c2d8329614ca57e45fe54a7646078f23805783a4529f26c11 +8031b78802393954df8b71fe0bf8d3b33403e74332720cde266c9d1cee5e9e588d302ce054aef5c05e8dfd5b0c49eb1970f7a81d02b09b7d37f6330ec093392a +d642730aec0621d7addf3f001c1e850e6638156cbe7e7662a69c40d327513dd0f81381209cd563fa8f300ceaa1992a4ea09903351e60831b70e22a0cb6c15a21 +e4043cb41a961b8e6e613b5be251fd45f9d59512f7c37027e7326acb01555620e0269501fda1bfba6fdc0fc38d155d4c9bb8c756c3a99de64663bfc5176e2e82 +d7ad2efc7f66f9d8a1d5bc090c7b9a06811d4ad865070e79a95369872a755295ae80c1fd373db3bfe3be3a7ddc637d0a846034e2c34968ba7f052075f63e87d1 +94b1ee3557a9051df6a5a57307ac7a0d6e928c40bb0f54ef007bc70fa79e79c75f361aec9a69cb997f972af58774f45bfefdac6be3401fdac803d81daf26daf1 +66a809b86f352d1778503d996ef5fa7134cd03b46be051aaa8d815701762e91ab6b90ec3f7fb40669b5b127029cb3ef0c84cdf07866bf9221c475326305ae347 +81a9567a9eeac161e9cd4d314efb69e6d75196513193a88f688d3f0ab90f64ad29d04aee01b86ba62ada879c2ce1be5ff004a4d5f8237063a6f17b64f6805409 +f76ab696b385d003812ae1aed530354a58548800991a65486810b8b11a75f484f11320d16860df6a981a7d1b180a8bac0b430be0c64c7502902ee18e5ff8a494 +5ee11b56a4d9ebdee765c1dde93d333b97cd028c2ed09e4978f840b7632047a55b0959936f0f6448b849dc78b37d0620afbe0f4096d1ac635bc58c33cce0bd0d +35bc729bafd24de2c64a495380f0eb4091016818c1d7594dbb04d2d71107e0b8d64602aeac46537f710ee4fc750f9c2dbaa558697cd3797ead244cf2430e705d +e8a7180d4ba56b334d9130bae97c06fc0509976d753f6f34ab8d3d566998045c3a22a7552811b88ca6ec8c866f344bab4902b2245c9e26a1f836c3957079d602 +3fa361bb8559580dbb92e9180b437b40568b423a50ce80e45f7c0338b31a566f521ab05bf8053fce503a688f81aca68f74e0e41729439804bcfe2e708aa6bf02 +9cdff1f15bc051422db949e99b126a88de2a9e47c209c81bfc1ec875fc49a522d6359243c26ee6f9825105bd0184c1f3d56f4938584dcaf4fb1e3061ae48329a +01989041bd0774b3217335f84da03096d32a340213c6b01db2eea4f93041c27608dd9c56a16409877b2e2b7ce449173bff2603d00c407ccaa9064647720fe495 +dcddb8c2a7fd735c8b0be7d7431774fc37ecf01fe3372944a82bfc29d0052fdc1081988dfa89298c181a4d751125c0e5c20412558a405066389201817f2f781c +f4a528ca9f0062a5ed9f698656295cd5adbc8468a63f23a10786432010f84f2a3755e8f9b379f203f1ec00ff042e59005a8d7a35b829c3e61181161ced53f48f +fdc260aafb8774fcd0c290c587a87d62cfd4131f51f5ef8acf1e7ba6a4a57495fac737f9c30bf0984ae58fe4fe51a03f00021bfab0734af887d525cc86a43b4a +bc4ec7470bfa0b9fd17172ce6c0609b1ee0d8f16f43c7fbeb44c990e4940df04269ede4625b62cca261c689d90e98fc06db2307c7ce3cf38d1e22efa0b64d303 +f7cfeaf36727cddecc6c80761768e65f9d16b57f6c1b76f64dc03de58c53cbfcebf4d341c2ad72166fa6851e0494f0e9812905fe0cb8f940cb4fa0a50e447cc8 +e0eb0d603f86e3f91c33e042426f9b7db4461fc4a7851e3ca3e3f0438737f29d0ad6775ae363d2c6f7ef422bb46fc3f6cf14b0e15986ce213f03d03fa46efc58 +1036948c0dcdd4fe130e8f2433fed7bad070e90fc481f013f7377c0a814d982634605b57e4f627950c979e03fd613ac66fccc304ec3faf0947ede04bb66fe346e06f5fff07cea8096bac9236d00000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw5927\pich12751\picwgoal3360\pichgoal7229\wmetafile8\bliptag-1490620335\blipupi96{\*\blipuid a726f05110190ec58a307fa3f29399ed} +010009000003c269000000009e69000000000400000003010800050000000b0200000000050000000c02e201e000050000000701040000009e690000430f2000 +cc000000e201e00000000000e201e0000000000028000000e0000000e20100000100040000000000e0d20000c40e0000c40e000006000000060000006a747900 +b3bbbd00c7d6f000cad8eb00f9ecd400eef5f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000053333333333232222223322333232222222322333333233333332333323332323333332222222333333333333333333311444444444554411333332 +22333322322232232222332233223322223223223333323333223333332232333322322222232233332323333222223333333335053322233332332222333322 +33222222222222223333223333332223332233222233333222232223333133333333233333144444444455441133333222233222222222222222332232223322 +22322322333332233322333333332233332322222222323333233333222222233333333505322222332222222222222233222222222222222222222332222222 +22222222222222222233333333111333333333333331444444445544313323222222222222222222222222222222222222222222232222222222222222222223 +22222222222222222222222222222222222233350532222222222222222222222322222222222222222222232222222222222222222222222231133131111111 +11113111133134444444454411332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222232222222222222222222222222222222222322222222222222222222222223111311111111111111111133314444444454411332222 +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222335053223222222332223322222 +22222222222222222222222232222222222222223222222222331111313111111113111113331344444445444133222232222222222222222222222222222222 +22222222232222222223222222222222222322222222222222222222222222222222233505322222222233222332222222222222222222222222222233222222 +22222222322333222233311141111111111111111133134444444544413322223322222222222222222222222222222222222222232332222223322222222222 +22222222223222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222223222223331143111331 +11111311133331134444454441332223232222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222222222222222222222222222222222333115533333333133333333333111144454441132233 +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235033222222222222222222222 +22222222222222222222222222222222222222222222222222233333533333333333333333333333113444444313333322222222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222222222233111133111331333111313332233311314444444133322222222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222233113111111111 +33311111133222331353444444411332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222222222222222222222222222222222222222222222222222222222222222222222233113311114111133314311133332211555134444431332 +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222222222222223331311111411111331111111332231155531444443133222223322222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222222222233113311131111113311130133221155555334443113322233333222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222233311111333311 +11333333113321135355531131133333333333333222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222222222222222222222222222222223331111333333311223333113331155355510011101111 +11110111322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222222222223222233333533233333322223333223135555550001110111100010110322222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222222322223332223222233333322222222313555555100111033330000011132222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222232222222223222222 +32323222222211555555555331100011011101113222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322235053222222222222222222222222222222222222222222222222222222222222222222222222222222222222222232222222311555555555531101111 +01000100322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222322235032222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222232231155555555555110111101313311222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222222323115555555555511111111122333322222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222222222231355555555551133222332223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222231355555555553133222 +33222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222222223115555555555511322333222332222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222222222311555555555553113223332222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222222222231155555555555511322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222231155555555555531322 +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222222223115555555555553113222222222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222223323313555555555555311322232222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222222223311555555555555551132223322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223313555555555555551132 +22322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222232222331555555555555555313322322222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222223222231155555555555555531332323222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222322223313555555555555553113232222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222322223115555555555555555113 +32222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222222331355555555555555511332222222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222222331155555555555555551133222222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222222233135555555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222331155555555555555555311 +33222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222233115555555555555555551133222222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222223222233311555555555555555555311322222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322223311355555555555555555551133222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222222222222222222222222222222322223311555555555555555555551 +13332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222232222331155555555555555555555313332222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222223222233135555555555555555555531132222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322233115555555555555555555553313322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233115555555555555555555555 +51132222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223313555555555555555555555551132222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222223311555555555555555555555555313322222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22223331155555555555555555555555551133222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223331555555555555555555555555 +55313322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222331155555555555555555555555555313222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222233115555555555555555555555555551332222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22233313555555555555555555555555553132222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223115555555555555555555555555 +55513322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222223311555555355555555555555555555313322222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222331155555555555555555555555555531222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350332222233222222222222222222222222222222222222222222222222222222222222222222222222222222 +22231135355555555555555555555555553132232222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032232223322222222222222222222222222222222222222222222222222222222222222222222222222222222331155555555555555555555555555 +55313222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032232223322222222222222 +22222222222222222222222222222222222222222222222222222222222222222233135555555555555555555555555555313222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503223222332222222222222222222222222222222222222222222222 +22222222222222222222222222222222223113555555555555555555555555555531322222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350533322233222222222222222222222222222222222222222222222222222222222222222222222222222222 +23311555555555555555555555555555553133222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053232223322222222222222222222222222222222222222222222222222222222222222222222222222222223113555555555555555555555555555 +55513322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032232223322222222222222 +22222222222222222222222222222222222222222222222222222222222222222311555555555555555555555555555555511332222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503223222332222222222222222222222222222222222222222222222 +22222222222222222222222222222222231155555555555555555555555555555553113222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350323322233222222222222222222222222222222222222222222222222222222222222222222222222222222 +23135555555555555555555555555555555511322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052232223322222222222222222222222222222222222222222222222222222222222222222222222222222221135555555555555555555555555555 +55553112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053232223322222222222222 +22222222222222222222222222222222222222222222222222222222222222222313555555555555555555555555555555555113222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503233222332222222222222222222222222222222222222222222222 +22222222222222222222222222222222211355555555555555555555555555555555511322222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222222222222222233222222 +33135555555555555555555555555555555551132222222332222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322235053332223322222222222222222222222222222222222222222222222222222222222222222222223322222331135555555555555555555555555555 +55553113322222223322222222222222222222222222222222222222222222222222222222222222222222222222222222222235052322223322222222222222 +22222222222222222222222222222222222222222222222222222222332222233115555555555555555555555555555555555113322222223322222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505232222332222222222222222222222222222222222222222222222 +22222222222222222222222233222223311555555555555555555555555555555555531333222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350533222233222222222222222222222222222222222222222222222222222222222222222222222232222233 +11355555555555555555555555555555555553113232222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053332223322222222222222222222222222222222222222222222222222222222222222222222222222223311555555555555555555555555555555 +55555511333222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053322223322222222222222 +22222222222222222222222222222222222222222222222222222222222222331155555555555555555555555555555555555531133322222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505233222332222222222222222222222222222222222222222222222 +22222222222222222222222222222233135555555555555555555555555555555555355313332222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222222222222222222222331 +15555555555555555555555555555555555355551133322222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032332223322222222222222222222222222222222222222222222222222222222222222222222222222233135555555555555555555555555555555 +55555555311333222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223322222222222222 +22222222222222222222222222222222222222222222222222222222222233313555555555555555555555555555555555555555531133322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503233222332222222222222222222222222222222222222222222222 +22222222222222222222222222223311555555555555555555555555555555555555555555311333222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350323222232222222222222222222222222222222222222222222222222222222222222222222222222233311 +55555555555555555555555555555555555555555551113322222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222233222222222222222222222222222222222222222222222222222222222332222311355555555555555555555555555555555 +55555555555311322222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222222222222222233222231155555555555555555555555555555555555555555555511322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222322222 +22222222222222222222223322223115555555555555555555555555555555555555555555553132222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222233222222222222222222222222222222222222222222233135 +55555555555555555555555555555555555555555555313222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222232222222222222222222222223322222222222222222222222222222222222222222223115555555555555555555555555555555555 +55555555555531322222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222232222222222 +22222222222222232222222222222222222222222222222222222222223311555555555555555555555555555555555555555555555531322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222322222222 +32222222222222222222222222331155555555555555555555555555555555555555555553553132222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222322222222232222222222222222222222223331355 +55555555555555555555555555555555555555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222333222222233222222222222222222222222331155555555555555555555555555555555555 +55555555355511322222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222333323 +22333333322222232222233322222223333222222222222222222222233135555555555555555555555555555555555555555555555511322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222233333333223333333333322233222233332222232 +33322222222222222222222223313555555555555555555555555555555555555555355555531322222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222223333111113333111113332311322231133222232311322222222222222222232223115555 +55555555555555555555555555555555555355555551132222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222233101111333101110332331032222101333222310132222222222222222222222311555555555555555555555555555555555555 +55555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222223101322 +33310331013323103222310113332231113222222222222222222223331555555555555555555555555555555555555555555555553133222222322222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222330111233101310133233101332310111132231 +01323322222222222222222231155555555555555555555555555555555555555555555555313322222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222233011123310133333223111133331011113333101332332222222222222222231155555 +55555555555555555555555555555555555555555531332222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222332223101332333103311222300101333111310133310132333222222222222222233135555555555555555555555555555555555555 +55555555553133222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222232223101111 +33310110122210130133310110133311001133222222222222222333115355555555555555555555555555555555555555555555555113322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222322222222231111333331111332211151132311111332311 +11132222222222222222233311555555555555555555555555555555555555555555555555511332222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222232222222223333322333333332333333332223333222223333222222222222222222233313555555 +55555555555555555555555555555555555555555553113222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222333322222233222233323322222223222222333222222222222222222222311555555555555555555555555555555555555555 +55555555555511332222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222222222222222 +22222222223322222222222322222222222222222222222222222331355555555555555555555555555555555555555555555555555511332223222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222223222222222222222333333222222 +22222223222222222222223135555555555555555555555555555555555555555555555555551133222322222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222223322222332222222222222333223222222222222223222222222222221155555555 +55555555555555555555555555555555555555555555113322233222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222223222222332222233222232222222222222222222222222222222222222222223115555555555555555555555555555555555555555 +55555555555511322222322222222222222222222222222222222222222222222222222222222222222222222222222222222235053232223222222222222222 +22222222222222222222222222222222222222222222322222223313555555555555555555555555555555555555555555555555555531132222322222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505223222332222222222222222222222222222222222222222222222 +22222222222333222222311555555555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222333222222311555555555 +55555555555555555555555555555555555555555555531322222222222222222222222222222222222222222222222222222222222222222222222222222222 +23322235052322223322222222222222222222222222222222222222222222222222222222233322222311355555555555555555555555555555555555555555 +55555555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222223322235053332223322222222222222 +22222222222222222222222222222222222222222333322222331155555555555555555555555555555555555555555555555555555555113222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505332222332222222222222222222222222222222222222222222222 +22222222232222223331155555555555555555555555555555555555555555555555555555555511332222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222222233311355555555555 +55555555555555555555555555555555555555555555551132222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223322222222222222222222222222222222222222222222222222222222222233111555555555555555555555555555555555555555555555 +55555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222222222222235052232223322222222222222 +22222222222222222222222222222222222222222222233113555555555555555555555555555555555555555555555555555555555553113322222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505233222332222222222222222222222222222222222222222222222 +22222222222223113555555555555555555555555555555555555555555555555555555555555113332222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222231135555555555555555 +55555555555555555555555555555555555555555555311333222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223322222222222222222222222222222222222222222222222222222222333115555555555555555555555555555555555555555555555555 +55555555555511332232222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555555555555555511332332222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222222222222222222222222222222222222222222222222222 +22222222222311355555555555555555555555555555555555555555555555555555555555551122222222222222222222222222222222222222222222222222 +22222222222222222222222222222222223222350332222222222222222222222222222222222222222222222222222222222222222311355555555555555555 +55555555555555555555555555555555555555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322235053222222222222222222222222222222222222222222222222222222222222222233135555555555555555555555555555555555555555555555555 +55555555555531322222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222222222313555555555555555555555555555555555555555555555555555555555555531132222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222322231155555555555555555555555555555555555555555555555555555555555553113322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222322231155555555555555555 +55555555555555555555555555555555555555555555531133222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555 +55555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222223222311355555555555555555555555555555555555555555555555555555555555555113322222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222231155555555555555555555555555555555555555555555555555555555555555531332222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532232222222222222222222222222222222222222222222222222222222222222311555555555555555555 +55555555555555555555555555555555555555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053223222222222222222222222222222222222222222222222222222222222222231355555555555555555555555555555555555555555555555555 +55555555555555531332222222222222222222222222222222222222222222222222222222222222222222222222222222222235053223222222222222222222 +22222222222222222222222222222222222222222231155555555555555555555555555555555555555555555555555555555555555555531333222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222223135555555555555555555555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222231155555555555555555555 +55555555555555555555555555555555555555555555555511322222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222223115555555555555555555555555555555555555555555555555555 +55555555555555553133222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222311555555555555555555555555555555555555555555555555555555555555555555353113222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222231155555555555555555555555555555555555555555555555555555555555555555555511222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222231135555555555555555555 +55555555555555555555555555555555555555555555555551132222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555555 +55555555555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222331555555555555555555555555555555555555555555555555555555555555555555555313322222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222222222222 +22222222231155555555555555555555555555555555555555555555555555555555555555555555551332222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222222222222222222222231155555555555555555555 +55555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222233135555555555555555555555555555555555555555555555555555 +55555555555555553531332222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222223113555555555555555555555555555555555555555555555555555555555555555555555551133222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222311355555555555555555555555555555555555555555555555555555555555555555555555313332222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222311555555555555555555555 +55555555555555555555555555555555555555555555555555531133222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222231155555555555555555555555555555555555555555555555555555 +55555555555555555555313332222222222222222222222222222222222222222222222222222223222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222322223115555555555555555555555553555555555555555555555555555555555555555555555555311332222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22332222313555555555555555555555555555555555555555555555555555555555555555555555555551133222222222222222222222222222222222222333 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222333115555555555555555555555 +55555555555555555555555555555555555555555555555555555511322222222222222222222222222222222222223333322222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222232311555555555555555555555555555555555555555555555555555555 +55555555555555555555553133322222222222222222222222222222222222233332222222222222222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222222331355555555555555555555555555555555535555555555555555555555555555555555555555555113333222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222222222222 +22222331135555555555555555555555555555555555555555555555555555555555555555555555555555551133332222222222222222222222222222222222 +22232222322222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222331155555555555555555555555 +55555555555535555555555555555555555555555555555555555555113332222222222222322322222222222222222223222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222231135555555555555555555555555555555555555555555555555555555 +55555555555555555555555551132222222222223232333333322222223322222333332222222222222233333222222222322235032222223222222222222222 +22222222222222222222222222222222222233115555555555555555555555555555555555555555555555555555555555555555555555555555555551132222 +22222222311133333113222333331333311333323333333231333133322222222232223505222222322222222222222222222222222222222222222222222222 +22223113535555555555555555555555555555555555555555555555555555555555555555555555555555555311222222222222310133311111133111310133 +11111335111311133113101332222222223222350522222232222222222222222222222222222222222222222222223222223113335555555555555555555555 +55555555555555555555555555555555555555555555555555555555551122222222222233101331011013330110113311110133101110133113001333222222 +33222235033222223222222222222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555113222222222223310133113310333011013331133111331111013301101133322222232222235053333223222222222222222 +22222222222222222222222222223222223331355555555555555555555555555555555555555555555555555555555555555555555555555555555555313222 +22222222231013301331013300101333113310133101013310111113322222232222223503233322322222222222222222222222222222222222222222233322 +22331155555555555555555555555555555555555555555555555555555555555555555555555555555555555531132222222222231013301331033301110133 +11331113310101333100111332222222223222350323222232222222222222222222222222222222222222222222222222331355555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555113222222222223101331011013330131013311110133310101333101311322222222 +22222235032222223222222222222222222222222222222222222222222222222331155555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555531332222222222310133101103333011113331110133233101333310131133222222222222235052222223322222222222222 +22222222222222222222222222222222333135555555555555555555555555555555555555555555555555555555555555555555555555555555555555531132 +22222222233133331111323311113333111133223331333321133132222322222222223505222222332222222222222222222222222222222222222222222222 +33115555555555555555555555555555555555555555555555555555555555555555555555555555555555555553111332222222323332333333322222233222 +33333322223333222223332222233222222222350522222233222222222222222222222222222222222222222222222233115555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555355351133322222222222222223222222223222223333222222332222222222222233222 +22222235052222223322222222222222222222222222222222222222222222223113555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555535311332222222222222222222322223223323233322222222222222222222223322222222235052222223222222222222222 +22222222222222222222222222222223311555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555531 +33222222222222222222222222222222222222222222222222222222222222222222223503223222322222222222222222222222222222222222222222222223 +11355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555113222223222222222222222222222222 +22222222222222222222222222222222232222350533322232222222222222222222222222222222222222222222222311355555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555511222222322222222222222222222222322222232222222223222222222222222 +33222235053322223222222222222222222222222222222222222222222222231355555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555551122222333222233232222222222222233222222333222222222222233322222233222235053322223222222222222222 +22222222222222222222222222232331155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555551 +12222233322223323222222222222232222222233222222222222222322222223322223505333222322222222222222222222222222222222222222222222331 +15555555555555555555555555555555555555555555555555555555555555555555555555555555555555553555555112222233222222222222222222222222 +22222222222222222222222222222222222222350533222233222222222222222222222222222222222222222222531155555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555511322232322222222222222222222222222222222222222222222222222222222 +22222235052332223322222222222222222222222222222222222222222223115555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555535555551133222222222222222222222222222222222222222222222222222222222222222222235052322223322222222222222 +22222222222222222222222222222311555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555553 +13322222222222222222222222222222222222222222222222222222222222222222223503223222332222222222222222222222222222222222222222222113 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555511332222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222311555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555533551133322222322222222222222222222222222222222222222222222222222222 +22222235033232223322222222222222222222222222222222222222222331155555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555511332222232222222222222222222222222222222222222222222222222222222222235032332223322222222222222 +22222222222222222222222222233115555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555535 +53113322222222222222222222222222222222222222222222222222222222222222223505233222332222222222222222222222222222222222222222231135 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555333555311133322222222222222222222222 +22222222222222222222222222222222222222350523322233222222222222222222222222222222222222222222115555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555553555555313333222222222222222222222222222222222222222222222222222222 +22222235032332223322222222222222222222222222222222222222223311555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555531133322222222222222222222222222222222222222222222222222222222222235053232223322222222222222 +22222222222222222222222222331555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555311332222222222222222222222222222222222222222222222222222222222223505223222332222222222222222222222222222222222222223331555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555511332223222222222222222222 +22222222222222222222222222222222222222350322222233222222222222222222222222222222222222222351155555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555353153222322222222222222222222222222222222222222222222222222 +22222235053322223322222222222222222222222222222222222222233155555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555533113322232222222222222222222222222222222222222222222222222222222235053232223322222222222222 +22222222222222222222222233115555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555531322222222222222222222222222222222222222222222222222222222222223505223222332222222222222222222222222222222222222333135555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555531322222222222222222222222 +22222222222222222222222222222222222222350522322233222222222222222222222222222222222222233313555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555553133222222222222222222222222222222222222222222222222222222 +22222235053332223322222222222222222222222222222222222223311555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555313322222222222222222222222222222222222222222222222222222222222235032332223322222222222222 +22222222222222222232222231155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555531133222222222222222222222222222222222222222222222222222222222223505333222332222222222222222222222222222222232222331355555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555553113322222222222222222222 +22222222222222222222222222222222222222350523322233222222222222222222222222222222233222233135555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555553555511333222222222222222222222222222222222222222222222222222 +22222235052322223322222222222222222222222222222223322223115555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555551113232222222222222222222222222222222222222222222222222222222235032222223322222222222222 +22222222222222222332223311555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555553511333222222222222222222222222222222222222222222222222222222223505233222222222222222222222222222222222222232223313555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555533531333333332222222222222 +22222222222222222222222222222222222222350322222222222222222222222222222222222222222222311555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555535555113333333322222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222231155555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555531111133332222223222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222223155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555553333113333133222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222231135555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555551444314444313232332222222 +22222222222222222222222222222222222222350332222222222222222222222222222222222222222233115555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555353344441344441133332222222222222222222222222222222222222222 +22222235033222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553344444134444133332222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222223331335555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555314444413444313333322222222222222222222222222222222222222222222223505323222222222222222222222222222222222222223311555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555334444411444113333322222222 +22222222222222222222222222222222222222350332322223222222222222222222222222222222223331155555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555533444441144431533332222222222222222222222222222222222222222 +22222235033223222322222222222222222222222222223222233135555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555534444444115444133332222222222222222222222222222222222222222222222235053233222322222222222222 +22222222222222232223113555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55531344444411544431333222222222222222222222222222222222222222222232223503323322232222222222222222222222222222222223115555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555514444455513544444133322222222 +22222222222222222222222222222222222222350333232222222222222222222222222222222232222313555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555551444453311444444413322222222222222222222222222222222222222222 +22222235033333222222233222222233222222222222223222331555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555144444531144444441332223222222222222222222222222222222222222222322235031333323222232222222223 +22222222222222222231155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55514344531144454441332222322222222222222222222222222222222222222232223505311133333232222223332222222222222222222331155555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555314445511444433331332222222222 +22222222222222222222222222222222222222350554431333332222222333222222222222222222231135555555555555555555555555555555555555555555 +55553553533555553553555535553535555535535533555335555555555555555533445511334311113333222222222222222222222222222222222222222222 +22222235054444411133333322223222222222222222222223115355555555555555555555555555555555555555555555555535553555555555535555555555 +55555555555555555555555555555555551444531344113333332222222222222222222222222222222222222222222222222235054444443333333332222222 +22222222222222222311555555555555555555555555555555555555555555555555555553355555555555555555355555555555555555555555555555555555 +55143431344313533322222322222222222222222222222222222222222222222222223505444444444113333322222222222222222222223313555555555555 +55555555555555555555555555555555555555551133555555555555555555555555555555555555555555555555555555131111353133333222222222222222 +22222222222222222222222222222222222222350544444444443113333222232222222222222223311355555555555555555555555555555555555555555555 +55555551001553555555555555555555555555555555555555555555555555555531331133133332222222222222222222222222222222222222222222222222 +22222235054444444444443113333332322232222222222231155555555555555555555555555555555555555555555555555551001111153111311133351113 +13313111311133111155555555555555555553131133332222333322223222222222222222222222222222222222222222222235054455534444444431113333 +33323222222222223135555555555555555555555555555555555555555555555555555511311101101110111113111001111011100111110155555555555555 +55555313333322222233322222322222222222222222222222222222222222222222223505444444453544444433133333333322222222223135555555555555 +55555555555555555555555555555555555555555550151010001000011310000110101000130111015555555555555555553313332222222233322222222222 +22222222222222222222222222222222222222350554444444454444444431133333233222222223115535555555555555555555555555555555555555555555 +55555555555001011010101101130011011010100011011103555555555555555553551133222222222222222222222222222222222222222222222222222222 +22322235054444444444444444444431133333333222222311355555555555555555555555555555555555555555555555555555355111113000310011011001 +00013000100011000555555555555555555535313322323322222222222222222222222222222222222222222222222222322235054444444444444444444444 +33333333333222211355555555555555555555555555555555555555555555555555555555501101531353115533333101135311301155113555555555555555 +55555551133322333322322222222222222222222222222222222222222222222222223505444444444444444444444444411333332223311555555555555555 +55555555555555555555555555555555555555555550100355553555555555531355555531355555555555555555555555555555113322231133332222222222 +22222222222222222222222222222222222222350544444444444444444444444444311133333331355555555555555555555555555555555555555555555555 +55555555555333335555555555555555355555555535555555555555555555555555555511333333131113322222222222222222222222222222222222222222 +22222235054444444444444444444444444444411133331155555555555555555555555555555555555555555555555555555555555333555555555555555555 +55555555355555555555555555555555555553555113333311411133232222222222222222222222222222222222222222222235054444444444444444444444 +44444444311131133555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555311133333144413222222222222222222222222222222222222222222222223505444444444444444444444444444444444331133555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555131111133134413222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444313355555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555355134311313313443322332222222222222222222222222222222222222 +22222235054444444444444444444444444444444444441133555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555535314441151333344132222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444511355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555531444413313134413222222222222222222222222222222222222222222222223505444444444444444444444444444444444453443155555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534444411443344413222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444433344433555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555553444441134444431332222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444335555335555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555344444411444443133222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444433355555355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555314444441144444513322222222222222222222222222222222222222222222223505444444444444444444444444444444444444444544335555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555314444441144444433322222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444433355555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555533444444114444443133222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444531555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553344444431344444433332222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444453313555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555314444444134444443133222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444431355555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555114444444134444444133222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444315555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555533444444413444444431322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444441115555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553344444441344444444132223222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444331355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555334444445114444444413222222222222232222222222222222222222222222223505444444444444444444444444444444444444444444444444451135 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534444445114444444413222222 +22223323222222222222222222222222222222350544444444444444444444444444444444444444444444444444511555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555531444444513444444441333333322223333232222222222222222222222 +22222235054444444444444444444444444444444444444444444444444445335555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553144444541144444444113333222222333323222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444441355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555314444551135444444411333333223333332222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +15555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555334444431135444444313333333 +33333332222222223222222222222222222222350544444444444444444444444444444444444444444444444444444431355555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555533444445313444444413111111111111132232222223322222222222222 +22222235054444444444444444444444444444444444444444444444444444444313555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553344444433544444441311311113111113333322222332222222222222222222235054444444444444444444444 +44444444444444444444444444444444431155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555534444443154444443153111111111111133322222232222222222222222222223505444444444444444444444444444444444444444444444444444444 +44313555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534444443154444444153111131 +11111113333222222222222222222222222222350544444444444444444444444444444444444444444444444444444444431355555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555553344444435544444413311313311331133333322222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444413555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555314444441354444441333111353333533333322222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444443155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555553344444134444444133331333333133333333222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444511555535555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555134444354444444131111331 +11111133113322222222222222222222222222350544444444444444444444444444444444444444444444444444444444444451555335555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555513555433444444413111111131111111311332222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444313355355555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555535531554551144444441311331111111111151133322222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444441135535555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55553353155444314444444153133111111111111113332222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444311555555555555555555555555555555555555555555555555555555555555555555555555555555555555555553555154444533444444313133113 +11131113111332222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444411355555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555515444431154444441311111333333333331333222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444135553555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553551544445135444444133133335333333333333322222222222222222222222235054444444444444444444444 +44444444444444444444444444444445444444554431355555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555134445551544444411533333323333333333322222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444315555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555114445531344444431333333 +22233333333322222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444513555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555531334455134444444133222222222333333332222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444453135555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555333545531544444313322222223222223222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444331355555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555533551334453134444431333322233222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444435555555555555555555555555555555555555555555555555555555555555555555555555555555555555553553334445134444441333333 +33333222222222222222222222222222222222350544444444444444444444444444444444444544444444444444444444444444444444413535355555555555 +55555555555555555555555555555555555555555555555555555555555555555555555355551444331544444133332222333222222222222222222222222222 +22222235054444444444444444444444444444444444454444444444444444444444444444444443135333555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555134453134444433333222223322222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444413553555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555513445511444443133222222332222222222222222222222222222232223505444444444444444444444444444444444444444444444444444444 +44444444444444443155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534444531444444133333 +22233222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444335555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555444443134444413333322233222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555555555555555555555555 +55555555555555355555555555555555555555555555514444311535441333222223322222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444315553555555555555555555555555555555555555555555555555555555555555555553353335 +55555555555553344444315544313322222223222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444443355535555555555555555555555555555555555555555555555555555555555555555555555555555555555553134444313444413322 +22222322222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444135555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555511344443444441332222222222222222222222222222222222 +22322235054444444444444444444444444444444444444444444444444444444444444444444444444441555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555113344313444133222222222222222222222222222222222222322235054444444444444444444444 +44444444444444444444444444444444444444444444444444444135555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555551134441133113322222222222222222222222222222222222232223505444444444444444444444444444444444444444444444444444444 +44444444444444444454431555555555555555555555555555555555555555555555555555555555555301335533555533555535555555353333411133333222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444441355555555 +55555555555555555555555555555555555555555555555555510015553333335355355535555555355311333533322223222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555555555555555555555555555555 +55555555555555555551003531353113335313353335333333311333333332223222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444451555555555555555555555555555555555555555555555555555555555555335300131001 +10110011011101031110011111101222322222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444445335555555555555555555555555555555555555555555555555555555555555511103011110111101110101010001101110101322 +32222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444445513553555 +55553555555555555555555555555555555555555555555555555553331300011011110100110001000000011010122232222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444533155555555533555555555555555555555555555 +55555555555555555555555553130001100011010111000100000100101012233322222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444453313555555555555555555555555555555555555555555555555555555555555533133113 +10113533101310130111031101013332322222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444445443155555555555555555555555555555555555555555555555555555555555553313335353353333533335331135333333333333 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444135555 +55555555555555555555555555555555555555555555555555555555553335555553353555553555335535322333233222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555555555555555555 +55555555555555555555555555535555555555555555555555553532222223222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444155555555555555555555555555555555555555555555555555555555555353555555 +55555555555555555553511322223223222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444413555555555555555555555555555555555555555555555555555555555535535555555555555555555555533511222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444441355 +55535555555555555555555555555555555555555555555555555555555555555555555555555555555531332222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555553132222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444441555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555313322222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444135555555555555555555555555555555555555555555555555555555555555555555555555555555555553133222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444315 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555315322322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444451355555555555555555555555555555555 +55555555555555555555555555555555555555555555555555553332223222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444445535555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555313222222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444441355355555555555555555555555555555555555555555555555555555555555555555555555555555555511222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444445444 +15555555555555555555555555555555555555555555555555555555555555555555555555555555553353322222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444544413533555555555555555555555555555 +55555555555555555555555555555555555555555555555555535133222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444441153555555555555555555555555555555555555555555555555555555555555 +55555555555555555555311322222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444413555555555555555555555555555555555555555555555555555555555555555555555555555555555333322222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +43355555555555555555555555555555555555555555555555555555555555555555555555555555555553322222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555555555 +55555555555555555555555555555555555555555555555555553132222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444435313555555555555555555555555555555555555555555555555555555555 +55555555555555555535312222222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444300155555555555555555555555555555555555555555555555555555555555555555555555555533133222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44410005555555555555555555555555555555555555555555555555555555555555555555555555553113322222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444311113555355555555555555555555 +55555555555555555555555555555555555555555555555555331332222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444441355135555555555555555555555555555555555555555555555555555555 +55555555555555555533113322222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444115335555555555555555555555555555555555555555555555555355555555555555555555555533313332222222 +22222222222222222222222222222222223222350544444444444444444444444444444444444444444444444444444444455444444444444444444444444444 +44441535555555555555555555555555555555555555555555555555535555355555555555555555555531122332222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444445544444444444444444444444444435441135555555555555555555555555 +55555555555555555555555555555555555555555555555555553112332222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444454444444454444444443444444444444444455544411355555555555555555555555555555555555555555555555555555555 +55555555555555555555311222222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444445153111333 +44135313135133114444441511113331114411155555555555555555555555555555555555555555555555555555555555555555555555555533511222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444511101010153115311003113003554410301011110 +11144335355555555555555555555555555555555555555555555555555555555555555555555555553351122222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444451310111015310100100101100111351030111100131134113555555555555555555555555 +55555555555555555555555555555555555555555555555555353112222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444131010001543000111110100011133001110110013113431355555555555555555555555555555555555555555555555555555555 +55555555555555555535333222222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444445011011101 +55301010311011111355100101011011101544335555555555555555555555555555555555555555555555555555555555555555555555555553513222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444301111130155510011533111333333111011131011 +11444431555355555555555555555555555555555555555555555555555555555555555555555555555531122222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444100003555115533015535511435554113311335301354444551155555555555555555555555 +55555555555555555555555555555555555555555555555555553332222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444455554453353445555444444444534445555555555444444455315535555555555555555555555555555555555555555555555555555 +55555555555555555555351323222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444445344455444 +44445444444444444444444444444444444444441355555555555555555555555555555555555555555555555555555555555555555555555553531332222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444435555555555555555555555555555555555555555555555555555555555555555555555555553315222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444435555555555555555555555 +55555555555555555555555555555555555555555555555555555530322222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555555555555555555555555555555555 +55555555555555555555553132222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444335355555555555555555555555555555555555555555555555555555555555555555555555555133222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444433555555555555555555555555555555555555555555555555555555555555555555555555555511322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555 +55555555555555555555555555555555555555555555555555555553122222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444135555555555555555555555555555555555555555555555555555 +55555555555555555555555512322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444433555555555555555555555555555555555555555555555555555555555555555555555555555312332222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444155555555555555555555555555555555555555555555555555555555555555555555555555531322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444135555555555555555555 +55555555555555555555555555555555555555555555555555555553113222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555555555555555555555555555555555 +55555555555555555555555311332222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444445355555555555555555555555555555555555555555555555555555555555555555555555555313322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444513555555555555555555555555555555555555555555555555555555555555555555555555531333222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444313555555555555555555 +55555555555555555555555555555555555555555555555555555553113222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555555555555555555555555555555 +55555555555555555555555513322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444315555555555555555555555555555555555555555555555555555555555555555555555555313322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444441355555555555555555555555555555555555555555555555555555555555555555555555331332222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441355555555355555555 +55555555555555555555555555555555555555555555555555555553132222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444315555555555555555555555555555555555555555555555555 +55555555555555555555555313322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444441555555555555555555555555555555555555555555555555555555555555555555555555312222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444335553555555555555555555555555555555555555555555555555555555555555555555531222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555355555555555 +55555555555555555555555555555555555555555555555555555551132222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444453555555555555555555555555555555555555555555555555 +55555555555555555555555133222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444135555555555555555555555555555555555555555555555555555555555555555555555133322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444413555555555555555555555555555555555555555555555555555555555555555555555313322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444413555555555555555 +55555555555555555555555555555555555555555555555555555531332222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444443155555555553555555555555555555555555555555555555 +55555555555555555555553333322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444415555555555553555555555555555555555555555555555555555555555555555555551133322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444443555555555555555555555555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443355555555555555 +55555555555555555555555555555555555555555555555555555531522222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444315555555555555555555555555555555555555555555555 +55555555555555555555551132322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444441555555555555555555555555555555555555555555555555555555555555555555551132222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444335555555555555555555555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555 +55555555555555555555555555555555555555555555555555555511333222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555555555555555555555555555 +55555555555555555555551133222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444335555555555555555555555555555555555555555555555555555555555555555553113322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444453555555555555555555555555555555555555555555555555555555555555555555531322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444431555355555555 +55555555555555555555555555555555555555555555555555555555112222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444155535555555555555555555555555555555555555555 +55555555555555555555555511222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444435555555555555555555555555555555555555555555555555555555555555555555313322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444441355555555555555555555555555555555555555555555555555555555555555555551122222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443155555555555 +55555555555555555555555555555555555555555555555555555555113222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444115555555555555555555555555555555555555555555 +55555555555555555555555311322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444431555555555555555555555555555555555555555555555555555555555555555555113322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444135555555555555555555555555555555555555555555555555555555555555555313332222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555 +55555555555555555555555555555555555555555555555555555551133222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444441555555555555555555555555555555555555555555 +55555555555555555555555113232222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444155555555555555555555555555555555555555555555555555555555555555555313322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444415535555555555555555555555555555555555555555555555555555555555555531335222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444554413535555555 +55555555555555555555555555555555555555555555555555555553113222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444455443355555555555555555555555555555555555555555 +55555555555555555555555511332222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444554435555555555555555555555555555555555555555555555555555555555555555531322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444445543555555555555555555555555555555555555555555555555555555555555555551132222222222233222222222222222222222222 +22222233054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444431355555555 +55555555555555555555555555555555555555555555555555555555113323222222222222222222222222222222222222222231054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444443135555555555555555555555555555555555555555 +55555555555555555555555511322332222222222222222222222222222222222222223105444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444313555555555555555555555555555555555555555555555555555555555555555513332333 +22222222222222222222222222222222223233110544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444431455555555555555555555555555555555555555555555555555555555555555511333222223322222222222222222222222222222 +22323313054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441455555555 +55555555555555555555555555555555555555555555555555555551333522222332222222222222222222222222222222333313054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555555555555555555555555555555 +55555555555555555555555153322222222222222222222222222222222222223332331105444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444431555555555555555555555555555555555555555555555555555555555555555113332222 +22222222222222222222222222222223233333310544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444443155555555555555555555555555555555555555555555555555555555555555511113332222222222222222222222222222222223 +21111111054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444155553555 +55555555555555555555555555555555555555555555555555555555511133332222223322222222222222222222233331122313054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444413535555555555555555555555555555555555555 +55555555555555555555555555511333222222332222222222222222222233331132233505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444441153555555555555555555555555555555555555555555555555555555555555555531133 +32222233222222222222222222222333113333350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444115355555555555555555555555555555555555555555555555555555555555555555111333333222222222222222222222222231 +11222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444414555555 +55555555555555555555555555555555555555555555555555555555553551111113332222222222222222222222331113222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444441455555555555555555555555555555555555555 +55555555555555555555555555553355533113222222322222332222333333115322223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444145555555555555555555555555555555555555555555555555555555555555555313355 +55551332325322222233232233331113233222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444413555555355555555555555555555555555555555555555555555555555555555311353555551112333332232232333311111333 +33322235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441555555 +35555555555555555555555555555555555555555555555555555555513113555555531311333322311111111133332333222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444135555555555555555555555555555555555555 +55555555555555555555555531331355555555333115333311311111322223323322223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444413555555555555555555555555555555555555555555555555555555555555533441135 +55555333553111111333333322322223322222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444443355355555535355355355555335555555555555555555555555555555555553344311355555555555311133333332222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444355355 +55553353355535553535535555555555555555555555555555555555134443115555555555553133333322223222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444435553551153113111111111111355555555555 +55555555555555555555555315444331355555555553311333222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444441555555003500100000100000135555555555555555555555555555555553135444533 +35555555555533113322222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444155555500330010000010000013555555555555555555555555555555555134444445435555555555533311322222222222223 +33222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444155555 +30000001100001011101553555555555555555555555555555553334444444413555555555555551133222222222222222322235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444435555330000001000000000001555555555555 +55555555555555553553531444444431555555555555535531322222222222222232223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444443555555005300311111101111355555555555555555555555555555555313444444533 +55555555555555555112532222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444335510111531135553131135535555555555555555555555555555535511544444451355555555555555555313332222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444345300 +01355355555335335555555355555555555555555555555555531434444445115555555555555553553133222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433530011113555555555555555555555555555 +55555555555555535551144444444315555555555555555555311222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444155313443135555555555555555555555555555555555555555555553344444444511 +55555555555555555333053222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444443114444431355555555555555555555555555555555555555553555514444444451155555555555555555333133322222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444335555555555555555553553555555555555555555355553344444443135555555555555555533513332222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444413555555555555555535555555 +55555555555555553555513344443135555555555555555555531333222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444443155555555555555555555555555555555555555555555553134441135 +55555555555555555535133322222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444315555555555555555555555555555555555555555555555533133115555555555555555555533133322222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444441555355555555555555555553555555555555555535555555531113553555555555555555553113332222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441353555555555555555553555 +55555553555555535555555355533535555555555555555553311322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444135535555555555553355555555555555555555555535555333355555 +55555555555555555531332222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444413535555555555555555555555555555555555553555555553555555555555555555555555531332222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444441355555555555555555555555555555555555555555555555555555555555555555555555551033222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444431555555555555555555555555 +55555555555555555555555555555555555555555555555555313322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444443355533555555555555555555555555555555555555555555555555555 +55555555555555555511222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444335535355555555555555555555555555555555555555555555555555555555555555355555511222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444431555355555555555555555555555555555555555555555555555555555555555555555555551152222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433555535555555555555555555 +55555555555555555555555555555555555555555555555555115222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444443155555555555555555555555555555555555555555555555555555555 +55555555555555555311322222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444335555555555555555555555555555555555555555555555555555555555555555555555555511322222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444441355555555555555555555555555555555555555555555555555555555555555555555555531132222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443155555555555555555555555 +55555555555555555555555555555555555555555555555551133222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444315555555555555555555555555555555555555555555555555555555 +55555555555555551133222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444441555555555555555555555555555555355555555555555555555555555555555555555551133222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444135555555555555555555555555555555555555555555555555555555555555555555555113322222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555555555555 +55555555555555555555555555555555555555555555555531332322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444431353555555555555555555555555555555555555555555555555555 +55555555555555553122222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444443155555555555555555555555555553555555555555555555555555555555555555555553122222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444535555555555555555555555555355553555555555555555555555555555555555555555313252222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555 +55311313333555555555555555555555555555555555555511322222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555313113313355555555555555555555 +55555555555555551132222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444335555555555555555555553113332223311555555555555555555555555555555555551132222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444433555555553355555555555313332222233133553353555555555555555555555555555113322222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444431131331131133331133355 +33323222223331113113555555555555555555555555555511322322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444443113133133331133131113113332222223233333333555555555555 +55555555555555551132322222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444313333223322333222213311322222222222233331155555555555555555555555555553113322222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444441133323233222222222332232222222222223333113555555555555555555555555555511332222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444111333223222222223333 +22222222222222233333115555555555555555555553555553331322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444111322222222233223322222222222222222333115555555555 +55555555555555555511222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444441133222222223232222222222222222222222333555555555555555555555555555331322222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444413322222222223222222222222222222222233335555555555555555555553555355312222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441332222222222222 +22222222222222222222311555555555555555555555355555531222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444133333222222222222222222222222222222333555555555 +55555555555555555553132222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444431113333222222222222222222222222222233355555555555555555555555555553322222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444411333322222222222222222222222222222115555555555555555555555555533112222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441133332222222 +22222222222222222222233555555555555555555555555553113222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444313333222222232222222222222222222231555555555 +55555555555555555113322222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444441333322222222222222222222222233321135555555555555555555533553113232222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444445444133222222222222222222222222222333315555555555555555555555553133232222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445444133222222232 +22222222222222222233333335555535555555555555555113222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444411322222223322222222222222222222331355555555 +55555555555555511332222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444454443132223222332222222222222222222333135555335555555555555555103332222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444533544413222322233222222222222222222223331555511135555555555555511332222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444435544313222322223 +22222222222222222222331115533113333355555555331132222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444445554413332232222322222222222222222222333315113313 +33335555555551133322222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444455431333223222232222222222222222222222333311331111135355555551133322222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444445544313332322223222222222222222222222235313353331111555555553333332222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444413322232222 +22222222222222222232222233332223322113555553555322222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444443133223322222222222222222222332222223332222 +23331113555553353322222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444313322332222223232322222222333332222233222223333311555553531332222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444443132222322223333333333333333332333223232233333333135333531132252222222222222322235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443133323111 +13111131111131131111311331113113111333311331111333222222222222222222223505444444455444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444431322311113111131111131111111101311111111 +00133333331110133322222222222222222222350544444445544444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444112231133311133111113111111111130131111100132222222331111332222222222222 +22222235054444444544444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444411323113331111311111311113110113013111011113222222222331112222222222222222222235054444444344444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444411323113 +33113331131131011310111301311101111322222222333331122222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444133311333111131111133111310111311113111 +10132222333333223113522222222223332222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444413333133311132311333311331133333111231131332223333322222113333322222223 +33322235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444441332222332332222333322222223222222222223332222223222222231153222222222223322235053444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444453333222 +23222222222223222222222222222222233222222222222233113332222222222332233505534444445544444444444444554444444444444444444444444444 +44445555444444444444444444444444444444444444444444444444444444555554444444444444444444455313333333222222222223222332222333223323 +33322233222233333311113333333333333223350555355555533555555555555555555555555555535555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555531333333333333333333333333333333333333333333333333333333331111133333333 +33322335000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000070101000000030000000000}}}{\lang1033\langfe1049\langnp1033 \line }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Harmon.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5600000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0048006100 +72006d006f006e002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Hermon}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Golan.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5400000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0047006f00 +6c0061006e002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Golan}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Galil.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5400000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0047006100 +6c0069006c002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Galil}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Jerusalem.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5c00000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f004a006500 +72007500730061006c0065006d002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Jerusalem}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Shomron.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0053006800 +6f006d0072006f006e002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Shomron}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK "http +://www.israelweather.co.il/Shfela.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5600000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0053006800 +660065006c0061002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Shfela}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/hifa.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5200000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0068006900 +660061002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Haifa}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/carmel.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5600000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0063006100 +72006d0065006c002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Carmel}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/TelAviv.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0054006500 +6c0041007600690076002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Tel-Aviv}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Kineret.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f004b006900 +6e0065007200650074002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Kineret}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/NorthFalyes.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b6000000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f004e006f00 +720074006800460061006c007900650073002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 North Valley}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Negev.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5400000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f004e006500 +6700650076002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Negev}}}{\lang1033\langfe1049\langnp1033 }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Bika.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5200000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0042006900 +6b0061002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 +\par }{\cf2\lang1033\langfe1049\langnp1033 Bika}}}\pard\plain \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 {\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst { +\lang1033\langfe1049\langnp1033 HYPERLINK "http://www.israelweather.co.il/Hrava.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5400000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0048007200 +6100760061002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Eilat +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 }}\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 { +\lang1033\langfe1049\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 !! }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e6\'e4\'f8\'e4}{\lang1033\langfe1049\langnp1033 +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f30 \loch\af30\dbch\af0\hich\f30 \'e0\'fa\'f8}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e6\'e4}{\lang1033\langfe1049\langnp1033 }{\f30 +\loch\af30\dbch\af0\hich\f30 \'e4\'e5\'f7\'ed}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e1\'ee\'e8\'f8\'e4}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ec\'fa\'fa}{\lang1033\langfe1049\langnp1033 } +{\f30 \loch\af30\dbch\af0\hich\f30 \'ec\'f6\'e9\'e1\'e5\'f8}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ee\loch\af30\dbch\af0\hich\f30 \'e9\'e3\'f2}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'f8\'e1} +{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e1\'eb\'e5\'ec}{\lang1033\langfe1049\langnp1033 +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'f7\'f9\'e5\'f8}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e1\'ee\'e6\'e2}{ +\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e0\'e5\'e5\'e9\'f8}{\lang1033\langfe1049\langnp1033 -}{\f30 \loch\af30\dbch\af0\hich\f30 \'e9\'fa\'eb\'f0\'e5}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 +\'e8\'f2\'e5\'e9\'e5\'fa}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e5\'ee\'e9\'e3\'f2}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ee\'e5\'e8\'f2\'e4}{\lang1033\langfe1049\langnp1033 +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f30 \loch\af30\dbch\af0\hich\f30 \'ec\'eb\'ef}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'eb\'ec}{\lang1033\langfe1049\langnp1033 }{\f30 +\loch\af30\dbch\af0\hich\f30 \'f9\'e9\'ee\'e5\'f9}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e9\'e9\'f0\'e5}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'f2\'ec}{\lang1033\langfe1049\langnp1033 } +{\f30 \loch\af30\dbch\af0\hich\f30 \'e0\'e7\'f8\'e9\'e5\'fa\'e5}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e1\'ec\'f2\'e3\'e9\'fa}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'f9\'ec}{ +\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'ee\'f9\'fa\'ee\'f9}{\lang1033\langfe1049\langnp1033 +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 \trowd +\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth4785 \cellx4564\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 +\cltxlrtb\clftsWidth3\clwWidth5016 \cellx9463\row }\pard \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\lang1033\langfe1049\langnp1033 +\par }} \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/BulletsAndNumbering.bdsproj b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/BulletsAndNumbering.bdsproj new file mode 100644 index 0000000..6427666 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/BulletsAndNumbering.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + BulletsAndNumbering.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/BulletsAndNumbering.dpr b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/BulletsAndNumbering.dpr new file mode 100644 index 0000000..56b463c --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/BulletsAndNumbering.dpr @@ -0,0 +1,13 @@ +program BulletsAndNumbering; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/BulletsAndNumbering.res b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/BulletsAndNumbering.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/BulletsAndNumbering.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/Unit1.dfm new file mode 100644 index 0000000..def36af Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/Unit1.pas new file mode 100644 index 0000000..248abc7 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/ListStyles/Bullets/Unit1.pas @@ -0,0 +1,161 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, Buttons, ExtCtrls, StdCtrls; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Panel1: TPanel; + btnBullets: TSpeedButton; + btnNumbering: TSpeedButton; + procedure btnBulletsClick(Sender: TObject); + procedure RichViewEdit1CaretMove(Sender: TObject); + procedure btnNumberingClick(Sender: TObject); + private + { Private declarations } + function CreateBullets: Integer; + function CreateNumbering: Integer; + function GetListNo(rve: TCustomRichViewEdit; ItemNo: Integer): Integer; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +{------------------------------------------------------------------------------} +function TForm1.GetListNo(rve: TCustomRichViewEdit; + ItemNo: Integer): Integer; +var Level, StartFrom: Integer; + Reset: Boolean; +begin + rve.GetListMarkerInfo(ItemNo, Result, Level, StartFrom, Reset); +end; +{------------------------------------------------------------------------------} +// Returns index of bulleted list style. Creates it, if necessary. +function TForm1.CreateBullets: Integer; +var ListStyle: TRVListInfo; +begin + // 1. Creating desired list style + ListStyle := TRVListInfo.Create(nil); + with ListStyle.Levels.Add do begin + ListType := rvlstBullet; + Font.Name := 'Symbol'; + {$IFDEF RICHVIEWCBDEF3} + Font.Charset := SYMBOL_CHARSET; + {$ENDIF} + Font.Size := 12; + FirstIndent := 0; + LeftIndent := 24; + end; + // 2. Searching for existing style with these properties. Creating it, if not found + Result := RVStyle1.ListStyles.FindSuchStyle(ListStyle, True); + ListStyle.Free; +end; +{------------------------------------------------------------------------------} +function TForm1.CreateNumbering: Integer; +var ListStyle: TRVListInfo; + rve: TCustomRichViewEdit; + i, StartNo, EndNo, a, b, ListNo: Integer; +begin + Result := -1; + // 1. Creating desired list style + ListStyle := TRVListInfo.Create(nil); + with ListStyle.Levels.Add do begin + ListType := rvlstDecimal; + Font.Name := 'Arial'; + Font.Size := 12; + FirstIndent := 0; + LeftIndent := 24; + FormatString := '%0:s.'; + end; + // 2. Searching for such style in the selected paragraphs, the paragraph before, + // and the paragraph after. If found, using it. + rve := RichViewEdit1.TopLevelEditor; + rve.GetSelectionBounds(StartNo, a, EndNo, b, True); + if StartNo<0 then begin + StartNo := rve.CurItemNo; + EndNo := StartNo; + end; + // ExpandToPara is an undocumented method that changes item range StartNo..EndNo + // so that it completely includes paragraphs containing StartNo..EndNo + rve.RVData.ExpandToPara(StartNo, EndNo, StartNo, EndNo); + if StartNo>0 then + dec(StartNo); + if EndNo + + + + + + + + + + + ImageListBullets.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/ImageListBullets.dpr b/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/ImageListBullets.dpr new file mode 100644 index 0000000..abfba43 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/ImageListBullets.dpr @@ -0,0 +1,13 @@ +program ImageListBullets; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/ImageListBullets.res b/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/ImageListBullets.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/ImageListBullets.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/Unit1.dfm new file mode 100644 index 0000000..e8f082e Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/Unit1.pas new file mode 100644 index 0000000..fca796b --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/ListStyles/ImageListBullets/Unit1.pas @@ -0,0 +1,74 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, RVEdit, RVStyle, + ImgList, + StdCtrls, ComCtrls; + +type + TForm1 = class(TForm) + ImageList1: TImageList; + RVStyle1: TRVStyle; + RichViewEdit1: TRichViewEdit; + ImageList2: TImageList; + procedure FormCreate(Sender: TObject); + procedure RichViewEdit1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +{------------------------------------------------------------------------------- + RVStyle1.ListStyles[0] has two levels - + 0th - imagelistcounter + 1st - imagelist +-------------------------------------------------------------------------------} + +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; +const text = 'Text text text. Text text text text. Text text text. Text text text text. Text text text. Text text text text.'; +begin + with RichViewEdit1 do begin + Clear; + for i := 1 to 5 do begin + SetListMarkerInfo(-1, 0, 0, 1, 0, False); + Add(text, 3); + SetListMarkerInfo(-1, 0, 1, 1, 0, False); + Add(text, 0); + SetListMarkerInfo(-1, 0, 1, 1, 0, False); + Add(text, 0); + SetListMarkerInfo(-1, 0, 1, 1, 0, False); + Add(text, 0); + end; + Format; + end; +end; + + +// This event is not used in this demo. +// But if you want to save and load this document in RVF, it is necessary. +// Note: ImageList1.Tag is set to 1, ImageList2.Tag is set to 2. +procedure TForm1.RichViewEdit1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + case ImageListTag of + 1: il := ImageList1; + 2: il := ImageList2; + end; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Load RVF/LoadRVF.bdsproj b/12.0.4/Demos/Delphi/Assorted/Load RVF/LoadRVF.bdsproj new file mode 100644 index 0000000..1826a9d --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Load RVF/LoadRVF.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + LoadRVF.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Load RVF/LoadRVF.dpr b/12.0.4/Demos/Delphi/Assorted/Load RVF/LoadRVF.dpr new file mode 100644 index 0000000..200e2a7 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Load RVF/LoadRVF.dpr @@ -0,0 +1,13 @@ +program LoadRVF; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Load RVF/LoadRVF.res b/12.0.4/Demos/Delphi/Assorted/Load RVF/LoadRVF.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Load RVF/LoadRVF.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Load RVF/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Load RVF/Unit1.dfm new file mode 100644 index 0000000..b95650d Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Load RVF/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Load RVF/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Load RVF/Unit1.pas new file mode 100644 index 0000000..5fce2a5 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Load RVF/Unit1.pas @@ -0,0 +1,105 @@ +unit Unit1; + +interface +{==============================================================================} +{ Demo: how to load RVF file saved in demo editor. } +{ Sergey Tkachenko } +{------------------------------------------------------------------------------} +{ Providing pictures and controls on request from RichView is not supported in } +{ this demo. } +{==============================================================================} + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVScroll, RichView, StdCtrls, ExtCtrls, RVStyle, OleCtnrs, RVTable; + +type + TForm1 = class(TForm) + RichView1: TRichView; + OpenDialog1: TOpenDialog; + Panel1: TPanel; + RVStyle1: TRVStyle; + ImageList1: TImageList; + Button1: TButton; + procedure Button1Click(Sender: TObject); + procedure RichView1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{ +Notes about loading from RVF files: +1. In simplest cases you can just write: RichView1.LoadRVF(); +2. If file contains inserted Delphi Controls, these controls must be registered + with RegisterClasses functions before loading (see FormCreate below) +3. If file contains images from image lists, you need to process + OnRVFImageListNeeded event (see RichView1RVFImageListNeeded below) + If you have several image lists, you can distinguish them using + ImageListTag parameter of this event. +4. You must have the same (or compatible) TRVStyle object assigned to + RichView1.Style as in editor. + Otherwise, you need to set option "Allow adding styles dynamically" + both in richview which saves and in richview which loads RVF + (right-click RichView in Delphi, choose "Settings" in the context menu) +5. If some items in RVF file have character strings associated as items' tags + (rvoTagsArePChars was in editor's Options), you need also set rvoTagsArePChars + in RichView1.Options. +} + + +procedure TForm1.FormCreate(Sender: TObject); +begin + RegisterClasses([TButton, TEdit, TOleContainer]); +end; + + +procedure TForm1.Button1Click(Sender: TObject); +begin + if OpenDialog1.Execute then begin + // Clearing and deleting unused text styles. + // If RVF contains collections of styles, it is not necessary, + // because collections from the file will replace the existing collections + RichView1.Clear; + RichView1.DeleteUnusedStyles(True, True, True); + // Resetting background. + // If RVF contains background information and rvfoLoadBack is in RVFOptions, + // it is not necessary + RichView1.BackgroundBitmap := nil; + // Resetting layout properties. + // If RVF contains layout information and rvfoLoadLayout is in RVFOptions, + // it is not necessary + RichView1.LeftMargin := 5; + RichView1.TopMargin := 5; + RichView1.RightMargin := 5; + RichView1.BottomMargin := 5; + RichView1.MinTextWidth := 0; + RichView1.MaxTextWidth := 0; + // Loading + if not RichView1.LoadRVF(OpenDialog1.FileName) then + Application.MessageBox('Error Loading File', nil, MB_OK); + // Formatting (necessary before displaying) + RichView1.Format; + end; +end; + +procedure TForm1.RichView1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + il := ImageList1; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Quiz.bdsproj b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Quiz.bdsproj new file mode 100644 index 0000000..f5e5fc3 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Quiz.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Quiz.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Quiz.dpr b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Quiz.dpr new file mode 100644 index 0000000..6534ea9 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Quiz.dpr @@ -0,0 +1,13 @@ +program Quiz; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Quiz.res b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Quiz.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Quiz.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Unit1.dfm new file mode 100644 index 0000000..b0c1d0d Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Unit1.pas new file mode 100644 index 0000000..1f5826c --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/PlanetQuiz/Unit1.pas @@ -0,0 +1,292 @@ +{==============================================================================} +{ This demo shows how to work with tables, mouse events, GetItemAt method } +{==============================================================================} +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVTable, RVScroll, RichView, RVStyle, CRVFData, StdCtrls, MMSystem; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + procedure FormCreate(Sender: TObject); + procedure RichView1MouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure RichView1RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + HighlightedRVData: TCustomRVFormattedData; // highlighted cell + AnsweredCount: Integer; // number of answered count + Ready: Boolean; // "ready!" is clicked + procedure AddTable(const Question: String; Answers: TStringList; CorrectAnswer: Integer); + procedure HighlightCell(RVData: TCustomRVFormattedData); + procedure SelectCell(RVData: TCustomRVFormattedData); + procedure FillQuestion(sl: TStringList; const arr: array of String; var CorrectAnswer: Integer); + procedure BuildQuiz; + public + { Public declarations } + + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +// Sorted array of answers. +const Answers : array [0..3, 0..8] of String = + ( + ('Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Pluto'), + ('Pluto', 'Neptune', 'Uranus', 'Saturn', 'Jupiter', 'Mars', 'Earth', 'Venus', 'Mercury'), + ('Pluto', 'Mercury', 'Mars', 'Venus', 'Earth', 'Neptune', 'Uranus', 'Saturn', 'Jupiter'), + ('Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Earth', 'Venus', 'Mars', 'Mercury', 'Pluto') + ); + +// Array of questions +const Questions: array [0..3] of String = + ( 'Which of these planets is closest to the Sun?', + 'Which of these planets is the most distant from the Sun?', + 'Which of these planets is the smallest?', + 'Which of these planets is the largest?' + ); + + +{ TForm1 } + +const + TABLECOLOR = $CCFFFF; + HEADCOLOR = $990033;//$CCFF33; + HLTCOLOR = $66CCFF; + SELCOLOR = $3399CC; + PASSCOLOR = $00FF33; + FAILCOLOR = $0033FF; + +procedure TForm1.FormCreate(Sender: TObject); +begin + Randomize; + BuildQuiz; +end; +{------------------------------------------------------------------------------} +// Filling RichView. Preparing the quiz +procedure TForm1.BuildQuiz; +var sl: TStringList; + i, CorrectAnswer: Integer; +begin + RichView1.Clear; + AnsweredCount := 0; + sl := TStringList.Create; + for i := 0 to High(Questions) do begin + // adding questions. one question is one table + FillQuestion(sl, Answers[i], CorrectAnswer); + AddTable(Questions[i], sl, CorrectAnswer); + RichView1.AddNL('',0,0); + end; + sl.Free; + // adding hypertext "button" + RichView1.AddNL('Ready!', 2, 1); + RichView1.Format; + Ready := False; + RVStyle1.TextStyles[2].HoverBackColor := FAILCOLOR; +end; +{------------------------------------------------------------------------------} +// This function chooses 3 answers from ARR and add them in SL. +// Index of the correct answer is returned in CORRECTANSWER +procedure TForm1.FillQuestion(sl: TStringList; const arr: array of String; + var CorrectAnswer: Integer); +var i,j,v: Integer; +var Options: array [0..2] of Integer; +begin + sl.Clear; + // Choosing 3 different random answers + for i := 0 to High(Options) do + repeat + v := Random(High(arr)+1); + for j := 0 to i-1 do + if Options[j]=v then begin + v := -1; + break; + end; + if v>=0 then begin + Options[i] := v; + sl.Add(arr[v]); + end; + until v>=0; + // Finding the correct answer. arr is sorted so that the correct answer + // is an answer with smaller index + CorrectAnswer := -1; + j := High(arr)+1; + for i := 0 to High(Options) do begin + if Options[i]nil then begin + TRVTableCellData(HighlightedRVData).Color := clNone; + HighlightedRVData.Invalidate; + HighlightedRVData := nil; + end; + if not (RVData is TRVTableCellData) or (TRVTableCellData(RVData).Color=SELCOLOR) then + exit; + TRVTableCellData(RVData).GetTable.GetCellPosition(TRVTableCellData(RVData),r,c); + if r=0 then + exit; + TRVTableCellData(RVData).Color := HLTCOLOR; + RVData.Invalidate; + HighlightedRVData := RVData; +end; +{------------------------------------------------------------------------------} +// If RVData is a table cell, this function selects this cell. +// Selected cell has color = SELCOLOR. +// Updates number of answered questions (AnsweredCount). +// If all questions are answered, changes highlight of hypertext jump from +// red to green. +procedure TForm1.SelectCell(RVData: TCustomRVFormattedData); +var r,c: Integer; + table: TRVTableItemInfo; +begin + if not (RVData is TRVTableCellData) then + exit; + table := TRVTableCellData(RVData).GetTable; + table.GetCellPosition(TRVTableCellData(RVData),r,c); + if r=0 then + exit; + for r := 1 to table.Rows.Count-1 do begin + if table.Cells[r,0].Color=SELCOLOR then + dec(AnsweredCount); + table.Cells[r,0].Color := clNone; + end; + TRVTableCellData(RVData).Color := SELCOLOR; + inc(AnsweredCount); + TRVTableCellData(RVData).Invalidate; + if HighlightedRVData=RVData then + HighlightedRVData := nil; + if AnsweredCount=High(Questions)+1 then + RVStyle1.TextStyles[2].HoverBackColor := PASSCOLOR; +end; +{------------------------------------------------------------------------------} +// OnMouseMove event - highlighting cell +procedure TForm1.RichView1MouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +var RVData: TCustomRVFormattedData; + a,b: Integer; +begin + if Ready then + exit; + inc(X, RichView1.HScrollPos); + inc(Y, RichView1.VScrollPos*RichView1.VSmallStep); + RichView1.GetItemAt(X, Y, RVData, a, b, False); + HighlightCell(RVData); +end; +{------------------------------------------------------------------------------} +// OnRVMouseUP event - selecting cell +procedure TForm1.RichView1RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); +var RVData: TCustomRVFormattedData; + a,b: Integer; +begin + if Ready then + exit; + inc(X, RichView1.HScrollPos); + inc(Y, RichView1.VScrollPos*RichView1.VSmallStep); + RichView1.GetItemAt(X, Y, RVData, a, b, False); + SelectCell(RVData); +end; +{------------------------------------------------------------------------------} +// On hyperlink click. +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var i,r: Integer; + table: TRVTableItemInfo; + Score: Integer; +begin + if not Ready then begin // clicking on "Ready!" + if AnsweredCountHigh(Questions)+1 then + SndPlaySound('CHORD.WAV', SND_SYNC or SND_NODEFAULT) + else + SndPlaySound('TADA.WAV', SND_SYNC or SND_NODEFAULT); + end + else begin // clicking on "Try Again" + BuildQuiz; + RichView1.ScrollTo(0); + Caption := 'PlanetQuiz'; + end; +end; + + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Headers.bdsproj b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Headers.bdsproj new file mode 100644 index 0000000..0ab72eb --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Headers.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Headers.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Headers.dpr b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Headers.dpr new file mode 100644 index 0000000..e5780c9 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Headers.dpr @@ -0,0 +1,14 @@ +program Headers; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + PreviewFrm in 'PreviewFrm.pas' {frmPreview}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Headers.res b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Headers.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Headers.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Headers/PreviewFrm.dfm b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/PreviewFrm.dfm new file mode 100644 index 0000000..cebc53c Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/PreviewFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Headers/PreviewFrm.pas b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/PreviewFrm.pas new file mode 100644 index 0000000..218d885 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/PreviewFrm.pas @@ -0,0 +1,106 @@ +unit PreviewFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVScroll, CRVPP, RVPP, ExtCtrls; + +type + TfrmPreview = class(TForm) + Panel1: TPanel; + rvpp: TRVPrintPreview; + cmb: TComboBox; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + Label1: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure cmbExit(Sender: TObject); + procedure cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvppZoomChanged(Sender: TObject); + private + { Private declarations } + procedure UpdateZoom; + public + { Public declarations } + end; + +var + frmPreview: TfrmPreview; + +implementation + +{$R *.DFM} +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button1Click(Sender: TObject); +begin + rvpp.First; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button2Click(Sender: TObject); +begin + rvpp.Prev; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button3Click(Sender: TObject); +begin + rvpp.Next; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button4Click(Sender: TObject); +begin + rvpp.Last; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbExit(Sender: TObject); +begin + UpdateZoom; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_RETURN then begin + UpdateZoom; + Key := 0; + end; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.UpdateZoom; +var s: String; + zoom: Integer; +begin + s := Trim(cmb.Text); + if s='Page width' then begin + rvpp.ZoomMode := rvzmPageWidth; + exit; + end; + if s='Full page' then begin + rvpp.ZoomMode := rvzmFullPage; + exit; + end; + if (s<>'') and (s[Length(s)]='%') then + s := Copy(s,1,Length(s)-1); + zoom := StrToIntDef(s,0); + if (zoom<10) or (zoom>500) then + Application.MessageBox('Please enter number from 10 to 500','Scale',MB_OK or MB_ICONSTOP) + else + rvpp.SetZoom(zoom); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.rvppZoomChanged(Sender: TObject); +begin + cmb.Text := IntToStr(rvpp.ZoomPercent)+'%'; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Unit1.dfm new file mode 100644 index 0000000..70e8976 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Unit1.pas new file mode 100644 index 0000000..2480b3d --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/Unit1.pas @@ -0,0 +1,179 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, Menus, RVScroll, RichView, RVEdit, ComCtrls, RVStyle, PreviewFrm, + PtblRV, StdCtrls; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + TabSheet3: TTabSheet; + TabSheet4: TTabSheet; + RichViewEdit1: TRichViewEdit; + RichViewEdit2: TRichViewEdit; + RichViewEdit3: TRichViewEdit; + MainMenu1: TMainMenu; + File1: TMenuItem; + Open1: TMenuItem; + Print1: TMenuItem; + Exit1: TMenuItem; + RVStyle1: TRVStyle; + RVStyle2: TRVStyle; + RVStyle3: TRVStyle; + RVPrint1: TRVPrint; + N1: TMenuItem; + N2: TMenuItem; + PrintPreview1: TMenuItem; + OpenDialog1: TOpenDialog; + GroupBox1: TGroupBox; + Label1: TLabel; + txtLeft: TEdit; + Label2: TLabel; + txtRight: TEdit; + Label3: TLabel; + txtTop: TEdit; + Label4: TLabel; + txtBottom: TEdit; + GroupBox2: TGroupBox; + Label5: TLabel; + Label6: TLabel; + txtHeader: TEdit; + txtFooter: TEdit; + New1: TMenuItem; + PrinterSetupDialog1: TPrinterSetupDialog; + procedure PrintPreview1Click(Sender: TObject); + procedure Open1Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure New1Click(Sender: TObject); + procedure Print1Click(Sender: TObject); + procedure Exit1Click(Sender: TObject); + private + { Private declarations } + function IsEmpty(rve: TCustomRichViewEdit): Boolean; + procedure PreparePrinting; + procedure OpenFile(const FileName: String); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +function TForm1.IsEmpty(rve: TCustomRichViewEdit): Boolean; +begin + Result := (rve.ItemCount=0) or ((rve.ItemCount=1) and (rve.GetItemStyle(0)>=0) and + (rve.GetItemText(0)='')); +end; + +procedure TForm1.PreparePrinting; +begin + RVPrint1.AssignSource(RichViewEdit1); + if not IsEmpty(RichViewEdit2) then begin + if StrToIntDef(txtHeader.Text,-1)<0 then + txtHeader.Text := '10'; + RVPrint1.SetHeader(RichViewEdit2.RVData); + end + else + RVPrint1.SetHeader(nil); + if not IsEmpty(RichViewEdit3) then begin + if StrToIntDef(txtFooter.Text,-1)<0 then + txtFooter.Text := '10'; + RVPrint1.SetFooter(RichViewEdit3.RVData) + end + else + RVPrint1.SetFooter(nil); + RVPrint1.LeftMarginMM := StrToIntDef(txtLeft.Text,0); + RVPrint1.RightMarginMM := StrToIntDef(txtRight.Text,0); + RVPrint1.TopMarginMM := StrToIntDef(txtTop.Text,0); + RVPrint1.BottomMarginMM := StrToIntDef(txtBottom.Text,0); + RVPrint1.HeaderYMM := StrToIntDef(txtHeader.Text,0); + RVPrint1.FooterYMM := StrToIntDef(txtFooter.Text,0); + RVPrint1.FormatPages(rvdoALL); +end; + +procedure TForm1.New1Click(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit2.Clear; + RichViewEdit3.Clear; + RichViewEdit1.DeleteUnusedStyles(True,True,True); + RichViewEdit2.DeleteUnusedStyles(True,True,True); + RichViewEdit3.DeleteUnusedStyles(True,True,True); + RichViewEdit1.Format; + RichViewEdit2.Format; + RichViewEdit3.Format; +end; + +procedure TForm1.OpenFile(const FileName: String); +begin + RichViewEdit1.Clear; + RichViewEdit2.Clear; + RichViewEdit3.Clear; + RichViewEdit1.DeleteUnusedStyles(True,True,True); + RichViewEdit2.DeleteUnusedStyles(True,True,True); + RichViewEdit3.DeleteUnusedStyles(True,True,True); + RichViewEdit1.RTFReadProperties.SetHeader(RichViewEdit2.RVData); + RichViewEdit1.RTFReadProperties.SetFooter(RichViewEdit3.RVData); + RichViewEdit1.LoadRTF(FileName); + RichViewEdit1.Format; + RichViewEdit2.Format; + RichViewEdit3.Format; + txtHeader.Text := IntToStr(RichViewEdit1.RTFReadProperties.HeaderYMM); + txtFooter.Text := IntToStr(RichViewEdit1.RTFReadProperties.FooterYMM); +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + OpenFile(ExtractFilePath(Application.ExeName)+'doc.rtf'); +end; + +procedure TForm1.Open1Click(Sender: TObject); +begin + if OpenDialog1.Execute then + OpenFile(OpenDialog1.FileName); +end; + +procedure TForm1.PrintPreview1Click(Sender: TObject); +var frm: TfrmPreview; +begin + PreparePrinting; + frm := TfrmPreview.Create(Application); + frm.rvpp.RVPrint := RVPrint1; + frm.Button1Click(nil); + frm.ShowModal; + frm.Free; +end; + +procedure TForm1.Print1Click(Sender: TObject); +var PrintIt: Boolean; +begin + {$IFDEF RICHVIEWDEF3} + PrintIt := PrinterSetupDialog1.Execute; + {$ELSE} + PrintIt := True; + {$ENDIF} + if PrintIt then begin + RVPrint1.AssignSource(RichViewEdit1); + RVPrint1.FormatPages(rvdoALL); + if RVPrint1.PagesCount>0 then + RVPrint1.Print('RichView Edit Demo',1,False); + end; +end; + +procedure TForm1.Exit1Click(Sender: TObject); +begin + Close; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Headers/doc.rtf b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/doc.rtf new file mode 100644 index 0000000..a0a9e46 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/Headers/doc.rtf @@ -0,0 +1,139 @@ +{\rtf1\ansi\ansicpg1251\uc1 \deff0\deflang1049\deflangfe1049{\fonttbl{\f0\froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset204\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f34\froman\fcharset0\fprq2 Times New Roman;}{\f32\froman\fcharset238\fprq2 Times New Roman CE;} +{\f35\froman\fcharset161\fprq2 Times New Roman Greek;}{\f36\froman\fcharset162\fprq2 Times New Roman Tur;}{\f37\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f38\froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f39\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f50\fmodern\fcharset0\fprq1 Courier New;}{\f48\fmodern\fcharset238\fprq1 Courier New CE;}{\f51\fmodern\fcharset161\fprq1 Courier New Greek;}{\f52\fmodern\fcharset162\fprq1 Courier New Tur;} +{\f53\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f54\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f55\fmodern\fcharset186\fprq1 Courier New Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255; +\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0; +\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{ +\s15\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext15 header;}{\s16\ql \li0\ri0\widctlpar +\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext16 footer;}{\*\cs17 \additive \ul\cf2 \sbasedon10 Hyperlink;}}{\*\listtable{\list\listtemplateid-1480431944 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid-635391706\'01\u-3929 ?;}{\levelnumbers;}\f14\fs24\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\chbrdr\brdrnone\brdrcf1 +\chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li1080\jclisttab\tx1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f14\chbrdr +\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li1800\jclisttab\tx1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747265 +\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li2520\jclisttab\tx2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext +\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li3240\jclisttab\tx3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0 +{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f14\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li3960\jclisttab\tx3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li4680\jclisttab\tx4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li5400\jclisttab\tx5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f14\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li6120\jclisttab\tx6120 }{\listname ;}\listid1157529120}} +{\*\listoverridetable{\listoverride\listid1157529120\listoverridecount0\ls1}}{\info{\author Sergey}{\operator Sergey}{\creatim\yr2002\mo10\dy23\hr20\min29}{\revtim\yr2002\mo10\dy23\hr21\min1}{\version5}{\edmins6}{\nofpages2}{\nofwords500}{\nofchars2851} +{\nofcharsws0}{\vern8249}}\paperw11906\paperh16838\margl1701\margr850\margt1134\margb1134 \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1701 +\dgvorigin1134\dghshow1\dgvshow1\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd +\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl {\header \pard\plain \s15\qr \li720\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {{\*\shppict{\pict{\*\picprop\shplid1026{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}} +{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1111\pich953\picwgoal630\pichgoal540\pngblip\bliptag-119480166{\*\blipuid f8e0e09a38b660bbe813b3241ade2f82} +89504e470d0a1a0a0000000d494844520000002a000000240803000000c8175819000000017352474200aece1ce900000300504c544500000080000000800080 +8000000080800080008080c0c0c0c0dcc0a6caf00404040808080c0c0c1111111616161c1c1c2222222929295555554d4d4d424242393939ff7c80ff5050d600 +93ccecffefd6c6e7e7d6ada990330000660000990000cc0000003300333300663300993300cc3300ff3300006600336600666600996600cc6600ff6600009900 +339900669900999900cc9900ff990000cc0033cc0066cc0099cc00cccc00ffcc0066ff0099ff00ccff00000033330033660033990033cc0033ff003300333333 +3333663333993333cc3333ff3333006633336633666633996633cc6633ff6633009933339933669933999933cc9933ff993300cc3333cc3366cc3399cc33cccc +33ffcc3333ff3366ff3399ff33ccff33ffff33000066330066660066990066cc0066ff0066003366333366663366993366cc3366ff3366006666336666666666 +996666cc6666009966339966669966999966cc9966ff996600cc6633cc6699cc66cccc66ffcc6600ff6633ff6699ff66ccff66ff00cccc00ff00999999339999 +0099cc0099000099333399660099cc3399ff0099006699336699663399996699cc6699ff3399339999669999999999cc9999ff999900cc9933cc9966cc6699cc +99cccc99ffcc9900ff9933ff9966cc9999ff99ccff99ffff990000cc3300996600cc9900cccc00cc0033993333cc6633cc9933cccc33ccff33cc0066cc3366cc +6666999966cccc66ccff66990099cc3399cc6699cc9999cccc99ccff99cc00cccc33cccc66cccc99ccccccccccffcccc00ffcc33ffcc66ff9999ffccccffccff +ffcc3300cc6600ff9900ff0033cc3333ff6633ff9933ffcc33ffff33ff0066ff3366ff6666cc9966ffcc66ffff66cc0099ff3399ff6699ff9999ffcc99ffff99 +ff00ccff33ccff66ccff99ccffccccffffccff33ffff66ffcc99ffffccffffff666666ff66ffff666666ffff66ff66ffffa500215f5f5f777777868686969696 +cbcbcbb2b2b2d7d7d7dddddde3e3e3eaeaeaf1f1f1f8f8f8fffbf0a0a0a4808080ff000000ff00ffff000000ffff00ff00ffffffffff58224eb7000000097048 +597300000ec400000ec601a71d6c990000016f49444154384fc59441ae84300c4359e72a5d72945e87bbf36d27294961d6bf42a3013d1c3b293deebaacdd6d37 +472387ddbfe98a9a0dc3faa55c509083d707aa67151d58f39354a98eda848597aa4d0954af909cf4bbb1205fa88d490f0d45118a7655c8d16b47ed4625906ccc +6380a0a3c52e8bc7b21e0b4f41860516158ab0ecccd62c97965b150535f14c66dbb4348274eb1e5185e0de2c8d6be5528fd03db7da62dd6a404587c3c96e7bc0 +43a91e6d321217feb5580c42b7b90f33bc6f8d8e6aa0be0d29eb8d53475eb17cf622a922a72c1d9bb87abddca3d0ccb26655fa8a57afeb8ada40e12f43c974a2 +7683220a36e7a92c8ae46d8d69813a09e2d7f3cb8166174e726babf879ca7fecab9855b10a552f0c8eba500d593661858bcf50c54fb7802b66c5febac9f5bd43 +55626936db057491f1ad1d2aaf45274f678bef071592680eccc7dbbe48c6328ad1242710fb60ced771c0c12e812542a3dfe8fb3cf93ae4daa1f9bcf2efe8d7e1fd07d9f1db775a28335a0000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1111\pich953\picwgoal630\pichgoal540\wmetafile8\bliptag-119480166\blipupi96{\*\blipuid f8e0e09a38b660bbe813b3241ade2f82} +0100090000035e05000000003a05000000000400000003010800050000000b0200000000050000000c0224002a00050000000701040000003a050000430f2000 +cc00000024002a000000000024002a0000000000280000002a00000024000000010008000000000030060000c40e0000c60e0000000100000001000000000000 +33000000660000008000000099000000cc000000ff00000000003300330033006600330099003300cc00330000006600330066006600660099006600cc006600 +ff006600000080008000800000009900330099006600990099009900cc009900ff0099002100a5000000cc003300cc006600cc009900cc00cc00cc00ff00cc00 +9300d6000000ff003300ff006600ff009900ff00cc00ff00ff00ff0004040400080808000c0c0c0011111100161616001c1c1c00222222002929290000330000 +333300006633000099330000cc33000000333300333333006633330099333300cc333300ff33330000336600333366006633660099336600cc336600ff336600 +00339900333399006633990099339900cc339900ff3399000033cc003333cc006633cc009933cc00cc33cc00ff33cc000033ff003333ff006633ff009933ff00 +cc33ff00ff33ff0039393900424242004d4d4d005050ff00555555005f5f5f0000660000336600006666000099660000cc660000ff6600000066330033663300 +6666330099663300cc663300ff66330000666600336666006666660099666600cc666600ff66660000669900336699006666990099669900cc669900ff669900 +0066cc003366cc006666cc009966cc00cc66cc00ff66cc000066ff003366ff006666ff009966ff00cc66ff00ff66ff0077777700807cff000080000080800000 +0080800080808000868686009696960000990000339900006699000099990000cc990000ff99000000993300339933006699330099993300cc993300ff993300 +00996600339966006699660099996600cc996600ff99660000999900339999006699990099999900cc999900ff9999000099cc003399cc006699cc009999cc00 +cc99cc00ff99cc000099ff003399ff006699ff009999ff00cc99ff00ff99ff00a4a0a00090a9ad00b2b2b200c0c0c000f0caa600cbcbcb0000cc000033cc0000 +66cc000099cc0000cccc0000ffcc000000cc330033cc330066cc330099cc3300cccc3300ffcc330000cc660033cc660066cc660099cc6600cccc6600ffcc6600 +00cc990033cc990066cc990099cc9900cccc9900ffcc990000cccc0033cccc0066cccc0099cccc00cccccc00ffcccc0000ccff0033ccff0066ccff0099ccff00 +ccccff00ffccff00c6d6ef00d7d7d700c0dcc000dddddd00e3e3e300d6e7e700eaeaea00ffeccc00f1f1f100f8f8f800f0fbff0000ff000066ff000099ff0000 +ccff0000ffff000033ff330066ff330099ff3300ccff3300ffff330000ff660033ff660066ff660099ff6600ccff6600ffff660000ff990033ff990066ff9900 +99ff9900ccff9900ffff990000ffcc0033ffcc0066ffcc0099ffcc00ccffcc00ffffcc0000ffff0033ffff0066ffff0099ffff00ccffff00ffffff00ffffffff +ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff2400ffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff6600ffffff00ffffffffffffffffffffffffffffffff +ff000000ffffffffffffffffffffffffffffffffffff9900ffffff0000ffff0000ffffff00ffffffffffffffff0000a4a4ffffffffffffffffffffffffffffff +ffffff00ff000000e40000ffe400ff00e400ffffffffffff000000a4a4ffffffffffffffffffffffffffffffffff1c0000e40000e4e400e4e4e40000e4e400ff +ffffffff0000ff00002bffff0000ffffffffffffffffffffffff330000e4e4e4e4e4e4e4e4e40000e4e40000ffffff0000ffff0000000000000000ffffffffff +ffffffffffff9900ff00e4e4e4afe4e4e4afe4e4e4e4e400ffffff0000ffffff0000a4a4a4a40001000000ffffffffffffffff00ff00e4e4afe4af00e4e4afe4 +e4afe4e400ff0000ffffffff000000a4a4a4a4000000000000ffffffffff0000ff0000e4e4e4e4af0000afe4e4e4afe4ffff00ffffffff0000a40000a4a4a4a4 +a4a4a4000000ffffffff3300ffffffff000000e4e4afaf0000000000000000ffffffff00a4a4a40000a4a4a4a4a4a4a4a4a400ffffff9900ffffffffff00e4e4 +afe4e4e4e4e4afe4ff00ffffffff00a4a4a4a471007171a4a4a4a4a4a4a400ffffffff00ffffffffff00ffe4e40000e4e4e4e400ff00ffffff00a4a4a47171a4 +000071717171a4a4a4a40000ffff0000ffffffffffffffff000000e4e4e400ffff00ffffff00a4a47171a4a4a400cea4a4a4a4a4a4a4a400ffff3300ffffffff +ffffffffffff00e40000ffffff0000ffff00a4a4a4a4a4a4a40000a4a4a4a4a4a4a4a400ffff9900ffffffffffffffffffffffffffffffffff0000ffff00a400 +00ffa4a4a4000071a4a40000000000ffffffff00ffffffffffffffffffffffffffffffff00000000ffff00ffffffa4a47100007171717171000000ffffff0000 +ffffffffffffffffffffff00000071710071ff00ffffffffffffa4a4a4a400a4717171717171a40000ff6600ffffffffffffffffffff000071717100007100ff +0000ffffff00a471a4a4a400a4a4a4a4a471a4a400ffcc00ffffffffffffffffffff00717171a400a4717100ffffffffff00a471a4a4a40000a4a4a4a4a4a4a4 +0000ff00ffffffffffffffffffffff0000717100a4717100ffffffffff00a4a4a40000a400a4a4a4a4a4a40000ffff00ffffffffffffffffffffff0071710071 +71a4717100ffffffff00a4a4000000a4710071a4000000ffffff6600ffffffffffffffffffff0071717100717171717100ffffffff00000000ff00a471a40071 +71a40000ffff9900ffffffffffffffffffff007171a4a4a47100007100ffffffffff00ffffff00a4a4a4a400a47171a400ffff00ffffffffffffffffff007171 +717171a47171000000ffffffffffffffffff00a4a4a4a4a4a4a4a4a4a400ffffffffffffffffffffff007100717171a4717100ffffffffffffffffffffff00ff +a400a4a40000000000ffffffffffffffffffffffffffff0071a47171717100ffffffffffffffffffffffff0000ff00a4a40000ffffffffffffffffffffffffff +ffffff71a400a400007100ffffffffffffffffffffffffffffff00a4a4a400ffffffffffffffffffffffffffffff00717100a4710000ffffffffffffffffffff +ffffffffffffff00a4a400ffffffffffffffffffffffffffffff0071717171a400ffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff +ffffffffffff0000717100717100ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff00007100000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007100ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05000000070101000000030000000000}}}{\b +Printing Demo. This is a header +\par }}{\footer \trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 +\trftsWidth2\trwWidth5000\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth2\clwWidth4000 \cellx7549\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth2\clwWidth1000 \cellx9463\pard\plain \s16\ql \li0\ri0\widctlpar\intbl\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\field{\*\fldinst { HYPERLINK "http://www.trichview.com" }{{\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b02000000170000001900000068007400740070003a002f002f007700770077002e007400720069006300680076006900650077002e0063006f006d000000e0c9ea79f9bace118c8200aa004ba90b3400000068007400740070003a002f002f007700770077002e00740072006900 +6300680076006900650077002e0063006f006d002f0000000000}}}{\fldrslt {\cs17\ul\cf2 http://www.trichview.com}}}{\cell }{\b This is a footer\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 +\trftsWidth2\trwWidth5000\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth2\clwWidth4000 \cellx7549\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth2\clwWidth1000 \cellx9463\row }\pard\plain \s16\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { +\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}} +{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8 +\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s15\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b From the Delphi help file: +\par +\par }{When you start Delphi, you are immediately placed within the integrated development environment, also called the IDE. This environment provides all the tools you need to design, develop, test, debug, and deploy applications. +\par Delphi\rquote s development environme +nt includes a visual form designer, Object Inspector, Object TreeView, Component palette, Project Manager, source code editor, and debugger among other tools. Some tools may not be included in all versions of the product. You can move freely from the visu +a +l representation of an object (in the form designer), to the Object Inspector to edit the initial runtime state of the object, to the source code editor to edit the execution logic of the object. Changing code-related properties, such as the name of an ev +ent handler, in the Object Inspector automatically changes the corresponding source code. In addition, changes to the source code, such as renaming an event handler method in a form class declaration, is immediately reflected in the Object Inspector. + +\par +\par The IDE supports application development throughout the stages of the product life cycle\emdash from design to deployment. Using the tools in the IDE allows for rapid prototyping and shortens development time. +\par }\pard \s15\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {A more complete overview of the development environment is presented in the Quick Start manual included with the product. +\par +\par }\pard \s15\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {Delphi includes all the tools necessary to start designing applications: +\par +\par A blank window, known as a form, on which to design the UI for your application. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}}\pard \s15\ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0 { +Extensive class libraries with many reusable objects. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}An Object Inspector for examining and changing object traits. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}A Code editor that provides direct access to the underlying program logic. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}A Project Manager for managing the files that make up one or more projects. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}Many other tools such as an image editor on the toolbar and an integrated debugger on menus to support application development in the IDE. + +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}Command-line tools including compilers, linkers, and other utilities. +\par }\pard \s15\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 { +\par You can use Delphi to design any kind of 32-bit application\emdash from general-purpose utilities to sophisticated data access programs or distributed applications. Delphi\rquote +s database tools and data-aware components let you quickly develop powerful desktop database and client/server applications. Using Delphi\rquote +s data-aware controls, you can view live data while you design your application and immediately see the results of database queries and changes to the application interface. +\par +\par Creating applications introduces Delphi\rquote s support for different types of applications. +\par Many of the objects provided in the class library are accessible in the IDE from the Component palette. The Component palette shows all of the controls, both visual and nonvisual, that you can place on a form. Each tab contains components grouped +by functionality. By convention, the names of objects in the class library begin with a T, such as TStatusBar. +\par +\par One of the revolutionary things about Delphi is that you can create your own components using Object Pascal. Most of the components provided are + written in Object Pascal. You can add components that you write to the Component palette and customize the palette for your use by including new tabs if needed. +\par }\pard \s15\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {You can also use Delphi for cross platform development on both Linux and Windows by using tCLX +. CLX contains a set of classes that, if used instead of those in the VCL, allow your program to port between Windows and Linux. +\par }} \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Printing.bdsproj b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Printing.bdsproj new file mode 100644 index 0000000..42359e7 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Printing.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Printing.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Printing.dpr b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Printing.dpr new file mode 100644 index 0000000..60836a3 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Printing.dpr @@ -0,0 +1,13 @@ +program Printing; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Printing.res b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Printing.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Printing.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Unit1.dfm new file mode 100644 index 0000000..9ee8a54 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Unit1.pas new file mode 100644 index 0000000..d0a1e52 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/Printing/Unit1.pas @@ -0,0 +1,300 @@ +unit Unit1; +{$I RV_Defs.inc} +{==============================================================================} +{ RichView Printing Demo. } +{------------------------------------------------------------------------------} +{ Note: } +{ This demo does not show how to create user interface to setup margins. } +{------------------------------------------------------------------------------} +{ Note: } +{ This demo does not show how to implement custom scaling of print preview. } +{ Look at the example of RichViewEdit based editor. } +{==============================================================================} + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, ExtCtrls, ComCtrls, PtblRV, CRVPP, RVPP, RVStyle, + ImgList, + StdCtrls, CtrlImg; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + Panel1: TPanel; + RichView1: TRichView; + RVPrintPreview1: TRVPrintPreview; + RVPrint1: TRVPrint; + Image1: TImage; + Panel2: TPanel; + Button1: TButton; + Edit1: TEdit; + RVStyle1: TRVStyle; + Label1: TLabel; + PrintDialog1: TPrintDialog; + btnPrint: TButton; + Image2: TImage; + StatusBar1: TStatusBar; + Panel3: TPanel; + ScrollBar1: TScrollBar; + procedure FormCreate(Sender: TObject); + procedure ScrollBar1Change(Sender: TObject); + procedure RVPrint1PrintComponent(Sender: TCustomRVPrint; PrintMe: TControl; + var ComponentImage: TBitmap); + procedure btnPrintClick(Sender: TObject); + procedure RVPrint1Formatting(Sender: TCustomRichView; PageCompleted: Integer; + Step: TRVPrintingStep); + procedure RVPrint1SendingToPrinter(Sender: TCustomRichView; + PageCompleted: Integer; Step: TRVPrintingStep); + procedure RVPrint1PagePrepaint(Sender: TRVPrint; PageNo: Integer; + Canvas: TCanvas; Preview: Boolean; PageRect, PrintAreaRect: TRect); + procedure PageControl1Change(Sender: TObject); + procedure Panel3Resize(Sender: TObject); + private + { Private declarations } + PreviewCreated: Boolean; + procedure UpdatePreview; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +const longtext:String = 'A simple way of describing Delphi is a sophisticated Pascal compiler.'+ + ' Delphi’s roots lie in Borland’s Turbo Pascal, introduced in the mid-1980s.'+ + ' This view of Delphi, however, doesn’t capture the real power of Delphi.'+ + ' Object Pascal, the object-oriented extensions to Pascal, is the underlying'+ + ' language of Delphi. The Visual Component Library, or VCL, is a hierarchy of '+ + 'Object Pascal objects that allow you to design programs. A better way of describing '+ + 'Delphi is an Object Pascal-based visual development environment.'#13+ + + 'The VCL is intimately tied to the Delphi IDE, and is what gives you the ability '+ + 'to quickly develop applications. The Component palette and Object Inspector allow '+ + 'you to drop VCL components on forms and then manipulate the properties and events of '+ + 'those controls without having to write a single line of code.'#13+ + + 'Despite its name, the VCL is not entirely made up of visual components. '+ + 'In fact, of the over 600 objects in the VCL, most are not visual. '+ + 'The Delphi IDE allows you to visually add some nonvisual components to '+ + 'your programs. For example, if you wanted to write a database application '+ + 'that connected to a table, you would drop a TDataSource component on your '+ + 'form. TDataSource is a nonvisual component, but is represented on the form by '+ + 'an icon (which doesn’t show up at runtime), and you can manipulate the properties '+ + 'and events of TDataSource in the Object Inspector just as you would a visual control.'#13+ + + 'All VCL objects, and in fact all objects in Object Pascal, are derived from TObject. '+ + 'TObject is unique in that it is an abstract object that has no properties or events, '+ + 'only methods that allow you to derive objects from this base class. Use TObject as the '+ + 'immediate base class when writing simple objects that are not components. Components are '+ + 'objects that you can manipulate at design time. All components in the VCL are derived '+ + 'from the abstract component type TComponent. The VCL components you will likely use the '+ + 'most are the VCL’s controls, such as TForm or TSpeedButton. Controls are visual components'+ + ' derived from the abstract component type TControl.'#13+ + + 'You can use Delphi to create Object Pascal objects without using the VCL, '+ + 'although by creating any objects in Object Pascal, both your objects and VCL '+ + 'objects will share a common ancestor in TObject. However, by deriving new objects '+ + 'from VCL object, much of the work in designing applications is done for you by Delphi. '+ + 'For example, if you wanted to use a progress bar in your application but didn’t like '+ + 'TProgressBar, Delphi’s control that creates a progress bar, you could create a new '+ + 'object based on TProgressBar and override its properties, events, or methods.'; +var gr: TGraphic; +begin + + // Creating sample document + RichView1.AddNL('Printing Demo',1,2); + RichView1.AddTextNL(longtext,0,0,0); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,1,1); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,2,2); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,3,3); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,4,4); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,5,5); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,7,7); + + RichView1.AddControlEx('', Panel2, 2, rvvaBaseline); + + gr := TIcon.Create; + gr.Assign(Image1.Picture); + RichView1.AddPictureEx( '', gr, -1, rvvaBaseLine); + + gr := TMetafile.Create; + gr.Assign(Image2.Picture); + RichView1.AddPictureEx( '', gr, -1, rvvaBaseLine); + + // Created... + RichView1.Format; + + // Assigning margins: 20 mm. + RVPrint1.LeftMarginMM := 20; + RVPrint1.RightMarginMM := 20; + RVPrint1.BottomMarginMM := 20; + // Top margin: 25 mm. + RVPrint1.TopMarginMM := 25; + + // Making printable area on preview visible... + RVPrintPreview1.MarginsPen.Style := psDot; +end; +{------------------------------------------------------------------------------} +{ Switching page to "Preview" } +{------------------------------------------------------------------------------} +procedure TForm1.PageControl1Change(Sender: TObject); +begin + if (PageControl1.ActivePage.PageIndex=1) and not PreviewCreated then begin + PreviewCreated := True; + UpdatePreview; + end; + RVPrintPreview1.ZoomMode := rvzmFullPage; +end; +{------------------------------------------------------------------------------} +procedure TForm1.UpdatePreview; +begin + Screen.Cursor := crHourglass; + // Assigning document for printing: + RVPrint1.AssignSource(RichView1); + // Formatting pages: + RVPrint1.FormatPages(rvdoAll); + // Updating user interface for preview: + Scrollbar1.Min := 1; + Scrollbar1.Position := 1; + {$IFDEF RICHVIEWDEF4} + Scrollbar1.PageSize := 1; + {$ENDIF} + Scrollbar1.Max := RVPrint1.PagesCount; + // Preview will show full page: + RVPrintPreview1.ZoomMode := rvzmFullPage; + // Preview will show 1st page: + RVPrintPreview1.First; + Screen.Cursor := crDefault; +end; +{------------------------------------------------------------------------------} +{ Page turning: } +{------------------------------------------------------------------------------} +procedure TForm1.ScrollBar1Change(Sender: TObject); +begin + if Scrollbar1.Position>0 then begin + RVPrintPreview1.PageNo := Scrollbar1.Position; + StatusBar1.SimpleText := Format('Page %d of %d', + [RVPrintPreview1.PageNo, RVPrint1.PagesCount]); + end; +end; +{------------------------------------------------------------------------------} +{ Event: printing inserted components. } +{ We need to create bitmap, draw component onto it, } +{ and assign this bitmap to ComponentImage parameter. } +{ Bitmap should have the same size as component (if not, it will be scaled) } +{ CtrlImg.pas from RichView package has useful function DrawControl. } +{------------------------------------------------------------------------------} +procedure TForm1.RVPrint1PrintComponent(Sender: TCustomRVPrint; + PrintMe: TControl; var ComponentImage: TBitmap); +begin + ComponentImage := DrawControl(PrintMe); + // actually, DrawControl is used by default. You need to process this + // event only if you are not satisfied with its results. +end; +{------------------------------------------------------------------------------} +{ Printing... } +{------------------------------------------------------------------------------} +procedure TForm1.btnPrintClick(Sender: TObject); +begin + if not PreviewCreated then begin + PreviewCreated := True; + UpdatePreview; + end; + // do not print empty document! + if RichView1.ItemCount=0 then + exit; + PrintDialog1.MinPage := 1; + PrintDialog1.MaxPage := RVPrint1.PagesCount; + PrintDialog1.FromPage := 1; + PrintDialog1.ToPage := RVPrint1.PagesCount; + // we can print a whole document or specified pages: + if PrintDialog1.Execute then begin + // it's possible that current printer was changed. + // so we need to reformat document and update preview: + UpdatePreview; + case PrintDialog1.PrintRange of + prAllPages: + RVPrint1.Print( 'Test', PrintDialog1.Copies, PrintDialog1.Collate); + prPageNums: + RVPrint1.PrintPages(PrintDialog1.FromPage, PrintDialog1.ToPage, + 'Test', PrintDialog1.Copies, PrintDialog1.Collate); + end; + end; +end; +{------------------------------------------------------------------------------} +{ Event: displaying formatting progress... } +{------------------------------------------------------------------------------} +procedure TForm1.RVPrint1Formatting(Sender: TCustomRichView; + PageCompleted: Integer; Step: TRVPrintingStep); +begin + case Step of + rvpsStarting: + StatusBar1.SimpleText := 'Repaginating...'; + rvpsProceeding: + StatusBar1.SimpleText := Format('Repaginating (%d)',[PageCompleted]); + rvpsFinished: + StatusBar1.SimpleText := ''; + end; +end; +{------------------------------------------------------------------------------} +{ Event: displaying printing (spooling) progress... } +{------------------------------------------------------------------------------} +procedure TForm1.RVPrint1SendingToPrinter(Sender: TCustomRichView; + PageCompleted: Integer; Step: TRVPrintingStep); +begin + case Step of + rvpsStarting: + StatusBar1.SimpleText := 'Starting...'; + rvpsProceeding: + StatusBar1.SimpleText := Format('Printing (%d)',[PageCompleted]); + rvpsFinished: + StatusBar1.SimpleText := ''; + end; +end; +{------------------------------------------------------------------------------} +{ (NEW) Event: prepaint on page } +{------------------------------------------------------------------------------} +procedure TForm1.RVPrint1PagePrepaint(Sender: TRVPrint; PageNo: Integer; + Canvas: TCanvas; Preview: Boolean; PageRect, PrintAreaRect: TRect); +var w,h: Integer; + s: String; +begin + // This is a temporary solution for drawing page numbers and similalar stuff + + // This example outputs string just above RichView contents + + s := Format ('-- Page %d of %d --', [PageNo, Sender.PagesCount]); + Canvas.Brush.Style := bsClear; + Canvas.Font.Assign(RVStyle1.TextStyles[0]); + w := Canvas.TextWidth(s); + h := Canvas.TextHeight(s); + TextOut(Canvas.Handle, (PrintAreaRect.Right+PrintAreaRect.Left-w) div 2, + PrintAreaRect.Top - h - 10, PChar(s), Length(s)); +end; + +procedure TForm1.Panel3Resize(Sender: TObject); +begin + // In earlier versions of Delphi scrollbars do not have Align property... + // Aligning to the right side of panel + ScrollBar1.SetBounds(Panel3.ClientWidth-ScrollBar1.Width, 0, + ScrollBar1.Width, Panel3.ClientHeight); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/ReportHelper.bdsproj b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/ReportHelper.bdsproj new file mode 100644 index 0000000..e4c8ce8 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/ReportHelper.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + ReportHelper.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/ReportHelper.dpr b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/ReportHelper.dpr new file mode 100644 index 0000000..aa2cd38 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/ReportHelper.dpr @@ -0,0 +1,13 @@ +program ReportHelper; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/ReportHelper.res b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/ReportHelper.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/ReportHelper.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/Unit1.dfm new file mode 100644 index 0000000..adcea3c Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/Unit1.pas new file mode 100644 index 0000000..3d97961 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Printing/ReportHelper/Unit1.pas @@ -0,0 +1,190 @@ +{------------------------------------------------------------------------------- + Demo: printing documents using TRVReportHelper. + This demo loads RVF file in rvh.RichView and prints it. + rvh2 is used to print header: (- page no -). + + Advantages of this method: + - possibility to make custom complex headers and footers, different for + different pages; + - possibility to implement nonstandard layouts, printing several documents + in different areas on the same page,etc + Disadvantages of this method: + - no preview (at least, not with TRVPrintPreview) + - you need to calculate all margins yourself + + ------------------------------------------------------------------------------ + + For example, you can open RVF file created by ActionText (including readme.rvf). + Do not try to load file from the editor demo (Demos\*\Editors\Editor 1) - it does + not contain a collection of styles, so it can be opened only by + applications having that collection of styles. + +-------------------------------------------------------------------------------} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Printers, Dialogs, + RVScroll, RichView, PtblRV, RVReport, StdCtrls, RVStyle; + +type + TForm1 = class(TForm) + Button1: TButton; + rvh: TRVReportHelper; + RVStyle1: TRVStyle; + OpenDialog1: TOpenDialog; + Button2: TButton; + rvh2: TRVReportHelper; + RVStyle2: TRVStyle; + Button3: TButton; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + with rvh.RichView do begin + RVFOptions := [rvfoSavePicturesBody,rvfoSaveControlsBody,rvfoSaveBinary, + rvfoSaveBack,rvfoLoadBack,rvfoSaveTextStyles,rvfoSaveParaStyles, + rvfoSaveLayout,rvfoLoadLayout]; + Options := Options + [rvoTagsArePChars]; + RVFParaStylesReadMode := rvf_sInsertMerge; + RVFTextStylesReadMode := rvf_sInsertMerge; + Style := RVStyle1; + end; + with rvh2.RichView do begin + Style := RVStyle2; + end; +end; + +procedure TForm1.Button1Click(Sender: TObject); +begin + if OpenDialog1.Execute then begin + rvh.RichView.Clear; + rvh.RichView.LoadRVF(OpenDialog1.FileName); + end; +end; + +// print one column +procedure TForm1.Button2Click(Sender: TObject); +var DocWidth, DocHeight, DocLeft, DocTop, HeaderTop, LineY, + PageNo: Integer; +begin + if rvh.RichView.ItemCount=0 then begin + Application.MessageBox('Document is empty!', 'Empty', 0); + exit; + end; + Printer.Title := 'ReportHelper Test'; + Printer.BeginDoc; + try + PageNo := 1; + DocLeft := Printer.PageWidth div 20; // margins = 5% + DocWidth := Printer.PageWidth - DocLeft*2; + HeaderTop := Printer.PageHeight div 20; // margins = 5% + rvh.Init(Printer.Canvas, DocWidth); + while True do begin + // creating & formatting header + rvh2.RichView.Clear; + rvh2.RichView.AddFmt('- %d -', [PageNo], 0, 1); + rvh2.Init(Printer.Canvas, DocWidth); + rvh2.FormatNextPage(Printer.PageHeight); + DocTop := HeaderTop+rvh2.EndAt+HeaderTop div 2; + // formatting next page of document + DocHeight := Printer.PageHeight-DocTop-HeaderTop; + if not rvh.FormatNextPage(DocHeight) then + break; + // starting new page + if PageNo>1 then + Printer.NewPage; + // drawing line between header and document + with Printer.Canvas do begin + Pen.Style := psInsideFrame; + Pen.Width := 10; + Pen.Color := clBlack; + LineY := HeaderTop+rvh2.EndAt+HeaderTop div 4; + MoveTo(DocLeft*2, LineY); + LineTo(Printer.PageWidth-DocLeft*2, LineY); + end; + // drawing header and document + rvh2.DrawPageAt(DocLeft, HeaderTop, 1, Printer.Canvas, False, rvh2.EndAt); + rvh.DrawPageAt(DocLeft, DocTop, PageNo, Printer.Canvas, False, DocHeight); + inc(PageNo); + end; + finally + Printer.EndDoc; + end; +end; + +// print two columns +procedure TForm1.Button3Click(Sender: TObject); +var ColWidth, DocHeight, DocTop, Col1Left, Col2Left, + HeaderLeft, HeaderTop, HeaderWidth, LineY, + PageNo: Integer; +begin + if rvh.RichView.ItemCount=0 then begin + Application.MessageBox('Document is empty!', 'Empty', 0); + exit; + end; + Printer.Title := 'ReportHelper Test'; + Printer.BeginDoc; + try + PageNo := 1; + HeaderLeft := Printer.PageWidth div 20; // margins = 5% + HeaderWidth := Printer.PageWidth - HeaderLeft*2; + HeaderTop := Printer.PageHeight div 20; // margins = 5% + ColWidth := (HeaderWidth-HeaderLeft) div 2; + Col1Left := HeaderLeft; + Col2Left := Col1Left+ColWidth+HeaderLeft div 2; + rvh.Init(Printer.Canvas, ColWidth); + while True do begin + // creating & formatting header + rvh2.RichView.Clear; + rvh2.RichView.AddFmt('- %d -', [PageNo], 0, 1); + rvh2.Init(Printer.Canvas, HeaderWidth); + rvh2.FormatNextPage(Printer.PageHeight); + DocTop := HeaderTop+rvh2.EndAt+HeaderTop div 2; + // formatting the first column of document + DocHeight := Printer.PageHeight-DocTop-HeaderTop; + if not rvh.FormatNextPage(DocHeight) then + break; + // starting new page + if PageNo>1 then + Printer.NewPage; + // drawing line between header and document + with Printer.Canvas do begin + Pen.Style := psInsideFrame; + Pen.Width := 10; + Pen.Color := clBlack; + LineY := HeaderTop+rvh2.EndAt+HeaderTop div 4; + MoveTo(HeaderLeft*2, LineY); + LineTo(Printer.PageWidth-HeaderLeft*2, LineY); + end; + // drawing header and document + rvh2.DrawPageAt(HeaderLeft, HeaderTop, 1, Printer.Canvas, False, rvh2.EndAt); + rvh.DrawPageAt(Col1Left, DocTop, PageNo*2-1, Printer.Canvas, False, DocHeight); + if rvh.FormatNextPage(DocHeight) then + rvh.DrawPageAt(Col2Left, DocTop, PageNo*2, Printer.Canvas, False, DocHeight); + inc(PageNo); + end; + finally + Printer.EndDoc; + end; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Save HTML/HTMLSave.bdsproj b/12.0.4/Demos/Delphi/Assorted/Save HTML/HTMLSave.bdsproj new file mode 100644 index 0000000..64a3bca --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Save HTML/HTMLSave.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + HTMLSave.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Save HTML/HTMLSave.dpr b/12.0.4/Demos/Delphi/Assorted/Save HTML/HTMLSave.dpr new file mode 100644 index 0000000..c34c49f --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Save HTML/HTMLSave.dpr @@ -0,0 +1,13 @@ +program HTMLSave; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Save HTML/HTMLSave.res b/12.0.4/Demos/Delphi/Assorted/Save HTML/HTMLSave.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Save HTML/HTMLSave.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Save HTML/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Save HTML/Unit1.dfm new file mode 100644 index 0000000..e4fa7b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Save HTML/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Save HTML/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Save HTML/Unit1.pas new file mode 100644 index 0000000..a57be39 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Save HTML/Unit1.pas @@ -0,0 +1,345 @@ +unit Unit1; + +interface +{==============================================================================} +{ Demo: } +{ 1. how to load RVF file saved in demo editor. } +{ 2. HTML export with custom saving of images } +{------------------------------------------------------------------------------} +{ Note: Gif images have 256 colors or less. Some pictures may lose quality } +{ when converting to Gifs } +{------------------------------------------------------------------------------} +{ Sergey Tkachenko } +{==============================================================================} + +{ + This demo uses: + for Delphi 3-2006: free Anders Melander's TGifImage: + http://www.torry.net/vcl/graphics/gif/gifimage.exe) + http://www.trichview.com/resources/thirdparty/gifimage.zip (update) + for Delphi 2007+: + Standard Delphi TGifImage +} + + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, StdCtrls, ExtCtrls, RVStyle, OleCtnrs, + ImgList, + ComCtrls, CRVData, CRVFData, RVTable, RVTypes + {$IFDEF RICHVIEWDEF2007} + , GifImg + {$ELSE} + , GifImage + {$ENDIF} + ; + +type + TForm1 = class(TForm) + RichView1: TRichView; + OpenDialog1: TOpenDialog; + Panel1: TPanel; + Button1: TButton; + StatusBar1: TStatusBar; + Button2: TButton; + CheckBox1: TCheckBox; + SaveDialog1: TSaveDialog; + Label1: TLabel; + Edit1: TEdit; + Label2: TLabel; + Edit2: TEdit; + ImageList1: TImageList; + RVStyle1: TRVStyle; + procedure Button1Click(Sender: TObject); + procedure RichView1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + procedure FormCreate(Sender: TObject); + procedure RichView1RVMouseMove(Sender: TObject; id: Integer); + procedure RichView1Jump(Sender: TObject; id: Integer); + procedure RichView1HTMLSaveImage(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; const Path: String; + BackgroundColor: TColor; var Location: String; + var DoDefault: Boolean); + procedure Button2Click(Sender: TObject); + procedure RichView1SaveComponentToFile(Sender: TCustomRichView; Path: string; + SaveMe: TPersistent; SaveFormat: TRVSaveFormat; var OutStr: string); + procedure RichView1SaveHTMLExtra(Sender: TCustomRichView; + Area: TRVHTMLSaveArea; CSSVersion: Boolean; var HTMLCode: String); + procedure RichView1WriteHyperlink(Sender: TCustomRichView; id: Integer; + RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; + var Target, Extras: String); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{==================== Notes about loading from RVF files:======================= +1. In the simplest cases you can just write: RichView1.LoadRVF(); +2. If file contains inserted Delphi Controls, these controls must be registered + with RegisterClasses functions before loading (see FormCreate below) +3. If file contains images from image lists, you need to process + OnRVFImageListNeeded event (see RichView1RVFImageListNeeded below) + If you have several image lists, you can distinguish them using + ImageListTag parameter of this event. +4. You must have the same (or compatible) TRVStyle object assigned to + RichView1.Style as in editor. + Otherwise, you need to set option "Allow adding styles dynamically" + both in richview which saves and in richview which loads RVF + (right-click RichView in Delphi, choose "Settings" in the context menu) +5. If some items in RVF file have character strings associated as items' tags + (rvoTagsArePChars was in editor's Options), you need also set rvoTagsArePChars + in RichView1.Options. +===============================================================================} +{===================== Notes about HTML export ================================= +1. There are 2 methods for saving HTML files: + a) SaveHTML - saving HTML file, where formatting is made by ,, + tags, etc. + b) SaveHTMLEx - saving HTML file, where formatting is made by Cascading + Style Sheet (CSS). +2. Images are saved in separate files. By default, they are saved as JPEGs. +3. By default, images are saved in the same directory as HTML file, and have + names built as Prefix + Number + .JPG. + You can specify your own prefix as a parameter of SaveHTML[Ex]. + You can include subdirectory in prefix (such as 'images\img'), but this + subdirectory will NOT be created automatically. +4. JPEGs do not support transparency. Transparent color (of metafiles, + icons, imagelist images) is replaced with the current background color + (of RichView or table cell or paragraph background) +5. By default, images from imagelists (bullets and hotspot) are saved like + other images, but the same image saved only one time (next occurrences + point to the same image file, if they have the same background color) +6. You can save images yourself using OnHTMLSaveImage event. + You need to store image to file and return its location in 'Location' + parameter. + This demo shows + a) how to save images in GIF-files + b) how to save bullets in a way allowing to use the same image files for + the whole HTML document generated by your application. +7. By default hypertext is not saved. + You can specify destinations of [some/all] hypertext jumps + using OnWriteHyperlink event. +8. By default inserted controls are not saved. + You can save them using OnSaveComponentToFile event +9. You can save additional information in OnSaveHTMLExtra. +===============================================================================} + +procedure TForm1.FormCreate(Sender: TObject); +begin + RegisterClasses([TButton, TEdit, TOleContainer]); + OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName)+'..\..\Editors\Editor 1\'; +end; + +{============================== RVF loading ===================================} +procedure TForm1.Button1Click(Sender: TObject); +begin + if OpenDialog1.Execute then begin + if not RichView1.LoadRVF(OpenDialog1.FileName) then + Application.MessageBox('Error Loading File', nil, MB_OK); + RichView1.Format; + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.RichView1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + il := ImageList1; +end; +{============================ Hypertext testing ===============================} +procedure TForm1.RichView1RVMouseMove(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + if id=-1 then + StatusBar1.SimpleText := '' + else begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + StatusBar1.SimpleText := PChar(RVData.GetItemTag(ItemNo)); + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + StatusBar1.SimpleText := PChar(RVData.GetItemTag(ItemNo)); + Application.MessageBox(PChar(StatusBar1.SimpleText),'Click', 0); +end; +{============================ SAVING TO HTML ==================================} +procedure TForm1.Button2Click(Sender: TObject); +var SaveOptions: TRVSaveOptions; +var r: Boolean; +begin + if SaveDialog1.Execute then begin + Screen.Cursor := crHourglass; + if Checkbox1.Checked then + SaveOptions := [rvsoOverrideImages] + else + SaveOptions := []; + case SaveDialog1.FilterIndex of + 1: + r := RichView1.SaveHTML(SaveDialog1.FileName, + 'Demo File',Edit2.Text, SaveOptions); + 2: + r := RichView1.SaveHTMLEx(SaveDialog1.FileName, + 'Demo File',Edit1.Text, '','','',SaveOptions); + else + r := False; + end; + Screen.Cursor := crDefault; + if not r then + Application.MessageBox('Error during saving', 'Error', 0); + end; +end; +{------------------------------------------------------------------------------} +// Event: overriding default saving of images: saving as Gifs +procedure TForm1.RichView1HTMLSaveImage(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; const Path: String; + BackgroundColor: TColor; var Location: String; var DoDefault: Boolean); +var gif: TGifImage; + wmf: TMetafile; + gr: TGraphic; + s: TRVAnsiString; + AVAlign: TRVVAlign; + ATag: Integer; + ImageList: TCustomImageList; + ImageIndex: Integer; + Canvas: TMetafileCanvas; +begin + // Parameters: + //The item to save is defined by the pair (RVData, ItemNo). + // It is the ItemNo-th item in RVData object. + // RVData may be RichView.RVData, or cell, or RVData of cell inplace editor. + // Path - destination directory of HTML file. + // BackgroundColor - color of background under this item. Not used here + // because GIFs support a true transparency. + // Location - output parameter to specify filename of image file + // DoDefault - set to false if you save this item as image yourself. + if ItemNo<0 then begin + // saving background + gif := TGifImage.Create; + try + gif.ColorReduction := rmQuantize; + if RVData is TRVTableCellData then + gif.Assign(TRVTableCellData(RVData).BackgroundImage) // table cell background + else + gif.Assign(Sender.BackgroundBitmap); // document background + Location := RVData.GetNextFileName(Edit2.Text, Path, '.gif', RichView1.imgSaveNo, Checkbox1.Checked); + gif.SaveToFile(Location); + Location := ExtractRelativePath(Path, Location); + DoDefault := False; + finally + gif.Free; + end; + exit; + end; + gif := nil; + case RVData.GetItemStyle(ItemNo) of + rvsPicture, rvsHotPicture: + begin + // Assigning image to GIF and saving + // (metafiles and icons will be saved with transparency) + gif := TGifImage.Create; + gif.ColorReduction := rmQuantize; + RVData.GetPictureInfo(ItemNo, s, gr, AVAlign, ATag); + gif.Assign(gr); + Location := RVData.GetNextFileName(Edit2.Text, Path, '.gif', RichView1.imgSaveNo, Checkbox1.Checked); + end; + rvsTable: + begin + // Saving table background image + gif := TGifImage.Create; + gif.ColorReduction := rmQuantize; + gif.Assign(TRVTableItemInfo(RVData.GetItem(ItemNo)).BackgroundImage); + Location := RVData.GetNextFileName(Edit2.Text, Path, '.gif', RichView1.imgSaveNo, Checkbox1.Checked); + end; + rvsBullet, rvsHotspot: + begin + // This is not efficient way, because the same image will be + // saved many times. In your application you can save bullets + // before saving HTMLs, and here only return file name. + RVData.GetBulletInfo(ItemNo, s, ImageIndex, ImageList, ATag); + wmf := TMetafile.Create; + try + gif := TGifImage.Create; + gif.ColorReduction := rmQuantize; + // Drawing image from imagelist to metafile + // This method allows to save transparency + wmf.Width := TImageList(ImageList).Width; + wmf.Height := TImageList(ImageList).Height; + Canvas := TMetafileCanvas.Create(wmf, 0); + ImageList.Draw(Canvas,0,0, ImageIndex); + Canvas.Free; + // Assigning metafile to GIF and saving + gif.Assign(wmf); + // Saving to Path + Bullets Prefix + ImageIndex + .gif + Location := Format('%s%s%d.gif', [Path, Edit1.Text, ImageIndex]); + finally + wmf.Free; + end; + end; + // List markers can also have pictures. Not processed in this demo + end; + if gif<>nil then begin + gif.SaveToFile(Location); + Location := ExtractRelativePath(Path, Location); + DoDefault := False; + gif.Free; + end; +end; +{------------------------------------------------------------------------------} +// Event: saving hyperlinks +procedure TForm1.RichView1WriteHyperlink(Sender: TCustomRichView; + id: Integer; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; var Target, Extras: String); +begin + Target := PChar(RVData.GetItemTag(ItemNo)); +end; +{------------------------------------------------------------------------------} +// Event: saving components +procedure TForm1.RichView1SaveComponentToFile(Sender: TCustomRichView; + Path: string; SaveMe: TPersistent; SaveFormat: TRVSaveFormat; + var OutStr: string); +begin + case SaveFormat of + rvsfHTML: + begin + if SaveMe is TButton then begin + OutStr := ''; + exit; + end; + if SaveMe is TEdit then begin + OutStr := ''; + exit; + end; + end; + end; +end; +{------------------------------------------------------------------------------} +// Event: saving additional information +procedure TForm1.RichView1SaveHTMLExtra(Sender: TCustomRichView; + Area: TRVHTMLSaveArea; CSSVersion: Boolean; var HTMLCode: String); +begin + case Area of + rv_thms_Head: + HTMLCode := ''; + rv_thms_BodyAttribute: + HTMLCode := 'alink=#ff0000'; + rv_thms_Body: + HTMLCode := 'This document was generated by '+ + 'RichView
'; + end; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Assorted/Search and Replace/SearchAndReplace.bdsproj b/12.0.4/Demos/Delphi/Assorted/Search and Replace/SearchAndReplace.bdsproj new file mode 100644 index 0000000..3cdddbd --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Search and Replace/SearchAndReplace.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + SearchAndReplace.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Assorted/Search and Replace/SearchAndReplace.dpr b/12.0.4/Demos/Delphi/Assorted/Search and Replace/SearchAndReplace.dpr new file mode 100644 index 0000000..d53ec94 --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Search and Replace/SearchAndReplace.dpr @@ -0,0 +1,13 @@ +program SearchAndReplace; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Assorted/Search and Replace/SearchAndReplace.res b/12.0.4/Demos/Delphi/Assorted/Search and Replace/SearchAndReplace.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Search and Replace/SearchAndReplace.res differ diff --git a/12.0.4/Demos/Delphi/Assorted/Search and Replace/Unit1.dfm b/12.0.4/Demos/Delphi/Assorted/Search and Replace/Unit1.dfm new file mode 100644 index 0000000..5382349 Binary files /dev/null and b/12.0.4/Demos/Delphi/Assorted/Search and Replace/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Assorted/Search and Replace/Unit1.pas b/12.0.4/Demos/Delphi/Assorted/Search and Replace/Unit1.pas new file mode 100644 index 0000000..dceaa5b --- /dev/null +++ b/12.0.4/Demos/Delphi/Assorted/Search and Replace/Unit1.pas @@ -0,0 +1,156 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + StdCtrls, ExtCtrls, RVScroll, RichView, RVEdit, RVMisc, RVStyle, + RVTable; + +type + TForm1 = class(TForm) + rve: TRichViewEdit; + Panel1: TPanel; + bnnOpen: TButton; + btnFind: TButton; + btnReplace: TButton; + fd: TFindDialog; + rd: TReplaceDialog; + RVStyle1: TRVStyle; + OpenDialog1: TOpenDialog; + il: TImageList; + procedure btnReplaceClick(Sender: TObject); + procedure rdFind(Sender: TObject); + procedure rdReplace(Sender: TObject); + procedure rveRVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + procedure btnFindClick(Sender: TObject); + procedure fdFind(Sender: TObject); + procedure bnnOpenClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure ShowInfo(const msg,cpt: String); +begin + Application.MessageBox(PChar(msg),PChar(cpt),MB_OK or MB_ICONINFORMATION); +end; +{------------------------------------------------------------------------------} +function IsEqualText(s1, s2: String; CaseSensitive: Boolean): Boolean; +begin + if CaseSensitive then + Result := s1=s2 + else + Result := AnsiLowerCase(s1)=AnsiLowerCase(s2); +end; + +{=============================== REPLACE ======================================} +procedure TForm1.btnReplaceClick(Sender: TObject); +var s: String; + p: Integer; +begin + rve.SetFocus; + fd.CloseDialog; + if rve.SelectionExists then begin + s := rve.GetSelText; + p := Pos(#13,s); + if p<>0 then s := Copy(s,1,p-1); + rd.FindText := s; + end; + rd.Execute; +end; +{------------------------------------------------------------------------------} +procedure TForm1.rdFind(Sender: TObject); +begin + if not rve.SearchText(rd.FindText,GetRVESearchOptions(rd.Options)) then + ShowInfo('String not found','Search and Replace'); +end; +{------------------------------------------------------------------------------} +procedure TForm1.rdReplace(Sender: TObject); +var c: Integer; +begin + if frReplace in rd.Options then begin + if IsEqualText(rve.GetSelText, rd.FindText, frMatchCase in rd.Options) then + rve.InsertText(rd.ReplaceText,False); + if not rve.SearchText(rd.FindText,GetRVESearchOptions(rd.Options)) then + ShowInfo('String not found','Search and Replace'); + end + else if frReplaceAll in rd.Options then begin + c := 0; + if IsEqualText(rve.GetSelText, rd.FindText, frMatchCase in rd.Options) then begin + rve.InsertText(rd.ReplaceText,False); + inc(c); + end; + while rve.SearchText(rd.FindText,GetRVESearchOptions(rd.Options)) do begin + rve.InsertText(rd.ReplaceText,False); + inc(c); + end; + ShowInfo(Format('There were %d replacements',[c]),'Replace'); + end; +end; +{================================= FIND =======================================} +procedure TForm1.btnFindClick(Sender: TObject); +var s: String; + p: Integer; +begin + rve.SetFocus; + rd.CloseDialog; + if rve.SelectionExists then begin + s := rve.GetSelText; + p := Pos(#13,s); + if p<>0 then s := Copy(s,1,p-1); + fd.FindText := s; + end; + fd.Execute; +end; +{------------------------------------------------------------------------------} +procedure TForm1.fdFind(Sender: TObject); +begin + if not rve.SearchText(fd.FindText,GetRVESearchOptions(fd.Options)) then + ShowInfo('String not found','Search'); +end; +{==============================================================================} +procedure TForm1.rveRVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + il := Self.il; +end; +{------------------------------------------------------------------------------} +procedure TForm1.bnnOpenClick(Sender: TObject); +var + r: Boolean; +begin + if OpenDialog1.Execute then begin + rve.Clear; + case OpenDialog1.FilterIndex of + 1: // RVF + r := rve.LoadRVF(OpenDialog1.FileName); + 2: // ANSI text + r := rve.LoadText(OpenDialog1.FileName,0,0,False); + else + r := False; + end; + if not r then + Application.MessageBox('Error during loading', 'Error', 0); + rve.Format; + rve.SetFocus; + end; +end; + +initialization + + RegisterClasses([TEdit,TButton]); + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/DBDemo1.bdsproj b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/DBDemo1.bdsproj new file mode 100644 index 0000000..f108b94 --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/DBDemo1.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + DBDemo1.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/DBDemo1.dpr b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/DBDemo1.dpr new file mode 100644 index 0000000..6a174bd --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/DBDemo1.dpr @@ -0,0 +1,13 @@ +program DBDemo1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/DBDemo1.res b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/DBDemo1.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/DBDemo1.res differ diff --git a/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/SampleTable.MB b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/SampleTable.MB new file mode 100644 index 0000000..9944328 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/SampleTable.MB differ diff --git a/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/SampleTable.db b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/SampleTable.db new file mode 100644 index 0000000..f0209e9 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/SampleTable.db differ diff --git a/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/Unit1.dfm b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/Unit1.dfm new file mode 100644 index 0000000..3b81632 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/Unit1.pas b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/Unit1.pas new file mode 100644 index 0000000..c8ac57c --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/1 DBRichViewEdit/Unit1.pas @@ -0,0 +1,104 @@ +{=============================} unit Unit1; {==================================} +{ Main properties were set at design time: } +{ Table1.TableName := 'SampleTable.db'; // Paradox table } +{ Table1.ReadOnly := False; } +{ DataSource1.Dataset := Table1; } +{ DBNavigator1.DataSource := DataSource1; } +{ DBEdit1.DataSource := DataSource1; } +{ DBRichViewEdit1.DataSource := DataSource1; } +{ DBRichViewEdit1.Style := RVStyle1; } +{ DBEdit1.DataField := 'Caption'; // Alphanumeric field } +{ DBRichViewEdit1.DataField := 'RVFField'; // Binary field } +{ nbEdit was removed from DBNavigator1.VisibleButtons (because of autoedit) } +{------------------------------------------------------------------------------} +{ DBRichViewEdit has data-aware features that require no code to use } +{ (just like most of other Delphi db controls). } +{ Some more event handlers are needed for advanced RVF features, such as saving} +{ "bullets" and "hotspots". There is no difference here with saving/loading } +{ RVF files. } +{ The code below opens table, updates label displaying record number, } +{ provides "bold" button functionality. } +{------------------------------------------------------------------------------} +{ Note: changes after last posting are not saved when exiting application. } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, DBCtrls, RVScroll, RichView, RVEdit, DBRV, RVStyle, DB, + DBTables, StdCtrls, Mask, Buttons; + +type + TForm1 = class(TForm) + Table1: TTable; + DataSource1: TDataSource; + RVStyle1: TRVStyle; + DBRichViewEdit1: TDBRichViewEdit; + DBNavigator1: TDBNavigator; + Label1: TLabel; + Label2: TLabel; + DBEdit1: TDBEdit; + Label3: TLabel; + SpeedButton1: TSpeedButton; + procedure FormCreate(Sender: TObject); + procedure DataSource1DataChange(Sender: TObject; Field: TField); + procedure DBRichViewEdit1CurTextStyleChanged(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + private + { Private declarations } + procedure UpdateStatusLabel; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // Opening table... + Table1.DatabaseName := ExtractFilePath(Application.ExeName); + Table1.Open; + // For demonstrating rich text ability of TDBRichViewEdit, + // we added "Bold" button. It will switch the 0-th and the 1-st styles. + // Making 1-st text style a bold copy of 0-th style... + RVStyle1.TextStyles[1] := RVStyle1.TextStyles[0]; + RVStyle1.TextStyles[1].Style := RVStyle1.TextStyles[1].Style+[fsBold]; +end; + +procedure TForm1.UpdateStatusLabel; +begin + // where we are + if Table1.RecordCount=0 then + Label3.Caption := '(empty)' + else if Table1.RecNo<1 then + Label3.Caption := '(new)' + else + Label3.Caption := Format('Record %d of %d', [Table1.RecNo, Table1.RecordCount]); +end; + +procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); +begin + UpdateStatusLabel; +end; + +procedure TForm1.DBRichViewEdit1CurTextStyleChanged(Sender: TObject); +begin + SpeedButton1.Down := DBRichViewEdit1.CurTextStyleNo<>0; +end; + +procedure TForm1.SpeedButton1Click(Sender: TObject); +begin + // switching 1-st and 0-th styles + if SpeedButton1.Down then + DBRichViewEdit1.ApplyTextStyle(1) + else + DBRichViewEdit1.ApplyTextStyle(0); +end; + +end. diff --git a/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/DBDemo2.bdsproj b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/DBDemo2.bdsproj new file mode 100644 index 0000000..2137b40 --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/DBDemo2.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + DBDemo2.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/DBDemo2.dpr b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/DBDemo2.dpr new file mode 100644 index 0000000..0907c3c --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/DBDemo2.dpr @@ -0,0 +1,15 @@ +program DBDemo2; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + Unit2 in 'Unit2.pas' {Form2}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/DBDemo2.res b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/DBDemo2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/DBDemo2.res differ diff --git a/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/SampleTable.MB b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/SampleTable.MB new file mode 100644 index 0000000..90d623c Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/SampleTable.MB differ diff --git a/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/SampleTable.db b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/SampleTable.db new file mode 100644 index 0000000..4abd60e Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/SampleTable.db differ diff --git a/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit1.dfm b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit1.dfm new file mode 100644 index 0000000..0568489 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit1.pas b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit1.pas new file mode 100644 index 0000000..f765cab --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit1.pas @@ -0,0 +1,87 @@ +{=============================} unit Unit1; {==================================} +{ Main properties were set at design time: } +{ Table1.TableName := 'SampleTable.db'; // Paradox table } +{ Table1.ReadOnly := False; } +{ DataSource1.Dataset := Table1; } +{ DBNavigator1.DataSource := DataSource1; } +{ DBEdit1.DataSource := DataSource1; } +{ DBRichView1.DataSource := DataSource1; } +{ DBRichView1.Style := RVStyle1; } +{ DBEdit1.DataField := 'Caption'; // Alphanumeric field } +{ DBRichViewEdit1.DataField := 'RVFField'; // Binary field } +{ nbEdit was removed from DBNavigator1.VisibleButtons (because of autoedit) } +{------------------------------------------------------------------------------} +{ Note: changes after last posting are not saved when exiting application. } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, DBCtrls, RVScroll, RichView, RVEdit, DBRV, RVStyle, DB, + DBTables, StdCtrls, Mask, Buttons; + +type + TForm1 = class(TForm) + Table1: TTable; + DataSource1: TDataSource; + RVStyle1: TRVStyle; + DBNavigator1: TDBNavigator; + Label1: TLabel; + Label2: TLabel; + DBEdit1: TDBEdit; + Label3: TLabel; + DBRichView1: TDBRichView; + Button1: TButton; + procedure FormCreate(Sender: TObject); + procedure DataSource1DataChange(Sender: TObject; Field: TField); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + procedure UpdateStatusLabel; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation +uses Unit2; + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // Opening table... + Table1.DatabaseName := ExtractFilePath(Application.ExeName); + Table1.Open; + + RVStyle1.TextStyles[1] := RVStyle1.TextStyles[0]; + RVStyle1.TextStyles[1].Style := RVStyle1.TextStyles[1].Style+[fsBold]; +end; + +procedure TForm1.UpdateStatusLabel; +begin + // where we are? + if Table1.RecordCount=0 then + Label3.Caption := '(empty)' + else if Table1.RecNo<1 then + Label3.Caption := '(new)' + else + Label3.Caption := Format('Record %d of %d', [Table1.RecNo, Table1.RecordCount]); +end; + +procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); +begin + UpdateStatusLabel; +end; + +procedure TForm1.Button1Click(Sender: TObject); +begin + // See Unit2.pas + Form2.SetField('RVFField',Table1); + Form2.ShowModal; +end; + +end. diff --git a/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit2.dfm b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit2.dfm new file mode 100644 index 0000000..59f747d Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit2.dfm differ diff --git a/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit2.pas b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit2.pas new file mode 100644 index 0000000..17c0808 --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/2 RichViewEdit/Unit2.pas @@ -0,0 +1,189 @@ +unit Unit2; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + Buttons, ExtCtrls, RVScroll, RichView, RVEdit, DB, DBTables, + Unit1; + +type + TForm2 = class(TForm) + btnBold: TSpeedButton; + btnPost: TSpeedButton; + btnCancel: TSpeedButton; + btnClose: TSpeedButton; + RichViewEdit1: TRichViewEdit; + Panel1: TPanel; + procedure RichViewEdit1Change(Sender: TObject); + procedure btnPostClick(Sender: TObject); + procedure btnCancelClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure btnCloseClick(Sender: TObject); + procedure RichViewEdit1CurTextStyleChanged(Sender: TObject); + procedure btnBoldClick(Sender: TObject); + private + { Private declarations } + FModified: Boolean; + FFieldName: String; + FTable: TTable; + procedure SetModified(Value: Boolean); + procedure Load; + procedure Save; + property Modified: Boolean read FModified write SetModified; + public + { Public declarations } + procedure SetField(const AFieldName: String; ATable: TTable); + end; + +var + Form2: TForm2; + +implementation + +{$R *.DFM} +{==============================================================================} +// Simple, but quite useful functions. +// Earlier version of Delphi do not support TTable.CreateBlobStream... +{ +function SaveRVFToField(rv: TCustomRichView; tbl: TTable; + const FieldName: String): Boolean; +var Stream: TStream; +begin + Stream := tbl.CreateBlobStream(tbl.FieldByName(FieldName), bmWrite); + try + Result := rv.SaveRVFToStream(Stream, False); + finally + Stream.Free; + end; +end; + +function LoadRVFFromField(rv: TCustomRichView; tbl: TTable; + const FieldName: String): Boolean; +var Stream: TStream; +begin + Stream := tbl.CreateBlobStream(tbl.FieldByName(FieldName), bmRead); + try + Result := rv.LoadRVFFromStream(Stream); + finally + Stream.Free; + end; + rv.Format; +end; +} +{==============================================================================} +// So below is alternative solution: +function SaveRVFToField(rv: TCustomRichView; tbl: TTable; + const FieldName: String): Boolean; +var Stream: TStream; +begin + Stream := TMemoryStream.Create; + try + Result := rv.SaveRVFToStream(Stream, False); + Stream.Position := 0; + TBlobField(tbl.FieldByName(FieldName)).LoadFromStream(Stream); + finally + Stream.Free; + end; +end; + +function LoadRVFFromField(rv: TCustomRichView; tbl: TTable; + const FieldName: String): Boolean; +var Stream: TStream; +begin + Stream := TMemoryStream.Create; + try + TBlobField(tbl.FieldByName(FieldName)).SaveToStream(Stream); + Stream.Position := 0; + Result := rv.LoadRVFFromStream(Stream); + finally + Stream.Free; + end; + rv.Format; +end; +{==============================================================================} +procedure TForm2.SetField(const AFieldName: String; ATable: TTable); +begin + FTable := ATable; + FFieldName := AFieldName; + Load; + Caption := FTable.FieldByName('Caption').AsString; +end; + +procedure TForm2.Load; +begin + LoadRVFFromField(RichViewEdit1, FTable, FFieldName); + Modified := False; +end; + +procedure TForm2.Save; +begin + FTable.Edit; + SaveRVFToField(RichViewEdit1, FTable, FFieldName); + FTable.Post; + Modified := False; +end; + +procedure TForm2.RichViewEdit1Change(Sender: TObject); +begin + Modified := True; +end; + +procedure TForm2.SetModified(Value: Boolean); +begin + if FModified<>Value then begin + FModified := Value; + if FModified then + Panel1.Caption := 'Modified' + else + Panel1.Caption := ''; + end; +end; + +procedure TForm2.btnPostClick(Sender: TObject); +begin + Save; +end; + +procedure TForm2.btnCancelClick(Sender: TObject); +begin + Load; +end; + +procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if Modified then + case Application.MessageBox('Save changes?', 'Text was modified', + MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + begin + Save; + CanClose := True; + end; + IDNO: + CanClose := True; + IDCANCEL: + CanClose := False; + end; +end; + +procedure TForm2.btnCloseClick(Sender: TObject); +begin + Close; +end; + +procedure TForm2.RichViewEdit1CurTextStyleChanged(Sender: TObject); +begin + btnBold.Down := RichViewEdit1.CurTextStyleNo<>0; +end; + +procedure TForm2.btnBoldClick(Sender: TObject); +begin + // switching 1-st and 0-th styles + if btnBold.Down then + RichViewEdit1.ApplyTextStyle(1) + else + RichViewEdit1.ApplyTextStyle(0); +end; + +end. diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/DBGridDemo.bdsproj b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/DBGridDemo.bdsproj new file mode 100644 index 0000000..496ea9f --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/DBGridDemo.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + DBGridDemo.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/DBGridDemo.dpr b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/DBGridDemo.dpr new file mode 100644 index 0000000..d90105c --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/DBGridDemo.dpr @@ -0,0 +1,15 @@ +program DBGridDemo; + +uses + Forms, + MainFrm in 'MainFrm.pas' {frmMain}, + EditFrm in 'EditFrm.pas' {frmEdit}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.CreateForm(TfrmEdit, frmEdit); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/DBGridDemo.res b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/DBGridDemo.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/DBGridDemo.res differ diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/Database.MB b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/Database.MB new file mode 100644 index 0000000..ddd9eb0 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/Database.MB differ diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/Database.PX b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/Database.PX new file mode 100644 index 0000000..8d310e2 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/Database.PX differ diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/Database.db b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/Database.db new file mode 100644 index 0000000..0f0c88f Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/Database.db differ diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/EditFrm.dfm b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/EditFrm.dfm new file mode 100644 index 0000000..c0a5d28 Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/EditFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/EditFrm.pas b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/EditFrm.pas new file mode 100644 index 0000000..9dc2485 --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/EditFrm.pas @@ -0,0 +1,31 @@ + + +unit EditFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ExtCtrls, RVScroll, RichView, RVEdit, RVStyle; + +type + TfrmEdit = class(TForm) + RVStyle1: TRVStyle; + RichViewEdit1: TRichViewEdit; + Panel1: TPanel; + Button1: TButton; + Button2: TButton; + private + { Private declarations } + public + { Public declarations } + end; + +var + frmEdit: TfrmEdit; + +implementation + +{$R *.dfm} + +end. diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/MainFrm.dfm b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/MainFrm.dfm new file mode 100644 index 0000000..e60b78e Binary files /dev/null and b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/MainFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/MainFrm.pas b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/MainFrm.pas new file mode 100644 index 0000000..ef94fc1 --- /dev/null +++ b/12.0.4/Demos/Delphi/DB Demo/3 DBGrid/MainFrm.pas @@ -0,0 +1,186 @@ +{*******************************************************} +{ } +{ RichView } +{ Demo: drawing RVF fields in TDBGrid } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{ + +Tested: +Delphi 2: the code is ok, but will not work on this example database because +RichView does not support loading collections of styles from RVF fields in +Delphi 2 +Delphi 3: ok, but minor glitches with drawing because of row height hack +Delphi 7: ok. + + + +} + +unit MainFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, Grids, DBGrids, DB, DBTables, RVScroll, RichView, PtblRV, RVReport, + RVStyle, StdCtrls, ExtCtrls; + +type + TfrmMain = class(TForm) + Table1: TTable; + DataSource1: TDataSource; + DBGrid1: TDBGrid; + RVReportHelper1: TRVReportHelper; + RVStyle1: TRVStyle; + Panel1: TPanel; + CheckBox1: TCheckBox; + procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; + DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure FormCreate(Sender: TObject); + procedure DBGrid1EditButtonClick(Sender: TObject); + procedure CheckBox1Click(Sender: TObject); + private + { Private declarations } + DefRowHeight: Integer; + function IsRVFField(Field: TField): Boolean; + procedure SetRowHeight; + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + + +implementation + +uses EditFrm; + +{$R *.dfm} + +procedure TfrmMain.FormCreate(Sender: TObject); +var i: Integer; +begin + // Initializing RVReportHelper's properties + RVReportHelper1.RichView.Style := RVStyle1; + RVReportHelper1.RichView.Options := RVReportHelper1.RichView.Options + [rvoTagsArePChars]; + // Allowing editing RVF fields + for i := 0 to DBGrid1.Columns.Count-1 do + if IsRVFField(DBGrid1.Columns[i].Field) then + DBGrid1.Columns[i].ButtonStyle := cbsEllipsis; + DefRowHeight := TDrawGrid(DBGrid1).DefaultRowHeight; + SetRowHeight; +end; + +procedure TfrmMain.SetRowHeight; +begin + // A hack to change DBGrid row heights. Is it possible without hacks? + TDrawGrid(DBGrid1).DefaultRowHeight := 100; + TDrawGrid(DBGrid1).RowHeights[0] := DefRowHeight; +end; + +procedure MakeSelected(rvh: TRVReportHelper); +var i: Integer; +begin + for i := 0 to rvh.RichView.Style.TextStyles.Count-1 do + rvh.RichView.Style.TextStyles[i].Color := clHighlightText; + rvh.RichView.Color := clHighlight; +end; + +// Drawing RVF field on Canvas at Rect using rvh. +procedure DrawRVFField(field: TBlobField; + Canvas: TCanvas; const Rect: TRect; rvh: TRVReportHelper; + Selected: Boolean); +var Stream: TMemoryStream; + bmp: TBitmap; +begin + try + rvh.RichView.Clear; + rvh.RichView.Color := clWindow; + Stream := TMemoryStream.Create; + try + field.SaveToStream(Stream); + Stream.Position := 0; + rvh.RichView.LoadRVFFromStream(Stream) + finally + Stream.Free; + end; + bmp := TBitmap.Create; + try + bmp.Width := Rect.Right-Rect.Left; + bmp.Height := Rect.Bottom-Rect.Top; + rvh.Init(bmp.Canvas, bmp.Width); + rvh.FormatNextPage(1000); + if Selected then + MakeSelected(rvh); + if rvh.PagesCount>0 then begin + rvh.DrawPage(1, bmp.Canvas, True, bmp.Height); + end; + Canvas.Draw(Rect.Left, Rect.Top, bmp); + finally + bmp.Free; + end; + except + end; +end; + +// Drawing DBGrid RVF cell +procedure TfrmMain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; + DataCol: Integer; Column: TColumn; State: TGridDrawState); +begin + if IsRVFField(Column.Field) then + DrawRVFField(Column.Field as TBlobField, DBGrid1.Canvas, Rect, + RVReportHelper1, gdSelected in State); +end; + +// Editing +procedure TfrmMain.DBGrid1EditButtonClick(Sender: TObject); +var Stream: TMemoryStream; +begin + if not IsRVFField(DBGrid1.SelectedField) then + exit; + Stream := TMemoryStream.Create; + try + (DBGrid1.SelectedField as TBlobField).SaveToStream(Stream); + Stream.Position := 0; + frmEdit.RichViewEdit1.LoadRVFFromStream(Stream); + frmEdit.RichViewEdit1.Format; + finally + Stream.Free; + end; + frmEdit.ActiveControl := frmEdit.RichViewEdit1; + if frmEdit.ShowModal=mrOk then begin + Table1.Edit; + Stream := TMemoryStream.Create; + try + frmEdit.RichViewEdit1.SaveRVFToStream(Stream, False); + Stream.Position := 0; + (DBGrid1.SelectedField as TBlobField).LoadFromStream(Stream); + finally + Stream.Free; + end; + end; +end; + +// Is this field a RVF field? +function TfrmMain.IsRVFField(Field: TField): Boolean; +begin + Result := Field.FieldName='Data'; +end; + +procedure TfrmMain.CheckBox1Click(Sender: TObject); +begin + if CheckBox1.Checked then + DBGrid1.Options := DBGrid1.Options-[dgEditing] + else + DBGrid1.Options := DBGrid1.Options+[dgEditing]; + SetRowHeight; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Demos.bdsgroup b/12.0.4/Demos/Delphi/Demos.bdsgroup new file mode 100644 index 0000000..dea1191 --- /dev/null +++ b/12.0.4/Demos/Delphi/Demos.bdsgroup @@ -0,0 +1,54 @@ + + + + + + + + + + + Editors\Editor 1\RVEditDemo.bdsproj + Editors\Editor 2\REditor.bdsproj + Editors\Notes\Notes.bdsproj + MultiDemo\RVDemo.bdsproj + DB Demo\1 DBRichViewEdit\DBDemo1.bdsproj + DB Demo\2 RichViewEdit\DBDemo2.bdsproj + DB Demo\3 DBGrid\DBGridDemo.bdsproj + OfficeConverters\OfficeConverters.bdsproj + Assorted\Load RVF\LoadRVF.bdsproj + Assorted\Search and Replace\SearchAndReplace.bdsproj + Assorted\Hypertext\CreateHyperlink\CreateHyperlink.bdsproj + Assorted\Hypertext\PhoneBook\PhoneBook.bdsproj + Assorted\Hypertext\URLs\ScanURLs.bdsproj + Assorted\Custom Draw\CustomDraw\CustomDraw.bdsproj + Assorted\Custom Draw\Mathematics\CustomDrawMath.bdsproj + Assorted\Graphics\DragImg\DragImg.bdsproj + Assorted\Graphics\Emoticons\Emoticons.bdsproj + Assorted\Graphics\SharedImages\SharedImages.bdsproj + Assorted\Graphics\ToImage\ToImage.bdsproj + Assorted\Fields\FillInGaps\FillInGaps.bdsproj + Assorted\Fields\LiveLink\Simple\LiveLink1.bdsproj + Assorted\Fields\LiveLink\Tables\LiveLink2.bdsproj + Assorted\Fields\MailMerge\TemplateEditor.bdsproj + Assorted\Fields\MailMerge\MailMerge.bdsproj + Assorted\Fields\MailMerge2\TemplateEditor2.bdsproj + Assorted\Fields\MailMerge2\MainApplication.bdsproj + Assorted\Fields\MailMerge-LabelItems\TemplateEditorLI.bdsproj + Assorted\Fields\MailMerge-LabelItems\MailMergeLI.bdsproj + Assorted\Fields\Spreadsheet\Spreadsheet.bdsproj + Assorted\International\Accents\Accents.bdsproj + Assorted\International\RTL\RTL.bdsproj + Assorted\ListStyles\Bullets\BulletsAndNumbering.bdsproj + Assorted\ListStyles\ImageListBullets\ImageListBullets.bdsproj + Assorted\PlanetQuiz\Quiz.bdsproj + Assorted\Printing\Headers\Headers.bdsproj + Assorted\Printing\Printing\Printing.bdsproj + Assorted\Printing\ReportHelper\ReportHelper.bdsproj + Assorted\Autocomplete\Autocomplete.bdsproj + RVEditDemo.exe REditor.exe Notes.exe RVDemo.exe DBDemo1.exe DBDemo2.exe DBGridDemo.exe OfficeConverters.exe LoadRVF.exe SearchAndReplace.exe CreateHyperlink.exe PhoneBook.exe ScanURLs.exe CustomDraw.exe CustomDrawMath.exe DragImg.exe Emoticons.exe SharedImages.exe ToImage.exe FillInGaps.exe LiveLink1.exe LiveLink2.exe TemplateEditor.exe MailMerge.exe TemplateEditor2.exe MainApplication.exe TemplateEditorLI.exe MailMergeLI.exe Spreadsheet.exe Accents.exe RTL.exe BulletsAndNumbering.exe ImageListBullets.exe Quiz.exe Headers.exe Printing.exe ReportHelper.exe Autocomplete.exe + + + + diff --git a/12.0.4/Demos/Delphi/Demos.bpg b/12.0.4/Demos/Delphi/Demos.bpg new file mode 100644 index 0000000..9a6deb4 --- /dev/null +++ b/12.0.4/Demos/Delphi/Demos.bpg @@ -0,0 +1,135 @@ +#------------------------------------------------------------------------------ +VERSION = BWS.01 +#------------------------------------------------------------------------------ +!ifndef ROOT +ROOT = $(MAKEDIR)\.. +!endif +#------------------------------------------------------------------------------ +MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** +DCC = $(ROOT)\bin\dcc32.exe $** +BRCC = $(ROOT)\bin\brcc32.exe $** +#------------------------------------------------------------------------------ +PROJECTS = RVEditDemo.exe REditor.exe Notes.exe RVDemo.exe DBDemo1.exe \ + DBDemo2.exe DBGridDemo.exe OfficeConverters.exe LoadRVF.exe \ + SearchAndReplace.exe CreateHyperlink.exe PhoneBook.exe ScanURLs.exe \ + CustomDraw.exe CustomDrawMath.exe DragImg.exe Emoticons.exe SharedImages.exe \ + ToImage.exe FillInGaps.exe LiveLink1.exe LiveLink2.exe TemplateEditor.exe \ + MailMerge.exe TemplateEditor2.exe MainApplication.exe TemplateEditorLI.exe \ + MailMergeLI.exe Spreadsheet.exe Accents.exe RTL.exe BulletsAndNumbering.exe \ + ImageListBullets.exe Quiz.exe Headers.exe Printing.exe ReportHelper.exe +#------------------------------------------------------------------------------ +default: $(PROJECTS) +#------------------------------------------------------------------------------ + +RVEditDemo.exe: Editors\Editor 1\RVEditDemo.dpr + $(DCC) + +REditor.exe: Editors\Editor 2\REditor.dpr + $(DCC) + +RVDemo.exe: MultiDemo\RVDemo.dpr + $(DCC) + +DBDemo1.exe: DB Demo\1 DBRichViewEdit\DBDemo1.dpr + $(DCC) + +DBDemo2.exe: DB Demo\2 RichViewEdit\DBDemo2.dpr + $(DCC) + +OfficeConverters.exe: OfficeConverters\OfficeConverters.dpr + $(DCC) + +LoadRVF.exe: Assorted\Load RVF\LoadRVF.dpr + $(DCC) + +SearchAndReplace.exe: Assorted\Search and Replace\SearchAndReplace.dpr + $(DCC) + +CreateHyperlink.exe: Assorted\Hypertext\CreateHyperlink\CreateHyperlink.dpr + $(DCC) + +PhoneBook.exe: Assorted\Hypertext\PhoneBook\PhoneBook.dpr + $(DCC) + +ScanURLs.exe: Assorted\Hypertext\URLs\ScanURLs.dpr + $(DCC) + +CustomDraw.exe: Assorted\Custom Draw\CustomDraw\CustomDraw.dpr + $(DCC) + +CustomDrawMath.exe: Assorted\Custom Draw\Mathematics\CustomDrawMath.dpr + $(DCC) + +DragImg.exe: Assorted\Graphics\DragImg\DragImg.dpr + $(DCC) + +Emoticons.exe: Assorted\Graphics\Emoticons\Emoticons.dpr + $(DCC) + +SharedImages.exe: Assorted\Graphics\SharedImages\SharedImages.dpr + $(DCC) + +ToImage.exe: Assorted\Graphics\ToImage\ToImage.dpr + $(DCC) + +FillInGaps.exe: Assorted\Fields\FillInGaps\FillInGaps.dpr + $(DCC) + +LiveLink1.exe: Assorted\Fields\LiveLink\Simple\LiveLink1.dpr + $(DCC) + +LiveLink2.exe: Assorted\Fields\LiveLink\Tables\LiveLink2.dpr + $(DCC) + +MailMerge.exe: Assorted\Fields\MailMerge\MailMerge.dpr + $(DCC) + +TemplateEditor.exe: Assorted\Fields\MailMerge\TemplateEditor.dpr + $(DCC) + +TemplateEditor2.exe: Assorted\Fields\MailMerge2\TemplateEditor2.dpr + $(DCC) + +MainApplication.exe: Assorted\Fields\MailMerge2\MainApplication.dpr + $(DCC) + +TemplateEditorLI.exe: Assorted\Fields\MailMerge-LabelItems\TemplateEditorLI.dpr + $(DCC) + +MailMergeLI.exe: Assorted\Fields\MailMerge-LabelItems\MailMergeLI.dpr + $(DCC) + +Spreadsheet.exe: Assorted\Fields\Spreadsheet\Spreadsheet.dpr + $(DCC) + +Accents.exe: Assorted\International\Accents\Accents.dpr + $(DCC) + +RTL.exe: Assorted\International\RTL\RTL.dpr + $(DCC) + +BulletsAndNumbering.exe: Assorted\ListStyles\Bullets\BulletsAndNumbering.dpr + $(DCC) + +ImageListBullets.exe: Assorted\ListStyles\ImageListBullets\ImageListBullets.dpr + $(DCC) + +Quiz.exe: Assorted\PlanetQuiz\Quiz.dpr + $(DCC) + +Headers.exe: Assorted\Printing\Headers\Headers.dpr + $(DCC) + +Printing.exe: Assorted\Printing\Printing\Printing.dpr + $(DCC) + +ReportHelper.exe: Assorted\Printing\ReportHelper\ReportHelper.dpr + $(DCC) + +DBGridDemo.exe: DB Demo\3 DBGrid\DBGridDemo.dpr + $(DCC) + +Notes.exe: Editors\Notes\Notes.dpr + $(DCC) + + diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/CPFrm.dfm b/12.0.4/Demos/Delphi/Editors/Editor 1/CPFrm.dfm new file mode 100644 index 0000000..900b2f3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/CPFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/CPFrm.pas b/12.0.4/Demos/Delphi/Editors/Editor 1/CPFrm.pas new file mode 100644 index 0000000..f9bca04 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/CPFrm.pas @@ -0,0 +1,32 @@ +unit CPFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls; + +type + TfrmCP = class(TForm) + txtName: TEdit; + Label1: TLabel; + Label2: TLabel; + txtTag: TEdit; + lblStatus: TLabel; + btnCancel: TButton; + btnOk: TButton; + btnDelete: TButton; + private + { Private declarations } + public + { Public declarations } + end; + +var + frmCP: TfrmCP; + +implementation + +{$R *.DFM} + +end. diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/ListFrm.dfm b/12.0.4/Demos/Delphi/Editors/Editor 1/ListFrm.dfm new file mode 100644 index 0000000..ccf31db Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/ListFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/ListFrm.pas b/12.0.4/Demos/Delphi/Editors/Editor 1/ListFrm.pas new file mode 100644 index 0000000..7076330 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/ListFrm.pas @@ -0,0 +1,39 @@ +unit ListFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ExtCtrls; + +type + TfrmList = class(TForm) + lst: TListBox; + Bevel1: TBevel; + Button1: TButton; + procedure lstClick(Sender: TObject); + procedure FormShow(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmList: TfrmList; + +implementation + +{$R *.DFM} + +procedure TfrmList.lstClick(Sender: TObject); +begin + Button1.Enabled := lst.ItemIndex<>-1; +end; + +procedure TfrmList.FormShow(Sender: TObject); +begin + Button1.Enabled := lst.ItemIndex<>-1; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/OptionsFrm.dfm b/12.0.4/Demos/Delphi/Editors/Editor 1/OptionsFrm.dfm new file mode 100644 index 0000000..92e9d5d Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/OptionsFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/OptionsFrm.pas b/12.0.4/Demos/Delphi/Editors/Editor 1/OptionsFrm.pas new file mode 100644 index 0000000..1727593 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/OptionsFrm.pas @@ -0,0 +1,136 @@ +unit OptionsFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ComCtrls, RVStyle; + +type + TfrmOptions = class(TForm) + btnOk: TButton; + btnCancel: TButton; + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + GroupBox1: TGroupBox; + cbRVFSaveBackground: TCheckBox; + cbRVFSaveLayout: TCheckBox; + cbRVFBinary: TCheckBox; + cbRVFSavePictures: TCheckBox; + cbRVFSaveControls: TCheckBox; + GroupBox2: TGroupBox; + cbRVFLoadBackground: TCheckBox; + cbRVFLoadLayout: TCheckBox; + cbRVFIgnoreUnknownPictures: TCheckBox; + cbRVFIgnoreUnknownControls: TCheckBox; + cbRVFInvStyles: TCheckBox; + cbRVFInvImageIndices: TCheckBox; + TabSheet3: TTabSheet; + GroupBox3: TGroupBox; + cbHTMLOverrideImages: TCheckBox; + cbHTMLListAsTest: TCheckBox; + cbHTMLForceNonTextCSS: TCheckBox; + cbHTMLDefault0Style: TCheckBox; + cbHTMLSaveImageSizes: TCheckBox; + cbHTMLNoHypertextImageBorders: TCheckBox; + cbHTMLUseCheckpointsNames: TCheckBox; + txtHTMLTitle: TEdit; + Label1: TLabel; + cbRVFSaveTextStyles: TCheckBox; + cbRVFSaveParaStyles: TCheckBox; + private + { Private declarations } + public + { Public declarations } + procedure SetOptions(RVFOptions: TRVFOptions; HTMLOptions: TRVSaveOptions; + const HTMLTitle: String); + procedure GetOptions(var RVFOptions: TRVFOptions; var HTMLOptions: TRVSaveOptions; + var HTMLTitle: String); + end; + +var + frmOptions: TfrmOptions; + +implementation + +{$R *.dfm} + +{ TfrmOptions } + +procedure TfrmOptions.GetOptions(var RVFOptions: TRVFOptions; + var HTMLOptions: TRVSaveOptions; var HTMLTitle: String); + {..........................................................} + procedure SetRVFOption(Value: Boolean; Option: TRVFOption); + begin + if Value then + RVFOptions := RVFOptions + [Option] + else + RVFOptions := RVFOptions - [Option]; + end; + {..........................................................} + procedure SetHTMLOption(Value: Boolean; Option: TRVSaveOption); + begin + if Value then + HTMLOptions := HTMLOptions + [Option] + else + HTMLOptions := HTMLOptions - [Option]; + end; + {..........................................................} +begin + RVFOptions := []; + HTMLOptions := []; + SetRVFOption(cbRVFSaveBackground.Checked, rvfoSaveBack); + SetRVFOption(cbRVFSaveLayout.Checked, rvfoSaveLayout); + SetRVFOption(cbRVFBinary.Checked, rvfoSaveBinary); + SetRVFOption(cbRVFSavePictures.Checked, rvfoSavePicturesBody); + SetRVFOption(cbRVFSaveControls.Checked, rvfoSaveControlsBody); + SetRVFOption(cbRVFLoadBackground.Checked, rvfoLoadBack); + SetRVFOption(cbRVFLoadLayout.Checked, rvfoLoadLayout); + SetRVFOption(cbRVFIgnoreUnknownPictures.Checked , rvfoIgnoreUnknownPicFmt); + SetRVFOption(cbRVFIgnoreUnknownControls.Checked , rvfoIgnoreUnknownCtrls); + SetRVFOption(cbRVFInvStyles.Checked, rvfoConvUnknownStylesToZero); + SetRVFOption(cbRVFInvImageIndices.Checked, rvfoConvLargeImageIdxToZero); + SetRVFOption(cbRVFSaveTextStyles.Checked, rvfoSaveTextStyles); + SetRVFOption(cbRVFSaveParaStyles.Checked, rvfoSaveParaStyles); + + SetHTMLOption(cbHTMLOverrideImages.Checked, rvsoOverrideImages); + SetHTMLOption(cbHTMLListAsTest.Checked, rvsoMarkersAsText); + SetHTMLOption(cbHTMLForceNonTextCSS.Checked, rvsoForceNonTextCSS); + SetHTMLOption(cbHTMLDefault0Style.Checked, rvsoDefault0Style); + SetHTMLOption(cbHTMLSaveImageSizes.Checked, rvsoImageSizes); + SetHTMLOption(cbHTMLNoHypertextImageBorders.Checked, rvsoNoHypertextImageBorders); + SetHTMLOption(cbHTMLUseCheckpointsNames.Checked, rvsoUseCheckpointsNames); + + HTMLTitle := txtHTMLTitle.Text; +end; +{------------------------------------------------------------------------------} +procedure TfrmOptions.SetOptions(RVFOptions: TRVFOptions; + HTMLOptions: TRVSaveOptions; const HTMLTitle: String); +begin + cbRVFSaveBackground.Checked := rvfoSaveBack in RVFOptions; + cbRVFSaveLayout.Checked := rvfoSaveLayout in RVFOptions; + cbRVFBinary.Checked := rvfoSaveBinary in RVFOptions; + cbRVFSavePictures.Checked := rvfoSavePicturesBody in RVFOptions; + cbRVFSaveControls.Checked := rvfoSaveControlsBody in RVFOptions; + cbRVFLoadBackground.Checked := rvfoLoadBack in RVFOptions; + cbRVFLoadLayout.Checked := rvfoLoadLayout in RVFOptions; + cbRVFIgnoreUnknownPictures.Checked := rvfoIgnoreUnknownPicFmt in RVFOptions; + cbRVFIgnoreUnknownControls.Checked := rvfoIgnoreUnknownCtrls in RVFOptions; + cbRVFInvStyles.Checked := rvfoConvUnknownStylesToZero in RVFOptions; + cbRVFInvImageIndices.Checked := rvfoConvLargeImageIdxToZero in RVFOptions; + cbRVFSaveTextStyles.Checked := rvfoSaveTextStyles in RVFOptions; + cbRVFSaveParaStyles.Checked := rvfoSaveParaStyles in RVFOptions; + + cbHTMLOverrideImages.Checked := rvsoOverrideImages in HTMLOptions; + cbHTMLListAsTest.Checked := rvsoMarkersAsText in HTMLOptions; + cbHTMLForceNonTextCSS.Checked := rvsoForceNonTextCSS in HTMLOptions; + cbHTMLDefault0Style.Checked := rvsoDefault0Style in HTMLOptions; + cbHTMLSaveImageSizes.Checked := rvsoImageSizes in HTMLOptions; + cbHTMLNoHypertextImageBorders.Checked := rvsoNoHypertextImageBorders in HTMLOptions; + cbHTMLUseCheckpointsNames.Checked := rvsoUseCheckpointsNames in HTMLOptions; + + txtHTMLTitle.Text := HTMLTitle; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/PreviewFrm.dfm b/12.0.4/Demos/Delphi/Editors/Editor 1/PreviewFrm.dfm new file mode 100644 index 0000000..9ede797 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/PreviewFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/PreviewFrm.pas b/12.0.4/Demos/Delphi/Editors/Editor 1/PreviewFrm.pas new file mode 100644 index 0000000..218d885 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/PreviewFrm.pas @@ -0,0 +1,106 @@ +unit PreviewFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVScroll, CRVPP, RVPP, ExtCtrls; + +type + TfrmPreview = class(TForm) + Panel1: TPanel; + rvpp: TRVPrintPreview; + cmb: TComboBox; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + Label1: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure cmbExit(Sender: TObject); + procedure cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvppZoomChanged(Sender: TObject); + private + { Private declarations } + procedure UpdateZoom; + public + { Public declarations } + end; + +var + frmPreview: TfrmPreview; + +implementation + +{$R *.DFM} +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button1Click(Sender: TObject); +begin + rvpp.First; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button2Click(Sender: TObject); +begin + rvpp.Prev; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button3Click(Sender: TObject); +begin + rvpp.Next; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button4Click(Sender: TObject); +begin + rvpp.Last; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbExit(Sender: TObject); +begin + UpdateZoom; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_RETURN then begin + UpdateZoom; + Key := 0; + end; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.UpdateZoom; +var s: String; + zoom: Integer; +begin + s := Trim(cmb.Text); + if s='Page width' then begin + rvpp.ZoomMode := rvzmPageWidth; + exit; + end; + if s='Full page' then begin + rvpp.ZoomMode := rvzmFullPage; + exit; + end; + if (s<>'') and (s[Length(s)]='%') then + s := Copy(s,1,Length(s)-1); + zoom := StrToIntDef(s,0); + if (zoom<10) or (zoom>500) then + Application.MessageBox('Please enter number from 10 to 500','Scale',MB_OK or MB_ICONSTOP) + else + rvpp.SetZoom(zoom); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.rvppZoomChanged(Sender: TObject); +begin + cmb.Text := IntToStr(rvpp.ZoomPercent)+'%'; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/PropFrm.dfm b/12.0.4/Demos/Delphi/Editors/Editor 1/PropFrm.dfm new file mode 100644 index 0000000..06cef37 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/PropFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/PropFrm.pas b/12.0.4/Demos/Delphi/Editors/Editor 1/PropFrm.pas new file mode 100644 index 0000000..86f1f0f --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/PropFrm.pas @@ -0,0 +1,67 @@ +unit PropFrm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, StdCtrls, ExtCtrls; +type + TfrmProp = class(TForm) + PageControl1: TPageControl; + tsBullet: TTabSheet; + tsHotSpot: TTabSheet; + btnOk: TButton; + btnCancel: TButton; + Label1: TLabel; + txtTag: TEdit; + rgBullet: TRadioGroup; + tsPicture: TTabSheet; + rgHotSpot: TRadioGroup; + Label3: TLabel; + txtName: TEdit; + Image1: TImage; + btnChangePicture: TButton; + tsText: TTabSheet; + lblText: TLabel; + tsComponent: TTabSheet; + lblComponent: TLabel; + txtWidth: TEdit; + Label2: TLabel; + txtHeight: TEdit; + Label4: TLabel; + rgPicVAlign: TRadioGroup; + rgCtrlVAlign: TRadioGroup; + tsBreak: TTabSheet; + txtBreakWidth: TEdit; + Label5: TLabel; + rgBreakColor: TRadioGroup; + rgBreakStyle: TRadioGroup; + procedure btnChangePictureClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmProp: TfrmProp; + +implementation +uses Unit1; + +{$R *.DFM} + +procedure TfrmProp.btnChangePictureClick(Sender: TObject); +begin + Form1.OpenDialog1.Title := 'Changing Image'; + {$IFDEF RICHVIEWDEF3} + Form1.OpenDialog1.Filter := 'Graphics(*.bmp;*.wmf;*.ico;*.jpg)|*.bmp;*.wmf;*.ico;*.jpg|All(*.*)|*.*'; + {$ELSE} + Form1.OpenDialog1.Filter := 'Graphics(*.bmp;*.wmf;*.ico)|*.bmp;*.wmf;*.ico|All(*.*)|*.*'; + {$ENDIF} + if Form1.OpenDialog1.Execute then + Image1.Picture.LoadFromFile(Form1.OpenDialog1.FileName); +end; + + +end. diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.bdsproj b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.bdsproj new file mode 100644 index 0000000..eb5931c --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + RVEditDemo.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.dpr b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.dpr new file mode 100644 index 0000000..dd3a4ea --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.dpr @@ -0,0 +1,25 @@ +program RVEditDemo; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + CPFrm in 'CPFrm.pas' {frmCP}, + PropFrm in 'PropFrm.pas' {frmProp}, + ListFrm in 'ListFrm.pas' {frmList}, + PreviewFrm in 'PreviewFrm.pas' {frmPreview}, + RVUndoStr in 'RVUndoStr.pas', + OptionsFrm in 'OptionsFrm.pas' {frmOptions}; + +{$R *.RES} + +begin + Application.Initialize; + Application.Title := 'RichViewEdit Demo'; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TfrmCP, frmCP); + Application.CreateForm(TfrmProp, frmProp); + Application.CreateForm(TfrmList, frmList); + Application.CreateForm(TfrmPreview, frmPreview); + Application.CreateForm(TfrmOptions, frmOptions); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.mps b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.mps new file mode 100644 index 0000000..7054359 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.mps @@ -0,0 +1,13 @@ +[Hooked Modules] +RVEditDemo.exe=T +[Non-Hooked Modules] +Secur32.dll=T +oleaut32.dll=T +msvcrt.dll=T +ole32.dll=T +imm32.dll=T +LPK.DLL=T +USP10.dll=T +uxtheme.dll=T +MSCTF.dll=T +msctfime.ime=T diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.mpt b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.mpt new file mode 100644 index 0000000..593f470 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.mpt differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.res b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/RVEditDemo.res differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/RVUndoStr.pas b/12.0.4/Demos/Delphi/Editors/Editor 1/RVUndoStr.pas new file mode 100644 index 0000000..2968a90 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/RVUndoStr.pas @@ -0,0 +1,20 @@ +unit RVUndoStr; + +interface +uses RVEdit; + +const RVUndoTypeNamesEn : array [TRVUndoType] of String = + + ( + '', // <- no undo + 'removing', 'inserting', 'paragraph modification', + 'editing', 'page break', 'removing page break', + 'typing', 'tag modification', 'changing text style', + 'inserting checkpoint', 'removing checkpoint', + 'editing checkpoint','modifying', 'bullets', + '' // <- use custom undo name instead + ); + +implementation + +end. diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/Readme.rvf b/12.0.4/Demos/Delphi/Editors/Editor 1/Readme.rvf new file mode 100644 index 0000000..0f4e897 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/Readme.rvf differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/Unit1.dfm b/12.0.4/Demos/Delphi/Editors/Editor 1/Unit1.dfm new file mode 100644 index 0000000..70fa975 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/Unit1.pas b/12.0.4/Demos/Delphi/Editors/Editor 1/Unit1.pas new file mode 100644 index 0000000..04235b1 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 1/Unit1.pas @@ -0,0 +1,1604 @@ + +{*******************************************************} +{ } +{ RichView } +{ Editor Demo. } +{ RichView components. } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{ + This demo uses a predefined set of styles. + This demo shows how to implement: + - "Edit" menu (Clipboard and Undo); + - "Search" command; + - checkpoints; + - print preview; + - inserting document or image; + - inserting some controls; + - working with TOleContainer; + - working with table; + - changing background properties and other options. + It does not implement: + - commands like "make bold" or "apply font"; + - standard "File" commands (Open, Save, SaveAs. + (see Editor 2 demo for these features) +} + +unit Unit1; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, RVEdit, PtblRV, RVMisc, CtrlImg, RVUndoStr, RVUni, + jpeg, ImgList, + Clipbrd, StdCtrls, ExtCtrls, ComCtrls, Menus, OleCtnrs, + RVTable, Buttons, CRVData, CRVFData, RVERVData, RVItem, RVFuncs, RVTypes; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + StatusBar1: TStatusBar; + MainMenu1: TMainMenu; + mpdInsert: TMenuItem; + mitPicture: TMenuItem; + mpdComponent: TMenuItem; + mitButtonComp: TMenuItem; + mitEditBoxComp: TMenuItem; + mitBreak: TMenuItem; + OpenDialog1: TOpenDialog; + Panel1: TPanel; + cmbText: TComboBox; + cmbPara: TComboBox; + mpdFile: TMenuItem; + N1: TMenuItem; + mitExit: TMenuItem; + mpdBullet: TMenuItem; + mitHelpIcon: TMenuItem; + mitHelpSearchIcon: TMenuItem; + mitPropertiesIcon: TMenuItem; + mitSave: TMenuItem; + SaveDialog1: TSaveDialog; + N2: TMenuItem; + mitClear: TMenuItem; + mpdEdit: TMenuItem; + mitCopy: TMenuItem; + mitPaste: TMenuItem; + mitCut: TMenuItem; + mitDelete: TMenuItem; + PasteAs1: TMenuItem; + mitPasteAsText: TMenuItem; + mitPasteAsMetafile: TMenuItem; + mitPasteAsBitmap: TMenuItem; + mitPasteAsRVF: TMenuItem; + N3: TMenuItem; + mitEditCheckpoint: TMenuItem; + mitEditProps: TMenuItem; + PopupMenu1: TPopupMenu; + mitEditProp1: TMenuItem; + mitEditCheckpoint1: TMenuItem; + mpdHotspot: TMenuItem; + mitAddImageHS: TMenuItem; + mitAddTextHS: TMenuItem; + mitSelectAll: TMenuItem; + mpdMisc: TMenuItem; + N4: TMenuItem; + mitPrint: TMenuItem; + FindDialog1: TFindDialog; + N6: TMenuItem; + + mitSearch: TMenuItem; + mitPasteAsOle: TMenuItem; + N8: TMenuItem; + mitPreview: TMenuItem; + mitSelectCurrentWord: TMenuItem; + RVPrint1: TRVPrint; + mpdBackground: TMenuItem; + mitBackNoBitmap: TMenuItem; + mitBackStretched: TMenuItem; + mitBackTiled: TMenuItem; + mitBackTiledandScrolled: TMenuItem; + mitBackCentered: TMenuItem; + N5: TMenuItem; + mitCheckpointList: TMenuItem; + N9: TMenuItem; + mitRemovePageBreak: TMenuItem; + mitInsertPageBreak: TMenuItem; + N10: TMenuItem; + mitUndo: TMenuItem; + mitRedo: TMenuItem; + mitInsertFile: TMenuItem; + mitPasteAsUnicodeText: TMenuItem; + mitLoad: TMenuItem; + mpdTable: TMenuItem; + mitInserttable1: TMenuItem; + mitInsertTable2: TMenuItem; + N7: TMenuItem; + mitMergeCells: TMenuItem; + N13: TMenuItem; + mitUmRows: TMenuItem; + mitUmCols: TMenuItem; + mitUmRowsandCols: TMenuItem; + Insert1: TMenuItem; + mitRowsAbove: TMenuItem; + mitRowsBelow: TMenuItem; + N14: TMenuItem; + mitColsLeft: TMenuItem; + mitColsRight: TMenuItem; + Delete1: TMenuItem; + mitDelRows: TMenuItem; + mitDelColumns: TMenuItem; + Unmerge1: TMenuItem; + Split1: TMenuItem; + mitSplitVertically: TMenuItem; + mitSplitHorizontally: TMenuItem; + mitInsertTable3: TMenuItem; + mitInsertTable4: TMenuItem; + psd: TPrinterSetupDialog; + mitPasteAsRTF: TMenuItem; + RVStyle1: TRVStyle; + N11: TMenuItem; + mitReadOnly: TMenuItem; + N12: TMenuItem; + mitOptions: TMenuItem; + mpdLists: TMenuItem; + mitApplyList: TMenuItem; + mitRemoveLists: TMenuItem; + il: TImageList; + mitBackTopLeft: TMenuItem; + mitBackTopRight: TMenuItem; + mitBackBottomLeft: TMenuItem; + mitBackBottomRight: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure mitPictureClick(Sender: TObject); + procedure mitButtonCompClick(Sender: TObject); + procedure mitEditBoxCompClick(Sender: TObject); + procedure RichViewEdit1CurParaStyleChanged(Sender: TObject); + procedure RichViewEdit1CurTextStyleChanged(Sender: TObject); + procedure cmbParaClick(Sender: TObject); + procedure cmbTextClick(Sender: TObject); + procedure mitBreakClick(Sender: TObject); + procedure mitExitClick(Sender: TObject); + procedure mitInsertBulletClick(Sender: TObject); + procedure mitSaveClick(Sender: TObject); + procedure mitClearClick(Sender: TObject); + procedure mpdEditClick(Sender: TObject); + procedure RichViewEdit1Select(Sender: TObject); + procedure mitPasteAsBitmapClick(Sender: TObject); + procedure mitPasteAsMetafileClick(Sender: TObject); + procedure mitPasteAsTextClick(Sender: TObject); + procedure mitPasteClick(Sender: TObject); + procedure mitDeleteClick(Sender: TObject); + procedure mitCutClick(Sender: TObject); + procedure mitCopyClick(Sender: TObject); + procedure mitEditCheckpointClick(Sender: TObject); + procedure mitAddHSClick(Sender: TObject); + procedure mitSelectAllClick(Sender: TObject); + procedure mitEditPropsClick(Sender: TObject); + procedure mitPrintClick(Sender: TObject); + procedure RichViewEdit1RVFPictureNeeded(Sender: TCustomRichView; Name: String; Tag: Integer; + var gr: TGraphic); + procedure RichViewEdit1RVFControlNeeded(Sender: TCustomRichView; Name: String; Tag: Integer; + var ctrl: TControl); + procedure RichViewEdit1RVFImageListNeeded(Sender: TCustomRichView; ImageListTag: Integer; + var il: TCustomImageList); + procedure mitSearchClick(Sender: TObject); + procedure FindDialog1Find(Sender: TObject); + procedure mitCheckPointListClick(Sender: TObject); + procedure mitPasteAsRVFClick(Sender: TObject); + procedure mitPasteAsOleClick(Sender: TObject); + procedure PopupMenu1Popup(Sender: TObject); + procedure mitPreviewClick(Sender: TObject); + procedure mitBackClick(Sender: TObject); + procedure RichViewEdit1SaveComponentToFile(Sender: TCustomRichView; + Path: String; SaveMe: TPersistent; SaveFormat: TRVSaveFormat; + var OutStr: String); + procedure mitSelectCurrentWordClick(Sender: TObject); + procedure RichViewEdit1Jump(Sender: TObject; id: Integer); + procedure RichViewEdit1Change(Sender: TObject); + procedure mpdBackgroundClick(Sender: TObject); + procedure mitInsertPageBreakClick(Sender: TObject); + procedure mitRemovePageBreakClick(Sender: TObject); + procedure mitUndoClick(Sender: TObject); + procedure mitRedoClick(Sender: TObject); + procedure mitInsertFileClick(Sender: TObject); + procedure mitPasteAsUnicodeTextClick(Sender: TObject); + procedure mitLoadClick(Sender: TObject); + procedure mitInserttable1Click(Sender: TObject); + procedure mitInsertTable2Click(Sender: TObject); + procedure mitCellsOperationClick(Sender: TObject); + procedure mpdTableClick(Sender: TObject); + procedure mitInsertTable3Click(Sender: TObject); + procedure mitInsertTable4Click(Sender: TObject); + procedure RichViewEdit1RVMouseMove(Sender: TObject; id: Integer); + procedure mitPasteAsRTFClick(Sender: TObject); + procedure mitReadOnlyClick(Sender: TObject); + procedure mitOptionsClick(Sender: TObject); + procedure mitApplyListClick(Sender: TObject); + procedure mitRemoveListsClick(Sender: TObject); + procedure RichViewEdit1Click(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure RichViewEdit1ControlAction(Sender: TCustomRichView; + ControlAction: TRVControlAction; ItemNo: Integer; + var ctrl: TControl); + procedure RichViewEdit1WriteHyperlink(Sender: TCustomRichView; + id: Integer; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; var Target, Extras: string); + private + { Private declarations } + ActiveOleContainer: TOleContainer; + HTMLSaveOptions: TRVSaveOptions; + HTMLTitle: String; + procedure OnOleResize(Sender: TObject); + procedure OnOleActivate(Sender: TObject); + procedure OnOleDeactivate(Sender: TObject); + procedure OnControlClick(Sender: TObject); + procedure WMDisplayChange(var Message: TMessage{TWMDisplayChange}); message WM_DISPLAYCHANGE; + procedure UpdateUndoMenu; + procedure DisplayUnicodeWarning; + function GetUnicodeFontName: String; + function GetRVFErrors: String; + procedure FillStyleCombo(Styles: TCustomRVInfos; cmb: TComboBox); + procedure CloseOleContainer; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +uses CPFrm, PropFrm, ListFrm, PreviewFrm, OptionsFrm; + +{$R *.DFM} + +{ This demo uses conditional defines from RV_Defs.inc (see include + directive at the beginnning of this file) + RICHVIEWDEF3 is defined, if there is Delphi3 or later or C++Builder 3 or later + RICHVIEWDEF4 is defined, if there is Delphi4 or later +} + +procedure TForm1.FormCreate(Sender: TObject); +begin + Randomize; + + HTMLSaveOptions := [rvsoImageSizes,rvsoUseCheckpointsNames]; + HTMLTitle := 'Demo File'; + + RVStyle1.TextStyles[11].FontName := GetUnicodeFontName; + + RVStyle1.ListStyles[0].Levels[0].Font.Charset := SYMBOL_CHARSET; + + // Item can have associated "tags" - integers or strings. + // Comment the next line to use integer tags + RichViewEdit1.Options := RichViewEdit1.Options+[rvoTagsArePChars]; + + // Loading the initial file. + RichViewEdit1.LoadRVF(ExtractFilePath(Application.ExeName)+'Readme.rvf'); + FillStyleCombo(RVStyle1.ParaStyles, cmbPara); + FillStyleCombo(RVStyle1.TextStyles, cmbText); + RichViewEdit1.Format; + cmbPara.ItemIndex := RichViewEdit1.CurParaStyleNo; + cmbText.ItemIndex := RichViewEdit1.CurTextStyleNo; + UpdateUndoMenu; +end; +{ Returning available Unicode-enabled font ---------------------------} +function TForm1.GetUnicodeFontName: String; +begin + if Screen.Fonts.IndexOf('Arial Unicode MS')>=0 then + Result := 'Arial Unicode MS' + else if Screen.Fonts.IndexOf('Lucida Sans Unicode')>=0 then + Result := 'Lucida Sans Unicode' + else + Result := 'Arial'; +end; +{ Filling combobox with standard styles ------------------------------} +procedure TForm1.FillStyleCombo(Styles: TCustomRVInfos; cmb: TComboBox); +var i: Integer; +begin + { The simplest way to fill the combo box with style names is: + cmb.Items.Assign(Styles); + But this code will fill the combo box with all styles - + both standard styles (i.e. real styles) and non-standard styles will be + added in it. + So we'll fill in the combo box manually. + For simplification, we'll add only the first standard styles } + cmb.Items.BeginUpdate; + cmb.Items.Clear; + for i := 0 to Styles.Count-1 do begin + if not TCustomRVInfo(Styles.Items[i]).Standard then + break; + cmb.Items.Add(TCustomRVInfo(Styles.Items[i]).StyleName); + end; + cmb.Items.EndUpdate; +end; +{---------------------------------------------------------------------} +procedure TForm1.UpdateUndoMenu; +var UndoType : TRVUndoType; +begin + UndoType := RichViewEdit1.UndoAction; + mitUndo.Enabled := UndoType<>rvutNone; + if UndoType=rvutCustom then + mitUndo.Caption := 'Undo '+RichViewEdit1.UndoName + else + mitUndo.Caption := 'Undo '+RVUndoTypeNamesEn[UndoType]; + + UndoType := RichViewEdit1.RedoAction; + mitRedo.Enabled := UndoType<>rvutNone; + if UndoType=rvutCustom then + mitRedo.Caption := 'Redo '+RichViewEdit1.RedoName + else + mitRedo.Caption := 'Redo '+RVUndoTypeNamesEn[UndoType]; +end; +{---------------------------------------------------------------------} +procedure TForm1.DisplayUnicodeWarning; +var wasclear: Boolean; +begin + wasclear := RichViewEdit1.ItemCount=0; + // This method is called before loading Unicode + // (when inserting Unicode, editor automatically switches to Unicode style, + // according to RVStyle1.DefUnicodeStyle, if necessary) + if not RVStyle1.TextStyles[RichViewEdit1.CurTextStyleNo].Unicode then + Application.MessageBox('Loading/Inserting Unicode data using non-Unicode text style.'#13+ + 'Text will be converted.'#13+ + 'Choose "Unicode" style in combo to use Unicode text style', + 'Warning', MB_OK or MB_ICONEXCLAMATION); + if wasclear then + RichViewEdit1.Clear; +end; +{======================================================================} +{ Font and paragraph combos } +{======================================================================} +procedure TForm1.RichViewEdit1CurParaStyleChanged(Sender: TObject); +begin + if RichViewEdit1.CurParaStyleNo'' then + Result := #13'('+Result+')'; +end; +{ File|Save... --------------------------------------------------------} +procedure TForm1.mitSaveClick(Sender: TObject); + var r: Boolean; +begin + SaveDialog1.Title := 'Save & Export'; + SaveDialog1.Filter := 'RichView Format files(*.rvf)|*.rvf|'+ + 'RTF Files (*.rtf)|*.rtf|'+ + 'Text (*.txt)|*.txt|'+ + 'Unicode Text (*.txt)|*.txt|'+ + 'HTML - with CSS (*.htm;*.html)|*.htm;*.html|'+ + 'HTML - Simplified (*.htm;*.html)|*.htm;*.html'; + SaveDialog1.DefaultExt := 'rvf'; + if SaveDialog1.Execute then begin + Screen.Cursor := crHourglass; + case SaveDialog1.FilterIndex of + 1: // RVF + r := RichViewEdit1.SaveRVF(SaveDialog1.FileName, False); + 2: // RTF + r := RichViewEdit1.SaveRTF(SaveDialog1.FileName, False); + 3: // ANSI Text (byte per character) + r := RichViewEdit1.SaveText(SaveDialog1.FileName, 80); + 4: // Unicode Text (2 bytes per character) + r := RichViewEdit1.SaveTextW(SaveDialog1.FileName, 80); + 5: // HTML with CSS + r := RichViewEdit1.SaveHTMLEx(SaveDialog1.FileName, HTMLTitle,'img', '', + '', '', HTMLSaveOptions); + 6: // HTML + r := RichViewEdit1.SaveHTML(SaveDialog1.FileName, HTMLTitle,'img', + HTMLSaveOptions); + else + r := False; + end; + Screen.Cursor := crDefault; + if not r then + Application.MessageBox('Error during saving', 'Error', 0); + end; +end; +{ File|Options... --------------------------------------------------------} +procedure TForm1.mitOptionsClick(Sender: TObject); +var RVFOptions : TRVFOptions; +begin + frmOptions.SetOptions(RichViewEdit1.RVFOptions, HTMLSaveOptions, HTMLTitle); + if frmOptions.ShowModal=mrOk then begin + frmOptions.GetOptions(RVFOptions, HTMLSaveOptions, HTMLTitle); + RichViewEdit1.RVFOptions := RVFOptions; + end; +end; +{ Event: saving controls in HTML --------------------------------------} +// Note: not all browsers support tags outside
tags +procedure TForm1.RichViewEdit1SaveComponentToFile(Sender: TCustomRichView; + Path: String; SaveMe: TPersistent; SaveFormat: TRVSaveFormat; + var OutStr: String); +begin + case SaveFormat of + rvsfText: + begin + OutStr := '('+SaveMe.ClassName+')'; + end; + rvsfHTML: + begin + if SaveMe is TButton then begin + OutStr := ''; + exit; + end; + if SaveMe is TEdit then begin + OutStr := ''; + exit; + end; + end; + rvsfRTF: + begin + OutStr := '{\plain\b ('+SaveMe.ClassName+')}'; + end; + end; +end; +{ Event: saving URLs in HTML and RTF ---------------------------------} +procedure TForm1.RichViewEdit1WriteHyperlink(Sender: TCustomRichView; + id: Integer; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; var Target, Extras: string); +begin + if not (rvoTagsArePChars in Sender.Options) then + exit; + Target := PChar(RVData.GetItemTag(ItemNo)); +end; +{ File|Clear ----------------------------------------------------------} +procedure TForm1.mitClearClick(Sender: TObject); +begin + CloseOleContainer; + RichViewEdit1.Clear; + RichViewEdit1.Format; + cmbPara.ItemIndex := RichViewEdit1.CurParaStyleNo; + cmbText.ItemIndex := RichViewEdit1.CurTextStyleNo; + UpdateUndoMenu; +end; +{ File|Print Preview --------------------------------------------------} +procedure TForm1.mitPreviewClick(Sender: TObject); +begin + RVPrint1.AssignSource(RichViewEdit1); + RVPrint1.FormatPages(rvdoALL); + if RVPrint1.PagesCount>0 then begin + frmPreview.rvpp.RVPrint := RVPrint1; + frmPreview.Button1Click(nil); // Show First Page + frmPreview.ShowModal; + end; +end; +{ File|Print on Default Printer ---------------------------------------} +procedure TForm1.mitPrintClick(Sender: TObject); +var PrintIt: Boolean; +begin + {$IFDEF RICHVIEWDEF3} + PrintIt := psd.Execute; + {$ELSE} + PrintIt := True; + {$ENDIF} + if PrintIt then begin + RVPrint1.AssignSource(RichViewEdit1); + RVPrint1.FormatPages(rvdoALL); + if RVPrint1.PagesCount>0 then + RVPrint1.Print('RichView Edit Demo',1,False); + end; +end; +{ File|Exit -----------------------------------------------------------} +procedure TForm1.mitExitClick(Sender: TObject); +begin + Close; +end; +{======================================================================} +{ Main menu: "Insert" } +{======================================================================} +{ Insert|File... ------------------------------------------------------} +procedure TForm1.mitInsertFileClick(Sender: TObject); +var r: Boolean; +begin + OpenDialog1.Title := 'Inserting File'; + OpenDialog1.Filter := 'RichView Format Files(*.rvf)|*.rvf|'+ + 'RTF Files(*.rtf)|*.rtf|'+ + 'Text Files - autodetect (*.txt)|*.txt|'+ + 'ANSI Text Files (*.txt)|*.txt|'+ + 'Unicode Text Files (*.txt)|*.txt|'+ + 'OEM Text Files (*.txt)|*.txt'; + if OpenDialog1.Execute then begin + Screen.Cursor := crHourglass; + case OpenDialog1.FilterIndex of + 1: // RVF + r := RichViewEdit1.InsertRVFFromFileEd(OpenDialog1.FileName); + 2: // RTF + r := RichViewEdit1.InsertRTFFromFileEd(OpenDialog1.FileName); + 3: // Text + begin + if RV_TestFileUnicode(OpenDialog1.FileName)=rvutYes then + r := RichViewEdit1.InsertTextFromFileW(OpenDialog1.FileName) + else + r := RichViewEdit1.InsertTextFromFile(OpenDialog1.FileName); + end; + 4: // ANSI Text + r := RichViewEdit1.InsertTextFromFile(OpenDialog1.FileName); + 5: // Unicode Text + r := RichViewEdit1.InsertTextFromFileW(OpenDialog1.FileName); + 6: // OEM Text + r := RichViewEdit1.InsertOEMTextFromFile(OpenDialog1.FileName); + else + r := False; + end; + Screen.Cursor := crDefault; + if not r then + Application.MessageBox('Error reading file', 'Error', + MB_OK or MB_ICONSTOP); + end; +end; +{ Insert|Picture... ---------------------------------------------------} +procedure TForm1.mitPictureClick(Sender: TObject); +var gr: TGraphic; + pic: TPicture; +begin + OpenDialog1.Title := 'Inserting Image'; + {$IFDEF RICHVIEWDEF3} + OpenDialog1.Filter := 'Graphics(*.bmp;*.wmf;*.emf;*.ico;*.jpg)|*.bmp;*.wmf;*.emf;*.ico;*.jpg|All(*.*)|*.*'; + {$ELSE} + OpenDialog1.Filter := 'Graphics(*.bmp;*.wmf;*.emf;*.ico)|*.bmp;*.wmf;*.emf;*.ico|All(*.*)|*.*'; + {$ENDIF} + if OpenDialog1.Execute then + try + pic := TPicture.Create; + try + pic.LoadFromFile(OpenDialog1.FileName); + gr := RV_CreateGraphics(TGraphicClass(pic.Graphic.ClassType)); + gr.Assign(pic.Graphic); + finally + pic.Free; + end; + if gr<>nil then + RichViewEdit1.InsertPicture('',gr,rvvaBaseLine); + except + Application.MessageBox(PChar('Cannot read picture from file '+OpenDialog1.FileName), 'Error', + MB_OK or MB_ICONSTOP); + end; +end; +{ Event: clicking inserted control ------------------------------------} +procedure TForm1.OnControlClick(Sender: TObject); +begin + RichViewEdit1.SelectControl(TControl(Sender)); +end; +{ Insert|Component|Button ---------------------------------------------} +procedure TForm1.mitButtonCompClick(Sender: TObject); +var btn: TButton; +const Captions: array[0..9] of String = + ( + 'Help','Exit','Cancel','Ok','Close','Run','Options...','Minimize', + 'Hide','Show' + ); +begin + btn := TButton.Create(Self); + btn.Caption := Captions[Random(10)]; + btn.OnClick := OnControlClick; + RichViewEdit1.InsertControl('',btn,rvvaBaseline); + if RichViewEdit1.CurItemStyle=rvsComponent then + RichViewEdit1.SetCurrentItemExtraIntProperty(rvepResizable, 1, True); +end; +{ Insert|Component|Edit Box -------------------------------------------} +procedure TForm1.mitEditBoxCompClick(Sender: TObject); +var edt: TEdit; +const Captions: array[0..9] of String = + ( + '0','Hello','1','$0','2x2=4','enter text here','xnil then begin + ActiveOleContainer.Close; + ActiveOleContainer := nil; + end; +end; +{-----------------------------------------------------------------------} +procedure TForm1.OnOleResize(Sender: TObject); +begin + RichViewEdit1.AdjustControlPlacement2(TControl(Sender)); +end; +{-----------------------------------------------------------------------} +procedure TForm1.OnOleActivate(Sender: TObject); +begin + if ActiveOleContainer<>Sender then + CloseOleContainer; + ActiveOleContainer := TOleContainer(Sender); + RichViewEdit1.AdjustControlPlacement2(TControl(Sender)); +end; +{-----------------------------------------------------------------------} +procedure TForm1.OnOleDeactivate(Sender: TObject); +begin + RichViewEdit1.AdjustControlPlacement2(TControl(Sender)); +end; +{-----------------------------------------------------------------------} +procedure TForm1.RichViewEdit1Click(Sender: TObject); +begin + CloseOleContainer; +end; +{-----------------------------------------------------------------------} +procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); +begin + CloseOleContainer; +end; +{-----------------------------------------------------------------------} +procedure TForm1.RichViewEdit1ControlAction(Sender: TCustomRichView; + ControlAction: TRVControlAction; ItemNo: Integer; var ctrl: TControl); +begin + if ControlAction=rvcaAfterRVFLoad then begin + if ctrl is TOleContainer then begin + TOleContainer(ctrl).OnResize := OnOleResize; + TOleContainer(ctrl).OnActivate := OnOleActivate; + TOleContainer(ctrl).OnDeactivate := OnOleDeactivate; + end + else if ctrl is TButton then + TButton(ctrl).OnClick := OnControlClick + else if ctrl is TEdit then + TEdit(ctrl).OnClick := OnControlClick + end; + if ctrl<>ActiveOleContainer then + exit; + if ControlAction in [rvcaMoveToUndoList, rvcaDestroy, rvcaBeforeRVFSave] then + CloseOleContainer; +end; +{ Edit|Delete ---------------------------------------------------------} +procedure TForm1.mitDeleteClick(Sender: TObject); +begin + // Shortcut to this item is Ctrl+Del + // If you make it Del, you will be unable to use del key in editor + RichViewEdit1.DeleteSelection; +end; +{ Edit|Select All -----------------------------------------------------} +procedure TForm1.mitSelectAllClick(Sender: TObject); +begin + { warning: SelectAll moves caret to the end of the text } + RichViewEdit1.SelectAll; + RichViewEdit1.SetFocus; + RichViewEdit1.Invalidate; +end; +{ Another clipboard-related action ------------------------------------} +procedure TForm1.RichViewEdit1Select(Sender: TObject); +begin + mitCopy.Enabled := RichViewEdit1.SelectionExists; + mitCut.Enabled := mitCopy.Enabled; + mitDelete.Enabled := mitCopy.Enabled; +end; +{ Edit| Insert Page Break----------------------------------------------} +procedure TForm1.mitInsertPageBreakClick(Sender: TObject); +begin + RichViewEdit1.InsertPageBreak; +end; +{ Edit| Remove Page Break----------------------------------------------} +procedure TForm1.mitRemovePageBreakClick(Sender: TObject); +begin + RichViewEdit1.RemoveCurrentPageBreak; +end; +{----------------------------------------------------------------------} +{ This demo understands both tag modes: + 1. rvoTagsArePChars is in Options (tags are strings) + 2. rvoTagsArePChars is not in Options (tags are integers). + So this demo uses two simple universal functions below for convering + tag to String and String to tag. +} +function GetTagStr(Tag: Integer): String; +begin + if (rvoTagsArePChars in Form1.RichViewEdit1.Options) then + if Tag = 0 then + Result := '' + else + Result := PChar(Tag) + else + Result := IntToStr(Tag); +end; + +function MakeTag(TagStr: String): Integer; +begin + if (TagStr<>'') and (rvoTagsArePChars in Form1.RichViewEdit1.Options) then + Result := Integer(StrNew(PChar(TagStr))) + else + Result := StrToIntDef(TagStr,0); +end; +{ Edit|Checkpoint... --------------------------------------------------} +procedure TForm1.mitEditCheckpointClick(Sender: TObject); +var CpNo, Tag: Integer; + Name: String; + CheckPointData: TCheckPointData; + RaiseEvent: Boolean; +begin + CheckPointData := RichViewEdit1.GetCurrentCheckpoint; + if CheckPointData<>nil then begin + RichViewEdit1.GetCheckpointInfo(CheckPointData,Tag,Name,RaiseEvent); + CpNo := RichViewEdit1.GetCheckpointNo(CheckPointData); + frmCp.lblStatus.Caption := 'Editing checkpoint #'+IntToStr(CpNo); + frmCp.txtName.Text := Name; + frmCp.txtTag.Text := GetTagStr(Tag); + frmCp.btnOk.Caption := 'OK'; + frmCp.btnDelete.Enabled := True; + end + else begin + frmCp.lblStatus.Caption := 'Checkpoint does not exist'; + frmCp.txtName.Text := ''; + frmCp.txtTag.Text := GetTagStr(0); + frmCp.btnOk.Caption := 'Add'; + frmCp.btnDelete.Enabled := False; + end; + case frmCP.ShowModal of + mrOk: { add new checkpoint or modify existed one } + RichViewEdit1.SetCurrentCheckpointInfo(MakeTag(frmCp.txtTag.Text), + frmCp.txtName.Text,False); + mrYes: { delete checkpoint } + RichViewEdit1.RemoveCurrentCheckpoint; + end; +end; +{ Edit|Search... -------------------------------------} +procedure TForm1.mitSearchClick(Sender: TObject); +begin + FindDialog1.Execute; +end; +{-----------------------------------------------------------------------} +procedure TForm1.FindDialog1Find(Sender: TObject); +begin + if not RichViewEdit1.SearchText(FindDialog1.FindText, + GetRVESearchOptions(FindDialog1.Options)) then + Application.MessageBox('Can''t find', 'Search complete', MB_OK or MB_ICONEXCLAMATION); +end; +{ Edit|Select Current Word -------------------------------------} +procedure TForm1.mitSelectCurrentWordClick(Sender: TObject); +begin + RichViewEdit1.SelectCurrentWord; + // now you can do something with current word: + // translate or spell check, for example... +end; +{ Edit|Current Item Properties... -------------------------------------} +procedure TForm1.mitEditPropsClick(Sender: TObject); +var ItemName: TRVAnsiString; + Tag, Index: Integer; + VAlign: TRVVAlign; + ImageList: TCustomImageList; + gr: TGraphic; + ctrl: TControl; + BreakColor: TColor; + BreakStyle: TRVBreakStyle; + BreakWidth: Byte; +begin + frmProp.PageControl1.Visible := True; + frmProp.tsBullet.TabVisible := False; + frmProp.tsHotSpot.TabVisible := False; + frmProp.tsPicture.TabVisible := False; + frmProp.tsText.TabVisible := False; + frmProp.tsComponent.TabVisible := False; + frmProp.tsBreak.TabVisible := False; + frmProp.txtName.Enabled := True; + case RichViewEdit1.CurItemStyle of + rvsBullet: + begin + RichViewEdit1.GetCurrentBulletInfo(ItemName, Index, ImageList, Tag); + frmProp.tsBullet.TabVisible := True; + frmProp.rgBullet.ItemIndex := Index; + frmProp.txtName.Text := ItemName; + frmProp.txtTag.Text := GetTagStr(Tag); + end; + rvsHotspot: + begin + // you can use GetCurrentBulletInfo or GetCurrentHotspotInfo + // to receive info about hotspot in caret position. + // in this demo we do not need HotImageIndex, because here + // HotImageIndex = ImageIndex+2 + // and so we can use GetCurrentBulletInfo + RichViewEdit1.GetCurrentBulletInfo(ItemName, Index, ImageList, Tag); + frmProp.tsHotspot.TabVisible := True; + frmProp.rgHotspot.ItemIndex := Index-3; + frmProp.txtName.Text := ItemName; + frmProp.txtTag.Text := GetTagStr(Tag); + end; + rvsPicture, rvsHotPicture: + begin + RichViewEdit1.GetCurrentPictureInfo(ItemName, gr, VAlign, Tag); + frmProp.tsPicture.TabVisible := True; + frmProp.Image1.Picture.Graphic := gr; + frmProp.txtName.Text := ItemName; + frmProp.txtTag.Text := GetTagStr(Tag); + frmProp.rgPicVAlign.ItemIndex := Integer(VAlign); + end; + rvsComponent: + begin + RichViewEdit1.GetCurrentControlInfo(ItemName, ctrl, VAlign, Tag); + frmProp.tsComponent.TabVisible := True; + frmProp.txtWidth.Text := IntToStr(ctrl.Width); + frmProp.txtHeight.Text := IntToStr(ctrl.Height); + frmProp.txtName.Text := ItemName; + frmProp.lblComponent.Caption := ctrl.ClassName; + frmProp.txtTag.Text := GetTagStr(Tag); + frmProp.rgCtrlVAlign.ItemIndex := Integer(VAlign); + end; + rvsBreak: + begin + frmProp.tsBreak.TabVisible := True; + RichViewEdit1.GetCurrentBreakInfo(BreakWidth, BreakStyle, BreakColor, Tag); + frmProp.txtBreakWidth.Text := IntToStr(BreakWidth); + case BreakColor of + clNone: + frmProp.rgBreakColor.ItemIndex := 0; + clRed: + frmProp.rgBreakColor.ItemIndex := 1; + clGreen: + frmProp.rgBreakColor.ItemIndex := 2; + clBlue: + frmProp.rgBreakColor.ItemIndex := 3; + end; + frmProp.rgBreakStyle.ItemIndex := ord(BreakStyle); + frmProp.txtName.Text := '(not available for breaks)'; + frmProp.txtName.Enabled := False; + frmProp.txtTag.Text := GetTagStr(Tag); + end; + rvsTable: + begin + frmProp.txtName.Text := RichViewEdit1.GetCurrentItemText; + frmProp.txtTag.Text := GetTagStr(RichViewEdit1.GetCurrentTag); + frmProp.PageControl1.Visible := False; + end; + else + begin + frmProp.lblText.Caption := RichViewEdit1.GetCurrentItemText; + frmProp.txtTag.Text := GetTagStr(RichViewEdit1.GetCurrentTag); + frmProp.tsText.TabVisible := True; + frmProp.txtName.Text := '(not available for text)'; + frmProp.txtName.Enabled := False; + end; + end; + if frmProp.ShowModal=mrOk then + case RichViewEdit1.CurItemStyle of + rvsBullet: + begin + RichViewEdit1.SetCurrentBulletInfo( + frmProp.txtName.Text, + frmProp.rgBullet.ItemIndex, + nil, + MakeTag(frmProp.txtTag.Text)); + end; + rvsHotspot: + begin + RichViewEdit1.SetCurrentHotspotInfo( + frmProp.txtName.Text, + frmProp.rgHotspot.ItemIndex+3, + frmProp.rgHotspot.ItemIndex+3+2, + nil, + MakeTag(frmProp.txtTag.Text)); + end; + rvsPicture, rvsHotPicture: + begin + { first we need to create a copy of image ...} + gr := TGraphic(frmProp.Image1.Picture.Graphic.ClassType.Create); + gr.Assign(frmProp.Image1.Picture.Graphic); + RichViewEdit1.SetCurrentPictureInfo( + frmProp.txtName.Text, + gr, + TRVVAlign(frmProp.rgPicVAlign.ItemIndex), + MakeTag(frmProp.txtTag.Text)); + end; + rvsComponent: + begin + // we want these setting to be undone as one action, + // so we use BeginUndoGroup, SetUndoGroupMode(True), settings, SetUndoGroupMode(False) + RichViewEdit1.BeginUndoGroup(rvutModifyItem); + // you can use BeginUndoCustomGroup instead of BeginUndoGroup + // example: + // RichViewEdit1.BeginUndoCustomGroup('modifying control'); + // In this case undo type will be rvutCustom + // (look at TForm1.UpdateUndoMenu in this file) + RichViewEdit1.SetUndoGroupMode(True); + RichViewEdit1.SetCurrentControlInfo( + frmProp.txtName.Text, + TRVVAlign(frmProp.rgCtrlVAlign.ItemIndex), + MakeTag(frmProp.txtTag.Text)); + RichViewEdit1.ResizeCurrentControl( + StrToIntDef(frmProp.txtWidth.Text, ctrl.Width), + StrToIntDef(frmProp.txtHeight.Text, ctrl.Height)); + RichViewEdit1.SetUndoGroupMode(False); + end; + rvsBreak: + begin + case frmProp.rgBreakColor.ItemIndex of + -1,0: + BreakColor := clNone; + 1: + BreakColor := clRed; + 2: + BreakColor := clGreen; + 3: + BreakColor := clBlue; + end; + BreakWidth := StrToIntDef(frmProp.txtBreakWidth.Text,1); + BreakStyle := TRVBreakStyle(frmProp.rgBreakStyle.ItemIndex); + RichViewEdit1.SetCurrentBreakInfo(BreakWidth,BreakStyle,BreakColor, + MakeTag(frmProp.txtTag.Text)); + end; + rvsTable: + begin + RichViewEdit1.BeginUndoGroup(rvutModifyItem); + RichViewEdit1.SetUndoGroupMode(True); + RichViewEdit1.SetCurrentItemText(frmProp.txtName.Text); + RichViewEdit1.SetCurrentTag(MakeTag(frmProp.txtTag.Text)); + RichViewEdit1.SetUndoGroupMode(False); + end; + else + begin + RichViewEdit1.SetCurrentTag(MakeTag(frmProp.txtTag.Text)); + end; + end; +end; +{======================================================================} +{ Main menu : "Misc" } +{======================================================================} +{ Misc | Go to checkpoint ... -----------------------------------------} +procedure TForm1.mitCheckPointListClick(Sender: TObject); +var X,Y,Tag: Integer; + Name: String; + CheckpointData: TCheckpointData; + RaiseEvent: Boolean; + s: String; +begin + { Does not work for checkpoints in table cells } + frmList.lst.Items.Clear; + CheckpointData := RichViewEdit1.GetFirstCheckPoint; + while CheckpointData<>nil do begin + RichViewEdit1.GetCheckpointInfo(CheckpointData,Tag,Name,RaiseEvent); + RichViewEdit1.GetCheckpointXY(CheckpointData,X,Y); + s := Format('(X:%d,Y:%d) Name:"%s" Tag:"%s"', [X,Y,Name,GetTagStr(Tag)]); + frmList.lst.Items.Add(s); + CheckpointData := RichViewEdit1.GetNextCheckpoint(CheckpointData); + end; + if frmList.ShowModal=mrOk then + with RichViewEdit1 do + ScrollTo(GetCheckPointY(frmList.lst.ItemIndex)); +end; +{ Misc | Read-Only -----------------------------------------------------} +procedure TForm1.mitReadOnlyClick(Sender: TObject); +begin + RichViewEdit1.ReadOnly := not RichViewEdit1.ReadOnly; + mitReadOnly.Checked := RichViewEdit1.ReadOnly; +end; +{ Misc | Background submenu popups ------------------------------------} +procedure TForm1.mpdBackgroundClick(Sender: TObject); +begin + // Displaying RichViewEdit1.BackgroundStyle as checkmark in submenu... + mitBackNoBitmap.Checked := RichViewEdit1.BackgroundStyle=bsNoBitmap; + mitBackStretched.Checked := RichViewEdit1.BackgroundStyle=bsStretched; + mitBackTiledAndScrolled.Checked := RichViewEdit1.BackgroundStyle=bsTiledAndScrolled; + mitBackTiled.Checked := RichViewEdit1.BackgroundStyle=bsTiled; + mitBackCentered.Checked := RichViewEdit1.BackgroundStyle=bsCentered; + mitBackTopLeft.Checked := RichViewEdit1.BackgroundStyle=bsTopLeft; + mitBackTopRight.Checked := RichViewEdit1.BackgroundStyle=bsTopRight; + mitBackBottomLeft.Checked := RichViewEdit1.BackgroundStyle=bsBottomLeft; + mitBackBottomRight.Checked := RichViewEdit1.BackgroundStyle=bsBottomRight; +end; +{ Misc | Background options -------------------------------------------} +procedure TForm1.mitBackClick(Sender: TObject); +begin + RichViewEdit1.BackgroundStyle := TBackgroundStyle(TMenuItem(Sender).Tag); +end; +{======================================================================} +{ On Popup -------------------------------------------------------------} +procedure TForm1.PopupMenu1Popup(Sender: TObject); +begin + mitEditProp1.Enabled := not RichViewEdit1.SelectionExists; +end; +{-----------------------------------------------------------------------} +{OnChange event handler. +{-----------------------------------------------------------------------} +procedure TForm1.RichViewEdit1Change(Sender: TObject); +begin + UpdateUndoMenu; +end; +{-----------------------------------------------------------------------} +// You should manually update palette info when user changes color mode +// without restarting Windows +procedure TForm1.WMDisplayChange(var Message: TMessage{TWMDisplayChange}); +begin + RichViewEdit1.UpdatePaletteInfo; + RVPrint1.UpdatePaletteInfo; +end; +{-----------------------------------------------------------------------} +{ Event: OnJump (when user clicks hypertext item with pressed Ctrl key } +procedure TForm1.RichViewEdit1Jump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; + s: String; +begin + // NOTE: OnJump is called after the caret is repositioned to clicked item + // But warning: a clicked event is not necessarily an active item + // (when clicking on left part of picture or left part of first character in text item, + // caret moves before item and previous item becomes active!) + RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo); + s := GetTagStr(RVData.GetItemTag(ItemNo)); + Application.MessageBox(PChar(Format('Tag of clicked hyperlink is "%s"', [s])), + 'Hyperlink', MB_OK or MB_ICONINFORMATION); + +end; +{------------------------------------------------------------------------------} +{ Event: OnRVMouseMove (when user moves mouse above hypertext item with pressed Ctrl key } +procedure TForm1.RichViewEdit1RVMouseMove(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; + s: String; +begin + if id=-1 then begin + StatusBar1.SimpleText := ''; + end + else begin + RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo); + s := GetTagStr(RVData.GetItemTag(ItemNo)); + StatusBar1.SimpleText := Format('Tag of hyperlink is "%s"', [s]); + end; +end; +{======================================================================} +{ Main menu : "Lists" } +{======================================================================} +{ Lists | Apply -------------------------------------------------------} +procedure TForm1.mitApplyListClick(Sender: TObject); +begin + // See more demos about list styles in Demos\Delphi\Assorted\ListStyles\ + if (RVStyle1.ListStyles.Count=0) or (RVStyle1.ListStyles[0].Levels.Count=0) then begin + Application.MessageBox('Default list style is not defined', '', 0); + exit; + end; + RichViewEdit1.ApplyListStyle(0, 0, 1, False, False); +end; +{ Lists | Remove ------------------------------------------------------} +procedure TForm1.mitRemoveListsClick(Sender: TObject); +begin + RichViewEdit1.RemoveLists(False); +end; +{======================================================================} +{ Main menu : "Table" } +{======================================================================} +{ Table | Insert Table Example 1 --------------------------------------} +procedure TForm1.mitInserttable1Click(Sender: TObject); +var table: TRVTableItemInfo; + r,c: Integer; +begin + table := TRVTableItemInfo.CreateEx(4,3, RichViewEdit1.RVData); + + table.BorderStyle := rvtbRaisedColor; + table.CellBorderStyle := rvtbLoweredColor; + table.BorderLightColor := $00FAF1C9; + table.BorderColor := $00A98E10; + table.CellBorderLightColor := $00FAF1C9; + table.CellBorderColor := $00A98E10; + table.Color := $00EAC724; + table.BorderWidth := 5; + table.CellBorderWidth := 2; + table.CellPadding := 5; + table.CellVSpacing := 1; + table.CellHSpacing := 1; + table.BorderVSpacing := 1; + table.BorderHSpacing := 1; + + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + table.Cells[r,c].BestWidth := 100; + + table.MergeCells(0,0,3,1, False); + table.MergeCells(1,0,1,3, False); + with table.Cells[0,0] do begin + Color := clInfoBk; + Clear; + AddBulletEx( '',0,il,2); + AddNL(' Example 1 ',1,-1); + AddBulletEx( '',0,il,-1); + AddNL('All cells have 100 pixels width, width of table itself is calculated basing on width of cells.', + 0,0); + end; + + if RichViewEdit1.InsertItem('', table) then begin + end; +end; +{ Table | Insert Table Example 2 --------------------------------------} +procedure TForm1.mitInsertTable2Click(Sender: TObject); +var table: TRVTableItemInfo; + btn: TButton; +begin + table := TRVTableItemInfo.CreateEx(10,6, RichViewEdit1.RVData); + table.Color := clWhite; + + table.BorderStyle := rvtbRaisedColor; + table.CellBorderStyle := rvtbLoweredColor; + table.BorderLightColor := clWhite; + table.BorderColor := clBlack; + table.CellBorderLightColor := clWhite; + table.CellBorderColor := clBlack; + + table.BorderWidth := 2; + table.BorderVSpacing := 0; + table.BorderHSpacing := 0; + table.CellBorderWidth := 2; + table.CellPadding := 3; + table.CellVSpacing := 0; + table.CellHSpacing := 0; + table.Cells[0,0].BestWidth := -16; + table.Cells[0,1].BestWidth := -16; + table.Cells[0,2].BestWidth := -16; + table.Cells[0,3].BestWidth := -16; + table.Cells[0,4].BestWidth := -16; + table.Cells[0,5].BestWidth := -16; +// table.Rows.MergeCells(1,0,6,1); + table.MergeCells(2,0,2,8, False); + with table.Cells[2,0] do begin + Clear; + AddNL('Another example.',0,0); + btn := TButton.Create(nil); + btn.Caption := 'With button inside'; + btn.Width := 150; + btn.OnClick := OnControlClick; + AddControlEx('',btn,2,rvvaBaseline); + SetItemExtraIntProperty(ItemCount-1, rvepResizable, 1); + AddNL('Width of table = 90% of document width. Widths of cells = 16%',0,0); + end; + table.BestWidth := -90; + if RichViewEdit1.InsertItem('', table) then begin + end; +end; +{ Table | Insert Table Example 3 --------------------------------------} +procedure TForm1.mitInsertTable3Click(Sender: TObject); +var table: TRVTableItemInfo; + r,c: Integer; +begin + table := TRVTableItemInfo.CreateEx(5,6, RichViewEdit1.RVData); + + table.Color := $00A5CCE7; + table.BorderStyle := rvtbColor; + table.CellBorderStyle := rvtbColor; + table.BorderColor := $002E1234; + table.CellBorderColor := $002E1234; + + table.BorderWidth := 2; + table.BorderVSpacing := 2; + table.BorderHSpacing := 2; + table.CellBorderWidth := 1; + table.CellPadding := 3; + table.CellVSpacing := 0; + table.CellHSpacing := 0; + table.Options := table.Options + [rvtoHideGridLines]; + + for c := 0 to table.Rows[0].Count-1 do + table.Cells[0,c].Color := $00A5E1F8; + + for r := 1 to table.Rows.Count-1 do + table.Cells[r,0].Color := $00A5E1F8; + + for r := 1 to table.Rows.Count-1 do + for c := 1 to table.Rows[r].Count-1 do begin + table.Cells[r,c].Color := $007AB4DA; + if c>1 then + table.Cells[r,c].VisibleBorders.Left := False; + if cnil)); + mitSplitVertically.Enabled := SelectionRectangular; + mitSplitHorizontally.Enabled := SelectionRectangular; + mitUmRows.Enabled := SelectionRectangular; + mitUmCols.Enabled := SelectionRectangular; + mitUmRowsAndCols.Enabled := SelectionRectangular; +end; +{ Table | All other commands --------------------------------------} +procedure TForm1.mitCellsOperationClick(Sender: TObject); +var item: TCustomRVItemInfo; + table: TRVTableItemInfo; + Data: Integer; + r,c,cs,rs: Integer; + s: String; + rve: TCustomRichViewEdit; + ItemNo: Integer; +begin + if not RichViewEdit1.CanChange or + not RichViewEdit1.GetCurrentItemEx(TRVTableItemInfo, rve, item) then + exit; + table := TRVTableItemInfo(item); + ItemNo := rve.GetItemNo(table); + rve.BeginItemModify(ItemNo, Data); + case TMenuItem(Sender).Tag of + 1: + table.InsertRowsAbove(1); + 2: + table.InsertRowsBelow(1); + 3: + table.InsertColsLeft(1); + 4: + table.InsertColsRight(1); + 5: + begin + table.GetNormalizedSelectionBounds(True,r,c,cs,rs); + if rs=table.Rows.Count then begin + // deleting the whole table + rve.SetSelectionBounds(ItemNo,0,ItemNo,1); + rve.DeleteSelection; + exit; + end; + rve.BeginUndoGroup(rvutModifyItem); + rve.SetUndoGroupMode(True); + table.DeleteSelectedRows; + // it's possible all-nil rows/cols appear after deleting + table.DeleteEmptyRows; + table.DeleteEmptyCols; + rve.SetUndoGroupMode(False); + end; + 6: + begin + table.GetNormalizedSelectionBounds(True,r,c,cs,rs); + if cs=table.Rows[0].Count then begin + // deleting the whole table + rve.SetSelectionBounds(ItemNo,0,ItemNo,1); + rve.DeleteSelection; + exit; + end; + rve.BeginUndoGroup(rvutModifyItem); + rve.SetUndoGroupMode(True); + table.DeleteSelectedCols; + // it's possible all-nil rows/cols appear after deleting + table.DeleteEmptyRows; + table.DeleteEmptyCols; + rve.SetUndoGroupMode(False); + end; + 7: + begin + // 3 methods: MergeSelectedCells, DeleteEmptyRows, DeleteEmptyCols + // must be undone as one action. + // So using BeginUndoGroup - SetUndoGroupMode(True) - ... - SetUndoGroupMode(False) + rve.BeginUndoGroup(rvutModifyItem); + rve.SetUndoGroupMode(True); + table.MergeSelectedCells(True); + table.DeleteEmptyRows; + table.DeleteEmptyCols; + rve.SetUndoGroupMode(False); + // table.MergeSelectedCells(False) will not allow to create empty columns + // or rows + end; + 8: + table.UnmergeSelectedCells(True, False); + 9: + table.UnmergeSelectedCells(False, True); + 10: + table.UnmergeSelectedCells(True, True); + 11: + begin + s := '2'; + if InputQuery('Split Vertically','Columns (in each selected cell):',s) then begin + table.SplitSelectedCellsVertically(StrToIntDef(s,0)); + end; + end; + 12: + begin + s := '2'; + if InputQuery('Split Horizontally','Rows (in each selected cell):',s) then begin + table.SplitSelectedCellsHorizontally(StrToIntDef(s,0)); + end; + end; + end; + rve.EndItemModify(ItemNo, Data); + rve.Change; +end; + +initialization + // We need to register classes in order to load them from rvf files + RegisterClasses([TButton, TEdit, TOleContainer]); +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Editors/Editor 1/default.bmp b/12.0.4/Demos/Delphi/Editors/Editor 1/default.bmp new file mode 100644 index 0000000..1de297d Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 1/default.bmp differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 2/REditor.bdsproj b/12.0.4/Demos/Delphi/Editors/Editor 2/REditor.bdsproj new file mode 100644 index 0000000..898c9b6 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 2/REditor.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + REditor.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Editors/Editor 2/REditor.dpr b/12.0.4/Demos/Delphi/Editors/Editor 2/REditor.dpr new file mode 100644 index 0000000..6dd838c --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 2/REditor.dpr @@ -0,0 +1,13 @@ +program REditor; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Editors/Editor 2/REditor.res b/12.0.4/Demos/Delphi/Editors/Editor 2/REditor.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 2/REditor.res differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 2/Unit1.dfm b/12.0.4/Demos/Delphi/Editors/Editor 2/Unit1.dfm new file mode 100644 index 0000000..e6cf82c Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Editor 2/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Editors/Editor 2/Unit1.pas b/12.0.4/Demos/Delphi/Editors/Editor 2/Unit1.pas new file mode 100644 index 0000000..5e654f2 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Editor 2/Unit1.pas @@ -0,0 +1,550 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, Buttons, ComCtrls, ExtCtrls, Menus, + RVStyle, RVScroll, RichView, RVEdit; + +{==============================================================================} +{ RichEditor Demo + Menu items disabling/enabling is not implemented here. + + The main idea: new styles are created and added to rvs.TextStyles when needed. + The right place for this - rve.OnStyleConversion and rve.OnParaStyleConversion + + IMPORTANT: If you right click the editor in design time, choose "Settings" + in the context menu, you'll see that radiogroup is in state + "Allow adding styles dynamically" +{==============================================================================} + +type + TForm1 = class(TForm) + Panel1: TPanel; + StatusBar1: TStatusBar; + rve: TRichViewEdit; + rvs: TRVStyle; + cmbFont: TComboBox; + btnBold: TSpeedButton; + btnItalic: TSpeedButton; + btnUnderline: TSpeedButton; + btnFont: TSpeedButton; + btnLeft: TSpeedButton; + btnCenter: TSpeedButton; + btnRight: TSpeedButton; + btnJustify: TSpeedButton; + btnOpen: TSpeedButton; + btnSave: TSpeedButton; + btnSaveAs: TSpeedButton; + btnNew: TSpeedButton; + cmbFontSize: TComboBox; + Label2: TLabel; + Label3: TLabel; + MainMenu1: TMainMenu; + File1: TMenuItem; + mitOpen: TMenuItem; + mitSave: TMenuItem; + mitNew: TMenuItem; + mitSaveAs: TMenuItem; + N1: TMenuItem; + mitExit: TMenuItem; + Edit1: TMenuItem; + mitUndo: TMenuItem; + mitRedo: TMenuItem; + N2: TMenuItem; + mitCut: TMenuItem; + mitCopy: TMenuItem; + mitPaste: TMenuItem; + mitDelete: TMenuItem; + od: TOpenDialog; + sd: TSaveDialog; + fd: TFontDialog; + btnIdentInc: TSpeedButton; + btnIdentDec: TSpeedButton; + btnFontColor: TSpeedButton; + btnFontBackColor: TSpeedButton; + SpeedButton1: TSpeedButton; + cd: TColorDialog; + procedure mitNewClick(Sender: TObject); + procedure mitOpenClick(Sender: TObject); + procedure mitSaveClick(Sender: TObject); + procedure mitSaveAsClick(Sender: TObject); + procedure mitExitClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure rveChange(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure rveCurTextStyleChanged(Sender: TObject); + procedure rveCurParaStyleChanged(Sender: TObject); + procedure cmbFontClick(Sender: TObject); + procedure rveStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); + procedure mitUndoClick(Sender: TObject); + procedure mitRedoClick(Sender: TObject); + procedure mitCutClick(Sender: TObject); + procedure mitCopyClick(Sender: TObject); + procedure mitPasteClick(Sender: TObject); + procedure mitDeleteClick(Sender: TObject); + procedure mitFontClick(Sender: TObject); + procedure btnApplyParaClick(Sender: TObject); + procedure cmbFontSizeClick(Sender: TObject); + procedure cmbFontSizeKeyPress(Sender: TObject; var Key: Char); + procedure cmbFontSizeExit(Sender: TObject); + procedure FontStyleButtonClick(Sender: TObject); + procedure rveParaStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); + procedure btnIdentDecClick(Sender: TObject); + procedure btnIdentIncClick(Sender: TObject); + procedure btnFontColorClick(Sender: TObject); + procedure btnFontBackColorClick(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + private + { Private declarations } + FileName, FontName: String; + IgnoreChanges: Boolean; + FontSize: Integer; + function SaveIfNeeded: Boolean; + function Save: Boolean; + function SaveAs: Boolean; + procedure Open; + procedure New; + function GetAlignmentFromUI: TRVAlignment; + procedure SetAlignmentToUI(Alignment: TRVAlignment); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +// Parameters for ApplyStyleConversion +const + TEXT_BOLD = 1; + TEXT_ITALIC = 2; + TEXT_UNDERLINE = 3; + TEXT_APPLYFONTNAME = 4; + TEXT_APPLYFONT = 5; + TEXT_APPLYFONTSIZE = 6; + TEXT_COLOR = 7; + TEXT_BACKCOLOR = 8; +// Parameters for ApplyParaStyleConversion + PARA_ALIGNMENT = 1; + PARA_INDENTINC = 2; + PARA_INDENTDEC = 3; + PARA_COLOR = 4; + +{$R *.DFM} +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +begin + // Filling font names combobox + cmbFont.Items.Assign(Screen.Fonts); + New; +end; +{------------------------------------------------------------------------------} +// data in editor were changed +procedure TForm1.rveChange(Sender: TObject); +begin + StatusBar1.Panels[0].Text := 'Modified'; +end; +{------------------------------------------------------------------------------} +// current text style was changed +procedure TForm1.rveCurTextStyleChanged(Sender: TObject); +var fi: TFontInfo; +begin + IgnoreChanges := True; + StatusBar1.Panels[1].Text := 'Style : '+IntToStr(rve.CurTextStyleNo); + // Changing selection in comboboxes with font names and sizes: + fi := rvs.TextStyles[rve.CurTextStyleNo]; + cmbFont.ItemIndex := cmbFont.Items.IndexOf(fi.FontName); + cmbFontSize.Text := IntToStr(fi.Size); + // Checking font buttons + btnBold.Down := fsBold in fi.Style; + btnItalic.Down := fsItalic in fi.Style; + btnUnderline.Down := fsUnderline in fi.Style; + IgnoreChanges := False; +end; +{------------------------------------------------------------------------------} +// current paragraph style was changed +procedure TForm1.rveCurParaStyleChanged(Sender: TObject); +begin + SetAlignmentToUI(rvs.ParaStyles[rve.CurParaStyleNo].Alignment); +end; +{------------------------------------------------------------------------------} +function TForm1.GetAlignmentFromUI: TRVAlignment; +begin + if btnLeft.Down then + Result := rvaLeft + else if btnRight.Down then + Result := rvaRight + else if btnCenter.Down then + Result := rvaCenter + else + Result := rvaJustify; +end; +{------------------------------------------------------------------------------} +procedure TForm1.SetAlignmentToUI(Alignment: TRVAlignment); +begin + case Alignment of + rvaLeft: + btnLeft.Down := True; + rvaCenter: + btnCenter.Down := True; + rvaRight: + btnRight.Down := True; + rvaJustify: + btnJustify.Down := True; + end; +end; +{------------------------------------------------------------------------------} +// applying font name +procedure TForm1.cmbFontClick(Sender: TObject); +begin + if (cmbFont.ItemIndex<>-1) then begin + if not IgnoreChanges then begin + FontName := cmbFont.Items[cmbFont.ItemIndex]; + rve.ApplyStyleConversion(TEXT_APPLYFONTNAME); + end; + end; + if Visible then + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +// applying font size +procedure TForm1.cmbFontSizeClick(Sender: TObject); +begin + if (cmbFontSize.Text<>'') and not IgnoreChanges then begin + FontSize := StrToIntDef(cmbFontSize.Text, 10); + rve.ApplyStyleConversion(TEXT_APPLYFONTSIZE); + end; + if Visible then + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +// bold, italic, underline +procedure TForm1.FontStyleButtonClick(Sender: TObject); +var Button: TSpeedButton; +begin + Button := Sender as TSpeedButton; + // constants TEXT_BOLD, TEXT_ITALIC and TEXT_UNDERLINE are + // assigned to the tags of corresponding buttons + rve.ApplyStyleConversion(Button.Tag); +end; +{------------------------------------------------------------------------------} +// applying font +procedure TForm1.mitFontClick(Sender: TObject); +begin + fd.Font.Assign(rvs.TextStyles[rve.CurTextStyleNo]); + if fd.Execute then begin + rve.ApplyStyleConversion(TEXT_APPLYFONT); + end; +end; +{------------------------------------------------------------------------------} +// applying text color +procedure TForm1.btnFontColorClick(Sender: TObject); +begin + cd.Color := rvs.TextStyles[rve.CurTextStyleNo].Color; + if cd.Execute then + rve.ApplyStyleConversion(TEXT_COLOR); +end; +{------------------------------------------------------------------------------} +// applying text background color +procedure TForm1.btnFontBackColorClick(Sender: TObject); +begin + case Application.MessageBox('Make the selected text background transparent?'#13+ + '(YES - make transparent; NO - choose color)', + 'Text Background', MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + cd.Color := clNone; + IDNO: + begin + cd.Color := rvs.TextStyles[rve.CurTextStyleNo].BackColor; + if cd.Color=clNone then + cd.Color := clWhite; + if not cd.Execute then + exit; + end; + IDCANCEL: + exit; + end; + rve.ApplyStyleConversion(TEXT_BACKCOLOR); +end; +{------------------------------------------------------------------------------} +// applying paragraph background color +procedure TForm1.SpeedButton1Click(Sender: TObject); +begin + case Application.MessageBox('Make the selected paragraph background transparent?'#13+ + '(YES - make transparent; NO - choose color)', + 'Text Background', MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + cd.Color := clNone; + IDNO: + begin + cd.Color := rvs.ParaStyles[rve.CurParaStyleNo].Background.Color; + if cd.Color=clNone then + cd.Color := clWhite; + if not cd.Execute then + exit; + end; + IDCANCEL: + exit; + end; + rve.ApplyParaStyleConversion(PARA_COLOR); +end; +{------------------------------------------------------------------------------} +// The heart of this demo: rve.OnStyleConversion +procedure TForm1.rveStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); +var FontInfo: TFontInfo; +begin + FontInfo := TFontInfo.Create(nil); + try + FontInfo.Assign(rvs.TextStyles[StyleNo]); + case UserData of + TEXT_BOLD: + if btnBold.Down then + FontInfo.Style := FontInfo.Style+[fsBold] + else + FontInfo.Style := FontInfo.Style-[fsBold]; + TEXT_ITALIC: + if btnItalic.Down then + FontInfo.Style := FontInfo.Style+[fsItalic] + else + FontInfo.Style := FontInfo.Style-[fsItalic]; + TEXT_UNDERLINE: + if btnUnderline.Down then + FontInfo.Style := FontInfo.Style+[fsUnderline] + else + FontInfo.Style := FontInfo.Style-[fsUnderline]; + TEXT_APPLYFONTNAME: + FontInfo.FontName := FontName; + TEXT_APPLYFONTSIZE: + FontInfo.Size := FontSize; + TEXT_APPLYFONT: + FontInfo.Assign(fd.Font); + TEXT_COLOR: + FontInfo.Color := cd.Color; + TEXT_BACKCOLOR: + FontInfo.BackColor := cd.Color; + // add your code here.... + end; + NewStyleNo := rvs.TextStyles.FindSuchStyle(StyleNo,FontInfo,RVAllFontInfoProperties); + if NewStyleNo=-1 then begin + rvs.TextStyles.Add; + NewStyleNo := rvs.TextStyles.Count-1; + rvs.TextStyles[NewStyleNo].Assign(FontInfo); + rvs.TextStyles[NewStyleNo].Standard := False; + end; + finally + FontInfo.Free; + end; +end; +{------------------------------------------------------------------------------} +// The same for paragraph styles +procedure TForm1.rveParaStyleConversion(Sender: TCustomRichViewEdit; + StyleNo, UserData: Integer; AppliedToText: Boolean; + var NewStyleNo: Integer); +var ParaInfo: TParaInfo; +begin + ParaInfo := TParaInfo.Create(nil); + try + ParaInfo.Assign(rvs.ParaStyles[StyleNo]); + case UserData of + PARA_ALIGNMENT: + ParaInfo.Alignment := GetAlignmentFromUI; + PARA_INDENTINC: + begin + ParaInfo.LeftIndent := ParaInfo.LeftIndent+20; + if ParaInfo.LeftIndent>200 then + ParaInfo.LeftIndent := 200; + end; + PARA_INDENTDEC: + begin + ParaInfo.LeftIndent := ParaInfo.LeftIndent-20; + if ParaInfo.LeftIndent<0 then + ParaInfo.LeftIndent := 0; + end; + PARA_COLOR: + ParaInfo.Background.Color := cd.Color; + // add your code here.... + end; + NewStyleNo := rvs.ParaStyles.FindSuchStyle(StyleNo,ParaInfo,RVAllParaInfoProperties); + if NewStyleNo=-1 then begin + rvs.ParaStyles.Add; + NewStyleNo := rvs.ParaStyles.Count-1; + rvs.ParaStyles[NewStyleNo].Assign(ParaInfo); + rvs.ParaStyles[NewStyleNo].Standard := False; + end; + finally + ParaInfo.Free; + end; +end; +{------------------------------------------------------------------------------} +// applying paragraph alignment +procedure TForm1.btnApplyParaClick(Sender: TObject); +begin + rve.ApplyParaStyleConversion(PARA_ALIGNMENT); +end; +{------------------------------------------------------------------------------} +// changing left indents +procedure TForm1.btnIdentDecClick(Sender: TObject); +begin + rve.ApplyParaStyleConversion(PARA_INDENTDEC); +end; + +procedure TForm1.btnIdentIncClick(Sender: TObject); +begin + rve.ApplyParaStyleConversion(PARA_INDENTINC); +end; +{------------------------------------------------------------------------------} +procedure TForm1.cmbFontSizeKeyPress(Sender: TObject; var Key: Char); +begin + if ord(Key)=VK_RETURN then begin + Key := #0; + cmbFontSizeClick(nil); + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.cmbFontSizeExit(Sender: TObject); +begin + cmbFontSizeClick(nil); +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitUndoClick(Sender: TObject); +begin + rve.Undo; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitRedoClick(Sender: TObject); +begin + rve.Redo; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitCutClick(Sender: TObject); +begin + rve.CutDef; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitCopyClick(Sender: TObject); +begin + rve.CopyDef; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitPasteClick(Sender: TObject); +begin + rve.Paste; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitDeleteClick(Sender: TObject); +begin + rve.DeleteSelection; +end; +{------------------------------------------------------------------------------} +function TForm1.SaveIfNeeded: Boolean; +begin + Result := True; + if rve.Modified then + case Application.MessageBox('Save file now?','File was modified', + MB_ICONQUESTION or MB_YESNOCANCEL) of + IDYES: + Result := Save; + IDNO: + Result := True; + IDCANCEL: + Result := False; + end; +end; +{------------------------------------------------------------------------------} +function TForm1.Save: Boolean; +begin + if FileName='' then + Result := SaveAs + else begin + rve.SaveRVF(FileName, False); + rve.Modified := False; + StatusBar1.Panels[0].Text := ''; + Result := True; + end; +end; +{------------------------------------------------------------------------------} +function TForm1.SaveAs: Boolean; +begin + if sd.Execute then begin + FileName := sd.FileName; + Result := Save; + if Result then + Caption := ExtractFileName(FileName) + '- RDemo'; + end + else + Result := False; +end; +{------------------------------------------------------------------------------} +procedure TForm1.Open; +begin + if not SaveIfNeeded then exit; + rve.Modified := False; + New; + if od.Execute then begin + FileName := od.FileName; + rve.LoadRVF(FileName); + rve.Format; + rveCurTextStyleChanged(nil); + rveCurParaStyleChanged(nil); + StatusBar1.Panels[0].Text := ''; + Caption := ExtractFileName(FileName) + '- RDemo'; + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.New; +begin + if not SaveIfNeeded then exit; + FileName := ''; + StatusBar1.Panels[0].Text := ''; + Caption := 'Unnamed - RDemo'; + rve.LeftMargin := 5; + rve.RightMargin := 5; + rve.TopMargin := 5; + rve.BottomMargin := 5; + rve.BackgroundBitmap := nil; + rve.BackgroundStyle := bsNoBitmap; + rve.Clear; + rve.DeleteUnusedStyles(True, True, True); + rve.Format; + // you can delete non default styles here... + rveCurTextStyleChanged(nil); + rveCurParaStyleChanged(nil); +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitNewClick(Sender: TObject); +begin + New; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitOpenClick(Sender: TObject); +begin + Open; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitSaveClick(Sender: TObject); +begin + Save; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitSaveAsClick(Sender: TObject); +begin + SaveAs; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitExitClick(Sender: TObject); +begin + Close; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + CanClose := SaveIfNeeded; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Editors/Notes/Notes.bdsproj b/12.0.4/Demos/Delphi/Editors/Notes/Notes.bdsproj new file mode 100644 index 0000000..fa9e35f --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Notes/Notes.bdsproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + Notes.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 0 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/12.0.4/Demos/Delphi/Editors/Notes/Notes.dpr b/12.0.4/Demos/Delphi/Editors/Notes/Notes.dpr new file mode 100644 index 0000000..67a8a24 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Notes/Notes.dpr @@ -0,0 +1,14 @@ +program Notes; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + PreviewFrm in 'PreviewFrm.pas' {frmPreview}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Editors/Notes/Notes.dproj b/12.0.4/Demos/Delphi/Editors/Notes/Notes.dproj new file mode 100644 index 0000000..d210973 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Notes/Notes.dproj @@ -0,0 +1,75 @@ + + + {965a20c8-7196-4a66-bad3-4eb62e740ddd} + Notes.dpr + Debug + AnyCPU + DCC32 + Notes.exe + + + 7.0 + False + False + 0 + RELEASE + + + 7.0 + DEBUG + + + Delphi.Personality + VCLApplication + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + Notes.dpr + + + + + + + MainSource + + +
frmPreview
+
+ +
Form1
+
+
+ +
\ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Editors/Notes/Notes.res b/12.0.4/Demos/Delphi/Editors/Notes/Notes.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Notes/Notes.res differ diff --git a/12.0.4/Demos/Delphi/Editors/Notes/PreviewFrm.dfm b/12.0.4/Demos/Delphi/Editors/Notes/PreviewFrm.dfm new file mode 100644 index 0000000..680e646 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Notes/PreviewFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/Editors/Notes/PreviewFrm.pas b/12.0.4/Demos/Delphi/Editors/Notes/PreviewFrm.pas new file mode 100644 index 0000000..e8ce6b7 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Notes/PreviewFrm.pas @@ -0,0 +1,103 @@ +unit PreviewFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVScroll, CRVPP, RVPP, ExtCtrls; + +type + TfrmPreview = class(TForm) + Panel1: TPanel; + rvpp: TRVPrintPreview; + cmb: TComboBox; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + Label1: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure cmbExit(Sender: TObject); + procedure cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvppZoomChanged(Sender: TObject); + private + { Private declarations } + procedure UpdateZoom; + public + { Public declarations } + end; + +implementation + +{$R *.DFM} +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button1Click(Sender: TObject); +begin + rvpp.First; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button2Click(Sender: TObject); +begin + rvpp.Prev; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button3Click(Sender: TObject); +begin + rvpp.Next; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button4Click(Sender: TObject); +begin + rvpp.Last; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbExit(Sender: TObject); +begin + UpdateZoom; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_RETURN then begin + UpdateZoom; + Key := 0; + end; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.UpdateZoom; +var s: String; + zoom: Integer; +begin + s := Trim(cmb.Text); + if s='Page width' then begin + rvpp.ZoomMode := rvzmPageWidth; + exit; + end; + if s='Full page' then begin + rvpp.ZoomMode := rvzmFullPage; + exit; + end; + if (s<>'') and (s[Length(s)]='%') then + s := Copy(s,1,Length(s)-1); + zoom := StrToIntDef(s,0); + if (zoom<10) or (zoom>500) then + Application.MessageBox('Please enter number from 10 to 500','Scale',MB_OK or MB_ICONSTOP) + else + rvpp.SetZoom(zoom); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.rvppZoomChanged(Sender: TObject); +begin + cmb.Text := IntToStr(rvpp.ZoomPercent)+'%'; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Editors/Notes/Unit1.dfm b/12.0.4/Demos/Delphi/Editors/Notes/Unit1.dfm new file mode 100644 index 0000000..e181219 Binary files /dev/null and b/12.0.4/Demos/Delphi/Editors/Notes/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Editors/Notes/Unit1.pas b/12.0.4/Demos/Delphi/Editors/Notes/Unit1.pas new file mode 100644 index 0000000..42ec075 --- /dev/null +++ b/12.0.4/Demos/Delphi/Editors/Notes/Unit1.pas @@ -0,0 +1,815 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, Buttons, ComCtrls, ExtCtrls, Menus, + RVStyle, RVScroll, RichView, RVEdit, RVFuncs, RVNote, PtblRV, RVItem, RVTable; + +{==============================================================================} +{ RichEditor Demo with footnotes, endnotes and print preview. + See "Notes" main menu. +{==============================================================================} + +type + TDemoFileFormat = (dffRVF, dffRTF); + + + TForm1 = class(TForm) + Panel1: TPanel; + StatusBar1: TStatusBar; + rvs: TRVStyle; + cmbFont: TComboBox; + btnBold: TSpeedButton; + btnItalic: TSpeedButton; + btnUnderline: TSpeedButton; + btnFont: TSpeedButton; + btnLeft: TSpeedButton; + btnCenter: TSpeedButton; + btnRight: TSpeedButton; + btnJustify: TSpeedButton; + btnOpen: TSpeedButton; + btnSave: TSpeedButton; + btnSaveAs: TSpeedButton; + btnNew: TSpeedButton; + cmbFontSize: TComboBox; + Label2: TLabel; + Label3: TLabel; + MainMenu1: TMainMenu; + File1: TMenuItem; + mitOpen: TMenuItem; + mitSave: TMenuItem; + mitNew: TMenuItem; + mitSaveAs: TMenuItem; + N1: TMenuItem; + mitExit: TMenuItem; + Edit1: TMenuItem; + mitUndo: TMenuItem; + mitRedo: TMenuItem; + N2: TMenuItem; + mitCut: TMenuItem; + mitCopy: TMenuItem; + mitPaste: TMenuItem; + mitDelete: TMenuItem; + od: TOpenDialog; + sd: TSaveDialog; + fd: TFontDialog; + btnIdentInc: TSpeedButton; + btnIdentDec: TSpeedButton; + btnFontColor: TSpeedButton; + btnFontBackColor: TSpeedButton; + SpeedButton1: TSpeedButton; + cd: TColorDialog; + Panel2: TPanel; + rveMain: TRichViewEdit; + Splitter1: TSplitter; + rveNote: TRichViewEdit; + Endnotes1: TMenuItem; + mitInsertEndnote: TMenuItem; + N3: TMenuItem; + mitInsertNoteReference: TMenuItem; + RVPrint1: TRVPrint; + N4: TMenuItem; + mitPreview: TMenuItem; + mitInsertFootnote: TMenuItem; + procedure mitNewClick(Sender: TObject); + procedure mitOpenClick(Sender: TObject); + procedure mitSaveClick(Sender: TObject); + procedure mitSaveAsClick(Sender: TObject); + procedure mitExitClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure rveChange(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure rveCurTextStyleChanged(Sender: TObject); + procedure rveCurParaStyleChanged(Sender: TObject); + procedure cmbFontClick(Sender: TObject); + procedure rveStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); + procedure mitUndoClick(Sender: TObject); + procedure mitRedoClick(Sender: TObject); + procedure mitCutClick(Sender: TObject); + procedure mitCopyClick(Sender: TObject); + procedure mitPasteClick(Sender: TObject); + procedure mitDeleteClick(Sender: TObject); + procedure mitFontClick(Sender: TObject); + procedure btnApplyParaClick(Sender: TObject); + procedure cmbFontSizeClick(Sender: TObject); + procedure cmbFontSizeKeyPress(Sender: TObject; var Key: Char); + procedure cmbFontSizeExit(Sender: TObject); + procedure FontStyleButtonClick(Sender: TObject); + procedure rveParaStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); + procedure btnIdentDecClick(Sender: TObject); + procedure btnIdentIncClick(Sender: TObject); + procedure btnFontColorClick(Sender: TObject); + procedure btnFontBackColorClick(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + procedure rveNoteEnter(Sender: TObject); + procedure mitInsertEndnoteClick(Sender: TObject); + procedure rveMainCaretMove(Sender: TObject); + procedure rveMainEnter(Sender: TObject); + procedure rveNoteExit(Sender: TObject); + procedure mitInsertNoteReferenceClick(Sender: TObject); + procedure mitPreviewClick(Sender: TObject); + procedure mitInsertFootnoteClick(Sender: TObject); + private + { Private declarations } + FileName, FontName: String; + FileFormat: TDemoFileFormat; + IgnoreChanges: Boolean; + FontSize: Integer; + ActiveEditor: TCustomRichViewEdit; + FActiveNoteItem: TCustomRVNoteItemInfo; + function SaveIfNeeded: Boolean; + function Save: Boolean; + function SaveAs: Boolean; + procedure Open; + procedure New; + function GetAlignmentFromUI: TRVAlignment; + procedure SetAlignmentToUI(Alignment: TRVAlignment); + procedure DisableNote(Init: Boolean=False); + procedure EditNote(NoteItem: TCustomRVNoteItemInfo); + procedure UpdateNote; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +uses PreviewFrm; + +// Parameters for ApplyStyleConversion +const + TEXT_BOLD = 1; + TEXT_ITALIC = 2; + TEXT_UNDERLINE = 3; + TEXT_APPLYFONTNAME = 4; + TEXT_APPLYFONT = 5; + TEXT_APPLYFONTSIZE = 6; + TEXT_COLOR = 7; + TEXT_BACKCOLOR = 8; +// Parameters for ApplyParaStyleConversion + PARA_ALIGNMENT = 1; + PARA_INDENTINC = 2; + PARA_INDENTDEC = 3; + PARA_COLOR = 4; + +{$R *.DFM} +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +begin + // Filling font names combobox + cmbFont.Items.Assign(Screen.Fonts); + ActiveEditor := rveMain; + New; +end; +{------------------------------------------------------------------------------} +{ Document in rveMain or rveNote was changed } +procedure TForm1.rveChange(Sender: TObject); +begin + StatusBar1.SimpleText := 'Modified'; +end; +{------------------------------------------------------------------------------} +{ Current text style in rveMain or rveNote was changed } +procedure TForm1.rveCurTextStyleChanged(Sender: TObject); +var fi: TFontInfo; + rve: TCustomRichViewEdit; +begin + rve := TCustomRichViewEdit(Sender).GetRootEditor; + if rve<>ActiveEditor then + exit; + IgnoreChanges := True; + // Changing selection in comboboxes with font names and sizes: + fi := rvs.TextStyles[rve.CurTextStyleNo]; + cmbFont.ItemIndex := cmbFont.Items.IndexOf(fi.FontName); + cmbFontSize.Text := IntToStr(fi.Size); + // Checking font buttons + btnBold.Down := fsBold in fi.Style; + btnItalic.Down := fsItalic in fi.Style; + btnUnderline.Down := fsUnderline in fi.Style; + IgnoreChanges := False; +end; +{------------------------------------------------------------------------------} +{ Current paragraph style in rveMain or rveNote was changed } +procedure TForm1.rveCurParaStyleChanged(Sender: TObject); +var rve: TCustomRichViewEdit; +begin + rve := TCustomRichViewEdit(Sender).GetRootEditor; + if rve<>ActiveEditor then + exit; + SetAlignmentToUI(rvs.ParaStyles[rve.CurParaStyleNo].Alignment); +end; +{------------------------------------------------------------------------------} +{ Returns paragraph alignment selected in the toolbar } +function TForm1.GetAlignmentFromUI: TRVAlignment; +begin + if btnLeft.Down then + Result := rvaLeft + else if btnRight.Down then + Result := rvaRight + else if btnCenter.Down then + Result := rvaCenter + else + Result := rvaJustify; +end; +{------------------------------------------------------------------------------} +{ Sets Alignment to the toolbar } +procedure TForm1.SetAlignmentToUI(Alignment: TRVAlignment); +begin + case Alignment of + rvaLeft: + btnLeft.Down := True; + rvaCenter: + btnCenter.Down := True; + rvaRight: + btnRight.Down := True; + rvaJustify: + btnJustify.Down := True; + end; +end; +{------------------------------------------------------------------------------} +{ Applying font name to ActiveEditor } +procedure TForm1.cmbFontClick(Sender: TObject); +begin + + if (cmbFont.ItemIndex<>-1) then begin + if not IgnoreChanges then begin + FontName := cmbFont.Items[cmbFont.ItemIndex]; + ActiveEditor.ApplyStyleConversion(TEXT_APPLYFONTNAME); + end; + end; + if Visible then + ActiveEditor.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Applying font size to ActiveEditor } +procedure TForm1.cmbFontSizeClick(Sender: TObject); +begin + if (cmbFontSize.Text<>'') and not IgnoreChanges then begin + FontSize := StrToIntDef(cmbFontSize.Text, 10); + ActiveEditor.ApplyStyleConversion(TEXT_APPLYFONTSIZE); + end; + if Visible then + ActiveEditor.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Applying bold/italic/underline to ActiveEditor } +procedure TForm1.FontStyleButtonClick(Sender: TObject); +var Button: TSpeedButton; +begin + Button := Sender as TSpeedButton; + // constants TEXT_BOLD, TEXT_ITALIC and TEXT_UNDERLINE are + // assigned to the tags of corresponding buttons + ActiveEditor.ApplyStyleConversion(Button.Tag); +end; +{------------------------------------------------------------------------------} +{ Applying font to ActiveEditor } +procedure TForm1.mitFontClick(Sender: TObject); +begin + fd.Font.Assign(rvs.TextStyles[ActiveEditor.CurTextStyleNo]); + if fd.Execute then begin + ActiveEditor.ApplyStyleConversion(TEXT_APPLYFONT); + end; +end; +{------------------------------------------------------------------------------} +{ Applying text color to ActiveEditor } +procedure TForm1.btnFontColorClick(Sender: TObject); +begin + cd.Color := rvs.TextStyles[ActiveEditor.CurTextStyleNo].Color; + if cd.Execute then + ActiveEditor.ApplyStyleConversion(TEXT_COLOR); +end; +{------------------------------------------------------------------------------} +{ Applying text background color to ActiveEditor } +procedure TForm1.btnFontBackColorClick(Sender: TObject); +begin + case Application.MessageBox('Make the selected text background transparent?'#13+ + '(YES - make transparent; NO - choose color)', + 'Text Background', MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + cd.Color := clNone; + IDNO: + begin + cd.Color := rvs.TextStyles[ActiveEditor.CurTextStyleNo].BackColor; + if cd.Color=clNone then + cd.Color := clWhite; + if not cd.Execute then + exit; + end; + IDCANCEL: + exit; + end; + ActiveEditor.ApplyStyleConversion(TEXT_BACKCOLOR); +end; +{------------------------------------------------------------------------------} +{ Applying paragraph background color to ActiveEditor } +procedure TForm1.SpeedButton1Click(Sender: TObject); +begin + case Application.MessageBox('Make the selected paragraph background transparent?'#13+ + '(YES - make transparent; NO - choose color)', + 'Text Background', MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + cd.Color := clNone; + IDNO: + begin + cd.Color := rvs.ParaStyles[ActiveEditor.CurParaStyleNo].Background.Color; + if cd.Color=clNone then + cd.Color := clWhite; + if not cd.Execute then + exit; + end; + IDCANCEL: + exit; + end; + ActiveEditor.ApplyParaStyleConversion(PARA_COLOR); +end; +{------------------------------------------------------------------------------} +{ Applying paragraph alignment to ActiveEditor } +procedure TForm1.btnApplyParaClick(Sender: TObject); +begin + ActiveEditor.ApplyParaStyleConversion(PARA_ALIGNMENT); +end; +{------------------------------------------------------------------------------} +{ changing left indents in ActiveEditor } +procedure TForm1.btnIdentDecClick(Sender: TObject); +begin + ActiveEditor.ApplyParaStyleConversion(PARA_INDENTDEC); +end; + +procedure TForm1.btnIdentIncClick(Sender: TObject); +begin + ActiveEditor.ApplyParaStyleConversion(PARA_INDENTINC); +end; +{------------------------------------------------------------------------------} +{ rveMain's & rveNote's OnStyleConversion } +procedure TForm1.rveStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); +var FontInfo: TFontInfo; +begin + FontInfo := TFontInfo.Create(nil); + try + FontInfo.Assign(rvs.TextStyles[StyleNo]); + case UserData of + TEXT_BOLD: + if btnBold.Down then + FontInfo.Style := FontInfo.Style+[fsBold] + else + FontInfo.Style := FontInfo.Style-[fsBold]; + TEXT_ITALIC: + if btnItalic.Down then + FontInfo.Style := FontInfo.Style+[fsItalic] + else + FontInfo.Style := FontInfo.Style-[fsItalic]; + TEXT_UNDERLINE: + if btnUnderline.Down then + FontInfo.Style := FontInfo.Style+[fsUnderline] + else + FontInfo.Style := FontInfo.Style-[fsUnderline]; + TEXT_APPLYFONTNAME: + FontInfo.FontName := FontName; + TEXT_APPLYFONTSIZE: + FontInfo.Size := FontSize; + TEXT_APPLYFONT: + FontInfo.Assign(fd.Font); + TEXT_COLOR: + FontInfo.Color := cd.Color; + TEXT_BACKCOLOR: + FontInfo.BackColor := cd.Color; + // add your code here.... + end; + NewStyleNo := rvs.TextStyles.FindSuchStyle(StyleNo,FontInfo,RVAllFontInfoProperties); + if NewStyleNo=-1 then begin + rvs.TextStyles.Add; + NewStyleNo := rvs.TextStyles.Count-1; + rvs.TextStyles[NewStyleNo].Assign(FontInfo); + rvs.TextStyles[NewStyleNo].Standard := False; + end; + finally + FontInfo.Free; + end; +end; +{------------------------------------------------------------------------------} +{ rveMain's & rveNote's OnParaStyleConversion } +procedure TForm1.rveParaStyleConversion(Sender: TCustomRichViewEdit; + StyleNo, UserData: Integer; AppliedToText: Boolean; + var NewStyleNo: Integer); +var ParaInfo: TParaInfo; +begin + ParaInfo := TParaInfo.Create(nil); + try + ParaInfo.Assign(rvs.ParaStyles[StyleNo]); + case UserData of + PARA_ALIGNMENT: + ParaInfo.Alignment := GetAlignmentFromUI; + PARA_INDENTINC: + begin + ParaInfo.LeftIndent := ParaInfo.LeftIndent+20; + if ParaInfo.LeftIndent>200 then + ParaInfo.LeftIndent := 200; + end; + PARA_INDENTDEC: + begin + ParaInfo.LeftIndent := ParaInfo.LeftIndent-20; + if ParaInfo.LeftIndent<0 then + ParaInfo.LeftIndent := 0; + end; + PARA_COLOR: + ParaInfo.Background.Color := cd.Color; + // add your code here.... + end; + NewStyleNo := rvs.ParaStyles.FindSuchStyle(StyleNo,ParaInfo,RVAllParaInfoProperties); + if NewStyleNo=-1 then begin + rvs.ParaStyles.Add; + NewStyleNo := rvs.ParaStyles.Count-1; + rvs.ParaStyles[NewStyleNo].Assign(ParaInfo); + rvs.ParaStyles[NewStyleNo].Standard := False; + end; + finally + ParaInfo.Free; + end; +end; +{------------------------------------------------------------------------------} +{ cmbFontSize combobox: Enter key triggers OnClick } +procedure TForm1.cmbFontSizeKeyPress(Sender: TObject; var Key: Char); +begin + if ord(Key)=VK_RETURN then begin + Key := #0; + cmbFontSizeClick(nil); + end; +end; +{------------------------------------------------------------------------------} +{ cmbFontSize combobox: moving focus from it triggers OnClick } +procedure TForm1.cmbFontSizeExit(Sender: TObject); +begin + cmbFontSizeClick(nil); +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Undo } +procedure TForm1.mitUndoClick(Sender: TObject); +begin + ActiveEditor.Undo; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Redo } +procedure TForm1.mitRedoClick(Sender: TObject); +begin + ActiveEditor.Redo; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Cut } +procedure TForm1.mitCutClick(Sender: TObject); +begin + ActiveEditor.CutDef; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Copy } +procedure TForm1.mitCopyClick(Sender: TObject); +begin + ActiveEditor.CopyDef; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Paste } +procedure TForm1.mitPasteClick(Sender: TObject); +begin + ActiveEditor.Paste; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Delete } +procedure TForm1.mitDeleteClick(Sender: TObject); +begin + ActiveEditor.DeleteSelection; +end; +{------------------------------------------------------------------------------} +{ Saves note text (if it was edited) in the main document, then asks user + to save the document. + Returns True if: + - the user answers "No", or + - the user answers "Yes" and the document was saved. + Returns False if: + - the user answers "Cancel", or + - the user answers "Yes" and the document was not saved. } +function TForm1.SaveIfNeeded: Boolean; +begin + Result := True; + UpdateNote; + if rveMain.Modified then + case Application.MessageBox('Save file now?','File was modified', + MB_ICONQUESTION or MB_YESNOCANCEL) of + IDYES: + Result := Save; + IDNO: + Result := True; + IDCANCEL: + Result := False; + end; +end; +{------------------------------------------------------------------------------} +{ Saves the document. If this is a new document, calls SaveAs. + Returns True on successful saving } +function TForm1.Save: Boolean; +begin + if FileName='' then + Result := SaveAs + else begin + UpdateNote; + Result := False; + case FileFormat of + dffRVF: + Result := rveMain.SaveRVF(FileName, False); + dffRTF: + Result := rveMain.SaveRTF(FileName, False); + end; + if Result then begin + rveMain.Modified := False; + StatusBar1.SimpleText := ''; + end + else begin + Application.MessageBox('Cannot save file','Error', MB_OK or MB_ICONSTOP); + Result := SaveAs; + end; + end; +end; +{------------------------------------------------------------------------------} +{ Displays save dialog and calls Save to save document. + Returns True on successful saving } +function TForm1.SaveAs: Boolean; +begin + sd.FileName := FileName; + sd.FilterIndex := ord(FileFormat)+1; + if sd.Execute then begin + FileName := sd.FileName; + FileFormat := TDemoFileFormat(sd.FilterIndex-1); + Result := Save; + if Result then + Caption := ExtractFileName(FileName) + '- RDemo'; + end + else + Result := False; +end; +{------------------------------------------------------------------------------} +{ Asks to save the existing document. + Opens document from file } +procedure TForm1.Open; +var r: Boolean; +begin + if not SaveIfNeeded then exit; + rveMain.Modified := False; + New; + if od.Execute then begin + r := False; + DisableNote; + rveMain.Clear; + rveMain.DeleteUnusedStyles(True, True, True); + FileName := od.FileName; + case od.FilterIndex of + 1: + begin + r := rveMain.LoadRVF(FileName); + FileFormat := dffRVF; + end; + 2: + begin + r := rveMain.LoadRTF(FileName); + FileFormat := dffRTF; + end; + end; + rveMain.Format; + rveCurTextStyleChanged(ActiveEditor); + rveCurParaStyleChanged(ActiveEditor); + DisableNote(True); + StatusBar1.SimpleText := ''; + Caption := ExtractFileName(FileName) + '- RDemo'; + if not r then + Application.MessageBox('Error while opening or reading file','Error', + MB_OK or MB_ICONSTOP); + end; +end; +{------------------------------------------------------------------------------} +{ Asks to save the existing document. Creates a new document } +procedure TForm1.New; +begin + if not SaveIfNeeded then exit; + FileName := ''; + FileFormat := dffRVF; + StatusBar1.SimpleText := ''; + Caption := 'Unnamed - RDemo'; + DisableNote(True); + rveMain.LeftMargin := 5; + rveMain.RightMargin := 5; + rveMain.TopMargin := 5; + rveMain.BottomMargin := 5; + rveMain.BackgroundBitmap := nil; + rveMain.BackgroundStyle := bsNoBitmap; + rveMain.Clear; + rveMain.DeleteUnusedStyles(True, True, True); + rveMain.Format; + rveCurTextStyleChanged(ActiveEditor); + rveCurParaStyleChanged(ActiveEditor); +end; +{------------------------------------------------------------------------------} +{ Menu File | New } +procedure TForm1.mitNewClick(Sender: TObject); +begin + New; +end; +{------------------------------------------------------------------------------} +{ Menu File | Open } +procedure TForm1.mitOpenClick(Sender: TObject); +begin + Open; +end; +{------------------------------------------------------------------------------} +{ Menu File | Save } +procedure TForm1.mitSaveClick(Sender: TObject); +begin + Save; +end; +{------------------------------------------------------------------------------} +{ Menu File | Save As } +procedure TForm1.mitSaveAsClick(Sender: TObject); +begin + SaveAs; +end; +{------------------------------------------------------------------------------} +{ Menu File | Print Preview } +procedure TForm1.mitPreviewClick(Sender: TObject); +var frm: TfrmPreview; +begin + UpdateNote; + RVPrint1.AssignSource(rveMain); + RVPrint1.FormatPages(rvdoALL); + frm := TfrmPreview.Create(Application); + try + frm.rvpp.RVPrint := RVPrint1; + frm.Button1Click(nil); + frm.ShowModal; + finally + frm.Free; + end; + RVPrint1.Clear; +end; +{------------------------------------------------------------------------------} +{ Menu File | Exit } +procedure TForm1.mitExitClick(Sender: TObject); +begin + Close; +end; +{------------------------------------------------------------------------------} +{ Form1.OnCloseQuery } +procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + CanClose := SaveIfNeeded; +end; +{------------------------------------------------------------------------------} +{ Occurs when input focus is set to rveMain } +procedure TForm1.rveMainEnter(Sender: TObject); +begin + ActiveEditor := rveMain; + rveCurTextStyleChanged(ActiveEditor); + rveCurParaStyleChanged(ActiveEditor); + mitInsertEndnote.Enabled := True; + mitInsertFootnote.Enabled := True; + mitInsertNoteReference.Enabled := False; +end; +{------------------------------------------------------------------------------} +{ Occurs when input focus is set to rveNote } +procedure TForm1.rveNoteEnter(Sender: TObject); +begin + ActiveEditor := rveNote; + rveCurTextStyleChanged(ActiveEditor); + rveCurParaStyleChanged(ActiveEditor); + mitInsertEndnote.Enabled := False; + mitInsertFootnote.Enabled := False; + mitInsertNoteReference.Enabled := True; +end; +{------------------------------------------------------------------------------} +{ Disables rveNote } +procedure TForm1.DisableNote(Init: Boolean); +begin + if Init or (FActiveNoteItem<>nil) then begin + FActiveNoteItem := nil; + rveNote.Enabled := False; + rveNote.Color := clBtnFace; + rveNote.Clear; + rveNote.AddNL('(footnote or endnote is not selected)', 0, 0); + rveNote.Format; + end; +end; +{------------------------------------------------------------------------------} +{ Starts editing NoteItem's Document in rveNote } +procedure TForm1.EditNote(NoteItem: TCustomRVNoteItemInfo); +var Stream: TMemoryStream; +begin + if FActiveNoteItem = NoteItem then + exit; + FActiveNoteItem := NoteItem; + rveNote.NoteText := NoteItem.Text; // this text is displayed in + // TRVNoteReferenceItemInfo items + + rveNote.Enabled := True; + rveNote.Color := clWindow; + rveNote.Clear; + Stream := TMemoryStream.Create; + try + NoteItem.Document.SaveRVFToStream(Stream); + Stream.Position := 0; + rveNote.LoadRVFFromStream(Stream); + finally + Stream.Free; + end; + with rveNote do begin + Format; + SetSelectionBounds(ItemCount-1, GetOffsAfterItem(ItemCount-1), + ItemCount-1, GetOffsAfterItem(ItemCount-1)); + end; +end; +{------------------------------------------------------------------------------} +{ Saves changes made in rveNote to FActiveNoteItem.Document. This operation + can be undone and redone by the user } +procedure TForm1.UpdateNote; +var Stream: TMemoryStream; +begin + if not rveNote.Modified then + exit; + Stream := TMemoryStream.Create; + try + rveNote.SaveRVFToStream(Stream, False); + FActiveNoteItem.ReplaceDocumentEd(Stream); // this is an editing operation + // in rveMain, can be undone by user + finally + Stream.Free; + end; + rveNote.Modified := False; +end; +{------------------------------------------------------------------------------} +{ Menu Notes | Insert Endnote. + This command is enabled only if ActiveEditor = rveMain. + This command inserts a new endnote in rveMain. In the endnote document, it + adds the note reference (TRVNoteReferenceItemInfo, displays endnote number) + and one space character. Because of rveMain.CaretMove, this endnote will be + immediately opened in rveNote. + Moving input focus to rveNote } +procedure TForm1.mitInsertEndnoteClick(Sender: TObject); +var EndNote: TRVEndnoteItemInfo; + NoteRef: TRVNoteReferenceItemInfo; +begin + EndNote := TRVEndnoteItemInfo.CreateEx(rveMain.RVData, + RVGetNoteTextStyleNo(rvs, rveMain.CurTextStyleNo), 1, False); + NoteRef := TRVNoteReferenceItemInfo.CreateEx(EndNote.Document, RVGetNoteTextStyleNo(rvs,0)); + EndNote.Document.AddItem('', NoteRef); + EndNote.Document.AddNL(' ', 0, -1); + if rveMain.InsertItem('', EndNote) then + rveNote.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Menu Notes | Insert Footnote. } +procedure TForm1.mitInsertFootnoteClick(Sender: TObject); +var FootNote: TRVFootnoteItemInfo; + NoteRef: TRVNoteReferenceItemInfo; +begin + FootNote := TRVFootnoteItemInfo.CreateEx(rveMain.RVData, + RVGetNoteTextStyleNo(rvs, rveMain.CurTextStyleNo), 1, False); + NoteRef := TRVNoteReferenceItemInfo.CreateEx(FootNote.Document, RVGetNoteTextStyleNo(rvs,0)); + FootNote.Document.AddItem('', NoteRef); + FootNote.Document.AddNL(' ', 0, -1); + if rveMain.InsertItem('', FootNote) then + rveNote.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Menu Notes | Insert Footnote/Endnote Number. + This command is enabled only if ActiveEditor = rveNote. + Inserts note reference (TRVNoteReferenceItemInfo, displays endnote number) in + rveNote. + This command is not really necessary, but may be useful if the user acidentally + deleted the initial reference } +procedure TForm1.mitInsertNoteReferenceClick(Sender: TObject); +var NoteRef: TRVNoteReferenceItemInfo; +begin + NoteRef := TRVNoteReferenceItemInfo.CreateEx(rveNote.RVData, + RVGetNoteTextStyleNo(rvs,rveNote.CurTextStyleNo)); + rveNote.InsertItem('', NoteRef); +end; +{------------------------------------------------------------------------------} +{ rveMain.OnCaretMove. Updates rveNote } +procedure TForm1.rveMainCaretMove(Sender: TObject); +begin + if rveMain.GetCurrentItem is TCustomRVNoteItemInfo then + EditNote(rveMain.GetCurrentItem as TCustomRVNoteItemInfo) + else begin + UpdateNote; + DisableNote; + end; +end; +{------------------------------------------------------------------------------} +{ When moving input focus from rveNote, we update note document (if it was edited) } +procedure TForm1.rveNoteExit(Sender: TObject); +begin + UpdateNote; +end; +{------------------------------------------------------------------------------} + +end. diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo1Frm.dfm b/12.0.4/Demos/Delphi/MultiDemo/Demo1Frm.dfm new file mode 100644 index 0000000..91c346e Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/Demo1Frm.dfm differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo1Frm.pas b/12.0.4/Demos/Delphi/MultiDemo/Demo1Frm.pas new file mode 100644 index 0000000..dfb0bd0 --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/Demo1Frm.pas @@ -0,0 +1,96 @@ +unit Demo1Frm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, StdCtrls, Menus; + +type + TfrmDemo1 = class(TForm) + lst: TListBox; + rv: TRichView; + pm: TPopupMenu; + mitShowCP: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure rvCheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); + procedure lstDblClick(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure pmPopup(Sender: TObject); + procedure mitShowCPClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + + +implementation +uses MainFrm; +{$R *.DFM} +{-----------------------------------------------------------} +procedure TfrmDemo1.FormCreate(Sender: TObject); +var SearchRec: TSearchRec; +begin + lst.Items.BeginUpdate; + rv.AddNL('When you scroll this document to some file, the corresponding item'+ + ' in the list box is highlighted.',sncomHeading,0); + rv.AddNL('Double-click on the left listbox to scroll to the file.', + sncomHeading,0); + rv.AddNL('Right-click to show/hide "checkpoints".', + sncomHeading,0); + if FindFirst(ExtractFilePath(Application.ExeName)+'*.pas', 0,SearchRec) = 0 then + repeat + lst.Items.Add(SearchRec.Name); + // Marking next added item with checkpoint + rv.AddNamedCheckpointEx(SearchRec.Name, True); + // Adding name of file + rv.AddNL(SearchRec.Name,sncomKeyword,3); + // Adding text from file. + // Last parameter = True, so all text will be loaded as one + // paragraph, and displayed in the single frame + rv.LoadText(ExtractFilePath(Application.ExeName)+SearchRec.Name, sncomNormal, 2, True); + until FindNext(SearchRec)<>0; + FindClose(SearchRec); + lst.Items.EndUpdate; + rv.Format; +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.rvCheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); +begin + if CheckpointData=nil then + lst.ItemIndex := -1 + else + lst.ItemIndex := rv.GetCheckpointNo(CheckpointData); +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.lstDblClick(Sender: TObject); +begin + if lst.ItemIndex=-1 then exit; + rv.ScrollTo(rv.GetCheckpointY(lst.ItemIndex)); +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.pmPopup(Sender: TObject); +begin + mitShowCP.Checked := rvoShowCheckpoints in rv.Options; +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.mitShowCPClick(Sender: TObject); +begin + if rvoShowCheckpoints in rv.Options then + rv.Options := rv.Options - [rvoShowCheckpoints] + else + rv.Options := rv.Options + [rvoShowCheckpoints]; + rv.Invalidate; +end; + +end. diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo2Frm.dfm b/12.0.4/Demos/Delphi/MultiDemo/Demo2Frm.dfm new file mode 100644 index 0000000..dd8bf7d Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/Demo2Frm.dfm differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo2Frm.pas b/12.0.4/Demos/Delphi/MultiDemo/Demo2Frm.pas new file mode 100644 index 0000000..94629d6 --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/Demo2Frm.pas @@ -0,0 +1,181 @@ +unit Demo2Frm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, + ImgList, Menus; + +type + TfrmDemo2 = class(TForm) + rv: TRichView; + rvs: TRVStyle; + fdlg: TFontDialog; + cdlg: TColorDialog; + pm: TPopupMenu; + mitBack: TMenuItem; + mitBreak: TMenuItem; + mitText: TMenuItem; + mitHighlight: TMenuItem; + il: TImageList; + procedure FormCreate(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvRVMouseDown(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure mitBackClick(Sender: TObject); + procedure mitBreakClick(Sender: TObject); + procedure mitTextClick(Sender: TObject); + procedure rvRVMouseUp(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure mitHighlightClick(Sender: TObject); + private + { Private declarations } + procedure ChangeBackgroundColor; + procedure ChangeTextStyle(StyleNo: Integer); + procedure ChangeBreakColor(ItemNo: Integer); + procedure ChangeHighlightColor(StyleNo: Integer); + public + { Public declarations } + end; + +implementation + +{$R *.DFM} +{-----------------------------------------------------------} +procedure TfrmDemo2.ChangeBackgroundColor; +begin + cdlg.Color := rvs.Color; + if cdlg.Execute then begin + rvs.Color := cdlg.Color; + rv.Invalidate; + end; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.ChangeBreakColor(ItemNo: Integer); +var BreakWidth,BreakWidth2: Byte; + BreakTag, i: Integer; + BreakColor: TColor; + BreakStyle: TRVBreakStyle; +begin + rv.GetBreakInfo(ItemNo, BreakWidth, BreakStyle, BreakColor, BreakTag); + cdlg.Color := BreakColor; + // RichView has no styles of "breaks", each "break" is individual + // So for changing color of all "breaks" with the specified width we need + // to check the whole document + if cdlg.Execute then begin + for i := 0 to rv.ItemCount-1 do + if rv.GetItemStyle(i)=rvsBreak then begin + rv.GetBreakInfo(i, BreakWidth2, BreakStyle, BreakColor, BreakTag); + if BreakWidth2=BreakWidth then + rv.SetBreakInfo(i, BreakWidth2, BreakStyle, cdlg.Color, BreakTag); + end; + rv.Invalidate; + end; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.ChangeHighlightColor(StyleNo: Integer); +begin + cdlg.Color := rvs.TextStyles[StyleNo].HoverColor; + if cdlg.Execute then + rvs.TextStyles[StyleNo].HoverColor := cdlg.Color; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.ChangeTextStyle(StyleNo: Integer); +begin + fdlg.Font.Assign(rvs.TextStyles[StyleNo]); + if fdlg.Execute then begin + rvs.TextStyles[StyleNo].Assign(fdlg.Font); + rv.Format; + end; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.FormCreate(Sender: TObject); +begin + rv.AddNL('Click on text, line or background to customize',1,1); + rv.AddNL('Right click for menu',1,1); + rv.AddBreakEx(1,rvbsLine,clGreen); + rv.AddBulletEx('', 0, il, 0); + rv.Add(' - thin line', 0); + rv.AddBulletEx('', 1, il, 0); + rv.Add(' - thick line', 0); + rv.AddBreakEx(2,rvbsLine,clSilver); + rv.AddNL('', 0,0); + rv.AddNL('This is a normal text with ', 0,0); + rv.Add('hypertext link',2); + rv.Add('.',0); + rv.AddNL('', 0,0); + rv.AddNL('This is a bottom text ', 3,0); + rv.AddBreakEx(1,rvbsLine,clGreen); + rv.AddNL('ESC closes window',1,1); + rv.Format; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.rvRVMouseDown(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); +var StyleNo: Integer; +begin + if Button<>mbLeft then exit; + if ItemNo=-1 then begin + ChangeBackgroundColor; + exit; + end; + StyleNo := rv.GetItemStyle(ItemNo); + case StyleNo of + rvsBullet: + Application.MessageBox('This is just a pointer to "break"', 'Bullet', + MB_OK or MB_ICONINFORMATION); + rvsBreak: + ChangeBreakColor(ItemNo); + else + ChangeTextStyle(StyleNo); + end; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.rvRVMouseUp(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); +var StyleNo: Integer; + p: TPoint; +begin + if Button<>mbRight then exit; + pm.Tag := ItemNo; + StyleNo := 0;// avoiding warning + if ItemNo<>-1 then + StyleNo := rv.GetItemStyle(ItemNo); + + mitBack.Visible := ItemNo=-1; + mitBreak.Visible := (ItemNo>=0) and (StyleNo=rvsBreak); + mitText.Visible := (ItemNo>=0) and (StyleNo>=0); + mitHighlight.Visible := mitText.Visible and rvs.TextStyles[StyleNo].Jump; + p := rv.ClientToScreen(Point(X,Y)); + pm.Popup(p.X,p.Y); +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.mitBackClick(Sender: TObject); +begin + ChangeBackgroundColor; +end; + +procedure TfrmDemo2.mitBreakClick(Sender: TObject); +begin + ChangeBreakColor(pm.Tag); +end; + +procedure TfrmDemo2.mitTextClick(Sender: TObject); +begin + ChangeTextStyle(rv.GetItemStyle(pm.Tag)); +end; + +procedure TfrmDemo2.mitHighlightClick(Sender: TObject); +begin + ChangeHighlightColor(rv.GetItemStyle(pm.Tag)); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo3Frm.dfm b/12.0.4/Demos/Delphi/MultiDemo/Demo3Frm.dfm new file mode 100644 index 0000000..537d12a Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/Demo3Frm.dfm differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo3Frm.pas b/12.0.4/Demos/Delphi/MultiDemo/Demo3Frm.pas new file mode 100644 index 0000000..df76ee7 --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/Demo3Frm.pas @@ -0,0 +1,115 @@ +unit Demo3Frm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ComCtrls, RVStyle, RVScroll, RichView, + ImgList, ExtCtrls; + +type + TfrmDemo3 = class(TForm) + PageControl1: TPageControl; + rv: TRichView; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + TabSheet3: TTabSheet; + Page4: TTabSheet; + Label1: TLabel; + Label2: TLabel; + Edit1: TEdit; + Label3: TLabel; + Edit2: TEdit; + RadioGroup1: TRadioGroup; + CheckBox1: TCheckBox; + CheckBox2: TCheckBox; + CheckBox3: TCheckBox; + Memo1: TMemo; + Label4: TLabel; + il: TImageList; + procedure Change(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + procedure BuildSummary; + end; + + +implementation +uses MainFrm; +{$R *.DFM} + +procedure TfrmDemo3.BuildSummary; +const OffOn: array [Boolean] of String = ('Off', 'On'); + Checks: array [Boolean] of Integer = (1, 2); +begin + rv.Clear; + rv.AddNL('Query', sncomHeading,1); + + rv.AddBulletEx('', 0, il, 0); + rv.Add('Edit1: ', sncomKeyword); + rv.Add(Edit1.Text, sncomNormal); + + rv.AddBulletEx('', 0, il, 0); + rv.Add('Edit2: ', sncomKeyword); + rv.Add(Edit2.Text, sncomNormal); + + rv.AddBreakEx(1, rvbsLine, clRed); + + if RadioGroup1.ItemIndex<>-1 then begin + rv.AddBulletEx('', 3, il, 0); + rv.Add('Menu: ', sncomKeyword); + rv.Add(RadioGroup1.Items[RadioGroup1.ItemIndex], sncomNormal); + end; + + rv.AddBreakEx(1, rvbsLine, clRed); + + rv.AddNL('Check1: ', sncomKeyword, 0); + rv.AddBulletEx('', Checks[Checkbox1.Checked], il, -1); + rv.Add(OffOn[Checkbox1.Checked], sncomNormal); + + rv.AddNL('Check2: ', sncomKeyword, 0); + rv.AddBulletEx('', Checks[Checkbox2.Checked], il, -1); + rv.Add(OffOn[Checkbox2.Checked], sncomNormal); + + rv.AddNL('Check3: ', sncomKeyword, 0); + rv.AddBulletEx('', Checks[Checkbox3.Checked], il, -1); + rv.Add(OffOn[Checkbox3.Checked], sncomNormal); + + rv.AddBreakEx(1, rvbsLine, clRed); + + rv.AddBulletEx('', 0, il, 0); + rv.Add('Memo1: ',sncomKeyword); + rv.AddTextNL(Memo1.Lines.Text,sncomNormal, -1, 0); + rv.Format; +end; + +procedure TfrmDemo3.Change(Sender: TObject); +begin + BuildSummary; +end; + +procedure TfrmDemo3.FormCreate(Sender: TObject); +begin + BuildSummary; +end; + +procedure TfrmDemo3.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; + +procedure TfrmDemo3.rvClick(Sender: TObject); +begin + if not rv.SelectionExists then + Application.MessageBox('This RichView only for view, do not click it', 'Info', + MB_OK or MB_ICONEXCLAMATION); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo4Frm.dfm b/12.0.4/Demos/Delphi/MultiDemo/Demo4Frm.dfm new file mode 100644 index 0000000..4472e0e Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/Demo4Frm.dfm differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo4Frm.pas b/12.0.4/Demos/Delphi/MultiDemo/Demo4Frm.pas new file mode 100644 index 0000000..e06fac3 --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/Demo4Frm.pas @@ -0,0 +1,118 @@ +unit Demo4Frm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, + ImgList, Menus; + +type + TfrmDemo4 = class(TForm) + rv: TRichView; + rvs: TRVStyle; + pm: TPopupMenu; + Watch1: TMenuItem; + Phone1: TMenuItem; + Keyboard1: TMenuItem; + NoSmokeSign1: TMenuItem; + Socket1: TMenuItem; + Pot1: TMenuItem; + Books1: TMenuItem; + Bridge1: TMenuItem; + ilGoods: TImageList; + il: TImageList; + procedure FormCreate(Sender: TObject); + procedure rvJump(Sender: TObject; id: Integer); + procedure pmItemClick(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + private + { Private declarations } + Goods: array[0..9] of Integer; + GoodsCount: Integer; + public + { Public declarations } + procedure BuildDoc; + end; + +implementation + +const Descriptions: array [0..7] of String = +( + 'Exact time twice a day!', + 'Unique 9-button model', + 'Additional keys available on request', + 'Must have for any airline!', + 'Second hand', + 'Universal thing', + '2 kg', + 'Brooklyn Bridge, available only today, 10% discount for the first 10 buyers!' +); + + +{$R *.DFM} + +{ TfrmDemo4 } + +procedure TfrmDemo4.BuildDoc; +var i, VPos: Integer; +begin + VPos := rv.VScrollPos; + rv.Clear; + rv.AddNL('Welcome to our shop!',1,1); + rv.AddNL('Today we have:',2,1); + for i := 0 to GoodsCount-1 do begin + rv.AddBulletEx('', Goods[i], ilGoods, 0); + rv.Add(pm.Items[Goods[i]].Caption,3); + rv.Add(' ('+Descriptions[Goods[i]]+') ',0); + rv.AddHotspotEx('', 2,3, il, -1); + rv.AddBreak; + end; + if GoodsCount<>10 then + rv.AddHotspotEx('', 0,1, il, 0); + rv.Format; + rv.VScrollPos := VPos; +end; + +procedure TfrmDemo4.FormCreate(Sender: TObject); +begin + {$IFDEF RICHVIEWDEF5} + pm.AutoHotkeys := maManual; + {$ENDIF} + BuildDoc; +end; + +procedure TfrmDemo4.rvJump(Sender: TObject; id: Integer); +var p: TPoint; + i: Integer; +begin + if id=GoodsCount then begin + // adding + GetCursorPos(p); + pm.Popup(p.x, p.y); + end + else begin + // deleting + for i := id to GoodsCount-2 do + Goods[i] := Goods[i+1]; + dec(GoodsCount); + BuildDoc; + end; +end; + +procedure TfrmDemo4.pmItemClick(Sender: TObject); +begin + Goods[GoodsCount] := TMenuItem(Sender).MenuIndex; + inc(GoodsCount); + BuildDoc; + rv.VScrollPos := rv.VScrollMax; +end; + +procedure TfrmDemo4.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo5Frm.dfm b/12.0.4/Demos/Delphi/MultiDemo/Demo5Frm.dfm new file mode 100644 index 0000000..58a8743 Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/Demo5Frm.dfm differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo5Frm.pas b/12.0.4/Demos/Delphi/MultiDemo/Demo5Frm.pas new file mode 100644 index 0000000..f7fabfe --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/Demo5Frm.pas @@ -0,0 +1,141 @@ +unit Demo5Frm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, StdCtrls, ExtCtrls, Menus, RVFuncs, ShellApi; + +type + TfrmDemo5 = class(TForm) + pan: TPanel; + edit: TEdit; + rv: TRichView; + rvs: TRVStyle; + pm: TPopupMenu; + mitFreezescrolling: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure editKeyPress(Sender: TObject; var Key: Char); + procedure rvSelect(Sender: TObject); + procedure pmPopup(Sender: TObject); + procedure mitFreezescrollingClick(Sender: TObject); + procedure rvJump(Sender: TObject; id: Integer); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmDemo5: TfrmDemo5; + +implementation + +{$R *.DFM} +{--------------------------------------------------------------} +procedure AddWithURLs(s: String; rv: TRichView; DefStyle, UrlStyle: Integer); +var Before, CurrentWord, Space: String; + p: Integer; + ParaNo: Integer; +begin + ParaNo := 0; + Before := ''; + if s = '' then begin + rv.AddNL('', DefStyle, ParaNo); + exit; + end; + while s<>'' do begin + p := Pos(' ', s); + if p=0 then p := Length(s)+1; + CurrentWord := Copy(s, 1, p-1); + Space := Copy(s, p, 1); + s := Copy(s, p+1, Length(s)); + if RVIsURL(CurrentWord) or RVIsEmail(CurrentWord) then begin + if Before<>'' then begin + rv.AddNL(Before, DefStyle, ParaNo); + ParaNo := -1; + Before := ''; + end; + rv.AddNL(CurrentWord, UrlStyle, ParaNo); + ParaNo := -1; + if Space<>'' then rv.Add(Space, DefStyle); + end + else + Before := Before + CurrentWord+Space; + end; + if Before<>'' then + rv.AddNL(Before, DefStyle, ParaNo); +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.FormCreate(Sender: TObject); +begin + pan.ClientHeight := edit.Height; + edit.SetBounds(0,0,pan.ClientWidth,pan.ClientHeight); + rv.AddNL('Use right-click menu to freeze scrolling when appending text', 2, 0); + rv.AddNL('Try quick-copy: selection is copied automatically when done', 2, 0); + AddWithURLs('You can use URLs and e-mail ( like www.trichview.com )', + rv, 2, 1); + rv.Format; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.FormResize(Sender: TObject); +begin + edit.Width := pan.ClientWidth; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.editKeyPress(Sender: TObject; var Key: Char); +begin + if Key=#13 then begin + AddWithURLS(edit.Text,rv,0,1); + rv.FormatTail; + Key := #0; + edit.Text := ''; + end; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.rvSelect(Sender: TObject); +begin + // Quick-copy + if rv.SelectionExists then begin + rv.CopyDef; + rv.Deselect; + rv.Invalidate; + end; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.pmPopup(Sender: TObject); +begin + mitFreezeScrolling.Checked := not (rvoScrollToEnd in rv.Options); +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.mitFreezescrollingClick(Sender: TObject); +begin + if (rvoScrollToEnd in rv.Options) then + rv.Options := rv.Options-[rvoScrollToEnd] + else + rv.Options := rv.Options+[rvoScrollToEnd]; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.rvJump(Sender: TObject; id: Integer); +var ItemNo: Integer; + s: String; +begin + ItemNo := rv.GetJumpPointItemNo(id); + s := rv.GetItemTextA(ItemNo); + if not RVIsURL(s) and RVIsEmail(s) then + s := 'mailto:'+s; + ShellExecute(Application.Handle, 'open', PChar(s), nil, nil, SW_NORMAL); +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; + + + +end. diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo6Frm.dfm b/12.0.4/Demos/Delphi/MultiDemo/Demo6Frm.dfm new file mode 100644 index 0000000..394d3de Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/Demo6Frm.dfm differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo6Frm.pas b/12.0.4/Demos/Delphi/MultiDemo/Demo6Frm.pas new file mode 100644 index 0000000..5ab4903 --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/Demo6Frm.pas @@ -0,0 +1,86 @@ +unit Demo6Frm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVScroll, RichView, ExtCtrls, + ImgList, RVStyle; + +type + TfrmDemo6 = class(TForm) + Close: TButton; + rvs: TRVStyle; + tmr: TTimer; + rv: TRichView; + il: TImageList; + procedure FormCreate(Sender: TObject); + procedure tmrTimer(Sender: TObject); + private + { Private declarations } + Red: Byte; + DRed: Shortint; + ImageIndex: Integer; + public + { Public declarations } + end; + +var + frmDemo6: TfrmDemo6; + +implementation + +{$R *.DFM} + +procedure TfrmDemo6.FormCreate(Sender: TObject); +const crlf:String = chr(13)+chr(10); +begin + ImageIndex := 0; + Red := 150; + DRed := 5; + rvs.TextStyles[rvsHeading].Color := RGB(Red,0,0); + rv.TopMargin := rv.Height; + rv.BottomMargin := rv.Height; + + rv.AddBulletEx('',0,il,1); + rv.Add('Credits Demo', 1); + rv.AddTextNL( + 'Roberto Nelson'+crlf+ + 'Bruce Young'+crlf+ + 'Kim Lambert'+crlf+ + 'Leslie Johnson'+crlf+ + 'Phil Forest'+crlf+ + 'K.J. Weston'+crlf+ + 'Lee Terry'+crlf+ + 'Stewart Hall'+crlf+ + 'Katherine Young'+crlf+ + 'Chris Papadopulos'+crlf+ + 'Pete Fisher'+crlf+ + 'Ann Bennet'+crlf+ + 'Roger De Sousa'+crlf+ + 'Janet Boldwin'+crlf+ + 'Roger Reeves'+crlf+ + 'Willie Stansbury'+crlf+ + 'Leslie Phong'+crlf+ + 'Ashok Ramanathan',0,0,0); + rv.AddNL('and other people from Employee.db',2,0); + rv.VSmallStep := 1; + rv.Format; +end; + +procedure TfrmDemo6.tmrTimer(Sender: TObject); +begin + if rv.VScrollPos<>rv.VScrollMax then + rv.VScrollPos := rv.VScrollPos+1 + else + rv.VScrollPos := 0; + inc(Red, DRed); + rvs.TextStyles[rvsHeading].Color := RGB(Red,0,0); + if (Red=255) or (Red=100) then DRed := -DRed; + inc(ImageIndex); + if ImageIndex=il.Count then + ImageIndex := 0; + rv.SetBulletInfo(0,'',ImageIndex,nil,0); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo7Frm.dfm b/12.0.4/Demos/Delphi/MultiDemo/Demo7Frm.dfm new file mode 100644 index 0000000..32404f9 Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/Demo7Frm.dfm differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/Demo7Frm.pas b/12.0.4/Demos/Delphi/MultiDemo/Demo7Frm.pas new file mode 100644 index 0000000..223a15b --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/Demo7Frm.pas @@ -0,0 +1,67 @@ +unit Demo7Frm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVEdit, ExtCtrls, StdCtrls; + +type + TfrmDemo7 = class(TForm) + Panel1: TPanel; + rve: TRichViewEdit; + txt: TEdit; + btnMark: TButton; + btnUnmark: TButton; + procedure FormCreate(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure btnMarkClick(Sender: TObject); + procedure btnUnmarkClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + + +implementation +uses MainFrm; + +{$R *.DFM} + +{ + See advanced versions of this demo on the forum: + http://www.trichview.com/forums/viewtopic.php?t=57 +} + +procedure TfrmDemo7.FormCreate(Sender: TObject); +begin + rve.Clear; + rve.LoadText(ExtractFilePath(Application.ExeName)+'MainFrm.pas',0,0, False); + rve.Format; +end; + +procedure TfrmDemo7.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; + +procedure TfrmDemo7.btnMarkClick(Sender: TObject); +begin + rve.SetSelectionBounds(0,rve.GetOffsBeforeItem(0),0,rve.GetOffsBeforeItem(0)); + while rve.SearchText(txt.Text, [rvseoDown]) do + rve.ApplyTextStyle(sncomMarked); +// Note: every call of ApplyTextStyle reformats affected paragraphs +end; + +procedure TfrmDemo7.btnUnmarkClick(Sender: TObject); +begin + rve.SelectAll; + rve.ApplyTextStyle(sncomNormal); + rve.Deselect; + rve.Refresh; +end; + +end. diff --git a/12.0.4/Demos/Delphi/MultiDemo/MainFrm.dfm b/12.0.4/Demos/Delphi/MultiDemo/MainFrm.dfm new file mode 100644 index 0000000..8aacce2 Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/MainFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/MainFrm.pas b/12.0.4/Demos/Delphi/MultiDemo/MainFrm.pas new file mode 100644 index 0000000..efe2277 --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/MainFrm.pas @@ -0,0 +1,125 @@ +unit MainFrm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, + ImgList, MMSystem; + +type + TfrmMain = class(TForm) + rv: TRichView; + rvs: TRVStyle; + rvTop: TRichView; + rvsForDemos: TRVStyle; + il: TImageList; + procedure FormCreate(Sender: TObject); + procedure rvJump(Sender: TObject; id: Integer); + procedure rvRVMouseMove(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + + +{ Constants for text styles, rvsForDemos.TextStyles } +const sncomNormal = 0; + sncomHeading = 1; + sncomKeyword = 2; + sncomMarked = 3; + +{ Constants for text styles, rvs.TextStyles } +const snNormal = 0; + snHeading = 1; + snExit = 3; + snJump = 4; + +implementation + +uses PopupFrm, + Demo1Frm, Demo2Frm, Demo3Frm, + Demo4Frm, Demo5Frm, Demo6Frm, + Demo7Frm; +{$R *.DFM} +{-----------------------------------------------------} +procedure TfrmMain.FormCreate(Sender: TObject); +begin + + rvTop.BackgroundBitmap := rv.BackgroundBitmap; + rvTop.AddNL(' ', snNormal, 1); + rvTop.AddNL('RichView Demos', snHeading, 1); + rvTop.AddNL(' ', snNormal, 1); + rvTop.Format; + rvTop.Height := rvTop.DocumentHeight; + + rv.AddNL('Click links for demos, click balls for hints', snNormal, 1); + rv.AddHotspotExTag('', 0,1,il, 1, 1); + rv.Add('1. ', snNormal); + rv.AddNLTag('"Checkpoints"', snJump, -1, 1); + rv.AddHotspotExTag('', 0,1,il, 1, 2); + rv.Add('2. ', snNormal); + rv.AddNLTag('Customizing Styles', snJump, -1, 2); + rv.AddHotspotExTag('', 0,1,il, 1, 3); + rv.Add('3. ', snNormal); + rv.AddNLTag('Query Summary', snJump, -1, 3); + rv.AddHotspotExTag('', 0,1,il, 1, 4); + rv.Add('4. ', snNormal); + rv.AddNLTag('Interactive document', snJump, -1, 4); + rv.AddHotspotExTag('', 0,1,il, 1, 5); + rv.Add('5. ', snNormal); + rv.AddNLTag('Chat Simulation', snJump, -1, 5); + rv.AddHotspotExTag('', 0,1,il, 1, 6); + rv.Add('6. ', snNormal); + rv.AddNLTag('Credits Demo', snJump, -1, 6); + rv.AddHotspotExTag('', 0,1,il, 1, 7); + rv.Add('7. ', snNormal); + rv.AddNLTag('Search and mark', snJump, -1, 7); + rv.AddBreakEx(2, rvbsLine, clGreen); + rv.AddNL('Exit', snExit, 1); + rv.Format; +end; +{-----------------------------------------------------} +procedure TfrmMain.rvJump(Sender: TObject; id: Integer); +var ItemNo, StyleNo, ItemTag: Integer; + frm: TFrmPopup; + frmDemo: TForm; +begin + ItemNo := rv.GetJumpPointItemNo(id); + StyleNo := rv.GetItemStyle(ItemNo); + ItemTag := rv.GetItemTag(ItemNo); + if StyleNo=rvsHotspot then begin + frm := TFrmPopup.Create(Self); + frm.ShowTopic(ItemTag); + end + else begin + frmDemo := nil; + case ItemTag of + 1: frmDemo := TfrmDemo1.Create(Application); + 2: frmDemo := TfrmDemo2.Create(Application); + 3: frmDemo := TfrmDemo3.Create(Application); + 4: frmDemo := TfrmDemo4.Create(Application); + 5: frmDemo := TfrmDemo5.Create(Application); + 6: frmDemo := TfrmDemo6.Create(Application); + 7: frmDemo := TfrmDemo7.Create(Application); + 0: Close; + end; + if frmDemo<>nil then begin + frmDemo.ShowModal; + frmDemo.Free; + end; + end; +end; +{-----------------------------------------------------} +procedure TfrmMain.rvRVMouseMove(Sender: TObject; id: Integer); +begin + if id<>-1 then + PlaySound(PChar(ExtractFilePath(Application.ExeName)+'UCS.wav'), + 0,SND_ASYNC or SND_FILENAME); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/MultiDemo/PopupFrm.dfm b/12.0.4/Demos/Delphi/MultiDemo/PopupFrm.dfm new file mode 100644 index 0000000..b720e67 Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/PopupFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/PopupFrm.pas b/12.0.4/Demos/Delphi/MultiDemo/PopupFrm.pas new file mode 100644 index 0000000..4716a99 --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/PopupFrm.pas @@ -0,0 +1,124 @@ +unit PopupFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, ExtCtrls; + +type + TfrmPopup = class(TForm) + Panel1: TPanel; + rv: TRichView; + rvs: TRVStyle; + procedure rvKeyPress(Sender: TObject; var Key: Char); + procedure rvClick(Sender: TObject); + procedure FormDeactivate(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + private + { Private declarations } + procedure Build(DemoNo: Integer); + procedure MoveToMouse; + public + { Public declarations } + procedure ShowTopic(DemoNo: Integer); + end; + +implementation + +{$R *.DFM} +uses MainFrm; + +procedure TfrmPopup.rvKeyPress(Sender: TObject; var Key: Char); +begin + Key:=#0; + Close; +end; + +procedure TfrmPopup.rvClick(Sender: TObject); +begin + Close; +end; + +procedure TfrmPopup.FormDeactivate(Sender: TObject); +begin + Close; +end; + +procedure TfrmPopup.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TfrmPopup.Build(DemoNo: Integer); +begin + case DemoNo of + 1: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('"Checkpoints"', 1); + rv.AddNL('Synchronizing document scrolling with list of contents', 0,0); + rv.AddNL('(This demo loads *.pas files from application directory)', 0,0); + end; + 2: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Customizing Styles', 1); + rv.AddNL('Interactive customization of document', 0,0); + end; + 3: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Query Summary', 1); + rv.AddNL('Complex query at one look', 0,0); + end; + 4: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Interactive document', 1); + rv.AddNL('Document is a control itself', 0,0); + end; + 5: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Chat Simulation', 1); + rv.AddNL('Autoscroll, URL detection', 0,0); + end; + 6: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Credits Demo:', 1); + rv.AddNL('Scrolling text and images on timer', 0,0); + end; + 7: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Search and mark:', 1); + rv.AddNL('Search and mark words in editor', 0,0); + rv.AddNL('(This demo loads MainFrm.pas from the application directory)', 0,0); + end; + end; + rv.Format; + Height := rv.DocumentHeight+20; +end; + +procedure TfrmPopup.MoveToMouse; +var p: TPoint; +begin + GetCursorPos(p); + if p.x+Width>Screen.Width then + p.x := Screen.Width-Width; + if p.y+Height>Screen.Height then + p.y := Screen.Height-Height; + Left := p.x; + Top := p.y; +end; + +procedure TfrmPopup.ShowTopic(DemoNo: Integer); +begin + Build(DemoNo); + MoveToMouse; + Show; +end; + +end. diff --git a/12.0.4/Demos/Delphi/MultiDemo/RVDemo.bdsproj b/12.0.4/Demos/Delphi/MultiDemo/RVDemo.bdsproj new file mode 100644 index 0000000..e6f9bef --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/RVDemo.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + RVDemo.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/MultiDemo/RVDemo.dpr b/12.0.4/Demos/Delphi/MultiDemo/RVDemo.dpr new file mode 100644 index 0000000..d9a9173 --- /dev/null +++ b/12.0.4/Demos/Delphi/MultiDemo/RVDemo.dpr @@ -0,0 +1,21 @@ +program RVDemo; + +uses + Forms, + MainFrm in 'MainFrm.pas' {frmMain}, + PopupFrm in 'PopupFrm.pas' {frmPopup}, + Demo3Frm in 'Demo3Frm.pas' {frmDemo3}, + Demo1Frm in 'Demo1Frm.pas' {frmDemo1}, + Demo2Frm in 'Demo2Frm.pas' {frmDemo2}, + Demo4Frm in 'Demo4Frm.pas' {frmDemo4}, + Demo5Frm in 'Demo5Frm.pas' {frmDemo5}, + Demo6Frm in 'Demo6Frm.pas' {frmDemo6}, + Demo7Frm in 'Demo7Frm.pas' {frmDemo7}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/MultiDemo/RVDemo.res b/12.0.4/Demos/Delphi/MultiDemo/RVDemo.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/RVDemo.res differ diff --git a/12.0.4/Demos/Delphi/MultiDemo/UCS.wav b/12.0.4/Demos/Delphi/MultiDemo/UCS.wav new file mode 100644 index 0000000..1b2f7bf Binary files /dev/null and b/12.0.4/Demos/Delphi/MultiDemo/UCS.wav differ diff --git a/12.0.4/Demos/Delphi/OfficeConverters/MainFrm.dfm b/12.0.4/Demos/Delphi/OfficeConverters/MainFrm.dfm new file mode 100644 index 0000000..cd70712 Binary files /dev/null and b/12.0.4/Demos/Delphi/OfficeConverters/MainFrm.dfm differ diff --git a/12.0.4/Demos/Delphi/OfficeConverters/MainFrm.pas b/12.0.4/Demos/Delphi/OfficeConverters/MainFrm.pas new file mode 100644 index 0000000..84bc07a --- /dev/null +++ b/12.0.4/Demos/Delphi/OfficeConverters/MainFrm.pas @@ -0,0 +1,161 @@ +unit MainFrm; + +interface + +// Use this define if you want to enable thirdparty Gif support +// for Delphi 3-2006, using Anders Melander's TGifImage +// http://www.torry.net/vcl/graphics/gif/gifimage.exe (original) +// http://www.trichview.com/resources/thirdparty/gifimage.zip (update) +// For Delphi 2007 or newer, the standard Delphi's TGifImage is used automatically +{.$DEFINE USEGIFIMAGE} + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ShellApi, + Dialogs, StdCtrls, ComCtrls, RVStyle, RVScroll, + RichView, RVFuncs, ExtCtrls, RVEdit, CRVData, CRVFData, RVOfficeCnv, RVTypes + +{$IFDEF RICHVIEWDEF2007} + , GifImg +{$ELSE} + {$IFDEF USEGIFIMAGE} + , GifImage + {$ENDIF} +{$ENDIF} + ; + +type + TfrmMain = class(TForm) + od: TOpenDialog; + rvs: TRVStyle; + rve: TRichViewEdit; + Panel1: TPanel; + btnOpen: TButton; + rvc: TRVOfficeConverter; + btnSave: TButton; + sd: TSaveDialog; + pb: TProgressBar; + procedure btnOpenClick(Sender: TObject); + procedure rvcConverting(Sender: TObject; Percent: Integer); + procedure btnSaveClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure rveReadHyperlink(Sender: TCustomRichView; const Target, + Extras: String; DocFormat: TRVLoadFormat; var StyleNo, + ItemTag: Integer; var ItemName: TRVRawByteString); + procedure rveJump(Sender: TObject; id: Integer); + procedure rveWriteHyperlink(Sender: TCustomRichView; id: Integer; + RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; + var Target, Extras: string); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + +implementation + +{$R *.dfm} + +{====================== Import and export =====================================} +procedure TfrmMain.FormCreate(Sender: TObject); +begin + od.Filter := 'RTF (Built-In RichView Import)|*.rtf|'+rvc.GetImportFilter; + sd.Filter := 'RTF (Built-In RichView Export)|*.rtf|'+rvc.GetExportFilter; + + rve.Clear; + rve.AddNL('This demo shows how to use Microsoft® Office text converters.',0,0); + rve.AddNL('First items in filters (file masks) of the file-selection dialogs are RTF import/export '+ + 'by the component itself. Others use converters.',0,0); + rve.AddNL('For HTML import testing, look at test/test.htm.',0,0); + rve.AddNL('After loading, Ctrl+click any hypertext link to view its target.',0,0); + rve.AddNL('You''ll see option for HTML export via converters. You can use it, but native RichView HTML'+ + ' export gives much better results.',0,0); + rve.Format; +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.btnOpenClick(Sender: TObject); +var r: Boolean; +begin + if not od.Execute then + exit; + rve.Clear; + rve.Format; + rve.Update; + + rve.Clear; + if od.FilterIndex=1 then + r := rve.LoadRTF(od.FileName) + else begin + pb.Visible := True; + r:= rvc.ImportRV(od.FileName, rve, od.FilterIndex-2); + end; + if not r then + Application.MessageBox('Error','Error',0); + pb.Visible := False; + rve.Format; + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.btnSaveClick(Sender: TObject); +var r: Boolean; +begin + if not sd.Execute then + exit; + pb.Visible := True; + if sd.FilterIndex=1 then + r := rve.SaveRTF(sd.FileName,False) + else begin + pb.Visible := True; + r:= rvc.ExportRV(sd.FileName, rve, sd.FilterIndex-2); + end; + if not r then + Application.MessageBox('Error','Error',0); + pb.Visible := False; + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.rvcConverting(Sender: TObject; Percent: Integer); +begin + pb.Position := Percent; +end; +{============================ Hypertext =======================================} +// We store URLs in tags +procedure TfrmMain.rveReadHyperlink(Sender: TCustomRichView; const Target, + Extras: String; DocFormat: TRVLoadFormat; var StyleNo, ItemTag: Integer; + var ItemName: TRVRawByteString); +begin + ItemTag := Integer(StrNew(PChar(Target))); +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.rveWriteHyperlink(Sender: TCustomRichView; id: Integer; + RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; + var Target, Extras: string); +begin + Target := PChar(RVData.GetItemTag(ItemNo)); +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.rveJump(Sender: TObject; id: Integer); +var ItemNo: Integer; + RVData: TCustomRVFormattedData; + s: String; +begin + rve.GetJumpPointLocation(id, RVData, ItemNo); + s := PChar(RVData.GetItemTag(ItemNo)); + ShellExecute(0, 'open', PChar(s), nil, nil, SW_SHOW); +end; +{==============================================================================} +{$IFDEF RICHVIEWDEF2007} +initialization + RegisterClass(TGifImage); +{$ELSE} +{$IFDEF USEGIFIMAGE} +initialization + RegisterClass(TGifImage); +{$ENDIF} +{$ENDIF} + +end. diff --git a/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.bdsproj b/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.bdsproj new file mode 100644 index 0000000..c4a5add --- /dev/null +++ b/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + OfficeConverters.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.dpr b/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.dpr new file mode 100644 index 0000000..0c33d8c --- /dev/null +++ b/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.dpr @@ -0,0 +1,13 @@ +program OfficeConverters; + +uses + Forms, + MainFrm in 'MainFrm.pas' {frmMain}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.dproj b/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.dproj new file mode 100644 index 0000000..092525a --- /dev/null +++ b/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.dproj @@ -0,0 +1,64 @@ + + + {9eabf2c2-64a8-45e6-b8ca-fb40c2fdd840} + OfficeConverters.dpr + Debug + AnyCPU + DCC32 + OfficeConverters.exe + + + 7.0 + False + False + 0 + RELEASE + + + 7.0 + DEBUG + + + Delphi.Personality + + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + OfficeConverters.dpr + + + + + + + MainSource + + +
frmMain
+
+
+ +
\ No newline at end of file diff --git a/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.res b/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/OfficeConverters/OfficeConverters.res differ diff --git a/12.0.4/Demos/Delphi/OfficeConverters/Test/bt/bt.gif b/12.0.4/Demos/Delphi/OfficeConverters/Test/bt/bt.gif new file mode 100644 index 0000000..39abe6d Binary files /dev/null and b/12.0.4/Demos/Delphi/OfficeConverters/Test/bt/bt.gif differ diff --git a/12.0.4/Demos/Delphi/OfficeConverters/Test/bt/mail.gif b/12.0.4/Demos/Delphi/OfficeConverters/Test/bt/mail.gif new file mode 100644 index 0000000..1e9edc3 Binary files /dev/null and b/12.0.4/Demos/Delphi/OfficeConverters/Test/bt/mail.gif differ diff --git a/12.0.4/Demos/Delphi/OfficeConverters/Test/test.htm b/12.0.4/Demos/Delphi/OfficeConverters/Test/test.htm new file mode 100644 index 0000000..1b7dee0 --- /dev/null +++ b/12.0.4/Demos/Delphi/OfficeConverters/Test/test.htm @@ -0,0 +1,35 @@ + + +HTML Import Test + + +
+ +

HTML Import Test

+ + + + + + + + + + +
 < Below are the links to the main pages of this site
+ +    Main Page
+    Features
+    Downloads
+    Order On-line
+    Additional Resources
+    Applications with RichView 
+    Support Forums 
+    Contacts +
+
www.trichview.com
+ +
+ + + diff --git a/12.0.4/Demos/Delphi/OfficeConverters/Test/title.gif b/12.0.4/Demos/Delphi/OfficeConverters/Test/title.gif new file mode 100644 index 0000000..e21f50d Binary files /dev/null and b/12.0.4/Demos/Delphi/OfficeConverters/Test/title.gif differ diff --git a/12.0.4/Demos/Delphi/ReadMe.txt b/12.0.4/Demos/Delphi/ReadMe.txt new file mode 100644 index 0000000..88fdc91 --- /dev/null +++ b/12.0.4/Demos/Delphi/ReadMe.txt @@ -0,0 +1,115 @@ +================================================================ +========================= Demo projects ======================== + For Delphi 4-2007 +================================================================ + +See also Tutorial.txt +Demo projects for Delphi 2009+ are in ..\DelphiUnicode subdirectory. + + +Editor\Editor 1\ + TRichViewEdit-based editors. Demonstrates editor with fixed + set of styles, saving and loading, inserting items of different + types, tables, list styles. +Editor\Editor 2\ + How to implement RichEdit-style editing operations + (make bold, apply font, etc.) +Editors\Notes\ + "Editor 2" demo with footnotes and endnotes +MultiDemo\ + Several demos in one application +DB Demo\ + 3 demo projects + - using TDBRichViewEdit + - using TDBRichView and TRichViewEdit + - using DBGrid +OfficeConverters\ + Demo for TRVOfficeConverter. + Sample HTML file is included. + +================================================================ +============== Demos in ASSORTED subdirectory ================== +================================================================ + +Load RVF\ + How to load file created in editor demo (Editor\Editor 1\) +Save HTML\ + Loading RVF files (created in editor demo) and saving + them in HTML using advanced features. +Search and Replace\ + Using search and replace dialogs with TRichViewEdit +PlanetQuiz\ + Using tables, OnMouseMove and GetItemAt +AutoComplete\ + Shows menu to modify the current word. + +========= Printing ========= + +Printing\Printing\ + How to print document. OnPagePrepaint event is used + to draw page numbers +Printing\Headers\ + Printing documents with headers and footers. Loading + RTF files with headers and footers. +Printing\ReportHelper\ + Printing using TRVReportHelper. Printing with one and + two columns. + +========= IMAGES ========= +Graphics\ToImage + Draws RichView document onto metafile canvas +Graphics\Emoticons + Replaces :) :( :| with images +Graphics\DragImg + Inserts dropped image in editor +Graphics\SharedImages + Storing graphics outside of RVF files. + +========= CUSTOM DRAWING ========= +Custom Draw\CustomDraw\ + Custom drawing in RichView. + (Delphi3+ is required, since + TBitmap.ScanLines property was used) +Custom Draw\Mathematics\ + One more example of custom drawing (math-style) + +========= HYPERTEXT FEATURES ========= +Hypertext\URLs\ + Scans for URLs in text and makes them hypertext links. + Detects URLs in the whole document, in the pasted text, on typing. +Hypertext\CreateHyperlink\ + Converts selected text to hyperlinks +Hypertext\PhoneBook\ + Simple phonebook example: listbox-like selection using + hypertext. + +========= INTERNATIONAL FEATURES ========= +International\RTL + Using BiDiMode - displaying Hebrew and Arabic text (D3+) +International\Accents + Shows processing of combined Unicode characters + (D3+, best viewed on WinNT/2000/XP) + +========= DEMONSTRATION OF FIELDS ========= +Fields\LiveLink\ + Changes in RichViewEdit are reflected in edit box and vice versa +Fields\FillInGaps + Allows to type text only in special fields in the document +Fields\MailMerge\ + Two projects. The first one allows editing template with fields, + the second projects fills this template with values +Fields\MailMerge2\ + Advanced version. Instead of changing text of text items + representing fields, this demo replaces fields with + arbitrary RVF content. +Fields\MailMerge-LabelItems\ + Mail-merge demo using TRVLabelItemInfo as fields. + Shows how to work with TRVSeqItemInfo and "smart popups" +Fields\Spreadsheet\ + Field values are calculated automatically + +========= BULLETS AND NUMBERING ========= +ListStyles\Bullets\ + How to apply paragraph bullets and numbering +ListStyles\ImageListBullets\ + Shows bullets with image list. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.bdsproj b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.bdsproj new file mode 100644 index 0000000..9c654df --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_1_1.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.dpr b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.dpr new file mode 100644 index 0000000..6343068 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.res b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Unit1.dfm new file mode 100644 index 0000000..53552c8 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Unit1.pas new file mode 100644 index 0000000..bfa621e --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/1 Hello World/Unit1.pas @@ -0,0 +1,56 @@ +unit Unit1; +{==============================================================================} +{ The simplest application with RichView Package - "Hello World!" } +{ There are two components on the form: } +{ RichView1: TRichView; - component for displaying text } +{ RVStyle1: TRVStyle; - component for customizing appearance of RichView; } +{ RichView1.Style is set to RVStyle1; } +{ See more comments in TForm1.FormCreate } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // This line adds one line of text in RichView. + RichView1.AddNL('Hello World!', 0, 0); + // But text will not be displayed yet. You need to call Format method after adding + // all contents to RichView: + RichView1.Format; + + // More about AddNL method: + // The first parameter of the method ('Hello World!') is a text to display + // The second parameter defines text attributes of added text; + // It is an index in collection of text styles (RVStyle1.TextStyles) + // You can customize collection of styles using Object Inspector + // The third parameter defines paragraph attributes of added text; + // It is an index in collection of paragraph styles (RVStyle1.ParaStyles) + // AddNL is one of methods for adding contents to RichView (Add*** methods) + // See "Building RichView Document" topic of help file. + // These methods append items to RichView. But component is not prepared for + // displaying data until Format method is called. +end; + +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.bdsproj b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.bdsproj new file mode 100644 index 0000000..608fe93 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_1_2.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.dpr b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.dpr new file mode 100644 index 0000000..600c4f4 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_2; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.res b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Unit1.dfm new file mode 100644 index 0000000..a88ee76 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Unit1.pas new file mode 100644 index 0000000..02e3c82 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/2 Text/Unit1.pas @@ -0,0 +1,62 @@ +unit Unit1; +{==============================================================================} +{ This demo shows how to add text in RichView at run-time. } +{ See comments in TForm1.FormCreate } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // Clear deletes all items of RichView. + // There are no items at the beginning, so this call of Clear is + // just for demonstration. + RichView1.Clear; + + // Adding the first paragraph. + // This paragraph has the 1-th style (centered by default; you can view/modify + // it in RVStyle1.ParaStyles property). + // This paragraph consists of one item of the 1-th text style + RichView1.AddNL('Adding Text', 1, 1); + + // Adding the second paragraph. + // This paragraph has the 0-th style (style is defined by the first item in paragraph). + RichView1.AddNL('This demo shows how to add text in ', 0, 0); + // Continuing the second paragraph. + // Note: -1 is passed as an index of paragraph style. + // This means that this item will be added to the last paragraph. + RichView1.AddNL('RichView', 3, -1); + // Continuing the second paragraph... + RichView1.AddNL('. There are two paragraphs in this document - '+ + 'the first one with centered alignment, and the second one - '+ + 'with left alignment. The first paragraph consists of one text item, '+ + 'and the second paragraph consists of three items. '+ + 'Each item is added with one call of AddNL method.', 0, -1); + // But text will not be displayed yet. You need to call Format method after adding + // all contents to RichView: + RichView1.Format; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Bars.bmp b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Bars.bmp new file mode 100644 index 0000000..337ebcc Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Bars.bmp differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.bdsproj b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.bdsproj new file mode 100644 index 0000000..0b8b6dc --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_1_3.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.dpr b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.dpr new file mode 100644 index 0000000..5ad74db --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_3; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.res b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Unit1.dfm new file mode 100644 index 0000000..f2f95c2 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Unit1.pas new file mode 100644 index 0000000..21fa658 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/3 Images/Unit1.pas @@ -0,0 +1,78 @@ +unit Unit1; +{==============================================================================} +{ This demo shows how to add pictures and horizontal lines into RichView. } +{ } +{ This demo also shows how to use background image. } +{ RichView1.BackgroundBitmap is assigned to some image, and } +{ RichView1.BackgroundStyle is set to bsTiled } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, ExtCtrls, StdCtrls; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + Image1: TImage; + Label1: TLabel; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; + bmp: TBitmap; +begin + + RichView1.Clear; + + RichView1.AddNL('Example of adding images', 1, 1); + + // Adding "break" - horizontal line + RichView1.AddBreak; + + RichView1.AddNL('Adding icon:', 0, 0); + // RichView frees inserted graphics when needed. + // So RichView1.AddPictureEx('', Image1.Picture.Graphic, -1, rvvaBaseline) + // will cause error. So we need to create copy of graphics. + + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddPictureEx('', ico, -1, rvvaBaseline); + + RichView1.AddNL('Adding bitmap:', 0, 0); + + // Adding bitmap from file: + bmp := TBitmap.Create; + bmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'bars.bmp'); + RichView1.AddPictureEx('', bmp, -1, rvvaMiddle); + + RichView1.AddBreak; + + RichView1.Format; + + // About AddPictureEx: + // 1st parameter: name of picture. Allows to store additional text information + // together with image. There is no predefined meaning of this + // parameter. May be in future this string will be shown as a hint. + // 2nd parameter: image. TBitmap, TIcon, TMetafile, etc. + // 3rd parameter: index of paragraph style (-1 to continue paragraph) + // 4th parameter: vertical align of image. +end; + +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.bdsproj b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.bdsproj new file mode 100644 index 0000000..b56468a --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_1_4.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.dpr b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.dpr new file mode 100644 index 0000000..a28de01 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_4; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.res b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Unit1.dfm new file mode 100644 index 0000000..4582fec Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Unit1.pas new file mode 100644 index 0000000..bb02d56 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/4 Controls/Unit1.pas @@ -0,0 +1,96 @@ +unit Unit1; +{==============================================================================} +{ This demo shows how to add controls to RichView } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, ExtCtrls, StdCtrls; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + Label1: TLabel; + Label2: TLabel; + ComboBox1: TComboBox; + Label3: TLabel; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + procedure DoOnScrollbarChange(Sender: TObject); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +// This event handler will be assigned to scrollbar's OnChange +procedure TForm1.DoOnScrollbarChange(Sender: TObject); +begin + Label3.Caption := IntToStr(TScrollbar(Sender).Position); +end; + +procedure TForm1.FormCreate(Sender: TObject); +var sb: TScrollbar; + pan : TPanel; +begin + RichView1.Clear; + RichView1.AddNL('Example of adding controls', 1, 1); + + // Adding "break" - horizontal line + RichView1.AddBreakEx(3, rvbsLine, clRed); + // 1st parameter - line width (AddBreak method adds break with width=1) + // 2nd parameter - reserved, must be set to rvbsLine + // 3rd parameter - color; if set to clNone, "break" will have color of the + // 0th text style (AddBreak method adds break with color=clNone) + + //-------------------------------------------// + // Example 1: adding controls from form: // + //-------------------------------------------// + // Adding combobox + RichView1.AddNL('Combobox:', 0, 0); + // AddControlEx removes control from its current parent and insert into RichView + // Just one line of code: + RichView1.AddControlEx('', Combobox1, 1, rvvaBaseline); + + //-------------------------------------------// + // Example 1: adding controls created at // + // run-time: // + //-------------------------------------------// + RichView1.AddNL('Panel with scrollbar:', 0, 1); + // Adding panel with scrollbar + pan := TPanel.Create(nil); // we can set NIL to Owner because this panel will be freed by RichView + pan.Caption := ''; + pan.Width := 100; + pan.Height := 60; + sb := TScrollbar.Create(pan); // panel will free scrollbar + sb.Parent := pan; + sb.Min := -10; + sb.Max := 10; + sb.SetBounds(10,20,80,20); + sb.OnChange := DoOnScrollbarChange; + RichView1.AddControlEx('', pan, -1, rvvaMiddle); + + RichView1.AddBreakEx(3, rvbsLine, clRed); + + RichView1.Format; + + // About AddControlEx: + // Parameters of this method are similar with parameters of AddPictureEx: + // 1st parameter: name of control. Allows to hold additional text information + // together with control. There is no predefined meaning of this + // parameter. + // 2nd parameter: control + // 3rd parameter: index of paragraph style (-1 to continue paragraph) + // 4th parameter: vertical align of control. +end; + +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.bdsproj b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.bdsproj new file mode 100644 index 0000000..3085b01 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_1_5.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.dpr b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.dpr new file mode 100644 index 0000000..b1cc896 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_5; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.res b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Unit1.dfm new file mode 100644 index 0000000..da3d813 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Unit1.pas new file mode 100644 index 0000000..553366b --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/1 Building a Document/5 Bullets/Unit1.pas @@ -0,0 +1,72 @@ +unit Unit1; +{==============================================================================} +{ This demo shows how to add images from ImageLists to RichView } +{==============================================================================} + +{$I RV_Defs.inc} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVScroll, RichView, RVStyle, ExtCtrls, StdCtrls; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + ImageList1: TImageList; + ImageList2: TImageList; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; +const crlf = #13#10; +begin + RichView1.Clear; + RichView1.AddNL('Example of adding bullets', 1, 1); + + // AddTextNL methods can add several paragraphs of text. + // Paragraphs can be separated with #13#10, #13 or #10 characters. + RichView1.AddTextNL('"Bullets" are the images from ImageLists. '+crlf+ + '"Bullets" provide an efficient way to store graphics in RichView, '+ + 'because only link to ImageList and index of image are stored '+ + 'per "bullet" in memory.'+crlf+ + '"Bullets" are useful when you need to add large number of the '+ + 'same picture in RichView: ', 0, 0, 0); + for i := 0 to 9 do + RichView1.AddBulletEx('', 0, ImageList1, -1); + RichView1.AddNL('You can use as many ImageList, as you wish:',0,0); + RichView1.AddBulletEx('', 0, ImageList1, -1); + RichView1.AddBulletEx('', 0, ImageList2, -1); + RichView1.AddBulletEx('', 1, ImageList1, -1); + RichView1.AddBulletEx('', 1, ImageList2, -1); + RichView1.Format; + + // About AddBulletEx: + // Parameters of this method are similar to parameters of + // AddPictureEx and AddControlEx: + // 1st parameter: name of bullet. Allows to store additional text information + // together with bullet. There is no predefined meaning of this + // parameter. May be it will be used to display hints in future. + // 2nd parameter: index of image + // 3rd parameter: ImageList; RichView holds only link to this image list, not + // a copy of it; + // 4th parameter: index of paragraph style (-1 to continue paragraph) + +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.bdsproj b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.bdsproj new file mode 100644 index 0000000..7b86c41 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_2_1.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.dpr b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.dpr new file mode 100644 index 0000000..a882d2b --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.res b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.dfm new file mode 100644 index 0000000..7d2f59f Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.pas new file mode 100644 index 0000000..523c837 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.pas @@ -0,0 +1,217 @@ +unit Unit1; + +{==============================================================================} +{ This demo shows how to read information about items in RichView } +{ Key methods and properties: } +{ - ItemCount, } +{ - GetItemStyle, } +{ - GetItemText, GetItemTag, GetBreakInfo, GetPictureInfo, GetControlInfo, } +{ GetBulletInfo, GetHotspotInfo } +{ This demo also shows "hotspots" } +{==============================================================================} + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + StdCtrls, RVScroll, RichView, RVStyle, RVTypes; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + RichView2: TRichView; + Label1: TLabel; + Label2: TLabel; + ImageList1: TImageList; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + procedure FillLeftRichView; + procedure FillRightRichView; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} +{------------------------------------------------------------------------------} +procedure TForm1.FillLeftRichView; +var bmp: TBitmap; + btn: TButton; +begin + with RichView1 do begin + AddNL('Reading information about items',1,1); + + AddBreakEx(2, rvbsLine, clRed); + + AddNL('Image: ',0,0); + bmp := TBitmap.Create; + bmp.Width := 60; + bmp.Height := 40; + bmp.Canvas.Pen.Color := clRed; + bmp.Canvas.Brush.Color := clYellow; + bmp.Canvas.Rectangle(0,0,60,40); + AddPictureEx('Yellow box', bmp, -1, rvvaMiddle); + + AddBreak; + + AddNL('Bullet: ',0,0); + AddBulletEx('Printer image',0, ImageList1, -1); + + AddBreak; + + AddNL('Hotspot: ',0,0); + AddHotspotEx('Active printer image',1, 0, ImageList1, -1); + AddNL('(move mouse to hotspot and you see picture changes;'+ + ' more information about hotspots will be in hypertext description)', + 0,-1); + + AddBreak; + + AddNL('Button: ',0,0); + btn := TButton.Create(nil); + btn.Width := 100; + btn.Caption := 'Out of order'; + AddControlEx('Button example', btn, -1, rvvaBaseline); + + Format; + end; +end; +{------------------------------------------------------------------------------} +function GetVAlignString(VAlign: TRVVAlign): String; +begin + case VAlign of + rvvaBaseline: + Result := 'text base line'; + rvvaMiddle: + Result := 'text middle'; + rvvaAbsTop: + Result := 'line top'; + rvvaAbsBottom: + Result := 'line bottom'; + rvvaAbsMiddle: + Result := 'line middle'; + else + Result := '?'; + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FillRightRichView; +var + i, ItemStyle: Integer; + s: String; + Tag: Integer; + {.................................................................} + procedure GetBreakInfo(ItemNo: Integer); + var Width: Byte; + Color: TColor; + Style: TRVBreakStyle; + Tag: Integer; + ColorString: String; + begin + RichView1.GetBreakInfo(ItemNo, Width, Style, Color, Tag); + if Color = clNone then + ColorString := 'line has color of the 0-th text style' + else + ColorString := ColorToString(Color); + RichView2.AddFmt('Item #%d: break. Color=%s; Width=%d', + [ItemNo, ColorString, Integer(Width)], 0, 0); + // Style is always rvbsLine in current version + end; + {.................................................................} + procedure GetPictureInfo(ItemNo: Integer); + var gr: TGraphic; + VAlign: TRVValign; + Name: TRVAnsiString; + Tag: Integer; + begin + RichView1.GetPictureInfo(ItemNo, Name, gr, VAlign, Tag); + RichView2.AddFmt('Item #%d: image (%s, %dx%d); Vertical alignment: %s; Name="%s"', + [ItemNo, gr.ClassName, gr.Width, gr.Height, GetVAlignString(VAlign), Name], + 0, 0); + end; + {.................................................................} + procedure GetControlInfo(ItemNo: Integer); + var ctrl: TControl; + VAlign: TRVValign; + Name: TRVAnsiString; + Tag: Integer; + begin + RichView1.GetControlInfo(ItemNo, Name, ctrl, VAlign, Tag); + RichView2.AddFmt('Item #%d: control (%s, %dx%d); Vertical alignment: %s; Name="%s"', + [ItemNo, ctrl.ClassName, ctrl.Width, ctrl.Height, GetVAlignString(VAlign), Name], + 0, 0); + end; + {.................................................................} + procedure GetBulletInfo(ItemNo: Integer); + var ImageList: TCustomImageList; + Name: TRVAnsiString; + ImageIndex, Tag: Integer; + begin + RichView1.GetBulletInfo(ItemNo, Name, ImageIndex, ImageList, Tag); + RichView2.AddFmt('Item #%d: bullet; ImageList="%s"; Image index=%d; Name="%s"', + [ItemNo, ImageList.Name, ImageIndex, Name], 0, 0); + end; + {.................................................................} + procedure GetHotspotInfo(ItemNo: Integer); + var ImageList: TCustomImageList; + Name: TRVAnsiString; + ImageIndex, HotImageIndex, Tag: Integer; + begin + RichView1.GetHotspotInfo(ItemNo, Name, ImageIndex, HotImageIndex, ImageList, Tag); + RichView2.AddFmt('Item #%d: bullet; ImageList="%s"; Image index=%d, Hot image index=%d; Name="%s"', + [ItemNo, ImageList.Name, ImageIndex, HotImageIndex, Name], + 0, 0); + end; + {.................................................................} +begin + + // Reading information about items + for i := 0 to RichView1.ItemCount-1 do begin + ItemStyle := RichView1.GetItemStyle(i); + if ItemStyle>=0 then begin + // Parameter of GetItemStyle - index of item (0..ItemCount). + // If GetItemStyle returns zero or positive value, + // this item is a text, and returned value is an index in + // collection of styles (RVStyle.TextStyles) + s := RichView1.GetItemText(i); + Tag := RichView1.GetItemTag(i); + RichView2.AddFmt('Item #%d: text. Value="%s". Style of text is "%s"', + [i, s, RVStyle1.TextStyles[ItemStyle].StyleName],0,0); + end + else + // If GetItemStyle returns negative value, this item is a non-text item + case ItemStyle of + rvsBreak: + GetBreakInfo(i); + rvsPicture: + GetPictureInfo(i); + rvsComponent: + GetControlInfo(i); + rvsBullet: + GetBulletInfo(i); + rvsHotspot: + GetHotspotInfo(i); + else + RichView2.AddNL('Unknown item type', 0, 0); + end; + RichView2.AddBreak; + end; + RichView2.Format; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +begin + FillLeftRichView; + FillRightRichView; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.bdsproj b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.bdsproj new file mode 100644 index 0000000..e1d05a2 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_2_2.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.dpr b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.dpr new file mode 100644 index 0000000..96a583e --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_2; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.res b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.dfm new file mode 100644 index 0000000..deb3591 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.pas new file mode 100644 index 0000000..76ade04 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.pas @@ -0,0 +1,124 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how to scroll to specified position of document using } +{ special invisible labels - "checkpoints" } +{ Key methods and properties: } +{ - AddNamedCheckpoint; } +{ - GetCheckpointByNo, FindCheckpointByName; } +{ - GetCheckpointY, GetCheckpointYEx; } +{ - ScrollTo } +{ - Options (rvoShowCheckpoints) } +{==============================================================================} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVStyle, RVScroll, RichView; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + Button1: TButton; + Button2: TButton; + Button3: TButton; + CheckBox1: TCheckBox; + Button4: TButton; + procedure FormCreate(Sender: TObject); + procedure CheckBox1Click(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var i, j: Integer; +begin + for i := 1 to 3 do begin + RichView1.AddNamedCheckpoint('C'+IntToStr(i)); + RichView1.AddFmt('Chapter %d', [i], 1,1); + for j := 0 to 30 do + RichView1.AddNL('Bla - bla - bla - bla - bla - bla - bla - bla'+ + '- bla - bla - bla - bla - bla - bla - bla - bla',0,0); + end; + RichView1.AddNamedCheckpoint('END'); + RichView1.Format; + { + Comments: + + Checkpoints are not items. They are special additional information, + associated with any item. + (in older, freeware versions, checkpoints were items) + But checkpoint can be added like any other item using Add*** methods: + AddNamedCheckpoint, AddCheckpoint, AddNamedCheckpointEx, and some other. + + AddNamedCheckpoint('') == AddCheckpoint + + Checkpoint added with any of these methods will be associated with next + added item (if no items added after it, checkpoints becomes special + end-of-text checkpoint which is not associated with any item) + + Do not try to add checkpoints one after another without items between them + (it's impossible, and causes the exception) + } +end; + +procedure TForm1.CheckBox1Click(Sender: TObject); +begin + // toggles checkpoints visibility + if Checkbox1.Checked then + RichView1.Options := RichView1.Options+[rvoShowCheckpoints] + else + RichView1.Options := RichView1.Options-[rvoShowCheckpoints]; + RichView1.Invalidate; +end; + +procedure TForm1.Button1Click(Sender: TObject); +var CheckpointData: TCheckpointData; + Y: Integer; +begin + // GetCheckpointByNo(checkpoint index) - returns value of type TCheckpointData, + // identifying checkpoint + CheckpointData := RichView1.GetCheckpointByNo(0); + // GetCheckpointYEx returns Y coordinate of checkpoint + Y := RichView1.GetCheckpointYEx(CheckpointData); + // ScrollTo - scrolls to specified Y coordinate + RichView1.ScrollTo(Y); +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + // The same actions, more compact + with RichView1 do + ScrollTo(GetCheckpointYEx(GetCheckpointByNo(1))); +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + // Even more compact + with RichView1 do + ScrollTo(GetCheckpointY(2)); +end; + +procedure TForm1.Button4Click(Sender: TObject); +begin + // We can use checkpoint name to find it + with RichView1 do + ScrollTo(GetCheckpointYEx(FindCheckpointByName('END'))); +end; + +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.bdsproj b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.bdsproj new file mode 100644 index 0000000..980d192 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_2_3.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.dpr b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.dpr new file mode 100644 index 0000000..f390fb6 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_3; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.res b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.dfm new file mode 100644 index 0000000..5b4cbc8 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.pas new file mode 100644 index 0000000..46d8ae3 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.pas @@ -0,0 +1,74 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how to obtain list of checkpoints in document. } +{ Key methods: } +{ - GetFirstCheckpoint, GetNextCheckpoint; } +{ - GetCheckpointInfo. } +{==============================================================================} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVStyle, RVScroll, RichView; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + ListBox1: TListBox; + Button1: TButton; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var i, j: Integer; + CheckpointData : TCheckpointData; + Name: String; + RaiseEvent: Boolean; + Tag: Integer; +begin + // 1. Filling in RichView + for i := 1 to 3 do begin + RichView1.AddNamedCheckpoint('C'+IntToStr(i)); + RichView1.AddFmt('Chapter %d', [i], 1,1); + for j := 0 to 30 do + RichView1.AddNL('Bla - bla - bla - bla - bla - bla - bla - bla'+ + '- bla - bla - bla - bla - bla - bla - bla - bla',0,0); + end; + RichView1.AddNamedCheckpoint('END'); + RichView1.Format; + // 2. Filling in list of checkpoints + CheckpointData := RichView1.GetFirstCheckpoint; + if CheckpointData<>nil then begin + repeat + RichView1.GetCheckpointInfo(CheckpointData, Tag, Name, RaiseEvent); + // Tag and RaiseEvent will be discussed in next demos + ListBox1.Items.Add(Name); + CheckpointData := RichView1.GetNextCheckpoint(CheckpointData); + until CheckpointData=nil; + ListBox1.ItemIndex := 0; + end; +end; + +procedure TForm1.Button1Click(Sender: TObject); +var CheckpointIndex: Integer; +begin + CheckpointIndex := ListBox1.ItemIndex; + if CheckpointIndex=-1 then exit; + RichView1.ScrollTo(RichView1.GetCheckpointY(CheckpointIndex)); +end; + +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.bdsproj b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.bdsproj new file mode 100644 index 0000000..dbdd784 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_2_4.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.dpr b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.dpr new file mode 100644 index 0000000..f11389b --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_4; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.res b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.dfm new file mode 100644 index 0000000..6d9abf0 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.pas new file mode 100644 index 0000000..fd8e4ef --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.pas @@ -0,0 +1,119 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how checkpoints can generate events when they become visible } +{------------------------------------------------------------------------------} +{ Properties set: } +{ RichView1.CPEventKind = cpeAsSectionStart } +{ RichView2.CPEventKind = cpeWhenVisible } +{ rvoShowCheckpoints included in Options of both RichViews } +{------------------------------------------------------------------------------} +{ Key properties, events and methods: } +{ - CPEventKind } +{ - OnCheckpointVisible } +{ - AddNamedCheckpointEx } +{==============================================================================} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVStyle, RVScroll, RichView, ExtCtrls; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + Label1: TLabel; + lblChapter: TLabel; + Label2: TLabel; + RichView2: TRichView; + Label3: TLabel; + Label4: TLabel; + lblFigure: TLabel; + Image1: TImage; + Label5: TLabel; + procedure FormCreate(Sender: TObject); + procedure RichView1CheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); + procedure RichView2CheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var i, j: Integer; + ico: TIcon; +begin + // 1. Filling in left RichView + for i := 1 to 3 do begin + RichView1.AddNamedCheckpointEx('Chapter '+IntToStr(i),True); + RichView1.AddFmt('Chapter %d', [i], 1,1); + for j := 0 to 30 do + RichView1.AddNL('Bla - bla - bla - bla - bla - bla.',0,0); + end; + RichView1.Format; + // 2. Filling in right RichView + for i := 1 to 3 do begin + RichView2.AddNamedCheckpointEx('Figure '+IntToStr(i),True); + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView2.AddPictureEx('', ico, 1, rvvaBaseline); + RichView2.AddFmt('Figure %d', [i], 3,1); + for j := 0 to 30 do + RichView2.AddNL('Bla - bla - bla - bla - bla - bla.',0,0); + end; + RichView2.Format; + { + Comments: + + 1. + In this demo we use AddNamedCheckpointEx method. + It has second parameter - RaiseEvent: Boolean. + If set to True, RichView will generate event when this checkpoint + becomes visible + + 2. + Checkpoints with RaiseEvent=True can be displayed with different color + than other checkpoints. + Color of "normal" checkpoints: RVStyle.CheckpointColor; + Color of "RaiseEvent" checkpoints: RVStyle.CheckpointEvColor + } +end; + +procedure TForm1.RichView1CheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); +var Name: String; + Tag: Integer; + RE: Boolean; +begin + if CheckpointData<>nil then begin + RichView1.GetCheckpointInfo(CheckpointData, Tag, Name, RE); + lblChapter.Caption := Name; + end; +end; + +procedure TForm1.RichView2CheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); +var Name: String; + Tag: Integer; + RE: Boolean; +begin + if CheckpointData<>nil then begin + RichView2.GetCheckpointInfo(CheckpointData, Tag, Name, RE); + lblFigure.Caption := Name; + end + else + lblFigure.Caption := '(none)'; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.bdsproj b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.bdsproj new file mode 100644 index 0000000..818ec78 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_2_5.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.dpr b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.dpr new file mode 100644 index 0000000..eeba5fc --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_5; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.res b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.dfm new file mode 100644 index 0000000..c0a324c Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.pas new file mode 100644 index 0000000..63f8b93 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.pas @@ -0,0 +1,86 @@ +unit Unit1; + +interface + +{==============================================================================} +{ Demo of basic using of hypertext } +{ In this demo were modified styles: RVStyle1.TextStyles[4] and } +{ RVStyle.TextStyles[5] } +{ Setting RVStyle.TextStyles[i].Jump to True turns this text style into } +{ a hypertext style. } +{ Properties of text styles affecting hypertext appearance: } +{ - HoverColor (color of hypertext under mouse (clNone for not changing) } +{ - HoverBackColor (color of hypertext background under mouse (clNone for } +{ transparent) } +{ - JumpCursor } +{------------------------------------------------------------------------------} +{ Key events and properties: } +{ - OnJump, OnRVMouseMove } +{ - FirstJumpNo } +{------------------------------------------------------------------------------} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, StdCtrls, RVStyle, RVScroll, RichView; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + Label1: TLabel; + Panel1: TPanel; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + procedure RichView1RVMouseMove(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // RVStyle1.TextStyles[4].Jump = RVStyle1.TextStyles[5].Jump = True + // This causes these styles to represent hypertext + RichView1.AddNL('Hypertext',1,1); + RichView1.AddNL('Some text styles can be chosen as hypertext styles. ',0,0); + RichView1.Add('Like this one.',4); + RichView1.AddNL('You can have as many hypertext styles as you want. ',0,0); + RichView1.Add('Here is one more.',5); + RichView1.Format; + + { + The basic method to use hypertext is "hypertext IDs". + All hypertext links are numbered sequentially (0,1,...) from the top of + document to the bottom. These numbers are called "hypertext IDs". + Hypertext id is passed in OnJump and OnRVMouseMove events. + } + { + More correct, jumps are numbered as FirstJumpNo, FirstJumpNo+1, + FirstJumpNo+2,... + FirstJumpNo is a property of RichView, 0 by default + } +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +begin + Panel1.Caption := 'Clicked: '+IntToStr(id); +end; + +procedure TForm1.RichView1RVMouseMove(Sender: TObject; id: Integer); +begin + // id=-1 when mouse leaves hypertext jump area + if id<>-1 then + Label1.Caption := IntToStr(id) + else + Label1.Caption := '---'; +end; + +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.bdsproj b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.bdsproj new file mode 100644 index 0000000..13419af --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_2_6.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.dpr b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.dpr new file mode 100644 index 0000000..07dffc1 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_6; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.res b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.dfm new file mode 100644 index 0000000..d254a75 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.pas new file mode 100644 index 0000000..525d66c --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.pas @@ -0,0 +1,71 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo show how to use information about hypertext item. } +{------------------------------------------------------------------------------} +{ Key methods: } +{ - GetJumpPointLocation; } +{ - methods for obtaining information about items (see first demo in this } +{ group. } +{ Useful if text is self-describing (for example, for WWW addresses). } +{==============================================================================} + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVStyle, ExtCtrls, RVScroll, RichView, StdCtrls, CRVFData; + +type + TForm1 = class(TForm) + RichView1: TRichView; + Panel1: TPanel; + RVStyle1: TRVStyle; + ImageList1: TImageList; + Image1: TImage; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; +begin + RichView1.AddNL('Hypertext',1,1); + RichView1.AddNL('Some text styles can be chosen as hypertext styles. ',0,0); + RichView1.Add('Like this one.',4); + RichView1.Add(' You can have as many hypertext styles as you want. ',0); + RichView1.Add('Here is one more.',5); + RichView1.AddNL('Images from Image Lists also can be hypertext: ',0,0); + RichView1.AddHotspotEx('Pen Image', 0,1, ImageList1, -1); + RichView1.Add(' Such images are called "hotspots".',0); + RichView1.AddNL('Normal images also can be hypertext: ',0,0); + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddHotPicture('Bobo', ico, -1, rvvaBaseLine); + + RichView1.Format; +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + Panel1.Caption := 'Clicked: '+RVData.GetItemText(ItemNo); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.bdsproj b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.bdsproj new file mode 100644 index 0000000..62c8efd --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_2_7.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.dpr b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.dpr new file mode 100644 index 0000000..b41fff9 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_7; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.res b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.dfm new file mode 100644 index 0000000..c7d3b84 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.pas new file mode 100644 index 0000000..d78b2b2 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.pas @@ -0,0 +1,72 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how to use Tags of items. } +{ Each item has associated integer value - Tag. Tags are used to store } +{ additional information, which RichView does not display and does not use. } +{------------------------------------------------------------------------------} +{ All Add*** methods (except from the obsolete ones) have Add***Tag versions. } +{ Add***(...) == Add***Tag(...,0) (Tags=0 by default) } +{ For example, look AddNLTag and AddHotpotExTag in this demo. } +{ Tag of item can be obtained with GetItemTag method (or Get***Info methods) } +{ and modified with SetItemTag (or Set***Info methods). } +{==============================================================================} + +{I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVStyle, ExtCtrls, RVScroll, RichView, CRVFData; + +type + TForm1 = class(TForm) + RichView1: TRichView; + Panel1: TPanel; + RVStyle1: TRVStyle; + ImageList1: TImageList; + Image1: TImage; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; +begin + RichView1.AddNL('Some text styles can be chosen as hypertext styles. ',0,0); + RichView1.AddNLTag('Like this one.',4,-1, {!}100{!}); + RichView1.Add(' You can have as many hypertext styles as you want. ',0); + RichView1.AddNLTag('Here is one more.',5,-1, {!}200{!}); + RichView1.AddNL('Images from Image Lists also can be hypertext: ',0,0); + RichView1.AddHotspotExTag('Pen Image', 0,1, ImageList1, -1, {!}300{!}); + RichView1.Add(' Such images are called "hotspots".',0); + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddHotPictureTag('Bobo', ico, -1, rvvaBaseLine, {!}400{!}); + RichView1.Format; +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var ItemNo: Integer; + RVData: TCustomRVFormattedData; + Tag: Integer; +begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + Tag := RVData.GetItemTag(ItemNo); + Panel1.Caption := 'Clicked: Item with Tag='+IntToStr(Tag); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.bdsproj b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.bdsproj new file mode 100644 index 0000000..745ac15 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_2_8.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.dpr b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.dpr new file mode 100644 index 0000000..ec6a661 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_8; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.res b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.dfm new file mode 100644 index 0000000..a47ea78 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.pas new file mode 100644 index 0000000..61253ad --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.pas @@ -0,0 +1,77 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how to use Tags of items in mode when Tags are considered as } +{ pointers to dynamically allocated strings (PChar). } +{ In this demo, rvoTagsArePChars was added in Options (IMPORTANT!) } +{ In this mode, you need to allocate memory for tag strings with StrNew. } +{ RichView will free this memory itself when needed. } +{------------------------------------------------------------------------------} +{ The key methods are the same as in the previous demo. } +{ You still can use Add***, which set Tags to 0 (i.e. nil - empty string). } +{------------------------------------------------------------------------------} +{ This is the most powerful method for organizing hypertext, because you can } +{ encode any information that you need in string. } +{------------------------------------------------------------------------------} +{ IMPORTANT: Do not use #0 in Tag strings (except from the character closing } +{ the string) } +{==============================================================================} + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVStyle, ExtCtrls, RVScroll, RichView, CRVFData; + +type + TForm1 = class(TForm) + RichView1: TRichView; + Panel1: TPanel; + RVStyle1: TRVStyle; + ImageList1: TImageList; + Image1: TImage; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; +begin + RichView1.AddNL('Some text styles can be chosen as hypertext styles. ',0,0); + RichView1.AddNLTag('Like this one.',4,-1, {!}Integer(StrNew('First jump')){!}); + RichView1.Add(' You can have as many hypertext styles as you want. ',0); + RichView1.AddNLTag('Here is one more.',5,-1, {!}Integer(StrNew('Second jump')){!}); + RichView1.AddNL('Images from Image Lists also can be hypertext: ',0,0); + RichView1.AddHotspotExTag('Pen Image', 0,1, ImageList1, -1, {!}Integer(StrNew('Third jump')){!}); + RichView1.Add(' Such images are called "hotspots".',0); + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddHotPictureTag('Bobo', ico, -1, rvvaBaseLine, {!}Integer(StrNew('Fourth jump')){!}); + RichView1.Format; +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var ItemNo: Integer; + RVData: TCustomRVFormattedData; + Tag: PChar; +begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + Tag := PChar(RVData.GetItemTag(ItemNo)); + Panel1.Caption := 'Clicked: Item with Tag='+Tag; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.bdsproj b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.bdsproj new file mode 100644 index 0000000..414bc97 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.bdsproj @@ -0,0 +1,165 @@ + + + + + + + + + + + + Tutorial_2_9.dpr + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.dpr b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.dpr new file mode 100644 index 0000000..de2c558 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_9; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.res b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.res differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.dfm b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.dfm new file mode 100644 index 0000000..90f3572 Binary files /dev/null and b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.dfm differ diff --git a/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.pas b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.pas new file mode 100644 index 0000000..961c9dc --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.pas @@ -0,0 +1,124 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows mouse events, not connected with hypertext IDs } +{ - OnRVMouseDown, OnRVMouseUp, OnRVDblClick, OnRVRightClick; } +{------------------------------------------------------------------------------} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, RVScroll, RichView, RVStyle, StdCtrls, RVTypes; + +type + TForm1 = class(TForm) + RichView1: TRichView; + panMouseDown: TPanel; + panMouseUp: TPanel; + panRightClick: TPanel; + panDblClick: TPanel; + RVStyle1: TRVStyle; + Image1: TImage; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + procedure FormCreate(Sender: TObject); + procedure RichView1RVMouseDown(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure RichView1RVMouseUp(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure RichView1RVDblClick(Sender: TCustomRichView; ClickedWord: TRVRawByteString; + Style: Integer); + procedure RichView1RVRightClick(Sender: TCustomRichView; ClickedWord: TRVRawByteString; + Style, X, Y: Integer); + private + { Private declarations } + function MouseInfo(Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer):String; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; +begin + RichView1.AddNL('More mouse events',1,1); + RichView1.AddTextNL('There are some more mouse events in RichView'#13+ + 'Left/Right/Double - click in this Window.',0,0,0); + + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddPictureEx('Notebook image',ico,1, rvvaMiddle); + RichView1.AddNL(' - example of image',0,-1); + + RichView1.Format; +end; + +function TForm1.MouseInfo(Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer): String; +var ButtonStr, Word: String; +begin + ButtonStr := ''; + case Button of + mbLeft: + ButtonStr := 'Left button'; + mbRight: + ButtonStr := 'Right button'; + mbMiddle: + ButtonStr := 'Middle button'; + end; + + if ItemNo<>-1 then begin + Word := RichView1.GetWordAt(X,Y); + Result := Format('%s at (%d,%d), at item #%d, at word "%s"', + [ButtonStr, X,Y, ItemNo, Word]); + end + else + Result := Format('%s at (%d,%d) - no item at this position', + [ButtonStr, X,Y]); +end; + +procedure TForm1.RichView1RVMouseDown(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); + +begin + panMouseDown.Caption := 'MouseDown: '+MouseInfo(Button, Shift, ItemNo, X, Y); +end; + +procedure TForm1.RichView1RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); +begin + panMouseUp.Caption := 'MouseUp: '+MouseInfo(Button, Shift, ItemNo, X, Y); +end; + +procedure TForm1.RichView1RVDblClick(Sender: TCustomRichView; + ClickedWord: TRVRawByteString; Style: Integer); +begin + // This implementation does not support Unicode text items. + // For Unicode text items, ClickedWord contains "raw Unicode", it must be + // converted to ANSI or Unicode string before using. + // See the demo for Delphi 2009+ for details (Demos\DelphiUnicode\) + panDblClick.Caption := + Format('DoubleClick: at word="%s", at item having style=%d', [ClickedWord,Style]); +end; + +// This event is obsolete. Use OnRVMouseUp instead +procedure TForm1.RichView1RVRightClick(Sender: TCustomRichView; + ClickedWord: TRVRawByteString; Style, X, Y: Integer); +begin + // This implementation does not support Unicode text items. + // For Unicode text items, ClickedWord contains "raw Unicode", it must be + // converted to ANSI or Unicode string before using. + // See the demo for Delphi 2009+ for details (Demos\DelphiUnicode\) + panRightClick.Caption := + Format('RightClick: at (%d,%d), at word="%s", at item having style=%d', + [X,Y,ClickedWord,Style]); +end; + +end. diff --git a/12.0.4/Demos/Delphi/Tutorials.bdsgroup b/12.0.4/Demos/Delphi/Tutorials.bdsgroup new file mode 100644 index 0000000..41be7e3 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorials.bdsgroup @@ -0,0 +1,30 @@ + + + + + + + + + + + Tutorial\1 Building a Document\1 Hello World\Tutorial_1_1.bdsproj + Tutorial\1 Building a Document\2 Text\Tutorial_1_2.bdsproj + Tutorial\1 Building a Document\3 Images\Tutorial_1_3.bdsproj + Tutorial\1 Building a Document\4 Controls\Tutorial_1_4.bdsproj + Tutorial\1 Building a Document\5 Bullets\Tutorial_1_5.bdsproj + Tutorial\2 Items-Checkpoints-Tags-Hypertext\1 Info about Items\Tutorial_2_1.bdsproj + Tutorial\2 Items-Checkpoints-Tags-Hypertext\2 Checkpoints\Tutorial_2_2.bdsproj + Tutorial\2 Items-Checkpoints-Tags-Hypertext\3 List of Checkpoints\Tutorial_2_3.bdsproj + Tutorial\2 Items-Checkpoints-Tags-Hypertext\4 When Checkpoint Visible\Tutorial_2_4.bdsproj + Tutorial\2 Items-Checkpoints-Tags-Hypertext\5 Hypertext ID\Tutorial_2_5.bdsproj + Tutorial\2 Items-Checkpoints-Tags-Hypertext\6 Advanced Hypertext\Tutorial_2_6.bdsproj + Tutorial\2 Items-Checkpoints-Tags-Hypertext\7 Tags (Integer)\Tutorial_2_7.bdsproj + Tutorial\2 Items-Checkpoints-Tags-Hypertext\8 Tags (PChar)\Tutorial_2_8.bdsproj + Tutorial\2 Items-Checkpoints-Tags-Hypertext\9 More mouse events\Tutorial_2_9.bdsproj + Tutorial_1_1.exe Tutorial_1_2.exe Tutorial_1_3.exe Tutorial_1_4.exe Tutorial_1_5.exe Tutorial_2_1.exe Tutorial_2_2.exe Tutorial_2_3.exe Tutorial_2_4.exe Tutorial_2_5.exe Tutorial_2_6.exe Tutorial_2_7.exe Tutorial_2_8.exe Tutorial_2_9.exe + + + + diff --git a/12.0.4/Demos/Delphi/Tutorials.bpg b/12.0.4/Demos/Delphi/Tutorials.bpg new file mode 100644 index 0000000..45bb4e5 --- /dev/null +++ b/12.0.4/Demos/Delphi/Tutorials.bpg @@ -0,0 +1,62 @@ +#------------------------------------------------------------------------------ +VERSION = BWS.01 +#------------------------------------------------------------------------------ +!ifndef ROOT +ROOT = $(MAKEDIR)\.. +!endif +#------------------------------------------------------------------------------ +MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$** +DCC = $(ROOT)\bin\dcc32.exe $** +BRCC = $(ROOT)\bin\brcc32.exe $** +#------------------------------------------------------------------------------ +PROJECTS = Tutorial_1_1.exe Tutorial_1_2.exe Tutorial_1_3.exe Tutorial_1_4.exe \ + Tutorial_1_5.exe Tutorial_2_1.exe Tutorial_2_2.exe Tutorial_2_3.exe \ + Tutorial_2_4.exe Tutorial_2_5.exe Tutorial_2_6.exe Tutorial_2_7.exe \ + Tutorial_2_8.exe Tutorial_2_9.exe +#------------------------------------------------------------------------------ +default: $(PROJECTS) +#------------------------------------------------------------------------------ + +Tutorial_1_1.exe: Tutorial\1 Building a Document\1 Hello World\Tutorial_1_1.dpr + $(DCC) + +Tutorial_1_2.exe: Tutorial\1 Building a Document\2 Text\Tutorial_1_2.dpr + $(DCC) + +Tutorial_1_3.exe: Tutorial\1 Building a Document\3 Images\Tutorial_1_3.dpr + $(DCC) + +Tutorial_1_4.exe: Tutorial\1 Building a Document\4 Controls\Tutorial_1_4.dpr + $(DCC) + +Tutorial_1_5.exe: Tutorial\1 Building a Document\5 Bullets\Tutorial_1_5.dpr + $(DCC) + +Tutorial_2_1.exe: Tutorial\2 Items-Checkpoints-Tags-Hypertext\1 Info about Items\Tutorial_2_1.dpr + $(DCC) + +Tutorial_2_2.exe: Tutorial\2 Items-Checkpoints-Tags-Hypertext\2 Checkpoints\Tutorial_2_2.dpr + $(DCC) + +Tutorial_2_3.exe: Tutorial\2 Items-Checkpoints-Tags-Hypertext\3 List of Checkpoints\Tutorial_2_3.dpr + $(DCC) + +Tutorial_2_4.exe: Tutorial\2 Items-Checkpoints-Tags-Hypertext\4 When Checkpoint Visible\Tutorial_2_4.dpr + $(DCC) + +Tutorial_2_5.exe: Tutorial\2 Items-Checkpoints-Tags-Hypertext\5 Hypertext ID\Tutorial_2_5.dpr + $(DCC) + +Tutorial_2_6.exe: Tutorial\2 Items-Checkpoints-Tags-Hypertext\6 Advanced Hypertext\Tutorial_2_6.dpr + $(DCC) + +Tutorial_2_7.exe: Tutorial\2 Items-Checkpoints-Tags-Hypertext\7 Tags (Integer)\Tutorial_2_7.dpr + $(DCC) + +Tutorial_2_8.exe: Tutorial\2 Items-Checkpoints-Tags-Hypertext\8 Tags (PChar)\Tutorial_2_8.dpr + $(DCC) + +Tutorial_2_9.exe: Tutorial\2 Items-Checkpoints-Tags-Hypertext\9 More mouse events\Tutorial_2_9.dpr + $(DCC) + + diff --git a/12.0.4/Demos/Delphi/tutorial.txt b/12.0.4/Demos/Delphi/tutorial.txt new file mode 100644 index 0000000..12cb18d --- /dev/null +++ b/12.0.4/Demos/Delphi/tutorial.txt @@ -0,0 +1,11 @@ +========================= Tutorial projects ==================== + For Delphi 4-2007 +================================================================ +1. Building a Document: + Set of projects: + First project with RichView ("Hello World!"), + types of RichView items, + building RichView document at run-time from code. +2. Items-Checkpoints-Tags-Hypertexts + Set of projects: + exploring and interacting with RichView document. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/Autocomplete.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/Autocomplete.dpr new file mode 100644 index 0000000..290eed2 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/Autocomplete.dpr @@ -0,0 +1,13 @@ +program Autocomplete; + +uses + Forms, + MainFrm in 'MainFrm.pas' {frmMain}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/Autocomplete.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/Autocomplete.dproj new file mode 100644 index 0000000..8cb01c6 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/Autocomplete.dproj @@ -0,0 +1,99 @@ + + + {E1C55C2F-4093-4E63-AAAF-6A7CC276823F} + Autocomplete.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Autocomplete.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
frmMain
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Autocomplete.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/Autocomplete.res b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/Autocomplete.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/Autocomplete.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/MainFrm.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/MainFrm.dfm new file mode 100644 index 0000000..6edd0d6 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/MainFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/MainFrm.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/MainFrm.pas new file mode 100644 index 0000000..7555371 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Autocomplete/MainFrm.pas @@ -0,0 +1,93 @@ +{*******************************************************} +{ } +{ RichView } +{ AutoComplete demo } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +unit MainFrm; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, Menus, RVStyle, RVScroll, RichView, RVEdit, RVGetTextW; + +type + TfrmMain = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + PopupMenu1: TPopupMenu; + procedure RichViewEdit1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure FormCreate(Sender: TObject); + private + procedure AddPopupMenuItem(s: String); + procedure AutoCompletePopupMenuClick(Sender: TObject); + { Private declarations } + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + +implementation + +{$R *.dfm} + +procedure TfrmMain.FormCreate(Sender: TObject); +begin + {$IFDEF RICHVIEWDEF6} + PopupMenu1.AutoHotkeys := maManual; + {$ENDIF} + RichViewEdit1.Clear; + RichViewEdit1.AddNL( + 'Type a word and press Ctrl+Space for suggestions', 0,0); + RichViewEdit1.Format; +end; + +procedure TfrmMain.AddPopupMenuItem(s: String); +var mi: TMenuItem; +begin + mi := TMenuItem.Create(PopupMenu1); + mi.Caption := s; + mi.OnClick := AutoCompletePopupMenuClick; + PopupMenu1.Items.Add(mi); +end; + +procedure TfrmMain.AutoCompletePopupMenuClick(Sender: TObject); +begin + RichViewEdit1.SelectCurrentWord; + RichViewEdit1.InsertText((Sender as TMenuItem).Caption, False); +end; + +procedure TfrmMain.RichViewEdit1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +var s: String; + pt: TPoint; +begin + if (Key=VK_SPACE) and (ssCtrl in Shift) then begin + s := GetCurrentWord(RichViewEdit1); + if s<>'' then begin + while PopupMenu1.Items.Count>0 do + PopupMenu1.Items[0].Free; + AddPopupMenuItem('super'+s); + AddPopupMenuItem('mega'+s); + AddPopupMenuItem('ultra'+s); + AddPopupMenuItem('grand'+s); + GetCaretPos(pt); + pt := RichViewEdit1.TopLevelEditor.ClientToScreen(pt); + PopupMenu1.Popup(pt.X, pt.Y+10); + end; + Key := 0; + end; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/CustomDraw.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/CustomDraw.dpr new file mode 100644 index 0000000..ae6c226 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/CustomDraw.dpr @@ -0,0 +1,13 @@ +program CustomDraw; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/CustomDraw.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/CustomDraw.dproj new file mode 100644 index 0000000..c8c8400 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/CustomDraw.dproj @@ -0,0 +1,99 @@ + + + {E7926571-53F4-42EF-97EC-2ED3A7CABADB} + CustomDraw.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + CustomDraw.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + CustomDraw.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/CustomDraw.res b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/CustomDraw.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/CustomDraw.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/Unit1.dfm new file mode 100644 index 0000000..ac7e7d6 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/Unit1.pas new file mode 100644 index 0000000..7e40b1d --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/CustomDraw/Unit1.pas @@ -0,0 +1,317 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, RVTypes, RVUni; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + RichView2: TRichView; + procedure FormCreate(Sender: TObject); + procedure RVStyle1StyleHoverSensitive(Sender: TRVStyle; + StyleNo: Integer; var Sensitive: Boolean); + procedure RVStyle1DrawTextBack(Sender: TRVStyle; Canvas: TCanvas; + StyleNo, Left, Top, Width, Height: Integer; + DrawState: TRVTextDrawStates; var DoDefault: Boolean); + procedure RVStyle1DrawCheckpoint(Sender: TRVStyle; Canvas: TCanvas; X, + Y, ItemNo, XShift: Integer; RaiseEvent: Boolean; Control: TControl; + var DoDefault: Boolean); + procedure RVStyle1DrawPageBreak(Sender: TRVStyle; Canvas: TCanvas; Y, + XShift: Integer; PageBreakType: TRVPageBreakType; Control: TControl; var DoDefault: Boolean); + procedure RVStyle1DrawParaBack(Sender: TRVStyle; Canvas: TCanvas; + ParaNo: Integer; ARect: TRect; var DoDefault: Boolean); + procedure RichView2Paint(Sender: TCustomRichView; Canvas: TCanvas; + Prepaint: Boolean); + procedure RichView2RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); + procedure RVStyle1DrawStyleText(Sender: TRVStyle; const s: TRVRawByteString; + Canvas: TCanvas; StyleNo, SpaceBefore, Left, Top, Width, Height: Integer; + DrawState: TRVTextDrawStates; var DoDefault: Boolean); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{============================== DRAWING ROUTINES ==============================} + +{$R-} // turning off range checking (required for DrawTrRect) +{------------------------------------------------------------------------------} +{ Drawing left to right arrow } +{------------------------------------------------------------------------------} +procedure DrawArrow(Canvas: TCanvas; Left, Top, Width, Height: Integer); +var midx,midy: Integer; + one, two : Integer; +begin + midx := Left+Width div 2; + midy := Top+Height div 2; + if Width>0 then begin + one := 1; + two := -2; + end + else begin + one := -1; + two := 2; + end; + Canvas.PolyLine([Point(Left+one,Top+3), + Point(midx,Top+3), + Point(midx,Top+1), + Point(Left+Width+two, midy), + Point(midx, Top+Height-2), + Point(midx, Top+Height-4), + Point(Left+one,Top+Height-4), + Point(Left+one,Top+3) + ]); +end; +{------------------------------------------------------------------------------} +{ Drawing an icon for page breaks } +{------------------------------------------------------------------------------} +procedure DrawPageIcon(Canvas: TCanvas; Left, Top, Width, Height: Integer); +var LeftS, RightS: Integer; +begin + LeftS := Left+2; + RightS := Left+Width-4; + Canvas.PolyLine([Point(RightS-3,Top), + Point(LeftS,Top), + Point(LeftS, Top+Height), + Point(RightS,Top+Height), + Point(RightS,Top+3), + Point(RightS-3,Top), + Point(RightS-3,Top+3), + Point(RightS,Top+3) + ]); + Canvas.Pen.Style := psDot; + Canvas.Pen.Color := clRed; + Canvas.MoveTo(Left, Top+Height div 2); + Canvas.LineTo(Left+Width, Top+Height div 2); +end; +{------------------------------------------------------------------------------} +{ Drawing a colored rectangle with specified degree of opacity (0..255) } +{ (quite slow...) } +{------------------------------------------------------------------------------} +procedure DrawTrRect(Canvas: TCanvas; const ARect: TRect; + Color: TColor; + Opacity: Integer); +type + RGBARR = array [0..0] of TRGBQUAD; + PRGBARR = ^RGBARR; +var prgb: PRGBARR; + rgb : TRGBQUAD; + i,j: Integer; + tr : Integer; + Clr: LongInt; + bmp: TBitmap; +begin + Clr := ColorToRGB(Color); + rgb.rgbRed := Clr and $000000FF; + rgb.rgbGreen := (Clr and $0000FF00) shr 8; + rgb.rgbBlue := (Clr and $00FFFFFF) shr 16; + rgb.rgbReserved := 0; + + bmp := TBitmap.Create; + bmp.PixelFormat := pf32bit; + bmp.Width := ARect.Right-ARect.Left; + bmp.Height := ARect.Bottom-ARect.Top; + bmp.Canvas.CopyRect(Rect(0,0,bmp.Width,bmp.Height), Canvas, ARect); + + tr := 255 - Opacity; + for i := 0 to bmp.Height-1 do begin + prgb := PRGBARR(bmp.ScanLine[i]); + for j := 0 to bmp.Width-1 do + with prgb[j] do begin + rgbBlue := (rgbBlue*tr + rgb.rgbBlue*Opacity) div 255; + rgbGreen := (rgbGreen*tr + rgb.rgbGreen*Opacity)div 255; + rgbRed := (rgbRed*tr + rgb.rgbRed*Opacity) div 255; + end; + end; + Canvas.Draw(ARect.Left, ARect.Top, bmp); + bmp.Free; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; +begin + RichView1.AddNL('Example',1,1); + RichView1.AddNL('This is an example of ',0,0); + RichView1.Add('custom drawn text',3); + RichView1.Add('.',0); + RichView1.AddNL(' Hot link 1 ',4,1); + RichView1.AddNL(' Hot link 2 ',5,1); + RichView1.AddBreakEx(1, rvbsLine, clBtnShadow); + RichView1.AddCheckpoint; + RichView1.AddNL('Another example - a custom drawing of checkpoints.',0,0); + RichView1.AddCheckpoint; + RichView1.AddNL('For example, you can draw a little nice arrow instead of default dotted line.',0,0); + RichView1.AddBreakEx(1, rvbsLine, clBtnShadow); + RichView1.AddNL('One more example - a custom displaying of page break',0,0); + RichView1.PageBreaksBeforeItems[RichView1.ItemCount-1] := True; + RichView1.Format; + + RichView2.AddNL('Cool Effect - ',2,2); + RichView2.SetAddParagraphMode(False); + RichView2.AddNL('Transparent paragraph background.',2,2); + RichView2.AddNL('example of custom painting of paragraph background',0,2); + RichView2.SetAddParagraphMode(True); + for i := 0 to 20 do + RichView2.AddNL('This is the example how to use OnDrawParaBack and OnPaint events.',0,0); + RichView2.Format; +end; +{------------------------------------------------------------------------------} +{ Should RichView repaint itself if mouse is over text of specified style? } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1StyleHoverSensitive(Sender: TRVStyle; + StyleNo: Integer; var Sensitive: Boolean); +begin + if StyleNo in [4,5] then + Sensitive := True; // (default for other styles) +end; +{------------------------------------------------------------------------------} +{ Drawing a background of text } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawTextBack(Sender: TRVStyle; Canvas: TCanvas; + StyleNo, Left, Top, Width, Height: Integer; DrawState: TRVTextDrawStates; + var DoDefault: Boolean); +var r: TRect; +begin + case StyleNo of + 5: + begin + // drawing a sunken edge for the 5th style + r := Bounds(Left,Top, Width, Height); + if rvtsHover in DrawState then + DrawEdge(Canvas.Handle, r, BDR_SUNKENOUTER or BF_ADJUST, BF_RECT) + end; + end; +end; +{------------------------------------------------------------------------------} +{ Drawing a text } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawStyleText(Sender: TRVStyle; + const s: TRVRawByteString; Canvas: TCanvas; StyleNo, SpaceBefore, Left, Top, + Width, Height: Integer; DrawState: TRVTextDrawStates; var DoDefault: Boolean); +var Text: String; + s2: TRVRawByteString; +begin + if rvtsSelected in DrawState then + exit; // default drawing for selected text + if StyleNo in [0,3,4] then begin + if Sender.TextStyles[StyleNo].Unicode then + s2 := s + else + s2 := RVU_AnsiToUnicode(RVU_Charset2CodePage(Sender.TextStyles[StyleNo].Charset), s); + Text := RVU_RawUnicodeToWideString(s); + end + else + Text := ''; + inc(Left, SpaceBefore); + case StyleNo of + 0: + begin + // sunken effect + Canvas.Font.Color := clBtnHighlight; + Canvas.TextOut(Left+1,Top+1, Text); + Canvas.Font.Color := clBtnShadow; + Canvas.TextOut(Left,Top, Text); + DoDefault := False; + end; + 3: + begin + // raised effect + Canvas.Font.Color := clBtnHighlight; + Canvas.TextOut(Left-1,Top-1, Text); + Canvas.Font.Color := clBtnShadow; + Canvas.TextOut(Left+1,Top+1, Text); + DoDefault := False; + end; + 4: + begin + if rvtsHover in DrawState then begin + // hot glow effect + Canvas.Font.Color := Sender.TextStyles[StyleNo].HoverColor; + Canvas.TextOut(Left+1,Top+1, Text); + Canvas.TextOut(Left-1,Top-1, Text); + Canvas.Font.Color := Sender.TextStyles[StyleNo].Color; + Canvas.TextOut(Left,Top, Text); + DoDefault := False; + end; + end; + end; +end; +{------------------------------------------------------------------------------} +{ Drawing checkpoint as arrow icon } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawCheckpoint(Sender: TRVStyle; Canvas: TCanvas; + X, Y, ItemNo, XShift: Integer; RaiseEvent: Boolean; Control: TControl; + var DoDefault: Boolean); +begin + if RaiseEvent then + Canvas.Pen.Color := Sender.CheckpointEvColor + else + Canvas.Pen.Color := Sender.CheckpointColor; + DrawArrow(Canvas, -XShift+2, Y-5, RichView1.LeftMargin-4, 10); + DoDefault := False; +end; +{------------------------------------------------------------------------------} +{ Drawing page break as icon } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawPageBreak(Sender: TRVStyle; Canvas: TCanvas; + Y, XShift: Integer; PageBreakType: TRVPageBreakType; Control: TControl; var DoDefault: Boolean); +begin + Canvas.Pen.Color := Sender.PageBreakColor; + DrawPageIcon(Canvas, -XShift+2, Y-8, 16, 16); + DoDefault := False; +end; +{------------------------------------------------------------------------------} +{ Drawing a background of paragraphs } +{------------------------------------------------------------------------------} +procedure TForm1.RVStyle1DrawParaBack(Sender: TRVStyle; Canvas: TCanvas; + ParaNo: Integer; ARect: TRect; var DoDefault: Boolean); +begin + if ParaNo=2 then begin + // semi-transparent background for paragraph style #2: + DrawTrRect(Canvas, ARect, Sender.ParaStyles[ParaNo].Background.Color, 150); + DoDefault := False; + end; +end; +{------------------------------------------------------------------------------} +{ Drawing unscrollable picture } +{------------------------------------------------------------------------------} +procedure TForm1.RichView2Paint(Sender: TCustomRichView; Canvas: TCanvas; + Prepaint: Boolean); +var x,y: Integer; + r: TRect; +begin + Canvas.Pen.Color := clRed; + Canvas.Pen.Width := 3; + Canvas.Brush.Color := clBlack; + x := Sender.ClientWidth-10; + y := Sender.ClientHeight-10; + Canvas.Ellipse(x-10, y-10, x+10, y+10); + r := Bounds(x-10, y-10, 20, 20); + Canvas.Brush.Style := bsClear; + Canvas.Font.Color := clRed; + Canvas.Font.Name := 'Arial'; + Canvas.Font.Style := [fsBold]; + Canvas.Font.Size := 12; + DrawText(Canvas.Handle, '!', 1, r, DT_SINGLELINE or DT_CENTER or DT_VCENTER); +end; + +procedure TForm1.RichView2RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); +begin + if (x>Sender.ClientWidth-20) and (y>Sender.ClientHeight-20) then + Application.MessageBox('!','!', MB_OK or MB_ICONINFORMATION); +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/CustomDrawMath.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/CustomDrawMath.dpr new file mode 100644 index 0000000..184472d --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/CustomDrawMath.dpr @@ -0,0 +1,13 @@ +program CustomDrawMath; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/CustomDrawMath.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/CustomDrawMath.dproj new file mode 100644 index 0000000..9a51b1c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/CustomDrawMath.dproj @@ -0,0 +1,99 @@ + + + {CA19930D-099A-4972-9FB4-8A9A8902C433} + CustomDrawMath.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + CustomDrawMath.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + CustomDrawMath.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/CustomDrawMath.res b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/CustomDrawMath.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/CustomDrawMath.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/Unit1.dfm new file mode 100644 index 0000000..43bcf5b Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/Unit1.pas new file mode 100644 index 0000000..2519810 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Draw/Mathematics/Unit1.pas @@ -0,0 +1,85 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, RVEdit, CRVFData, RVTypes, RVUni; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichViewEdit1: TRichViewEdit; + procedure FormCreate(Sender: TObject); + procedure RVStyle1DrawStyleText(Sender: TRVStyle; const s: TRVRawByteString; + Canvas: TCanvas; StyleNo, SpaceBefore, Left, Top, Width, + Height: Integer; DrawState: TRVTextDrawStates; + var DoDefault: Boolean); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + with RichViewEdit1 do begin + Clear; + AddNL('M',1,0); + Add('=||m',0); + Add('i,j',3); + Add('||',0); + // Note: rvoTagsArePChars in Options + AddNLTag('n',2, -1, Integer(StrNew('m'))); + // double scripts are only as an example + // here. They are too imperfect - + // they assume that superscript text is narrower + // (or at least not too wider) + // than subscript + Format; + end; +end; + +procedure TForm1.RVStyle1DrawStyleText(Sender: TRVStyle; const s: TRVRawByteString; + Canvas: TCanvas; StyleNo, SpaceBefore, Left, Top, Width, Height: Integer; + DrawState: TRVTextDrawStates; var DoDefault: Boolean); +var uppertext: PChar; + Text: String; + s2: TRVRawByteString; +begin + case StyleNo of + 1: // dot + begin + // displaying small circle in the right top corner of item + // and allowing default drawing of item text + if (rvtsItemEnd in DrawState) and (Length(s)>0) then begin + Canvas.Pen.Color := Sender.TextStyles[1].Color; + Canvas.Ellipse(Left+Width-2,Top-2,Left+Width+2,Top+2); + end; + end; + 2: // double scripts + begin + // displaying tag string as superscript + // and allowing default drawing of item text (subscript) + if Sender.TextStyles[StyleNo].Unicode then + s2 := s + else + s2 := RVU_AnsiToUnicode(RVU_Charset2CodePage(Sender.TextStyles[StyleNo].Charset), s); + Text := RVU_RawUnicodeToWideString(s); + if (rvtsItemStart in DrawState) and (Length(s)>0) then begin + uppertext := PChar(TCustomRVFormattedData(Sender.RVData).GetItemTag(Sender.ItemNo)); + if uppertext<>nil then + Canvas.TextOut(Left,Top-Height+5, uppertext); + end; + end; + end; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/CustomHints.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/CustomHints.dpr new file mode 100644 index 0000000..91a5ecd --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/CustomHints.dpr @@ -0,0 +1,14 @@ +program CustomHints; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/CustomHints.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/CustomHints.dproj new file mode 100644 index 0000000..2515d3d --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/CustomHints.dproj @@ -0,0 +1,122 @@ + + + {512A64AE-F3B3-4915-BAD5-8E1C7BB81DFC} + 12.0 + CustomHints.dpr + Debug + DCC32 + + + true + + + true + Base + true + + + true + Base + true + + + false + true + true + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + CustomHints.exe + 00400000 + x86 + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + TRichView DB for C++Builder 2009 + TRichView for C++Builder 2009 + TRichView: ScaleRichView for C++Builder 2009 + TRichView: RichViewActions for C++Builder 2009 + TRichView: ScaleRichView DB for C++Builder 2009 + TRichView: RvHTMLImporter for C++Builder 2009 + TRichView: RVXML for C++Builder 2009 + TRichView: RVXML for Delphi 2009 + TRichView: ScaleRichView for Delphi 2009 + TRichView: ScaleRichView DB for Delphi 2009 + TRichView: RvHTMLImporter for Delphi 2009 + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + ReportBuilder Data Access for Interbase Express + + + CustomHints.dpr + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/CustomHints.res b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/CustomHints.res new file mode 100644 index 0000000..6da5b43 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/CustomHints.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/Unit1.dfm new file mode 100644 index 0000000..7fd604f --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/Unit1.dfm @@ -0,0 +1,753 @@ +object Form1: TForm1 + Left = 100 + Top = 50 + BorderStyle = bsDialog + Caption = 'Custom Hints' + ClientHeight = 335 + ClientWidth = 451 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poDesigned + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Image1: TImage + Left = 232 + Top = 300 + Width = 34 + Height = 33 + Picture.Data = { + 055449636F6E0000010006002020100001000400E80200006600000010101000 + 01000400280100004E0300001010000001001800680300007604000010100000 + 0100080068050000DE0700002020000001002000A8100000460D000020200000 + 01000800A8080000EE1D00002800000020000000400000000100040000000000 + 8002000000000000000000001000000000000000000000000000800000800000 + 00808000800000008000800080800000C0C0C000808080000000FF0000FF0000 + 00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000000000 + 0000000000000000000000088000000000000000000000000000008BB8000000 + 00000000000000000000008FF800000000000000000008800000000880000000 + 0880000000008BB800000008800000008BB8000000008FF80000888888880000 + 8FF80000000008880088BBBBBBBB8800888000000000000088BBBBBBBBBBBB88 + 00000000000000008BBBBB8888BBBBB80000000000000008BBBBB888888BBBBB + 8000000000000008BBBB88FFFF88BBBB800000000000008BBBB88BBBBBF88BBB + B80000000000008BBBBBBBB88BBBBBBBB80000000088008BBBBBBB8FB8BBBBBB + B800880008BB888BBFFFFF8FB8FFFFFBB888BB8008FF888BB888888FB888888B + B888FF800088008FBB8F888FB888F8BBB80088000000008FBB8F888FB888F8BB + B80000000000008FBB8FFF8FB8FFF8BBB800000000000008FBB888BBBB888BBB + 8000000000000008FBBBBBBBBBBBBBBB80000000000000008FBBBBBBBBBBBBB8 + 000000000000000088FFBBBBBBBBBB8800000000000008880088FFFFFFFB8800 + 8880000000008BB800008888888800008BB8000000008FF80000000880000000 + 8FF8000000000880000000088000000008800000000000000000008BB8000000 + 00000000000000000000008FF800000000000000000000000000000880000000 + 0000000000000000000000000000000000000000FFFFFFFFFFFE7FFFFFFC3FFF + FFFC3FFFF9FE7F9FF0FE7F0FF0F00F0FF8C0031FFF0000FFFF0000FFFE00007F + FE00007FFC00003FFC00003FCC0000338000000180000001CC000033FC00003F + FC00003FFE00007FFE00007FFF0000FFFF0000FFF8C0031FF0F00F0FF0FE7F0F + F9FE7F9FFFFC3FFFFFFC3FFFFFFE7FFFFFFFFFFF280000001000000020000000 + 0100040000000000C00000000000000000000000100000000000000000000000 + 000080000080000000808000800000008000800080800000C0C0C00080808000 + 0000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000008 + 800000000088008BB800880008BB808BB808BB8008BB80888808BB80008888BB + BB88880000008BBBBBB800000888BB9999BB88808BB8B9BBBB9B8BB88BB8BBBB + BBBB8BB80888BB9BB9BB888000008BBBBBB80000008888BBBB88880008BB8088 + 8808BB8008BB808BB808BB800088008BB80088000000000880000000FE7F0000 + CC3300008421000084210000C0030000F00F0000800100000000000000000000 + 80010000F00F0000C00300008421000084210000CC330000FE7F000028000000 + 1000000020000000010018000000000040030000000000000000000000000000 + 00000000000000000000000000000000000000000000000000007EBA007EBA00 + 0000000000000000000000000000000000000000000000000000007EBA007EBA + 000000000000007EBA00FFFF00FFFF007EBA000000000000007EBA007EBA0000 + 00000000000000007EBA00FFFF00FFFF007EBA000000007EBA00FFFF00FFFF00 + 7EBA000000007EBA00FFFF00FFFF007EBA000000000000007EBA00FFFF00FFFF + 007EBA000000007EBA007EBA007EBA007EBA000000007EBA00FFFF00FFFF007E + BA000000000000000000007EBA007EBA007EBA007EBA11DEFF10DEFF12DAFF16 + D2FF007EBA007EBA007EBA007EBA000000000000000000000000000000000000 + 007EBA0CE7FF09ECFF09ECFF0BE9FF0FE1FF15D5FF007EBA0000000000000000 + 00000000000000007EBA007EBA007EBA0BE9FF07F2FF0000FF0000FF0000FF00 + 00FF10DFFF18CEFF007EBA007EBA007EBA000000007EBA00FFFF00FFFF007EBA + 08EFFF0000FF01FCFF01FDFF03F9FF07F1FF0000FF15D5FF007EBA00FFFF00FF + FF007EBA007EBA00FFFF00FFFF007EBA07F1FF03FAFF00FFFF00FFFF02FBFF06 + F3FF0CE7FF14D6FF007EBA00FFFF00FFFF007EBA000000007EBA007EBA007EBA + 08EEFF04F7FF0000FF01FCFF03F9FF0000FF0DE4FF15D4FF007EBA007EBA007E + BA000000000000000000000000000000007EBA07F1FF05F5FF05F6FF06F2FF0A + EAFF10DEFF007EBA000000000000000000000000000000000000007EBA007EBA + 007EBA007EBA0AEBFF0AEBFF0CE7FF10E0FF007EBA007EBA007EBA007EBA0000 + 00000000000000007EBA00FFFF00FFFF007EBA000000007EBA007EBA007EBA00 + 7EBA000000007EBA00FFFF00FFFF007EBA000000000000007EBA00FFFF00FFFF + 007EBA000000007EBA00FFFF00FFFF007EBA000000007EBA00FFFF00FFFF007E + BA000000000000000000007EBA007EBA000000000000007EBA00FFFF00FFFF00 + 7EBA000000000000007EBA007EBA000000000000000000000000000000000000 + 000000000000000000007EBA007EBA0000000000000000000000000000000000 + 00000000FE7F0000CC3300008421000084210000C0030000F00F000080010000 + 000000000000000080010000F00F0000C00300008421000084210000CC330000 + FE7F000028000000100000002000000001000800000000004001000000000000 + 00000000000100000000000000000000FFFFFF00007EBA0000FFFF000AEBFF00 + 0CE7FF0010E0FF0007F1FF0005F5FF0005F6FF0006F2FF000AEAFF0010DEFF00 + 08EEFF0004F7FF000000FF0001FCFF0003F9FF000DE4FF0015D4FF0003FAFF00 + 02FBFF0006F3FF0014D6FF0008EFFF0001FDFF0015D5FF000BE9FF0007F2FF00 + 10DFFF0018CEFF0009ECFF000FE1FF0011DEFF0012DAFF0016D2FF0000008000 + 0080000000808000800000008000800080800000C0C0C0008080800000FF0000 + FF000000FF00FF00FFFF000009090900121212001F1F1F002C2C2C0039393900 + 45454500525252005F5F5F006C6C6C007878780085858500929292009F9F9F00 + ABABAB00B8B8B800C5C5C500D2D2D200DEDEDE00EBEBEB00F8F8F800F0FBFF00 + A4A0A000C0DCC000F0CAA60000003E0000005D0000007C0000009B000000BA00 + 0000D9000000F0002424FF004848FF006C6CFF009090FF00B4B4FF0000143E00 + 001E5D0000287C0000329B00003CBA000046D9000055F000246DFF004885FF00 + 6C9DFF0090B5FF00B4CDFF00002A3E00003F5D0000547C0000699B000093D900 + 00AAF00024B6FF0048C2FF006CCEFF0090DAFF00B4E6FF00003E3E00005D5D00 + 007C7C00009B9B0000BABA0000D9D90000F0F00024FFFF0048FFFF006CFFFF00 + 90FFFF00B4FFFF00003E2A00005D3F00007C5400009B690000BA7E0000D99300 + 00F0AA0024FFB60048FFC2006CFFCE0090FFDA00B4FFE600003E1400005D1E00 + 007C2800009B320000BA3C0000D9460000F0550024FF6D0048FF85006CFF9D00 + 90FFB500B4FFCD00003E0000005D0000007C0000009B000000BA000000D90000 + 00F0000024FF240048FF48006CFF6C0090FF9000B4FFB400143E00001E5D0000 + 287C0000329B00003CBA000046D9000055F000006DFF240085FF48009DFF6C00 + B5FF9000CDFFB4002A3E00003F5D0000547C0000699B00007EBA000093D90000 + AAF00000B6FF2400C2FF4800CEFF6C00DAFF9000E6FFB4003E3E00005D5D0000 + 7C7C00009B9B0000BABA0000D9D90000F0F00000FFFF2400FFFF4800FFFF6C00 + FFFF9000FFFFB4003E2A00005D3F00007C5400009B690000BA7E0000D9930000 + F0AA0000FFB62400FFC24800FFCE6C00FFDA9000FFE6B4003E1400005D1E0000 + 7C2800009B320000BA3C0000D9460000F0550000FF6D2400FF854800FF9D6C00 + FFB59000FFCDB4003E0000005D0000007C0000009B000000BA000000D9000000 + F0000000FF242400FF484800FF6C6C00FF909000FFB4B4003E0014005D001E00 + 7C0028009B003200BA003C00D9004600F0005500FF246D00FF488500FF6C9D00 + FF90B500FFB4CD003E002A005D003F007C0054009B006900BA007E00D9009300 + F000AA00FF24B600FF48C200FF6CCE00FF90DA00FFB4E6003E003E005D005D00 + 7C007C009B009B00BA00BA000000000000000002020000000000000000000202 + 0000020303020000020200000002030302000203030200020303020000020303 + 020002020202000203030200000002020202210C222302020202000000000000 + 02051F1F1B201A0200000000000202021B1C0F0F0F0F1D1E0202020002030302 + 180F101911070F1A020303020203030207140303151605170203030200020202 + 0D0E0F10110F12130202020000000000020708090A0B0C020000000000000202 + 0202040405060202020200000002030302000202020200020303020000020303 + 0200020303020002030302000000020200000203030200000202000000000000 + 000000020200000000000000FE7F0000CC3300008421000084210000C0030000 + F00F000080010000000000000000000080010000F00F0000C003000084210000 + 84210000CC330000FE7F00002800000020000000400000000100200000000000 + 8010000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000006000000160000002A0000002900000015 + 0000000500000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000F007EBAFF007EBAFF0000003D0000002B + 0000000E00000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000050000000C0000000C000000040000000000000000 + 000000000000000000000000007EBAFF00FFFFFF00FFFFFF007EBAFF0000002D + 0000000E0000000000000000000000000000000000000000000000050000000C + 0000000C00000004000000000000000000000000000000000000000000000000 + 0000000000000006000000160000002A00000029000000150000000500000000 + 000000000000000000000000007EBAFF00FFFFFF00FFFFFF007EBAFF0000001E + 000000060000000000000000000000000000000000000006000000160000002A + 0000002900000015000000050000000000000000000000000000000000000000 + 000000000000000F007EBAFF007EBAFF0000003D0000002B0000000E00000000 + 00000000000000050000000E00000016007EBAFF007EBAFF0000003B00000024 + 000000150000000D0000000400000000000000000000000F007EBAFF007EBAFF + 0000003D0000002B0000000E0000000000000000000000000000000000000000 + 00000000007EBAFF00FFFFFF00FFFFFF007EBAFF000000350000001500000007 + 0000000E0000001B0000002B00000035007EBAFF007EBAFF0000003D0000003C + 000000350000002B0000001A0000000D00000007007EBAFF00FFFFFF00FFFFFF + 007EBAFF0000002D0000000E0000000000000000000000000000000000000000 + 00000000007EBAFF00FFFFFF00FFFFFF007EBAFF0000002F0000001F0000001E + 0000002C007EBAFF007EBAFF007EBAFF007EBAFF007EBAFF007EBAFF007EBAFF + 007EBAFF0000003D000000390000002C0000001D007EBAFF00FFFFFF00FFFFFF + 007EBAFF00000018000000060000000000000000000000000000000000000000 + 0000000000000000007EBAFF007EBAFF007EBAFF0000001F0000002F007EBAFF + 007EBAFF00ABF8FF00AEF8FF00B0F8FF00B0F8FF00ADF8FF00A9F7FF00A2F7FF + 009AF6FF007EBAFF007EBAFF0000003D0000003A007EBAFF007EBAFF007EBAFF + 0000001000000007000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000A007EBAFF007EBAFF00AFF8FF + 00B6F9FF00BCF9FF00BFF9FF00C0F9FF00C0F9FF00BEF9FF00B9F9FF00B3F8FF + 00ABF8FF00A0F7FF0094F6FF007EBAFF007EBAFF0000003B0000001E00000009 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000010007EBAFF00B5F8FF00BEF9FF + 00C5FAFF00CAFAFF00CEFBFF007EBAFF007EBAFF007EBAFF007EBAFF00C2FAFF + 00BAF9FF00AFF8FF00A3F7FF0095F6FF007EBAFF0000003D0000002D0000000F + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000007007EBAFF00B6F9FF00C1FAFF00CAFAFF + 00D2FBFF00D7FBFF007EBAFF007EBAFF007EBAFF007EBAFF007EBAFF007EBAFF + 00C6FAFF00BCF9FF00B0F8FF00A2F7FF0092F5FF007EBAFF0000003A0000001C + 0000000600000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000010007EBAFF00C1FAFF00CCFAFF00D5FBFF + 00DCFCFF007EBAFF007EBAFF00F8FEFF00F8FEFF00F8FEFF00F8FEFF007EBAFF + 007EBAFF00C6FAFF00BAF9FF00ACF8FF009CF6FF007EBAFF0000003D0000002D + 0000000F00000000000000000000000000000000000000000000000000000005 + 0000000C0000000C00000007007EBAFF00BCF9FF00CAFAFF00D5FBFF00DEFCFF + 007EBAFF007EBAFF00EEFDFF00EFFEFF00EFFEFF00ECFDFF00E8FDFF00F8FEFF + 007EBAFF007EBAFF00C3FAFF00B5F8FF00A5F7FF0094F6FF007EBAFF00000035 + 00000015000000070000000C0000000C00000004000000000000000600000016 + 0000002A0000002A0000001E007EBAFF00C4FAFF00D0FBFF00DCFCFF00E5FDFF + 00ECFDFF00F1FEFF00F4FEFF00F6FEFF007EBAFF007EBAFF00EFFEFF00E8FDFF + 00E0FCFF00D6FBFF00CAFAFF00BCF9FF00ACF8FF009AF6FF007EBAFF0000003C + 000000240000001E0000002A0000002900000015000000000000000F007EBAFF + 007EBAFF0000003D0000003C007EBAFF00C8FAFF00D6FBFF00E0FCFF00BCF9FF + 00BCF9FF00BCF9FF00BCF9FF007EBAFF00F8FEFF00BCF9FF007EBAFF00EEFDFF + 00BCF9FF00BCF9FF00BCF9FF00BCF9FF00B1F8FF009FF7FF007EBAFF0000003D + 0000003D007EBAFF007EBAFF0000003D0000002B00000000007EBAFF00FFFFFF + 00FFFFFF007EBAFF007EBAFF007EBAFF00F8FEFF00D8FCFF00F8FEFF00F8FEFF + 00F8FEFF00F8FEFF00F8FEFF007EBAFF00F8FEFF00BCF9FF007EBAFF00F8FEFF + 00F8FEFF00F8FEFF00F8FEFF00F8FEFF00B4F8FF00A2F7FF007EBAFF007EBAFF + 007EBAFF00FFFFFF00FFFFFF007EBAFF0000002D00000000007EBAFF00FFFFFF + 00FFFFFF007EBAFF007EBAFF007EBAFF00F8FEFF00DAFCFF007EBAFF007EBAFF + 007EBAFF007EBAFF007EBAFF007EBAFF00F8FEFF00BCF9FF007EBAFF007EBAFF + 007EBAFF007EBAFF007EBAFF007EBAFF00B5F8FF00A3F7FF007EBAFF007EBAFF + 007EBAFF00FFFFFF00FFFFFF007EBAFF000000180000000000000000007EBAFF + 007EBAFF000000110000000A007EBAFF00F8FEFF00D8FCFF00E4FDFF007EBAFF + FFFFFFFF000080FF000080FF007EBAFF00F8FEFF00BCF9FF007EBAFF000080FF + 000080FFFFFFFFFF007EBAFF00C4FAFF00B4F8FF00A2F7FF007EBAFF00000038 + 00000019007EBAFF007EBAFF0000001000000007000000000000000000000000 + 000000000000000000000000007EBAFF00F8FEFF00D6FBFF00E1FCFF007EBAFF + FFFFFFFF000080FF000080FF007EBAFF00F8FEFF00BCF9FF007EBAFF000080FF + 000080FFFFFFFFFF007EBAFF00C1FAFF00B2F8FF00A0F7FF007EBAFF0000002E + 0000001000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000007EBAFF00F8FEFF00D1FBFF00DCFCFF007EBAFF + FFFFFFFFFFFFFFFFFFFFFFFF007EBAFF00F8FEFF00BCF9FF007EBAFFFFFFFFFF + FFFFFFFFFFFFFFFF007EBAFF00BCF9FF00ACF8FF009BF6FF007EBAFF0000001E + 0000000600000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000007EBAFF00F8FEFF00D6FBFF00DEFCFF + 007EBAFF007EBAFF007EBAFF00F0FEFF00F0FEFF00EDFDFF00E8FDFF007EBAFF + 007EBAFF007EBAFF00C4FAFF00B6F9FF00A6F7FF007EBAFF0000002F00000010 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000007EBAFF00F8FEFF00CDFBFF00D6FBFF + 00DDFCFF00E2FCFF00E6FDFF00E7FDFF00E7FDFF00E4FDFF00E0FCFF00DAFCFF + 00D2FBFF00C8FAFF00BBF9FF00ADF8FF009EF6FF007EBAFF0000001E00000006 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000050000000E00000015007EBAFF00F8FEFF00CCFAFF + 00D2FBFF00D8FCFF00DBFCFF00DDFCFF00DCFCFF00DAFCFF00D6FBFF00CFFBFF + 00C7FAFF00BDF9FF00B1F8FF00A3F7FF007EBAFF000000300000001F00000015 + 0000000D00000004000000000000000000000000000000000000000000000000 + 0000000000000006000000160000002B00000033007EBAFF007EBAFF00F8FEFF + 00F8FEFF00CCFAFF00CFFBFF00D0FBFF00D0FBFF00CEFBFF00C9FAFF00C3FAFF + 00BAF9FF00B0F8FF00A4F7FF007EBAFF007EBAFF000000200000002E00000034 + 0000002A00000015000000050000000000000000000000000000000000000000 + 000000000000000F007EBAFF007EBAFF007EBAFF0000003500000017007EBAFF + 007EBAFF00F8FEFF00F8FEFF00F8FEFF00F8FEFF00F8FEFF00F8FEFF00F8FEFF + 00ACF8FF007EBAFF007EBAFF0000001100000009007EBAFF007EBAFF007EBAFF + 0000003D0000002B0000000E0000000000000000000000000000000000000000 + 00000000007EBAFF00FFFFFF00FFFFFF007EBAFF0000002E0000001000000000 + 00000000007EBAFF007EBAFF007EBAFF007EBAFF007EBAFF007EBAFF007EBAFF + 007EBAFF00000011000000080000000000000000007EBAFF00FFFFFF00FFFFFF + 007EBAFF0000002D0000000E0000000000000000000000000000000000000000 + 00000000007EBAFF00FFFFFF00FFFFFF007EBAFF000000180000000600000000 + 0000000000000000000000000000000B007EBAFF007EBAFF0000003B00000020 + 0000000A00000000000000000000000000000000007EBAFF00FFFFFF00FFFFFF + 007EBAFF00000018000000060000000000000000000000000000000000000000 + 0000000000000000007EBAFF007EBAFF00000010000000070000000000000000 + 00000000000000000000000000000010007EBAFF007EBAFF0000003D0000002D + 0000000F0000000000000000000000000000000000000000007EBAFF007EBAFF + 0000001000000007000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000007EBAFF00FFFFFF00FFFFFF007EBAFF0000002D + 0000000E00000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000007EBAFF00FFFFFF00FFFFFF007EBAFF00000018 + 0000000600000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000007EBAFF007EBAFF0000001000000007 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000FFFC0FFFFFFC0FFFF87C0F87 + F03C0F03F0300303F0000003F0000003F8000007FE00001FFE00001FFC00000F + FC00000FC000000080000000800000008000000080000000C0000000FC00000F + FC00000FFE00001FFE00001FF8000007F0000003F0000003F0300303F03C0F03 + F87C0F87FFFC0FFFFFFC0FFFFFFE1FFFFFFFFFFF280000002000000040000000 + 0100080000000000800400000000000000000000000100000000000000000000 + FFFFFF00007EBA0000FFFF0000F8FE0000ACF80000CCFA0000CFFB0000D0FB00 + 00CEFB0000C9FA0000C3FA0000BAF90000B0F80000A4F70000D2FB0000D8FC00 + 00DBFC0000DDFC0000DCFC0000DAFC0000D6FB0000C7FA0000BDF90000B1F800 + 00A3F70000CDFB0000E2FC0000E6FD0000E7FD0000E4FD0000E0FC0000C8FA00 + 00BBF90000ADF800009EF60000DEFC0000F0FE0000EDFD0000E8FD0000C4FA00 + 00B6F90000A6F70000D1FB0000BCF900009BF60000E1FC000000800000C1FA00 + 00B2F80000A0F70000B4F80000A2F70000B5F80000EEFD00009FF70000E5FD00 + 00ECFD0000F1FE0000F4FE0000F6FE0000EFFE0000CAFA00009AF60000D5FB00 + 00A5F7000094F60000C6FA00009CF60000D7FB000092F50000BEF90000C5FA00 + 00C2FA0000AFF8000095F60000BFF90000C0F90000B9F90000B3F80000ABF800 + 00AEF80000A9F7000080000000808000800000008000800080800000C0C0C000 + 808080000000FF0000FF0000FF000000FF00FF00FFFF00000909090012121200 + 1F1F1F002C2C2C003939390045454500525252005F5F5F006C6C6C0078787800 + 85858500929292009F9F9F00ABABAB00B8B8B800C5C5C500D2D2D200DEDEDE00 + EBEBEB00F8F8F800F0FBFF00A4A0A000C0DCC000F0CAA60000003E0000005D00 + 00007C0000009B000000BA000000D9000000F0002424FF004848FF006C6CFF00 + 9090FF00B4B4FF0000143E00001E5D0000287C0000329B00003CBA000046D900 + 0055F000246DFF004885FF006C9DFF0090B5FF00B4CDFF00002A3E00003F5D00 + 00547C0000699B000093D90000AAF00024B6FF0048C2FF006CCEFF0090DAFF00 + B4E6FF00003E3E00005D5D00007C7C00009B9B0000BABA0000D9D90000F0F000 + 24FFFF0048FFFF006CFFFF0090FFFF00B4FFFF00003E2A00005D3F00007C5400 + 009B690000BA7E0000D9930000F0AA0024FFB60048FFC2006CFFCE0090FFDA00 + B4FFE600003E1400005D1E00007C2800009B320000BA3C0000D9460000F05500 + 24FF6D0048FF85006CFF9D0090FFB500B4FFCD00003E0000005D0000007C0000 + 009B000000BA000000D9000000F0000024FF240048FF48006CFF6C0090FF9000 + B4FFB400143E00001E5D0000287C0000329B00003CBA000046D9000055F00000 + 6DFF240085FF48009DFF6C00B5FF9000CDFFB4002A3E00003F5D0000547C0000 + 699B00007EBA000093D90000AAF00000B6FF2400C2FF4800CEFF6C00DAFF9000 + E6FFB4003E3E00005D5D00007C7C00009B9B0000BABA0000D9D90000F0F00000 + FFFF2400FFFF4800FFFF6C00FFFF9000FFFFB4003E2A00005D3F00007C540000 + 9B690000BA7E0000D9930000F0AA0000FFB62400FFC24800FFCE6C00FFDA9000 + FFE6B4003E1400005D1E00007C2800009B320000BA3C0000D946000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000020200000000000000000000000000000000000000 + 0000000000000000000002030302000000000000000000000000000000000000 + 0000000000000000000002030302000000000000000000000000000000000000 + 0002020000000000000000020200000000000000000202000000000000000000 + 0203030200000000000000020200000000000000020303020000000000000000 + 0203030200000000020202020202020200000000020303020000000000000000 + 000202020000020250510D0D2252343F02020000020202000000000000000000 + 0000000002024A292C4C4D4D474E4F5032420202000000000000000000000000 + 00000000023547483E0902020202490C4A194B02000000000000000000000000 + 0000000229303E0F45020202020202432C0D3446020000000000000000000000 + 00000002300640130202040404040202430C0544020000000000000000000000 + 0000022C3E40240202363D3D39270402020B3541420200000000000000000000 + 00000228081338393A3B3C02023D271F153E2C053F0200000000000000000202 + 00000220151F2C2C2C2C02042C02362C2C2C2C18370200000202000000020303 + 0202020410040404040402042C02040404040433340202020303020000020303 + 0202020414020202020202042C02020202020235190202020303020000000202 + 00000204101E02012F2F02042C022F2F01022833340200000202000000000000 + 00000204152E02012F2F02042C022F2F01023031320200000000000000000000 + 000002042B130201010102042C02010101022C052D0200000000000000000000 + 000000020415240202022525262702020228292A020000000000000000000000 + 00000002041A15121B1C1D1D1E1F140F20212223020000000000000000000000 + 000000000204060F101112131415071617181902000000000000000000000000 + 000000000202040406070808090A0B0C0D0E0202000000000000000000000000 + 0002020200000202040404040404040502020000020202000000000000000000 + 0203030200000000020202020202020200000000020303020000000000000000 + 0203030200000000000000020200000000000000020303020000000000000000 + 0002020000000000000000020200000000000000000202000000000000000000 + 0000000000000000000002030302000000000000000000000000000000000000 + 0000000000000000000002030302000000000000000000000000000000000000 + 0000000000000000000000020200000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000000000FFFFFFFF + FFFE7FFFFFFC3FFFFFFC3FFFF9FE7F9FF0FE7F0FF0F00F0FF8C0031FFF0000FF + FF0000FFFE00007FFE00007FFC00003FFC00003FCC0000338000000180000001 + CC000033FC00003FFC00003FFE00007FFE00007FFF0000FFFF0000FFF8C0031F + F0F00F0FF0FE7F0FF9FE7F9FFFFC3FFFFFFC3FFFFFFE7FFFFFFFFFFF} + Visible = False + end + object Image2: TImage + Left = 296 + Top = 300 + Width = 34 + Height = 33 + Picture.Data = { + 07544269746D617026090000424D26090000000000007A000000280000003A00 + 0000250000000100080000000000AC080000C30E0000C30E0000110000000000 + 0000FFFFFF00F0F0FF00E9E9FF00E1E1FF00D9D9FF00D0D0FF00C7C7FF00BDBD + FF00B2B2FF00A7A7FF009A9AFF008C8CFF007C7CFF006868FF004D4DFF003300 + FF000000FF000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 00000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F00000F0F + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000F0F00000F0F00000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000F0F00000F0F0000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000F0F00000F0F000000000000000000000000 + 00000000000000000000050B0B0000000000000000000000000000000000000B + 0B0700000000000000000F0F00000F0F00000000000000000000000000000000 + 00000000000007101003000000000000000000000000000000000010100B0000 + 0000000000000F0F00000F0F0000000000000000000000000000000000000000 + 000007101003000000000000000000000000000000000010100A000000000000 + 00000F0F00000F0F000000000000000000000000000000000000000000000710 + 1003000000000000000000000000000000000010100700000000000000000F0F + 00000F0F00000000000000000000000000000000000000000000071010030000 + 00000000000000000000000000000310100700000000000000000F0F00000F0F + 0000000000000000000000000000000000000000000007101000000103030300 + 000000000000000000000310100700000000000000000F0F00000F0F00051010 + 050000000000000000000000061010070000071010040D101010100E09000000 + 0000000000000610100C00000000000000000F0F00000F0F000110100C000000 + 00000000000000000C101002000007101010101010101010100E020000000000 + 00000710101009000000000000000F0F00000F0F00000B101001000000000000 + 0000000210100D0000000710101008020000020A10100D000000000000000B10 + 101010040000000000000F0F00000F0F00000510100600000000000000000008 + 101006000000071010040000000000000A1010050000000000000E100C0D100E + 0000000000000F0F00000F0F00000010100C0000000000000000000D10100100 + 0000071010030000000000000110100A00000000000210100703101009000000 + 00000F0F00000F0F0000000A101007070707070707070810100B000000000710 + 10030000000000000010100E000000000006101005000A101001000000000F0F + 00000F0F00000004101010101010101010101010100500000000071010030000 + 000000000010101000000000000A1010010001101009000000000F0F00000F0F + 000000000E100E0B0B0B0B0B0B0B101010000000000007101003000000000000 + 0010100E000000000010100D0000000A1010010000000F0F00000F0F00000000 + 0910100000000000000210100A0000000000071010030000000000000310100A + 0000000004101009000000041010060000000F0F00000F0F0000000002101006 + 0000000000091010040000000000071010030000000000000C10100500000000 + 09101004000000000E100C0000000F0F00000F0F00000000000D100C00000000 + 000E100E0000000000000710100300020303070D10100B00000000000E101000 + 000000000A10100000000F0F00000F0F00000000000710100100000004101009 + 00000000000007101003001010101010100800000000000410100A0000000000 + 0710100300000F0F00000F0F0000000000011010060000000910100200000000 + 000007101003000E1010100D0300000000000009101005000000000003101005 + 00000F0F00000F0F0000000000000C100C0000000E100D000000000000000710 + 1003000000020C100E0200000000000E100E0000000000000310100700000F0F + 00000F0F00000000000005101001000510100700000000000000071010030000 + 0000000D100D00000000051010090000000000000310100700000F0F00000F0F + 00000000000000101007000A1010010000000000000007101003000000000007 + 101002000000010606000000000000000005070100000F0F00000F0F00000000 + 0000000A100D0010100C00000000000000000710100300000000000310100600 + 0000000000000000000000000000000000000F0F00000F0F0000000000000005 + 1010081010050000000000000000051010040000000000041010070000000000 + 00000000000000000000000000000F0F00000F0F00000000000000000E101010 + 1000000000000000000001101009000000000008101004000000000000000000 + 000000000000000000000F0F00000F0F0000000000000000091010100A000000 + 000000000000000A101005000000020E100E0000000000000000000000000000 + 0000000000000F0F00000F0F0000000000000000030E100E0400000000000000 + 000000010E10100C0B0B10101006000000000000000000000000000000000000 + 00000F0F00000F0F000000000000000000000000000000000000000000000000 + 020B10101010100E060000000000000000000000000000000000000000000F0F + 00000F0F00000000000000000000000000000000000000000000000000000207 + 07070500000000000000000000000000000000000000000000000F0F00000F0F + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000F0F00000F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F00000F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F + 0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0000} + Visible = False + end + object RichViewEdit1: TRichViewEdit + Left = 16 + Top = 18 + Width = 417 + Height = 297 + CustomHint = BalloonHint1 + ReadOnly = False + ParentShowHint = False + ShowHint = True + TabOrder = 0 + DoInPaletteMode = rvpaCreateCopies + Options = [rvoAllowSelection, rvoScrollToEnd, rvoShowPageBreaks, rvoTagsArePChars, rvoAutoCopyUnicodeText, rvoAutoCopyRVF, rvoAutoCopyImage, rvoAutoCopyRTF, rvoFormatInvalidate, rvoDblClickSelectsWord, rvoRClickDeselects, rvoShowItemHints, rvoFastFormatting] + RTFReadProperties.TextStyleMode = rvrsAddIfNeeded + RTFReadProperties.ParaStyleMode = rvrsAddIfNeeded + RVFOptions = [rvfoSavePicturesBody, rvfoSaveControlsBody, rvfoSaveBinary, rvfoSaveTextStyles, rvfoSaveParaStyles, rvfoSaveDocProperties, rvfoLoadDocProperties] + Style = RVStyle1 + OnItemHint = RichViewEdit1ItemHint + end + object BalloonHint1: TBalloonHint + Images = ImageList1 + Left = 64 + Top = 288 + end + object ImageList1: TImageList + Left = 176 + Top = 288 + Bitmap = { + 494C010102000500040010001000FFFFFFFFFF00FFFFFFFFFFFFFFFF424D3600 + 0000000000003600000028000000400000001000000001002000000000000010 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFF000000000000000000000000000000000080808000808080008080 + 8000808080000000000080808000808080000000000080808000808080000000 + 0000C0C0C000C0C0C00000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000808080008080 + 800000000000808080008080800000000000808080008080800000000000C0C0 + C000C0C0C0000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000FFFFFF000000000080808000000000000000000000000000000000000000 + 00008080800000000000FFFFFF00000000000000000000000000000000008080 + 8000808080008080800080808000808080008080800000000000C0C0C000C0C0 + C000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FFFF0000000000000000 + 00008080800080808000000000008080800000000000C0C0C000C0C0C0000000 + 000000000000FFFF000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000808000008080 + 00000000000000000000FFFFFF0000000000FFFFFF0000000000FFFFFF000000 + 0000FFFFFF000000000000000000000000000000000000000000FFFF00000000 + 000000000000808080008080800000000000FFFF000000000000000000000000 + 0000FFFF00000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000008080000080800000FF00 + 0000FF0000000000000000000000000000000000000080800000000000000000 + 00000000000000000000000000000000000000000000FFFF000000000000FFFF + 0000000000000000000000000000FFFF000000000000FFFF000000000000FFFF + 000000000000FFFF000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080800000FF000000FF00 + 0000FF0000000080000000800000008000000080000080808000808000000000 + 0000000000000000000000000000000000000000000000000000FFFF00000000 + 0000FFFF000000000000FFFF000000000000FFFF000000000000FFFF00000000 + 0000FFFF00000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FF000000FF0000000080 + 00000080000000800000008000000080000000800000FF000000808000000000 + 00000000000000000000000000000000000000000000FFFF000000000000FFFF + 000000000000FFFF000000000000FFFF000000000000FFFF0000000000000000 + 000000000000FFFF000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FF000000008000000080 + 0000008000000080000000800000800000008080800080000000808000000000 + 0000000000000000000000000000000000000000000000000000FFFF00000000 + 0000FFFF000000000000FFFF000000000000FFFF00000000000000FFFF0000FF + FF00000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000FF000000FFFF00000080 + 000000800000800000000080000000800000FF00000000800000808000000000 + 00000000000000000000000000000000000000000000FFFF000000000000FFFF + 000000000000FFFF000000000000FFFF0000000000000000000000FFFF0000FF + FF0000000000FFFF000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000080808000FF000000FFFF + FF00FFFF0000FF000000FF000000FF000000FF00000000800000808000000000 + 0000000000000000000000000000000000000000000000000000FFFF00000000 + 0000FFFF000000000000FFFF000000000000FFFF000000000000000000000000 + 0000FFFF00000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000FFFFFF00FFFF + 0000FFFFFF000080000000800000008000000080000080800000000000000000 + 00000000000000000000000000000000000000000000FFFF000000000000FFFF + 000000000000FFFF000000000000FFFF000000000000FFFF000000000000FFFF + 000000000000FFFF000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000008080 + 800080808000FFFF000000800000008000008080000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000424D3E000000000000003E000000 + 2800000040000000100000000100010000000000800000000000000000000000 + 000000000000000000000000FFFFFF00FFFFFFFF00000000F843000100000000 + F515000100000000E802000100000000E0E0400500000000C802200900000000 + 8515501500000000000328A900000000000F555500000000000F2A8900000000 + 000F550500000000000F2A8100000000000F554500000000801F2AA900000000 + C03F000100000000E07FFFFF00000000} + end + object RVStyle1: TRVStyle + TextStyles = < + item + StyleName = 'Normal text' + FontName = 'Arial' + Unicode = True + end + item + StyleName = 'Heading' + FontName = 'Arial' + Size = 12 + Style = [fsBold] + Color = clBlack + Unicode = True + end + item + StyleName = 'Hyperlink' + FontName = 'Arial' + Style = [fsUnderline] + Color = clBlue + Jump = True + Unicode = True + end> + ParaStyles = < + item + StyleName = 'Paragraph Style' + Tabs = <> + end + item + StyleName = 'Centered' + Alignment = rvaCenter + Tabs = <> + end> + ListStyles = <> + InvalidPicture.Data = { + 07544269746D617036100000424D361000000000000036000000280000002000 + 0000200000000100200000000000001000000000000000000000000000000000 + 0000808080008080800080808000808080008080800080808000808080008080 + 8000808080008080800080808000808080008080800080808000808080008080 + 8000808080008080800080808000808080008080800080808000808080008080 + 8000808080008080800080808000808080008080800080808000808080008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000000000000000000000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0 + C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF000000FF000000FF00FFFF + FF00FFFFFF000000FF000000FF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000 + FF000000FF000000FF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 + FF000000FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF000000FF000000 + FF000000FF000000FF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF000000FF000000FF00FFFF + FF00FFFFFF000000FF000000FF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C00000000000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF008080800080808000808080008080800080808000808080008080 + 800080808000808080008080800080808000808080008080800080808000FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF + FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080 + 8000808080008080800080808000808080008080800080808000808080008080 + 8000808080008080800080808000808080008080800080808000808080008080 + 8000808080008080800080808000808080008080800080808000808080008080 + 8000808080008080800080808000808080008080800080808000808080008080 + 8000} + StyleTemplates = <> + Left = 120 + Top = 288 + end +end diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/Unit1.pas new file mode 100644 index 0000000..678240a --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Custom Hints/Unit1.pas @@ -0,0 +1,127 @@ +{*******************************************************} +{ } +{ RichView } +{ Custom hints demo } +{ For Delphi 2009+ } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +// Property settings: +// RichViewEdit1.ShowHints = True +// rvoShowItemHints in RichViewEdit1.Options +// RichViewEdit1.CustomHint = BalloonHint1 + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ImgList, RVStyle, RVScroll, RichView, RVEdit, CRVData, RVItem, + Jpeg, GifImg, PngImage, RVTypes, ExtCtrls; + +type + TForm1 = class(TForm) + BalloonHint1: TBalloonHint; + ImageList1: TImageList; + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Image1: TImage; + Image2: TImage; + procedure FormCreate(Sender: TObject); + procedure RichViewEdit1ItemHint(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; var HintText: string); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var gr: TGraphic; +begin + RichViewEdit1.Clear; + RichViewEdit1.AddNL('Custom Hints', 1, 1); + RichViewEdit1.AddNL('Hyperlinks: ', 0, 0); + RichViewEdit1.AddNLTag('trichview.com', 2, -1, Integer(StrNew('http://www.trichview.com'))); + RichViewEdit1.SetItemExtraStrProperty(RichViewEdit1.ItemCount-1, rvespHint, 'TRichView homepage'); + + RichViewEdit1.AddNL('Hypertext pictures: ', 0, 0); + gr := TBitmap.Create; + gr.Assign(Image2.Picture.Graphic); + RichViewEdit1.AddHotPictureTag('', gr, -1, rvvaAbsMiddle, Integer(StrNew('http://en.wikipedia.org/wiki/Greek_alphabet'))); + RichViewEdit1.SetItemExtraStrProperty(RichViewEdit1.ItemCount-1, rvespHint, 'Αβγ'); + + RichViewEdit1.AddNL('Pictures: ', 0, 0); + gr := TIcon.Create; + gr.Assign(Image1.Picture.Graphic); + RichViewEdit1.AddPictureEx( '', gr, -1, rvvaAbsMiddle); + RichViewEdit1.SetItemExtraStrProperty(RichViewEdit1.ItemCount-1, rvespHint, 'Солнце'); // "Sun" in Russian + + RichViewEdit1.Format; +end; +{------------------------------------------------------------------------------} +function GetGraphicFormatName(gr: TGraphic): String; +begin + if gr is TBitmap then + Result := 'Windows bitmap' + else if gr is TIcon then + Result := 'Icon' + else if gr is TMetafile then + Result := 'Windows metafile' + else if gr is TJpegImage then + Result := 'JPEG image' + else if gr is TGifImage then + Result := 'GIF image' + else if gr is TPngImage then + Result := 'PNG image' + else + Result := 'Unknown image format'; +end; +{------------------------------------------------------------------------------} +{ OnItemHint event } +procedure TForm1.RichViewEdit1ItemHint(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; var HintText: string); +var DefaultHint, Target, PicDetails: String; + i, Tag: Integer; + ItemName: TRVAnsiString; + Align: TRVVAlign; + Graphic: TGraphic; +begin + DefaultHint := HintText; + for i := 1 to Length(DefaultHint) do + if DefaultHint[i]='|' then + DefaultHint[i] := ' '; + if DefaultHint<>'' then + DefaultHint := ': '+DefaultHint; + if (RVData.GetItemStyle(ItemNo)=rvsPicture) or + (RVData.GetItemStyle(ItemNo)=rvsHotPicture) then begin + // image + RVData.GetPictureInfo(ItemNo, ItemName, Graphic, Align, Tag); + if RVData.GetItemStyle(ItemNo)=rvsHotPicture then + Target := '; Target: '+PChar(Tag) + else + Target := ''; + PicDetails := Format('%s %d×%d', [GetGraphicFormatName(Graphic), + Graphic.Width, Graphic.Height]); + HintText := 'Image'+DefaultHint+'|'+PicDetails+Target+'|1'; + end + else if RVData.GetItem(ItemNo).GetBoolValueEx(rvbpJump, RVStyle1) then begin + // hyperlink + Target := 'Target: '+PChar(RVData.GetItemTag(ItemNo)); + HintText := 'Hyperlink'+DefaultHint+'|'+Target+'|0'; + end; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/FillInGaps.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/FillInGaps.dpr new file mode 100644 index 0000000..9a55c74 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/FillInGaps.dpr @@ -0,0 +1,13 @@ +program FillInGaps; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/FillInGaps.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/FillInGaps.dproj new file mode 100644 index 0000000..abb601d --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/FillInGaps.dproj @@ -0,0 +1,99 @@ + + + {2BFF002E-B1AF-4D22-8CF9-09CF0293C42D} + FillInGaps.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + FillInGaps.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + FillInGaps.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/FillInGaps.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/FillInGaps.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/FillInGaps.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/Unit1.dfm new file mode 100644 index 0000000..c429b9f Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/Unit1.pas new file mode 100644 index 0000000..59ca1ae --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/FillInGaps/Unit1.pas @@ -0,0 +1,120 @@ +unit Unit1; + +interface + +{------------------------------------------------------------------------------ + Implementing "fields" + The main property settings: + - rvoTagsArePChars in RichViewEdit1.Options (so each item can have associated string) + - RVStyle1.TextStyles collection has two styles (for static text and for fields) + Especially look at Protection properties + - RichViewEdit1 is set to "use predefined set of styles" (right click on + RichViewEdit1 at design time, then choose "Settings") + - AcceptDragDropFormats = [] + +------------------------------------------------------------------------------ } + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, Clipbrd, StdCtrls, + CRVData, RVTable; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + rvs: TRVStyle; + Button1: TButton; + procedure FormCreate(Sender: TObject); + procedure RichViewEdit1Paste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +function GetFieldLocation(RootRVData: TCustomRVData; const field: String; + var RVData: TCustomRVData; var ItemNo: Integer): Boolean; +var i,r,c: Integer; + table: TRVTableItemInfo; +begin + Result := False; + for i := 0 to RootRVData.ItemCount-1 do + if RootRVData.GetItemStyle(i)=rvsTable then begin + table := TRVTableItemInfo(RootRVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then begin + Result := GetFieldLocation(table.Cells[r,c].GetRVData, field, + RVData, ItemNo); + if Result then + exit; + end + end + else if PChar(RootRVData.GetItemTag(i)) = field then begin + ItemNo := i; + RVData := RootRVData.GetSourceRVData; + Result := True; + exit; + end; +end; + +function GetFieldValue(rv: TCustomRichView; const field: String): String; +var RVData: TCustomRVData; + ItemNo: Integer; +begin + if GetFieldLocation(rv.RVData, field, RVData, ItemNo) then + Result := RVData.GetItemText(ItemNo) + else + Result := ''; +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit1.AddNL('2 + 2 =', 1,0); + RichViewEdit1.AddNLTag(' ', 0,-1, Integer(StrNew('answer1'))); + RichViewEdit1.Add('?', 1); + RichViewEdit1.AddNL('3 + 3 =', 1,0); + RichViewEdit1.AddNLTag(' ', 0,-1, Integer(StrNew('answer2'))); + RichViewEdit1.Add('?', 1); + RichViewEdit1.Format; + RichViewEdit1.SetSelectionBounds(1,2,1,2); +end; + +procedure TForm1.RichViewEdit1Paste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); +var s: String; +begin + // allowing to paste only one line text + s := Clipboard.AsText; + if (Pos(#10,s)=0) and (Pos(#13,s)=0) then + RichViewEdit1.InsertText(s,False); + DoDefault := False; +end; + +procedure TForm1.Button1Click(Sender: TObject); +var s: String; +begin + s := GetFieldValue(RichViewEdit1, 'answer1'); + if StrToIntDef(Trim(s), 0)<>4 then begin + Application.MessageBox('Wrong! Try again','Test', 0); + exit; + end; + s := GetFieldValue(RichViewEdit1, 'answer2'); + if StrToIntDef(Trim(s), 0)<>6 then begin + Application.MessageBox('Wrong! Try again','Test', 0); + exit; + end; + Application.MessageBox('Test is passed','Test', 0); +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/LiveLink1.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/LiveLink1.dpr new file mode 100644 index 0000000..349aed7 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/LiveLink1.dpr @@ -0,0 +1,13 @@ +program LiveLink1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/LiveLink1.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/LiveLink1.dproj new file mode 100644 index 0000000..72cbd7a --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/LiveLink1.dproj @@ -0,0 +1,99 @@ + + + {970B9004-2D6B-4FBA-BDDF-8A5B525AFAE7} + LiveLink1.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + LiveLink1.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + LiveLink1.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/LiveLink1.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/LiveLink1.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/LiveLink1.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/Unit1.dfm new file mode 100644 index 0000000..09230ae Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/Unit1.pas new file mode 100644 index 0000000..b10e307 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Simple/Unit1.pas @@ -0,0 +1,168 @@ +unit Unit1; + +interface + +{------------------------------------------------------------------------------} +{ Important settings: + rvoTagsArePChars in RichViewEdit1.Options +{------------------------------------------------------------------------------} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, RVStyle, RVScroll, RichView, RVEdit; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Button1: TButton; + Button2: TButton; + Label1: TLabel; + Edit1: TEdit; + Label2: TLabel; + Edit2: TEdit; + Button3: TButton; + Label3: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Edit1Change(Sender: TObject); + procedure Edit2Change(Sender: TObject); + procedure RichViewEdit1Change(Sender: TObject); + private + { Private declarations } + LastNameItemNo, // Storing LastItem no is not necessary, + LastDateItemNo: Integer; // but increases efficiency + Freeze: Boolean; + procedure InsertField(const field, value: String; var LastItemNo: Integer); + public + { Public declarations } + end; + +var + Form1: TForm1; + + + +implementation + +procedure GetFieldItemNo(rv: TCustomRichView; const field: String; var ItemNo: Integer); +var i: Integer; +begin + if (ItemNo>=0) and (ItemNo=0 then + Result := rv.GetItemText(LastItemNo) + else + Result := ''; +end; + +procedure SetFieldValue(rv: TCustomRichViewEdit; const field, value: String; + var LastItemNo: Integer); +begin + GetFieldItemNo(rv, field, LastItemNo); + if LastItemNo>=0 then + rv.SetItemTextEd(LastItemNo, value); +end; + + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit1.AddNL('Insert fields here',0,0); + RichViewEdit1.Format; +end; + +procedure TForm1.InsertField(const field, value: String; var LastItemNo: Integer); +var StyleNo: Integer; +begin + if GetFieldValue(RichViewEdit1, field, LastItemNo)<>'' then begin + Application.MessageBox('Field already exists!','',0); + exit; + end; + StyleNo := RichViewEdit1.CurParaStyleNo; + RichViewEdit1.CurTextStyleNo := 6; + RichViewEdit1.InsertStringTag(value, Integer(StrNew(PChar(field)))); + RichViewEdit1.CurTextStyleNo := StyleNo; + RichViewEdit1.SetFocus; +end; + + +procedure TForm1.Button1Click(Sender: TObject); + +begin + InsertField('name', Edit1.Text, LastNameItemNo); +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + InsertField('date', Edit2.Text, LastDateItemNo); +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + RichViewEdit1.ApplyTextStyle(0); + RichViewEdit1.SetFocus; +end; + +procedure TForm1.Edit1Change(Sender: TObject); +begin + if Freeze then + exit; + Freeze := True; + try + SetFieldValue(RichViewEdit1, 'name', Edit1.Text, LastNameItemNo); + finally + Freeze := False; + end; +end; + +procedure TForm1.Edit2Change(Sender: TObject); +begin + if Freeze then + exit; + Freeze := True; + try + SetFieldValue(RichViewEdit1, 'date', Edit2.Text, LastDateItemNo); + finally + Freeze := False; + end; +end; + +procedure TForm1.RichViewEdit1Change(Sender: TObject); +var s: String; +begin + if Freeze then + exit; + Freeze := True; + try + s := GetFieldValue(RichViewEdit1, 'name', LastNameItemNo); + if s<>'' then + Edit1.Text := s; + s := GetFieldValue(RichViewEdit1, 'date', LastDateItemNo); + if s<>'' then + Edit2.Text := s; + finally + Freeze := False; + end; +end; + + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/LiveLink2.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/LiveLink2.dpr new file mode 100644 index 0000000..e3d7adb --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/LiveLink2.dpr @@ -0,0 +1,13 @@ +program LiveLink2; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/LiveLink2.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/LiveLink2.dproj new file mode 100644 index 0000000..c19c3d3 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/LiveLink2.dproj @@ -0,0 +1,99 @@ + + + {A36C0AC3-3FE9-4DC6-93F4-6B1327F239B0} + LiveLink2.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + LiveLink2.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + LiveLink2.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/LiveLink2.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/LiveLink2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/LiveLink2.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/Unit1.dfm new file mode 100644 index 0000000..cacbd44 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/Unit1.pas new file mode 100644 index 0000000..ff9babe --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/LiveLink/Tables/Unit1.pas @@ -0,0 +1,203 @@ +unit Unit1; + +interface + +{------------------------------------------------------------------------------} +{ Important settings: + rvoTagsArePChars in RichViewEdit1.Options +{------------------------------------------------------------------------------} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, RVStyle, RVScroll, RichView, RVEdit, RVTable, CRVData, RVERVData; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Button1: TButton; + Button2: TButton; + Label1: TLabel; + Edit1: TEdit; + Label2: TLabel; + Edit2: TEdit; + Button3: TButton; + Label3: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Edit1Change(Sender: TObject); + procedure Edit2Change(Sender: TObject); + procedure RichViewEdit1Change(Sender: TObject); + private + { Private declarations } + Freeze: Boolean; + procedure InsertField(const field, value: String); + public + { Public declarations } + end; + +var + Form1: TForm1; + + + +implementation + +function GetFieldLocation(RootRVData: TCustomRVData; const field: String; + var RVData: TCustomRVData; var ItemNo: Integer): Boolean; +var i,r,c: Integer; + table: TRVTableItemInfo; +begin + Result := False; + for i := 0 to RootRVData.ItemCount-1 do + if RootRVData.GetItemStyle(i)=rvsTable then begin + table := TRVTableItemInfo(RootRVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then begin + Result := GetFieldLocation(table.Cells[r,c].GetRVData, field, RVData, ItemNo); + if Result then + exit; + end + end + else if PChar(RootRVData.GetItemTag(i)) = field then begin + ItemNo := i; + RVData := RootRVData.GetSourceRVData; + Result := True; + exit; + end; +end; + +function GetFieldValue(rv: TCustomRichView; const field: String): String; +var ItemNo: Integer; + RVData: TCustomRVData; +begin + if GetFieldLocation(rv.RVData, field, RVData, ItemNo) then + Result := RVData.GetRVData.GetItemText(ItemNo) + else + Result := ''; +end; + +procedure SetFieldValue(rv: TCustomRichViewEdit; const field, value: String); +var ItemNo: Integer; + RVData: TCustomRVData; + Ctrl: TWinControl; + AutoSelect: Boolean; +begin + if GetFieldLocation(rv.RVData, field, RVData, ItemNo) then begin + if RVData.GetRVData is TRVTableCellData then begin + ctrl := GetParentForm(rv).ActiveControl; + TRVTableCellData(RVData).Edit; + AutoSelect := False; + if (ctrl<>nil) and (ctrl is TEdit) then begin + AutoSelect := TEdit(ctrl).AutoSelect; + TEdit(ctrl).AutoSelect := False; + end; + GetParentForm(rv).ActiveControl := ctrl; + if (ctrl<>nil) and (ctrl is TEdit) then + TEdit(ctrl).AutoSelect := AutoSelect; + end; + if RVData.GetRVData is TRVEditRVData then + (TRVEditRVData(RVData.GetRVData).RichView as TCustomRichViewEdit).SetItemTextEd(ItemNo, value); + end; +end; + + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var table: TRVTableItemInfo; +begin + RichViewEdit1.Clear; + table := TRVTableItemInfo.CreateEx(1,2,RichViewEdit1.RVData); + table.Cells[0,0].Clear; + table.Cells[0,0].AddNL('Name: ',0,1); + table.Cells[0,0].AddNLTag(Edit1.Text,6,-1,Integer(StrNew('name'))); + table.Cells[0,1].Clear; + table.Cells[0,1].AddNL('Date: ',0,1); + table.Cells[0,1].AddNLTag(Edit2.Text,6,-1,Integer(StrNew('date'))); + table.BorderWidth := 1; + table.CellBorderWidth := 1; + RichViewEdit1.AddItem('',table); + RichViewEdit1.Format; +end; + +procedure TForm1.InsertField(const field, value: String); +var StyleNo: Integer; +begin + if GetFieldValue(RichViewEdit1, field)<>'' then begin + Application.MessageBox('Field already exists!','', 0); + exit; + end; + StyleNo := RichViewEdit1.CurTextStyleNo; + RichViewEdit1.CurTextStyleNo := 6; + RichViewEdit1.InsertStringTag(value, Integer(StrNew(PChar(field)))); + RichViewEdit1.CurTextStyleNo := StyleNo; + RichViewEdit1.SetFocus; +end; + + +procedure TForm1.Button1Click(Sender: TObject); + +begin + InsertField('name', Edit1.Text); +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + InsertField('date', Edit2.Text); +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + RichViewEdit1.ApplyTextStyle(0); + RichViewEdit1.SetFocus; +end; + +procedure TForm1.Edit1Change(Sender: TObject); +begin + if Freeze then + exit; + Freeze := True; + try + SetFieldValue(RichViewEdit1, 'name', Edit1.Text); + finally + Freeze := False; + end; +end; + +procedure TForm1.Edit2Change(Sender: TObject); +begin + if Freeze then + exit; + Freeze := True; + try + SetFieldValue(RichViewEdit1, 'date', Edit2.Text); + finally + Freeze := False; + end; +end; + +procedure TForm1.RichViewEdit1Change(Sender: TObject); +var s: String; +begin + if Freeze then + exit; + Freeze := True; + try + s := GetFieldValue(RichViewEdit1, 'name'); + if s<>'' then + Edit1.Text := s; + s := GetFieldValue(RichViewEdit1, 'date'); + if s<>'' then + Edit2.Text := s; + finally + Freeze := False; + end; +end; + + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/Customers.txt b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/Customers.txt new file mode 100644 index 0000000..a264d2f --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/Customers.txt @@ -0,0 +1,37 @@ +18 +cid0001 +Roberto Nelson +cid0002 +Bruce Young +cid0003 +Kim Lambert +cid0004 +Leslie Johnson +cid0005 +Phil Forest +cid0006 +K.J. Weston +cid0007 +Lee Terry +cid0008 +Stewart Hall +cid0009 +Katherine Young +cid0010 +Chris Papadopulos +cid0011 +Pete Fisher +cid0012 +Ann Bennet +cid0013 +Roger De Sousa +cid0014 +Janet Boldwin +cid0015 +Roger Reeves +cid0016 +Willie Stansbury +cid0017 +Leslie Phong +cid0018 +Ashok Ramanathan \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.dfm new file mode 100644 index 0000000..412468c Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.pas new file mode 100644 index 0000000..2518465 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MMMainFrm.pas @@ -0,0 +1,174 @@ +unit MMMainFrm; +{------------------------------------------------------------------------------} +{ + Very simple "mail merging" application (LabelItem Version). + It loads a template from TEMPLATE.RVF, and data from CUSTOMERS.TXT. + Template can be modified with another application in this directory: + TEMPLATEEDITORLI. + + Main settings: + - since field names are stored in tags (see the help topic about tags) + as strings, rvoTagsArePChars is included in Options of rvTemplate and + rvOutput. + - fields are represented with LabelItem item type. + - rvOutput.Style = rvsOutput, rvTemplate.Style = rvsTemplate. + In rvOutput, fields are not highlighted, in rvTemplate they are always + highlighted. +} +{------------------------------------------------------------------------------} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, StdCtrls, RVStyle, RVTable, CRVData, + RVLabelItem, RVSeqItem; + +type + TfrmMainMerge = class(TForm) + ListBox1: TListBox; + rvOutput: TRichView; + rvsOutput: TRVStyle; + rvsTemplate: TRVStyle; + rvTemplate: TRichView; + Label1: TLabel; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + procedure ListBox1Click(Sender: TObject); + procedure FormDestroy(Sender: TObject); + private + { Private declarations } + Codes: TStringList; + procedure LoadCustomers; + function IsFieldCode(const FieldName: String): Boolean; + function GetFieldValueFromDatabase(const FieldName: String): String; + procedure FillFields(RVData: TCustomRVData); + public + { Public declarations } + end; + +var + frmMainMerge: TfrmMainMerge; + +implementation + +{$R *.dfm} + +{ TForm1 } + +{------------------------------------------------------------------------------} +{ This procedure loads file CUSTOMERS.TXT into: + - ListBox1.Items (<- names of customers) + - Codes (<- codes of customers) + In real applications data can be stored in some database } +procedure TfrmMainMerge.LoadCustomers; +var F: TextFile; + i, Count: Integer; + s: String; +begin + AssignFile(F, ExtractFilePath(Application.ExeName)+'Customers.txt'); + Reset(F); + try + Readln(F, Count); + for i := 0 to Count-1 do + begin + Readln(F, s); + Codes.Add(s); + Readln(F, s); + ListBox1.Items.Add(Trim(s)) + end; + finally + CloseFile(F); + end; +end; +{------------------------------------------------------------------------------} +{ Initialization: loading template into rvOutput, loading customers data. } +procedure TfrmMainMerge.FormCreate(Sender: TObject); +begin + Codes := TStringList.Create; + LoadCustomers; + rvTemplate.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + rvTemplate.Format; + if ListBox1.Items.Count>0 then + begin + ListBox1.ItemIndex := 0; + ListBox1.OnClick(nil); + end; +end; +{------------------------------------------------------------------------------} +procedure TfrmMainMerge.FormDestroy(Sender: TObject); +begin + Codes.Free; + Codes := nil; +end; +{------------------------------------------------------------------------------} +{ Returns True if FieldName is a valid field code } +function TfrmMainMerge.IsFieldCode(const FieldName: String): Boolean; +begin + Result := (FieldName='name') or (FieldName='code') or + (Copy(FieldName, 1, 5)='date:'); +end; +{------------------------------------------------------------------------------} +{ This function returns the current field value by the field name. + In this example, we have two data fields: "name" and "code", + and "date" field } +function TfrmMainMerge.GetFieldValueFromDatabase(const FieldName: String): String; +var Index: Integer; +begin + Index := ListBox1.ItemIndex; + if FieldName='name' then + Result := ListBox1.Items[Index] + else if FieldName='code' then + Result := Codes[Index] + else if Copy(FieldName, 1, 5)='date:' then begin + Result := Copy(FieldName, 6, Length(FieldName)); + Result := DateToStr(StrToFloat(Result)); + end + else + Result := '{error: illegal field code}'; +end; +{------------------------------------------------------------------------------} +{ This function iterates through all items in RVData, and if tag of + some label item is a data field, it calls GetFieldValueFromDatabase(tag) + and replaces the label item's text with the returned value. + You can move this function to your application unchanged. + Initial call: FillFields(RichView.RVData); } +procedure TfrmMainMerge.FillFields(RVData: TCustomRVData); +var i,r,c: Integer; + table: TRVTableItemInfo; + FieldName: String; +begin + for i := 0 to RVData.ItemCount-1 do + case RVData.GetItemStyle(i) of + rvsTable: + begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.RowCount-1 do + for c := 0 to table.ColCount-1 do + if table.Cells[r,c]<>nil then + FillFields(table.Cells[r,c].GetRVData); + end; + rvsLabel: + begin + FieldName := PChar(RVData.GetItemTag(i)); + if IsFieldCode(FieldName) then + TRVLabelItemInfo(RVData.GetItem(i)).Text := GetFieldValueFromDatabase(FieldName); + end; + end; +end; +{------------------------------------------------------------------------------} +{ On highlighting a new list box item: updating document in rvOutput. } +procedure TfrmMainMerge.ListBox1Click(Sender: TObject); +begin + rvOutput.Clear; + if ListBox1.ItemIndex>=0 then + begin + rvOutput.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + FillFields(rvOutput.RVData); + rvOutput.Format; + end; +end; + + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.dpr new file mode 100644 index 0000000..f611a13 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.dpr @@ -0,0 +1,13 @@ +program MailMergeLI; + +uses + Forms, + MMMainFrm in 'MMMainFrm.pas' {frmMainMerge}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMainMerge, frmMainMerge); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.dproj new file mode 100644 index 0000000..bb57757 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.dproj @@ -0,0 +1,107 @@ + + + {EFF9BFB8-8627-4A59-A01F-368A676C453E} + MailMergeLI.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + MailMergeLI.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
frmMainMerge
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + MailMergeLI.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.res new file mode 100644 index 0000000..08ba56e Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/MailMergeLI.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/PopupFrm.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/PopupFrm.dfm new file mode 100644 index 0000000..023893e Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/PopupFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/PopupFrm.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/PopupFrm.pas new file mode 100644 index 0000000..1949a56 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/PopupFrm.pas @@ -0,0 +1,53 @@ +unit PopupFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, ComCtrls, StdCtrls, ExtCtrls; + +type + TfrmPopup = class(TForm) + Panel1: TPanel; + Panel2: TPanel; + Button1: TButton; + Button2: TButton; + cal: TMonthCalendar; + procedure FormDeactivate(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +implementation +uses TEMainFrm; + +{$R *.dfm} + +procedure TfrmPopup.FormDeactivate(Sender: TObject); +begin + Close; +end; + +procedure TfrmPopup.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; + frmTemplateEditor.rve.SmartPopupProperties.SetButtonState(False); +end; + +procedure TfrmPopup.Button1Click(Sender: TObject); +begin + frmTemplateEditor.ChangeDate(cal.Date); + Close; +end; + +procedure TfrmPopup.Button2Click(Sender: TObject); +begin + Close; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.dfm new file mode 100644 index 0000000..39557ce Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.pas new file mode 100644 index 0000000..32ac689 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TEMainFrm.pas @@ -0,0 +1,408 @@ +unit TEMainFrm; + +{------------------------------------------------------------------------------} +{ + TEMPLATE EDITOR (LABEL ITEM VERSION) + This demo creates template and saves it in TEMPLATE.RVF. + + This demo shows how to: + - use TRVLabelItemInfo as field; + - use TRVSeqItemInfo (only one numbered sequence ("Num") is inserted in + this demo, but you can paste RTF files with additional sequences). + - use "smart popups" to edit item properties. + + See mail merging application in the same directory - MAILMERGELI. + + Main settings: + - since field names are stored in tags (see the help topic about tags) + as strings, rvoTagsArePChars is included in Options of rve. + - this demo uses free formatting of template (right click richviews, + choose "Settings" from the context menu, choose "Allow adding styles + dynamically"). +} +{------------------------------------------------------------------------------} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + StdCtrls, ExtCtrls, Menus, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, + RVLabelItem, RVSeqItem, ImgList; + +type + TfrmTemplateEditor = class(TForm) + rve: TRichViewEdit; + RVStyle1: TRVStyle; + MainMenu1: TMainMenu; + mitFile: TMenuItem; + mitSave: TMenuItem; + N1: TMenuItem; + mitExit: TMenuItem; + mitInsert: TMenuItem; + mitView: TMenuItem; + mitShowNever: TMenuItem; + mitShowCurrent: TMenuItem; + mitShowAlways: TMenuItem; + mitName: TMenuItem; + mitCode: TMenuItem; + N2: TMenuItem; + mitNumber: TMenuItem; + mitDate: TMenuItem; + ImageList1: TImageList; + pmField: TPopupMenu; + pmSeq: TPopupMenu; + mitDecimal: TMenuItem; + mitLowerAlpha: TMenuItem; + mitUpperAlpha: TMenuItem; + mitLowerRoman: TMenuItem; + mitUpperRoman: TMenuItem; + N3: TMenuItem; + mitContinue: TMenuItem; + mitResetTo: TMenuItem; + mitToName: TMenuItem; + mitToCode: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure mitShowNeverClick(Sender: TObject); + procedure mitShowCurrentClick(Sender: TObject); + procedure mitShowAlwaysClick(Sender: TObject); + procedure mitNameClick(Sender: TObject); + procedure mitCodeClick(Sender: TObject); + procedure mitSaveClick(Sender: TObject); + procedure mitExitClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure mitDateClick(Sender: TObject); + procedure mitNumberClick(Sender: TObject); + procedure rveCaretMove(Sender: TObject); + procedure mitNumberTypeClick(Sender: TObject); + procedure pmSeqPopup(Sender: TObject); + procedure mitResetToClick(Sender: TObject); + procedure mitContinueClick(Sender: TObject); + procedure mitToNameClick(Sender: TObject); + procedure mitToCodeClick(Sender: TObject); + procedure pmFieldPopup(Sender: TObject); + procedure rveSmartPopupClick(Sender: TCustomRichView; + Button: TCustomControl); + private + { Private declarations } + procedure InsertField(const FieldCode, DisplayString: String); + procedure SetNumberTypeToMenu(NumberType: TRVSeqType); + procedure ResetCurrentSeqTo(Value: Integer; Reset: Boolean); + procedure ChangeFieldTo(const FieldCode, DisplayString: String); + public + { Public declarations } + procedure ChangeDate(Date: TDate); + end; + +var + frmTemplateEditor: TfrmTemplateEditor; + +implementation + +uses PopupFrm; + +{$R *.dfm} + +procedure TfrmTemplateEditor.FormCreate(Sender: TObject); +begin + rve.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + rve.Format; +end; +{============================= Menu "File" =====================================} +procedure TfrmTemplateEditor.mitSaveClick(Sender: TObject); +begin + rve.SaveRVF(ExtractFilePath(Application.ExeName)+'template.rvf', False); + rve.Modified := False; +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitExitClick(Sender: TObject); +begin + Close; +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if rve.Modified then + case Application.MessageBox('Template was modified'#13'Save?', 'Closing', + MB_YESNOCANCEL or MB_ICONQUESTION) of + ID_YES: + mitSaveClick(Sender); + ID_CANCEL: + CanClose := False; + end; +end; +{=========================== Menu "Insert" ====================================} +{ Inserting field. + FieldCode - field code, saved in item's tag. Main application will search + field by its code. + DisplayString - will be displayed in place of field by default. Any string. } +procedure TfrmTemplateEditor.InsertField(const FieldCode, DisplayString: String); +var li: TRVLabelItemInfo; +begin + li := TRVLabelItemInfo.CreateEx(rve.RVData, rve.CurTextStyleNo, DisplayString); + li.Tag := Integer(StrNew(PChar(FieldCode))); + rve.InsertItem('', li); +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitNameClick(Sender: TObject); +begin + InsertField('name', ''); +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitCodeClick(Sender: TObject); +begin + InsertField('code', ''); +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitDateClick(Sender: TObject); +var LDate: TDate; +begin + LDate := Date; + InsertField('date:'+FloatToStr(LDate), '<'+DateToStr(LDate)+'>'); +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitNumberClick(Sender: TObject); +var si: TRVSeqItemInfo; +begin + si := TRVSeqItemInfo.CreateEx(rve.RVData, 'Num', rvseqDecimal, + rve.CurTextStyleNo, 1, False); + rve.InsertItem('', si); +end; +{========================== Menu "View" =======================================} +procedure TfrmTemplateEditor.mitShowNeverClick(Sender: TObject); +begin + RVStyle1.FieldHighlightType := rvfhNever; + rve.RefreshAll; + mitShowNever.Checked := True; + mitShowCurrent.Checked := False; + mitShowAlways.Checked := False; +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitShowCurrentClick(Sender: TObject); +begin + RVStyle1.FieldHighlightType := rvfhCurrent; + rve.RefreshAll; + mitShowNever.Checked := False; + mitShowCurrent.Checked := True; + mitShowAlways.Checked := False; +end; +{------------------------------------------------------------------------------} +procedure TfrmTemplateEditor.mitShowAlwaysClick(Sender: TObject); +begin + RVStyle1.FieldHighlightType := rvfhAlways; + rve.RefreshAll; + mitShowNever.Checked := False; + mitShowCurrent.Checked := False; + mitShowAlways.Checked := True; +end; +{======================= Smart Popups =========================================} +procedure TfrmTemplateEditor.rveCaretMove(Sender: TObject); +var tle: TCustomRichViewEdit; + FieldCode: String; +begin + tle := rve.TopLevelEditor; + case tle.GetItemStyle(tle.CurItemNo) of + rvsLabel: + begin + FieldCode := PChar(tle.GetItemTag(tle.CurItemNo)); + if Copy(FieldCode, 1, 5)='date:' then begin + rve.SmartPopupProperties.Hint := 'Change Date'; + rve.SmartPopupProperties.ImageIndex := 1; + rve.SmartPopupProperties.Menu := nil; + rve.OnSmartPopupClick := rveSmartPopupClick; + end + else begin + rve.SmartPopupProperties.Hint := 'Change Field Code'; + rve.SmartPopupProperties.ImageIndex := 0; + rve.SmartPopupProperties.Menu := pmField; + rve.OnSmartPopupClick := nil; + end; + rve.SmartPopupVisible := True; + end; + rvsSequence: + begin + rve.SmartPopupProperties.Hint := 'Change Numbering'; + rve.SmartPopupProperties.ImageIndex := 2; + rve.SmartPopupProperties.Menu := pmSeq; + rve.SmartPopupVisible := True; + rve.OnSmartPopupClick := nil; + end; + else + rve.SmartPopupVisible := False; + end; +end; +{------------------------------------------------------------------------------} +{ Sequences: checking appropriate numbering type in pmSeq } +procedure TfrmTemplateEditor.SetNumberTypeToMenu(NumberType: TRVSeqType); +var i: TRVSeqType; +begin + for i := Low(TRVSeqType) to High(TRVSeqType) do + pmSeq.Items[ord(i)].Checked := pmSeq.Items[ord(i)].Tag=ord(NumberType); + +end; +{------------------------------------------------------------------------------} +{ Sequences: checking pmSeq items before it is displayed } +procedure TfrmTemplateEditor.pmSeqPopup(Sender: TObject); +begin + if rve.CurItemStyle<>rvsSequence then begin + Beep; + abort; + end; + SetNumberTypeToMenu(TRVSeqItemInfo(rve.GetCurrentItem).NumberType); + mitResetTo.Checked := TRVSeqItemInfo(rve.GetCurrentItem).Reset; + mitContinue.Checked := not mitResetTo.Checked; +end; +{------------------------------------------------------------------------------} +{ Sequences: changing StartFrom and Reset properties of the current sequence + item as an editing operation } +procedure TfrmTemplateEditor.ResetCurrentSeqTo(Value: Integer; Reset: Boolean); +var oldsi,si: TRVSeqItemInfo; + tle: TCustomRichViewEdit; +begin + if rve.CurItemStyle<>rvsSequence then begin + Beep; + exit; + end; + // creating a new item with the desired properties and inserting it + // instead the old item + oldsi := TRVSeqItemInfo(rve.GetCurrentItem); + si := TRVSeqItemInfo.Create(rve.RVData); + si.Assign(oldsi); + if Reset then + si.StartFrom := Value; + si.Reset := Reset; + tle := rve.TopLevelEditor; + tle.SetSelectionBounds(tle.CurItemNo, 0, tle.CurItemNo, 1); + rve.InsertItem('', si); +end; +{------------------------------------------------------------------------------} +{ Sequences: changing NumberType property of the current sequence + item as an editing operation } +procedure TfrmTemplateEditor.mitNumberTypeClick(Sender: TObject); +var oldsi,si: TRVSeqItemInfo; + tle: TCustomRichViewEdit; +begin + if rve.CurItemStyle<>rvsSequence then begin + Beep; + exit; + end; + // creating a new item with the desired properties and inserting it + // instead the old item + oldsi := TRVSeqItemInfo(rve.GetCurrentItem); + si := TRVSeqItemInfo.Create(rve.RVData); + si.Assign(oldsi); + si.NumberType := TRVSeqType(TMenuItem(Sender).Tag); + tle := rve.TopLevelEditor; + tle.SetSelectionBounds(tle.CurItemNo, 0, tle.CurItemNo, 1); + rve.InsertItem('', si); +end; +{------------------------------------------------------------------------------} +{ Sequences: Reset to... } +procedure TfrmTemplateEditor.mitResetToClick(Sender: TObject); +var s,s2: String; +begin + if rve.CurItemStyle<>rvsSequence then begin + Beep; + exit; + end; + s := IntToStr(TRVSeqItemInfo(rve.GetCurrentItem).StartFrom); + s2 := s; + if InputQuery('Reset','Reset &to:', s2) then begin + if s=s2 then + exit; + ResetCurrentSeqTo(StrToIntDef(s2, 1), True); + end; +end; +{------------------------------------------------------------------------------} +{ Sequences: Continue numbering } +procedure TfrmTemplateEditor.mitContinueClick(Sender: TObject); +begin + ResetCurrentSeqTo(1{<-ignored}, False); +end; +{------------------------------------------------------------------------------} +{ Fields: changing field code and text as an editing operation} +procedure TfrmTemplateEditor.ChangeFieldTo(const FieldCode, DisplayString: String); +var oldli, li: TRVLabelItemInfo; + tle: TCustomRichViewEdit; +begin + if rve.CurItemStyle<>rvsLabel then begin + Beep; + exit; + end; + // creating a new item with the desired properties and inserting it + // instead the old item + oldli := TRVLabelItemInfo(rve.GetCurrentItem); + li := TRVLabelItemInfo.Create(rve.RVData); + li.Assign(oldli); + li.Text := DisplayString; + // assign does not copy tag, + // so it's not necessary to call StrDispose(PChar(li.Tag)) + li.Tag := Integer(StrNew(PChar(FieldCode))); + tle := rve.TopLevelEditor; + tle.SetSelectionBounds(tle.CurItemNo, 0, tle.CurItemNo, 1); + rve.InsertItem('', li); +end; +{------------------------------------------------------------------------------} +{ Fields: changing the current field to "name" } +procedure TfrmTemplateEditor.mitToNameClick(Sender: TObject); +begin + ChangeFieldTo('name', ''); +end; +{------------------------------------------------------------------------------} +{ Fields: changing the current field to "code" } +procedure TfrmTemplateEditor.mitToCodeClick(Sender: TObject); +begin + ChangeFieldTo('code', ''); +end; +{------------------------------------------------------------------------------} +{ Fields: checking items in pmFields before it is displayed } +procedure TfrmTemplateEditor.pmFieldPopup(Sender: TObject); +begin + if rve.CurItemStyle<>rvsLabel then begin + Beep; + abort; + end; + mitToName.Checked := PChar(rve.GetCurrentTag)='name'; + mitToCode.Checked := PChar(rve.GetCurrentTag)='code'; +end; +{------------------------------------------------------------------------------} +{ Date field: displaying calendar popup } +procedure TfrmTemplateEditor.rveSmartPopupClick(Sender: TCustomRichView; + Button: TCustomControl); +var CalendarForm: TfrmPopup; + pt: TPoint; + FieldCode: String; + li: TRVLabelItemInfo; +begin + if rve.CurItemStyle<>rvsLabel then begin + Beep; + exit; + end; + li := TRVLabelItemInfo(rve.GetCurrentItem); + FieldCode := PChar(li.Tag); + if Copy(FieldCode, 1, 5)<>'date:' then begin + Beep; + exit; + end; + CalendarForm := TfrmPopup.Create(Application); + CalendarForm.cal.Date := StrToInt(Copy(FieldCode, 6, Length(FieldCode))); + pt.X := 0; + pt.Y := Button.Height; + pt := Button.ClientToScreen(pt); + if pt.X+CalendarForm.Width>Screen.Width then + pt.X := Screen.Width-CalendarForm.Width; + if pt.Y+CalendarForm.Height>Screen.Height then + pt.Y := Screen.Height-CalendarForm.Height; + CalendarForm.Left := pt.X; + CalendarForm.Top := pt.Y; + CalendarForm.Show; + rve.SmartPopupProperties.SetButtonState(True); +end; +{------------------------------------------------------------------------------} +{ Date field: this method is called by the calendar form } +procedure TfrmTemplateEditor.ChangeDate(Date: TDate); +begin + ChangeFieldTo('date:'+FloatToStr(Date), '<'+DateToStr(Date)+'>'); +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.dpr new file mode 100644 index 0000000..91ceaba --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.dpr @@ -0,0 +1,14 @@ +program TemplateEditorLI; + +uses + Forms, + TEMainFrm in 'TEMainFrm.pas' {frmTemplateEditor}, + PopupFrm in 'PopupFrm.pas' {frmPopup}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmTemplateEditor, frmTemplateEditor); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.dproj new file mode 100644 index 0000000..ad2d1a6 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.dproj @@ -0,0 +1,110 @@ + + + {B6DA4BDD-10A1-431A-8CCA-ED85877C5064} + TemplateEditorLI.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + TemplateEditorLI.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
frmTemplateEditor
+
+ +
frmPopup
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + TemplateEditorLI.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.res new file mode 100644 index 0000000..08ba56e Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/TemplateEditorLI.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/template.rvf b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/template.rvf new file mode 100644 index 0000000..80930cc Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge-LabelItems/template.rvf differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/Customers.txt b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/Customers.txt new file mode 100644 index 0000000..a264d2f --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/Customers.txt @@ -0,0 +1,37 @@ +18 +cid0001 +Roberto Nelson +cid0002 +Bruce Young +cid0003 +Kim Lambert +cid0004 +Leslie Johnson +cid0005 +Phil Forest +cid0006 +K.J. Weston +cid0007 +Lee Terry +cid0008 +Stewart Hall +cid0009 +Katherine Young +cid0010 +Chris Papadopulos +cid0011 +Pete Fisher +cid0012 +Ann Bennet +cid0013 +Roger De Sousa +cid0014 +Janet Boldwin +cid0015 +Roger Reeves +cid0016 +Willie Stansbury +cid0017 +Leslie Phong +cid0018 +Ashok Ramanathan \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MMMainFrm.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MMMainFrm.dfm new file mode 100644 index 0000000..3cabcf9 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MMMainFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MMMainFrm.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MMMainFrm.pas new file mode 100644 index 0000000..134de55 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MMMainFrm.pas @@ -0,0 +1,174 @@ +unit MMMainFrm; +{------------------------------------------------------------------------------} +{ + Very simple "mail merging" application. + It loads a template from TEMPLATE.RVF, and data from CUSTOMERS.TXT. + Template can be modified with another application in this directory: + TEMPLATEEDITOR. + + Main settings: + - since field names are stored in tags (see the help topic about tags) + as strings, rvoTagsArePChars is included in Options of rvTemplate and + rvOutput. + - this demo uses a predefined set of styles (right click richviews, + choose "Settings" from the context menu, choose "Use a predefined + set of styles"). That means - only two text styles (see below) will be used. + - rvOutput.Style = rvsOutput, rvTemplate.Style = rvsTemplate. + - rvsTemplate has absolutely the same set of TextStyles as in template editor + (0th style - normal text, 1th - field code) + - rvsOutput has a similar set of styles, but 1th text style looks like + normal text. +} +{------------------------------------------------------------------------------} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, StdCtrls, RVStyle, RVTable, CRVData; + +type + TForm1 = class(TForm) + ListBox1: TListBox; + rvOutput: TRichView; + rvsOutput: TRVStyle; + rvsTemplate: TRVStyle; + rvTemplate: TRichView; + Label1: TLabel; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + procedure ListBox1Click(Sender: TObject); + procedure FormDestroy(Sender: TObject); + private + { Private declarations } + Codes: TStringList; + procedure LoadCustomers; + function GetFieldValueFromDatabase(const FieldName: String): String; + procedure FillFields(RVData: TCustomRVData); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +{ TForm1 } + +{------------------------------------------------------------------------------} +{ + This procedure loads file CUSTOMERS.TXT into: + - ListBox1.Items (<- names of customers) + - Codes (<- codes of customers) + + In real applications data can be stored in some database +} +procedure TForm1.LoadCustomers; +var F: TextFile; + i, Count: Integer; + s: String; +begin + AssignFile(F, ExtractFilePath(Application.ExeName)+'Customers.txt'); + Reset(F); + try + Readln(F, Count); + for i := 0 to Count-1 do + begin + Readln(F, s); + Codes.Add(s); + Readln(F, s); + ListBox1.Items.Add(Trim(s)) + end; + finally + CloseFile(F); + end; +end; +{------------------------------------------------------------------------------} +{ + Initialization: loading template into rvOutput, loading customers data. +} +procedure TForm1.FormCreate(Sender: TObject); +begin + Codes := TStringList.Create; + LoadCustomers; + rvTemplate.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + rvTemplate.Format; + if ListBox1.Items.Count>0 then + begin + ListBox1.ItemIndex := 0; + ListBox1.OnClick(nil); + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FormDestroy(Sender: TObject); +begin + Codes.Free; + Codes := nil; +end; +{------------------------------------------------------------------------------} +{ + This function returns a current field value by the field name. + In this example, we have two fields: "name" and "code" +} +function TForm1.GetFieldValueFromDatabase(const FieldName: String): String; +var Index: Integer; +begin + Index := ListBox1.ItemIndex; + if FieldName='name' then + Result := ListBox1.Items[Index] + else if FieldName='code' then + Result := Codes[Index] + else + Result := '{error: illegal field code}'; +end; +{------------------------------------------------------------------------------} +{ + This function iterates through all items in RVData, and if tag of + some text contains non-empty text, it calls GetFieldValueFromDatabase(tag) and + replace this text with returned value. + You can move this function to your application unchanged. + Initial call: FillFields(RichView.RVData); +} +procedure TForm1.FillFields(RVData: TCustomRVData); +var i,r,c: Integer; + table: TRVTableItemInfo; + FieldName: String; +begin + for i := 0 to RVData.ItemCount-1 do + if RVData.GetItemStyle(i)=rvsTable then + begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + FillFields(table.Cells[r,c].GetRVData); + table.Changed; + end + else if RVData.GetItemStyle(i)>=0 then + begin + FieldName := PChar(RVData.GetItemTag(i)); + if FieldName<>'' then + RVData.SetItemText(i, GetFieldValueFromDatabase(FieldName)); + end; +end; +{------------------------------------------------------------------------------} +{ + On highlighting a new list box item: updating document in rvOutput. +} +procedure TForm1.ListBox1Click(Sender: TObject); +begin + rvOutput.Clear; + if ListBox1.ItemIndex>=0 then + begin + rvOutput.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + FillFields(rvOutput.RVData); + rvOutput.Format; + end; +end; + + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MailMerge.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MailMerge.dpr new file mode 100644 index 0000000..6a2b062 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MailMerge.dpr @@ -0,0 +1,13 @@ +program MailMerge; + +uses + Forms, + MMMainFrm in 'MMMainFrm.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MailMerge.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MailMerge.dproj new file mode 100644 index 0000000..f9ece7d --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MailMerge.dproj @@ -0,0 +1,99 @@ + + + {55775E68-8F9A-4A27-AC3F-61E27B2A3F91} + MailMerge.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + MailMerge.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + MailMerge.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MailMerge.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MailMerge.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/MailMerge.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TEMainFrm.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TEMainFrm.dfm new file mode 100644 index 0000000..e234195 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TEMainFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TEMainFrm.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TEMainFrm.pas new file mode 100644 index 0000000..5aefabf --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TEMainFrm.pas @@ -0,0 +1,90 @@ +unit TEMainFrm; + +{------------------------------------------------------------------------------} +{ + Very simple template editor for "mail merging" + It loads and saves a template in TEMPLATE.RVF. + + See mail merging application in the same directory - MAILMERGE. + + Main settings: + - since field names are stored in tags (see the help topic about tags) + as strings, rvoTagsArePChars is included in Options of rve. + - this demo uses a predefined set of styles (right click richviews, + choose "Settings" from the context menu, choose "Use a predefined + set of styles"). That means - only two text styles (see below) will be used. + - rve.Style has two styles: + 0th style - normal text, + 1st - field code (bold, with background, protected) +} +{------------------------------------------------------------------------------} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, StdCtrls, ExtCtrls; + +type + TForm1 = class(TForm) + Panel1: TPanel; + Button1: TButton; + Button2: TButton; + rve: TRichViewEdit; + RVStyle1: TRVStyle; + Button4: TButton; + procedure Button4Click(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + rve.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + rve.Format; +end; + +procedure TForm1.Button4Click(Sender: TObject); +begin + rve.SaveRVF(ExtractFilePath(Application.ExeName)+'template.rvf', False); +end; + +{------------------------------------------------------------------------------} +{ + Inserting a field "code". Text of this item does not matter, but tag + is important and equal to "code". + Since rvprDoNotAutoSwitch is in Protection of the 1st text style, + a current style will be switched back to previous value after insertion. +} +{------------------------------------------------------------------------------} +procedure TForm1.Button1Click(Sender: TObject); +begin + rve.CurTextStyleNo := 1; + rve.InsertStringTag('Code', Integer(StrNew('code'))); + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +{ + Inserting a field "name". +} +{------------------------------------------------------------------------------} +procedure TForm1.Button2Click(Sender: TObject); +begin + rve.CurTextStyleNo := 1; + rve.InsertStringTag('Name', Integer(StrNew('name'))); + rve.SetFocus; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TemplateEditor.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TemplateEditor.dpr new file mode 100644 index 0000000..0f7f9fe --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TemplateEditor.dpr @@ -0,0 +1,13 @@ +program TemplateEditor; + +uses + Forms, + TEMainFrm in 'TEMainFrm.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TemplateEditor.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TemplateEditor.dproj new file mode 100644 index 0000000..534a5e3 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TemplateEditor.dproj @@ -0,0 +1,99 @@ + + + {F5784B82-F022-4CE1-ACD9-E60D441485F1} + TemplateEditor.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + TemplateEditor.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + TemplateEditor.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TemplateEditor.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TemplateEditor.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/TemplateEditor.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/template.rvf b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/template.rvf new file mode 100644 index 0000000..ebffcc6 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge/template.rvf @@ -0,0 +1,9 @@ +-8 1 2 +0 1 0 0 0 0 +This is +1 1 -1 1 0 name +Name +0 1 0 4 0 0 +and code is +1 1 -1 1 0 code +Code diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/Database.MB b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/Database.MB new file mode 100644 index 0000000..ddd9eb0 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/Database.MB differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/Database.PX b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/Database.PX new file mode 100644 index 0000000..8d310e2 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/Database.PX differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/Database.db b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/Database.db new file mode 100644 index 0000000..0f0c88f Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/Database.db differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainAppFrm.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainAppFrm.dfm new file mode 100644 index 0000000..d37ed94 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainAppFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainAppFrm.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainAppFrm.pas new file mode 100644 index 0000000..bb188d4 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainAppFrm.pas @@ -0,0 +1,146 @@ +{==============================================================================} +{ + Mail merge application: part 2 - displaying processed template. + + How it works: + - RVStyle2 has two predefined styles (the same as in the template editor; + 1th text style is reserved for fields). + - RichView1 and RichView2 are linked to the same RVStyle (RVStyle2) + - Template is loaded in RichView1 (styles can be added dynamically in RVStyle2) + - RichView1 is scanned for fields. When field is found, it is deleted, + and its value is inserted in its place: + * field value is loaded in invisible RichView2 (styles can be added in RVStyle2) + * contents of RichView2 is inserted in the proper place of RichView1. +} +{==============================================================================} + +unit MainAppFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, RVStyle, DB, DBTables, CRVData, CRVFData, + RVItem, RVTable; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RichView2: TRichView; + Table1: TTable; + RVStyle2: TRVStyle; + procedure FormCreate(Sender: TObject); + private + procedure ReplaceFields(RVData: TCustomRVFormattedData); + { Private declarations } + public + { Public declarations } + function LoadData(const Code: String): TMemoryStream; + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // Loading template with fields + RichView1.LoadRVF(ExtractFilePath(Application.ExeName)+'Template.rvf'); + // RVData.InsertFromStream (we will call it later) does not support + // style merging. So changing mode to style ignoring: + RichView1.RVFParaStylesReadMode := rvf_sIgnore; + RichView1.RVFTextStylesReadMode := rvf_sIgnore; + // Replace styles with values + ReplaceFields(RichView1.RVData); + RichView1.Format; +end; + +procedure TForm1.ReplaceFields(RVData: TCustomRVFormattedData); +var i,j: Integer; + Stream: TMemoryStream; + Dummy1: TColor; + Dummy2, Dummy3: Pointer; + ParaNo: Integer; + BR, ContinuePara: Boolean; + table: TRVTableItemInfo; + r,c: Integer; +begin + Dummy1 := clNone; + Dummy2 := nil; + Dummy3 := nil; + i := RVData.ItemCount-1; + while i>=0 do begin + case RVData.GetItemStyle(i) of + 1: // the first text style is used for fields + begin + // storing parameters of deleted items + ParaNo := RVData.GetItemPara(i); + BR := RVData.GetItem(i).BR; + ContinuePara := RVData.GetItem(i).SameAsPrev; + // loading field value in the stream + Stream := LoadData(RVData.GetItemText(i)); + if Stream<>nil then begin + // deleting the field code + RVData.DeleteItems(i,1); + // inserting the field value + RVData.InsertRVFFromStream(Stream, i, Dummy1, Dummy2, Dummy3, False); + // applying stored parameters to the inserted items + if (i>0) and (RVData.GetItemStyle(i-1)=rvsListMarker) and + (RVData.GetItemStyle(i)=rvsListMarker) then + RVData.DeleteItems(i, 1); + for j := i to RVData.ItemCount-1 do begin + if (i=j) then begin + if RVData.GetItem(j).GetBoolValue(rvbpFullWidth) then begin + if (i>0) and (RVData.GetItemStyle(i-1)=rvsListMarker) then begin + dec(i); + RVData.DeleteItems(i, 1); + end; + break; + end; + RVData.GetItem(j).SameAsPrev := ContinuePara; + if BR then + RVData.GetItem(j).BR := True; + end; + if (j>i) and RVData.IsParaStart(j) then + break; + RVData.GetItem(j).ParaNo := ParaNo; + end; + Stream.Free; + end; + end; + rvsTable: + begin + // recursive call for table cells + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + ReplaceFields(table.Cells[r,c]); + end; + end; + dec(i); + end; + RVData.Normalize; +end; + +// Loading field code +function TForm1.LoadData(const Code: String): TMemoryStream; +begin + Result := nil; + if not Table1.Locate('Code', Code, []) then + exit; + Result := TMemoryStream.Create; + TBlobField(Table1.FieldByName('Data')).SaveToStream(Result); + Result.Position := 0; + RichView2.Clear; + RichView2.InsertRVFFromStream(Result, 0); // inserting will merge styles; + // RichView1 and RichView2 have the same collections of styles + Result.Clear; + RichView2.SaveRVFToStream(Result, False); + Result.Position := 0; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainApplication.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainApplication.dpr new file mode 100644 index 0000000..c547aed --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainApplication.dpr @@ -0,0 +1,13 @@ +program MainApplication; + +uses + Forms, + MainAppFrm in 'MainAppFrm.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainApplication.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainApplication.dproj new file mode 100644 index 0000000..0e3fa49 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainApplication.dproj @@ -0,0 +1,102 @@ + + + {64926D16-EF8C-4EA7-9F80-C2B6F9BF6863} + MainApplication.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + MainApplication.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + MainApplication.dpr + + + False + True + False + + + D:\DB Demo\MailMerge2\ + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainApplication.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainApplication.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/MainApplication.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TEFrm.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TEFrm.dfm new file mode 100644 index 0000000..264e347 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TEFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TEFrm.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TEFrm.pas new file mode 100644 index 0000000..b38b34c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TEFrm.pas @@ -0,0 +1,101 @@ +{==============================================================================} +{ + Mail merge application: part 1 - template editor. + Editing template and data for fields. + + Template: RVStyle for template (RVStyle2) has two text styles + (0-th for normal text, 1 - for fields (with special Protection options) + Other styles can be added dynamically (right-click editor in Delphi, + "Settings" in the context menu). + Template is stored in Template.rvf. + + Data for fields: stored in Database.db. + There are two fields: + - Code - string field + - Data - rvf field. + Styles can be added dynamically in Data editor. +} +{==============================================================================} +unit TEFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, DB, DBTables, RVScroll, RichView, RVEdit, DBRV, ComCtrls, + StdCtrls, Mask, DBCtrls, RVStyle, ExtCtrls; + +type + TfrmTE = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + DBRichViewEdit1: TDBRichViewEdit; + DataSource1: TDataSource; + Table1: TTable; + DBNavigator1: TDBNavigator; + RVStyle1: TRVStyle; + DBEdit1: TDBEdit; + Label1: TLabel; + Label2: TLabel; + OpenDialog1: TOpenDialog; + RVStyle2: TRVStyle; + RichViewEdit1: TRichViewEdit; + Button1: TButton; + Label3: TLabel; + procedure DataSource1DataChange(Sender: TObject; Field: TField); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure Button1Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmTE: TfrmTE; + +implementation + +{$R *.dfm} + +procedure TfrmTE.DataSource1DataChange(Sender: TObject; Field: TField); +begin + if Table1.RecordCount=0 then + Label2.Caption := '(empty)' + else if Table1.RecNo<1 then + Label2.Caption := '(new)' + else + Label2.Caption := Format('Record %d of %d', [Table1.RecNo, Table1.RecordCount]); +end; + +procedure TfrmTE.FormCreate(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit1.LoadRVF(ExtractFilePath(Application.ExeName)+'template.rvf'); + RichViewEdit1.Format; +end; + +procedure TfrmTE.FormClose(Sender: TObject; var Action: TCloseAction); +begin + if Table1.State in [dsEdit, dsInsert] then + Table1.Post; + RichViewEdit1.SaveRVF(ExtractFilePath(Application.ExeName)+'template.rvf', False); +end; + +procedure TfrmTE.Button1Click(Sender: TObject); +var s: String; +begin + s := ''; + if InputQuery('Insert Field', 'Field code:', s) then begin + if s='' then + exit; + // s must be equal to one of Codes in the database + RichViewEdit1.SetFocus; + RichViewEdit1.CurTextStyleNo := 1; + RichViewEdit1.InsertText(s, False); + end; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TemplateEditor2.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TemplateEditor2.dpr new file mode 100644 index 0000000..1c4e040 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TemplateEditor2.dpr @@ -0,0 +1,13 @@ +program TemplateEditor2; + +uses + Forms, + TEFrm in 'TEFrm.pas' {frmTE}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmTE, frmTE); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TemplateEditor2.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TemplateEditor2.dproj new file mode 100644 index 0000000..d2f7291 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TemplateEditor2.dproj @@ -0,0 +1,102 @@ + + + {F572F595-A0F4-4DE8-B29B-B021C7A40CA9} + TemplateEditor2.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + TemplateEditor2.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
frmTE
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + TemplateEditor2.dpr + + + False + True + False + + + D:\DB Demo\MailMerge2\ + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TemplateEditor2.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TemplateEditor2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/TemplateEditor2.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/template.rvf b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/template.rvf new file mode 100644 index 0000000..dd4a247 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/MailMerge2/template.rvf differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Spreadsheet.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Spreadsheet.dpr new file mode 100644 index 0000000..f9755b9 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Spreadsheet.dpr @@ -0,0 +1,13 @@ +program Spreadsheet; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Spreadsheet.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Spreadsheet.dproj new file mode 100644 index 0000000..51ce495 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Spreadsheet.dproj @@ -0,0 +1,99 @@ + + + {531CBA07-2D53-4023-AAF3-F4D860ECC78B} + Spreadsheet.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Spreadsheet.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Spreadsheet.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Spreadsheet.res b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Spreadsheet.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Spreadsheet.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Unit1.dfm new file mode 100644 index 0000000..cf03729 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Unit1.pas new file mode 100644 index 0000000..6fac129 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Fields/Spreadsheet/Unit1.pas @@ -0,0 +1,229 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, RVEdit, RVStyle, ExtCtrls, RVTable, StdCtrls, Clipbrd; + +{------------------------------------------------------------------------------} +{ + Notes: + 1. Making sure that all cells contain one item (and only one) + - adding rvpaoDoNotWantReturns in Options of all paragraph styles + - allowing to paste only one line of plain text (see OnPaste) + 2. Protecting autocalculated text + - the 1st paragraph style ("Read-Only") has rvpaoReadOnly + - RichView allows to delete read-only paragraphs when they are parts + of lager selection (for example, multicell selection) + An event, allowing to avoid this problem, was added in version 1.6.11 + (OnCellEditing) + 3. Table cannot be deleted because it is added in read-only paragraph. + 4. EConvertError exception occurs if Income column contains non numeric data. + If running in Delphi IDE, Delphi stops on exception. Just click OK and + press F9 to continue. + 5. AcceptDragDropFormats is set to [] +} +{------------------------------------------------------------------------------} + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + rve: TRichViewEdit; + Panel1: TPanel; + Button1: TButton; + Button2: TButton; + procedure FormCreate(Sender: TObject); + procedure rveChange(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure rvePaste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); + private + { Private declarations } + procedure Calculate; + procedure OnCellEditing(Sender: TRVTableItemInfo; + Row, Col : Integer; + Automatic: Boolean; + var AllowEdit: Boolean); + public + { Public declarations } + table: TRVTableItemInfo; + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var r,c: Integer; +begin + table := TRVTableItemInfo.CreateEx(5,4, rve.RVData); + table.BorderWidth := 1; + table.CellBorderWidth := 1; + table.CellBorderStyle := rvtbColor; + table.CellBorderColor := clBtnFace; + table.BorderStyle := rvtbColor; + + table.OnCellEditing := OnCellEditing; + + // Each cell initially contains one empty text item. Deleting it + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + table.Cells[r,c].Clear; + + // First Row + table.Cells[0,0].AddNL('Name',1,1); + table.Cells[0,1].AddNL('Income',1,1); + table.Cells[0,2].AddNL('Tax Rate',1,1); + table.Cells[0,3].AddNL('Tax',1,1); + + // Last Row + r := table.Rows.Count-1; + table.Cells[r,0].AddNL('TOTAL:',1,1); + table.Cells[r,1].AddNL('',1,1); + table.Cells[r,2].AddNL('',1,1); + table.Cells[r,3].AddNL('',1,1); + + // First Column + table.Cells[1,0].AddNL('John Smith', 0,0); + table.Cells[2,0].AddNL('John Brown', 0,0); + table.Cells[3,0].AddNL('Phil Forest', 0,0); + + // Second Column + table.Cells[1,1].AddNL('2000', 0,0); + table.Cells[2,1].AddNL('2500', 0,0); + table.Cells[3,1].AddNL('1000', 0,0); + + for r := 1 to table.Rows.Count-2 do begin + table.Cells[r,2].Color := clSilver; + table.Cells[r,3].Color := clSilver; + table.Cells[r,2].AddNL('0.20',0,1); + table.Cells[r,3].AddNL('',0,1); + end; + + for c := 0 to table.Rows[0].Count-1 do begin + table.Cells[0,c].Color := clSilver; + table.Cells[table.Rows.Count-1,c].Color := clSilver; + end; + + DecimalSeparator := '.'; + + Calculate; + + rve.InsertItem('Spreadsheet', table); + rve.ApplyParaStyle(1); // read-only style; + +end; + + +procedure TForm1.Calculate; +var r: Integer; + s: String; + total, totaltax, val, valtax: Double; + totalOK: Boolean; +begin + // Last Column + totalOK := True; + total := 0.0; + totaltax := 0.0; + for r := 1 to table.Rows.Count-2 do begin + try + // val <- income + val := StrToFloat(table.Cells[r,1].GetRVData.GetItemText(0)); + // valtax <- income * tax rate + valtax := val*StrToFloat(table.Cells[r,2].GetRVData.GetItemText(0)); + s := FloatToStr(valtax); + total := total + val; + totaltax := totaltax + valtax; + except + s := '?'; + totalOK := False; + end; + table.Cells[r,3].GetRVData.SetItemText(0,s); + end; + + if totalOK then begin + table.Cells[table.Rows.Count-1,3].GetRVData.SetItemText(0, FloatToStr(totaltax)); + table.Cells[table.Rows.Count-1,1].GetRVData.SetItemText(0, FloatToStr(total)); + end + else begin + table.Cells[table.Rows.Count-1,3].GetRVData.SetItemText(0, '?'); + table.Cells[table.Rows.Count-1,1].GetRVData.SetItemText(0, '?'); + end; + table.Changed; +end; + +// OnChange: recalculating +procedure TForm1.rveChange(Sender: TObject); +begin + Calculate; + rve.Reformat; + if rve.InplaceEditor<>nil then + rve.InplaceEditor.Invalidate; + // Some ideas: + // - you can use table.GetEditedCell to get a cell which was changed +end; + +// Adding a new row +procedure TForm1.Button1Click(Sender: TObject); +var ItemNo, Data, r,c: Integer; +begin + ItemNo := rve.GetItemNo(table); + rve.BeginItemModify(ItemNo, Data); + r := table.Rows.Count-1; + table.InsertRows(r, 1, -1); + + for c := 1 to table.Rows[r].Count-1 do + table.Cells[r,c].Clear; + + table.Cells[r,1].AddNL('0', 0,0); + table.Cells[r,2].AddNL('0.20', 0,1); + table.Cells[r,3].AddNL('', 0,1); + table.Cells[r,2].Color := clSilver; + table.Cells[r,3].Color := clSilver; + + rve.EndItemModify(ItemNo, Data); + rve.Change; +end; + +// Deleting a row with caret +procedure TForm1.Button2Click(Sender: TObject); +var ItemNo, Data, r,c: Integer; +begin + if (table.GetEditedCell(r,c)<>nil) and (r<>0) and (r<>table.Rows.Count-1) then begin + ItemNo := rve.GetItemNo(table); + rve.BeginItemModify(ItemNo, Data); + table.DeleteRows(r,1,False); + rve.EndItemModify(ItemNo, Data); + rve.Change; + end + else + Beep; +end; + +// OnPaste: allowing to paste only one line of text +procedure TForm1.rvePaste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); +var s: String; +begin + if Clipboard.HasFormat(CF_UNICODETEXT) then begin + s := Clipboard.AsText; + if (Pos(#13,s)=0) and (Pos(#10,s)=0) then + rve.InsertText(s, False); + end; + DoDefault := False; +end; + +procedure TForm1.OnCellEditing(Sender: TRVTableItemInfo; Row, Col: Integer; + Automatic: Boolean; var AllowEdit: Boolean); +begin + if Automatic then + AllowEdit := (Row<>0) and (Row<>table.Rows.Count-1) and (Col<2); +end; + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/DragImg.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/DragImg.dpr new file mode 100644 index 0000000..c4feced --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/DragImg.dpr @@ -0,0 +1,13 @@ +program DragImg; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/DragImg.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/DragImg.dproj new file mode 100644 index 0000000..d4649d9 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/DragImg.dproj @@ -0,0 +1,99 @@ + + + {BD9FC8DA-39AB-49C9-983B-BFBE7126C445} + DragImg.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + DragImg.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + DragImg.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/DragImg.res b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/DragImg.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/DragImg.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/Unit1.dfm new file mode 100644 index 0000000..8923340 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/Unit1.pas new file mode 100644 index 0000000..a9cfd80 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/DragImg/Unit1.pas @@ -0,0 +1,113 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, ExtCtrls, RVStyle, RVScroll, RichView, RVEdit, CRVFData, RVTable; + +const WM_SETCARETPOS = WM_USER+10; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Image1: TImage; + Image2: TImage; + Image3: TImage; + procedure RichViewEdit1DragOver(Sender, Source: TObject; X, Y: Integer; + State: TDragState; var Accept: Boolean); + procedure RichViewEdit1DragDrop(Sender, Source: TObject; X, + Y: Integer); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + procedure WMSetCaretPos(var Msg: TMessage); message WM_SETCARETPOS; + public + { Public declarations } + procedure MoveCaretTo(X,Y: Integer); + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.RichViewEdit1DragOver(Sender, Source: TObject; X, + Y: Integer; State: TDragState; var Accept: Boolean); +begin + Accept := Source is TImage; + // We cannot create/destroy inplace editors for cells just + // in OnDragOver, so we position caret in OnWMSetCaretPos + if Accept then + PostMessage(Handle, WM_SETCARETPOS, X,Y); +end; + +procedure TForm1.WMSetCaretPos(var Msg: TMessage); +begin + MoveCaretTo(Msg.WParam, Msg.LParam); +end; + +procedure TForm1.MoveCaretTo(X, Y: Integer); +var RVData: TCustomRVFormattedData; + ItemNo, Offs: Integer; +begin + inc(X, RichViewEdit1.HScrollPos); + inc(Y, RichViewEdit1.VScrollPos*RichViewEdit1.VSmallStep); + RichViewEdit1.GetItemAt(X,Y,RVData,ItemNo,Offs, False); + RVData := RVData.Edit as TCustomRVFormattedData; + if ItemNo<0 then + exit; + RVData.SetSelectionBounds(ItemNo, Offs, ItemNo, Offs); + RVData.Invalidate; +end; + +procedure TForm1.RichViewEdit1DragDrop(Sender, Source: TObject; X, + Y: Integer); +var bmp: TBitmap; +begin + // Dragging is finished. Inserting picture. + MoveCaretTo(X, Y); + bmp := TBitmap.Create; + bmp.Assign(TImage(Source).Picture.Bitmap); + RichViewEdit1.InsertPicture('', bmp, rvvaBaseLine); +end; + +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; + table: TRVTableItemInfo; +begin + RichViewEdit1.Clear; + RichViewEdit1.AddNL( + 'This demo shows dragging TImage to TRichViewEdit using VCL drag&drop procedures.', + 2,0); + RichViewEdit1.AddNL( + 'TRichViewEdit has its own drag&drop implementation: '+ + 'you can drag inside TRichViewEdit, '+ + 'from TRichViewEdit to another window/application, '+ + 'from another window/application to TRichViewEdit.', + 2,0); + for i := 0 to 5 do + RichViewEdit1.AddNL( + 'Drag images from the right and drop them here',0,0); + + table := TRVTableItemInfo.CreateEx(1,2, RichViewEdit1.RVData); + table.CellBorderWidth := 1; + table.BorderWidth := 1; + table.Cells[0,0].Clear; + table.Cells[0,0].AddNL('Drag images from the right and drop them here', + 0,0); + table.Cells[0,1].Clear; + table.Cells[0,1].AddNL('Drag images from the right and drop them here', + 0,0); + RichViewEdit1.AddItem('', table); + + for i := 0 to 50 do + RichViewEdit1.AddNL('Drag images from the right and drop them here', + 0,0); + RichViewEdit1.Format; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Emoticons.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Emoticons.dpr new file mode 100644 index 0000000..f714934 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Emoticons.dpr @@ -0,0 +1,13 @@ +program Emoticons; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Emoticons.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Emoticons.dproj new file mode 100644 index 0000000..d20bf40 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Emoticons.dproj @@ -0,0 +1,99 @@ + + + {1C4DEA90-AD1C-42FB-A2A0-E82D4768D5E5} + Emoticons.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Emoticons.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Emoticons.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Emoticons.res b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Emoticons.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Emoticons.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Unit1.dfm new file mode 100644 index 0000000..c9ed8ac Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Unit1.pas new file mode 100644 index 0000000..a5fe0de --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/Emoticons/Unit1.pas @@ -0,0 +1,282 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, ImgList, + RVStyle, RVScroll, RichView, RVEdit, ComCtrls, StdCtrls, RVTypes; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + TabSheet3: TTabSheet; + rve1: TRichViewEdit; + RVStyle1: TRVStyle; + Button1: TButton; + Edit1: TEdit; + Button2: TButton; + rv2: TRichView; + rv3: TRichView; + rve4: TRichViewEdit; + Button3: TButton; + Label1: TLabel; + TabSheet4: TTabSheet; + rv5: TRichView; + rve6: TRichViewEdit; + Label2: TLabel; + Button4: TButton; + ImageList1: TImageList; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure rve6KeyPress(Sender: TObject; var Key: Char); + procedure rve6KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rv5RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + private + { Private declarations } + procedure AddWithIcons(rv: TCustomRichView; s: String; StyleNo: Integer; var ParaNo: Integer); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + rve1.Clear; + rve1.AddNL('John: ', 3, 0); + rve1.Add('Funny, very funny :)', 0); + rve1.AddNL('Rob: ', 3, 0); + rve1.Add('I do not think so :(...', 0); + rve1.Format; + + rve4.Clear; + rve4.AddNL('La la la:):):):)', 1, 0); + rve4.Add('La la la:):):):)', 2); + rve4.Add('La la la:):):):)', 0); + rve4.Format; +end; + + +{------------------------------------------------------------------------------} +// Using Search feature of RichViewEdit to insert emotion icons + +procedure TForm1.Button1Click(Sender: TObject); + + procedure SearchAndInsertIcon(const Code: String; ImageIndex: Integer); + begin + rve1.SetSelectionBounds(0, rve1.GetOffsBeforeItem(0), 0, rve1.GetOffsBeforeItem(0)); + while rve1.SearchText(Code, [rvseoDown]) do + rve1.InsertBullet(ImageIndex, ImageList1); + end; + +begin + LockWindowUpdate(rve1.Handle); + try + SearchAndInsertIcon(':)', 0); + SearchAndInsertIcon(':|', 1); + SearchAndInsertIcon(':(', 2); + finally + LockWindowUpdate(0); + end; +end; + +{------------------------------------------------------------------------------} +function GetImageIndex(mouth: Char): Integer; +begin + case mouth of + ')': Result := 0; + '|': Result := 1; + else Result := 2; + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.AddWithIcons(rv: TCustomRichView; s: String; StyleNo: Integer; var ParaNo: Integer); +var s2: String; + p: Integer; +begin + s2 := ''; + while s<>'' do + begin + p := Pos(':', s); // searching for "eyes" + if p=0 then + begin + // not found + rv.AddNL(s2+s, StyleNo, ParaNo); + ParaNo := -1; + exit; + end; + // is it really "eyes"? + if (Length(s)>p) and CharInSet(s[p+1], [')','|','(']) then + begin + // a smile is found + s2 := s2+Copy(s, 1, p-1); + if s2<>'' then + begin + rv.AddNL(s2, StyleNo, ParaNo); + s2 := ''; + ParaNo := -1; + end; + rv.AddBulletEx( '', GetImageIndex(s[p+1]), ImageList1, ParaNo); + ParaNo := -1; + s := Copy(s, p+2, Length(s)); + end + else + begin + // this is not a smile + s2 := Copy(s, 1, p); + s := Copy(s, p+1, Length(s)); + end; + end; + + if s2<>'' then + begin + rv.AddNL(s2, StyleNo, ParaNo); + s2 := ''; + ParaNo := -1; + end; +end; +{------------------------------------------------------------------------------} +// From TEdit +procedure TForm1.Button2Click(Sender: TObject); +var ParaNo: Integer; +begin + if Edit1.Text<>'' then + begin + rv2.AddNL('Me: ',3,0); + ParaNo := -1; // adding to the same line + AddWithIcons(rv2, Edit1.Text, 0, ParaNo); + rv2.FormatTail; + Edit1.Text := ''; + end + else + Beep; +end; +{------------------------------------------------------------------------------} +// From TRichViewEdit with emoticons detection +procedure TForm1.Button3Click(Sender: TObject); +var i: Integer; + ParaNo: Integer; +begin + // this example has the following limitations: + // - non-text will be ignored + // - assumes that styles of rv3 and rve4 are the same + ParaNo := 0; + for i := 0 to rve4.ItemCount-1 do + begin + if rve4.IsFromNewLine(i) then + ParaNo := rve4.GetItemPara(i); + if rve4.GetItemStyle(i)>=0 then + AddWithIcons(rv3, rve4.GetItemText(i), rve4.GetItemStyle(i), ParaNo); + end; + rv3.FormatTail; + rve4.SetFocus; +end; +{------------------------------------------------------------------------------} +// From TRichViewEdit as is +procedure TForm1.Button4Click(Sender: TObject); +var Stream: TMemoryStream; +begin + Stream := TMemoryStream.Create; + rve6.SaveRVFToStream(Stream, False); + Stream.Position := 0; + rv5.InsertRVFFromStream(Stream, rv5.ItemCount); + Stream.Free; + rv5.FormatTail; + rve6.SetFocus; +end; +{------------------------------------------------------------------------------} +// Emoticons autodetection on typing +procedure TForm1.rve6KeyPress(Sender: TObject; var Key: Char); +var + rve: TCustomRichViewEdit; + ItemNo, Offs: Integer; + s: String; + + function GetImageIndex(mouth: Char): Integer; + begin + case mouth of + ')': Result := 0; + '|': Result := 1; + else Result := 2; + end; + end; + +begin + if not CharInSet(Key, [')', '(', '|']) then + exit; + rve := (Sender as TCustomRichViewEdit).TopLevelEditor; + ItemNo := rve.CurItemNo; + if rve.GetItemStyle(ItemNo)<0 then + exit; + Offs := rve.OffsetInCurItem; + s := rve.GetItemText(ItemNo); + if (s='') or (Offs=1) then + exit; + if s[Offs-1]=':' then begin + rve.SetSelectionBounds(ItemNo, Offs-1, ItemNo, Offs); + rve.InsertBullet(GetImageIndex(Key), ImageList1); + Key := #0; + end; +end; +{------------------------------------------------------------------------------} +// BACKSPACE disassembles emoticon +procedure TForm1.rve6KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +var + rve: TCustomRichViewEdit; + ItemNo, Offs: Integer; + + function GetBulletImageIndex: Integer; + var s: TRVAnsiString; + tag: Integer; + il: TCustomImageList; + begin + rve.GetBulletInfo(ItemNo, s, Result, il, tag); + end; + + function GetSmile(ImageIndex: Integer): String; + begin + case ImageIndex of + 0: Result := ':)'; + 1: Result := ':|'; + else Result := ':('; + end; + end; + +begin + if Key<>VK_BACK then + exit; + rve := (Sender as TCustomRichViewEdit).TopLevelEditor; + if rve.SelectionExists then + exit; + ItemNo := rve.CurItemNo; + Offs := rve.OffsetInCurItem; + if (rve.GetItemStyle(ItemNo)=rvsBullet) and (Offs=1) then begin + Key := 0; + rve.SetSelectionBounds(ItemNo, 0, ItemNo, 1); + rve.InsertText(GetSmile(GetBulletImageIndex), False); + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.rv5RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + il := ImageList1; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/SharedImages.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/SharedImages.dpr new file mode 100644 index 0000000..4f9ee8a --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/SharedImages.dpr @@ -0,0 +1,13 @@ +program SharedImages; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/SharedImages.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/SharedImages.dproj new file mode 100644 index 0000000..576f8fe --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/SharedImages.dproj @@ -0,0 +1,99 @@ + + + {F9D762A1-B567-4695-B89E-87195311279E} + SharedImages.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + SharedImages.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + SharedImages.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/SharedImages.res b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/SharedImages.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/SharedImages.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/Unit1.dfm new file mode 100644 index 0000000..b510b63 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/Unit1.pas new file mode 100644 index 0000000..b6a7aae --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/Unit1.pas @@ -0,0 +1,322 @@ +{------------------------------------------------------------------------------- + Working with RVF and RTF files containing shared images. + This demo stores them in the special subdirectory, but you can store them + in a database, etc. + How to save pictures as references in RVF: + rvfoSavePicturesBody is EXCLUDED from RichViewEdit1.RVFOptions. + How to save pictures as references in RTF: + see RichViewEdit1SaveItemToFile. + How to load pictures when reading such RVF files: + see RichViewEdit1RVFPictureNeeded. + How to load pictures when reading such RTF files: + see RichViewEdit1ImportPicture. + + Paths to image file names are stored in rvespImageFileName properties. + Normally, full paths to images are stored there. + In this demo, path is stored relative to the application directory. + Saved RTF and HTML files will be opened normally in other applications + only if they are stored in the application directory. +-------------------------------------------------------------------------------} +{ This is the second version of this demo. + Changes: + - RTF support; + - HTML saving; + - storing file names in rvespImageFileName property instead of item names; + - storing paths relative to the application path instead of storing just + file names (allows external applications to open RTF and HTML files + correctly, if they are saved in the application path) +-------------------------------------------------------------------------------} + +unit Unit1; + +interface + +uses + AnsiStrings, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, RVFuncs, StdCtrls, + CRVData, RVTable, RVItem, RVTypes; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Button1: TButton; + OpenDialog1: TOpenDialog; + Button2: TButton; + Button3: TButton; + OpenDialog2: TOpenDialog; + SaveDialog1: TSaveDialog; + procedure RichViewEdit1RVFPictureNeeded(Sender: TCustomRichView; + Name: String; Tag: Integer; var gr: TGraphic); + procedure Button1Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure RichViewEdit1Copy(Sender: TObject); + procedure RichViewEdit1ImportPicture(Sender: TCustomRichView; + const Location: String; Width, Height: Integer; + var Graphic: TGraphic); + procedure RichViewEdit1SaveItemToFile(Sender: TCustomRichView; + const Path: String; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; Unicode: Boolean; var OutStr: TRVRawByteString; + var DoDefault: Boolean); + private + { Private declarations } + function CopyImageToTheImagesDir(ImageFileName: String; gr: TGraphic): String; + procedure ConvertAllPathsToRelativePaths(RVData: TCustomRVData); + procedure SaveAllUnknownImages(RVData: TCustomRVData); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + Randomize; + OpenDialog2.InitialDir := ExtractFilePath(Application.ExeName); + SaveDialog1.InitialDir := ExtractFilePath(Application.ExeName); + RichViewEdit1.LoadRVF(ExtractFilePath(Application.ExeName)+'demo.rvf'); + RichViewEdit1.Format; +end; +{------------------------------------------------------------------------------} +// RichViewEdit1.OnRVFPictureNeeded +// This event occurs when reading RVF files. +// Image file name is stored in the Name parameter. +// This event load this image from the Images subdirectory. +procedure TForm1.RichViewEdit1RVFPictureNeeded(Sender: TCustomRichView; + Name: String; Tag: Integer; var gr: TGraphic); +var pic: TPicture; +begin + // First time, this event is called with item name (empty) + // Second time, this event is called with rvespImageFileName property + if Name='' then + exit; + Name := ExtractFilePath(Application.ExeName)+Name; // path is relative to the application path + pic := TPicture.Create; + try + try + pic.LoadFromFile(Name); + except + pic.Assign(RVStyle1.InvalidPicture); + end; + gr := RV_CreateGraphics(TGraphicClass(pic.Graphic.ClassType)); + gr.Assign(pic.Graphic); + finally + pic.Free; + end; +end; +{------------------------------------------------------------------------------} +// RichViewEdit1.OnImportPicture +// This event occurs when loading RTF files with external pictures +procedure TForm1.RichViewEdit1ImportPicture(Sender: TCustomRichView; + const Location: String; Width, Height: Integer; var Graphic: TGraphic); +var FileName: String; +begin + FileName := ExtractRelativePath(ExtractFilePath(Application.ExeName), Location); + RichViewEdit1RVFPictureNeeded(Sender, FileName, 0, Graphic); +end; +{------------------------------------------------------------------------------} +// RichViewEdit1.OnSaveItemToFile +// Modifying how pictures are saved in RTF: saving as external pictures +procedure TForm1.RichViewEdit1SaveItemToFile(Sender: TCustomRichView; + const Path: String; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; Unicode: Boolean; var OutStr: TRVRawByteString; + var DoDefault: Boolean); +var s: String; +begin + if (SaveFormat=rvsfRTF) and + ((RVData.GetItemStyle(ItemNo)=rvsPicture) or + (RVData.GetItemStyle(ItemNo)=rvsHotPicture)) then begin + RVData.GetItemExtraStrProperty(ItemNo, rvespImageFileName, s); + OutStr := AnsiStrings.Format('{\field{\*\fldinst INCLUDEPICTURE "%s" \\d }}', + [RVMakeRTFFileNameStr(s, RichViewEdit1.Style.DefCodePage, + rvrtfDuplicateUnicode in RichViewEdit1.RTFOptions)]); + DoDefault := False; + end; +end; +{------------------------------------------------------------------------------} +// Inserting image. +// If this image is not from the Images subdirectory, copying it there +// (under the unique file name) +// Image file name is written in rvespImageFileName +// (relative to the application path) +procedure TForm1.Button1Click(Sender: TObject); +var pic: TPicture; + gr: TGraphic; + ImageName: String; +begin + if OpenDialog1.Execute then begin + try + pic := TPicture.Create; + try + pic.LoadFromFile(OpenDialog1.FileName); + gr := RV_CreateGraphics(TGraphicClass(pic.Graphic.ClassType)); + gr.Assign(pic.Graphic); + // using relative path + ImageName := ExtractRelativePath(ExtractFilePath(Application.ExeName), + CopyImageToTheImagesDir(OpenDialog1.FileName, nil)); + RichViewEdit1.TopLevelEditor.BeginUndoGroup(rvutInsert); + RichViewEdit1.TopLevelEditor.SetUndoGroupMode(True); + try + if RichViewEdit1.InsertPicture('', gr, rvvaBaseline) then + RichViewEdit1.SetCurrentItemExtraStrProperty(rvespImageFileName, ImageName, True); + finally + RichViewEdit1.TopLevelEditor.SetUndoGroupMode(False); + end; + finally + pic.Free; + end; + except + Application.MessageBox('Image loading error', 'Error', 0); + end; + end; +end; +{------------------------------------------------------------------------------} +// Copying the file ImageFileName to the images subdirectory (if gr=nil) +// or saving gr in the images subdirectory. +// Assigning an unique file name. +// Both ImageFileName and returned value are fully qualified paths. +function TForm1.CopyImageToTheImagesDir(ImageFileName: String; gr: TGraphic): String; +var ImagesDir, NewImageFileName, ImageExt: String; + RandomValue: Integer; +begin + ImageFileName := AnsiLowerCase(ImageFileName); + ImagesDir := AnsiLowerCase(ExtractFilePath(Application.ExeName)+'Images\'); + if Pos(ImagesDir,ImageFileName)<>1 then begin + NewImageFileName := ImagesDir+ExtractFileName(ImageFileName); + if FileExists(NewImageFileName) then begin + ImageExt := ExtractFileExt(NewImageFileName); + NewImageFileName := Copy(NewImageFileName, 1, Length(NewImageFileName)-Length(ImageExt)); + RandomValue := Random(MaxInt); + while FileExists(NewImageFileName+IntToStr(RandomValue)+ImageExt) do + inc(RandomValue); + NewImageFileName := NewImageFileName+IntToStr(RandomValue)+ImageExt; + end; + if gr=nil then + CopyFile(PChar(ImageFileName), PChar(NewImageFileName), False) + else + gr.SaveToFile(NewImageFileName); + Result := NewImageFileName; + end + else + Result := ImageFileName; +end; +{------------------------------------------------------------------------------} +// Saving all images that not in the images directory +// Such images can appear when loading or pasting files with images +procedure TForm1.SaveAllUnknownImages(RVData: TCustomRVData); +var i,r,c, Tag: Integer; + VAlign: TRVVAlign; + table: TRVTableItemInfo; + gr: TGraphic; + s: TRVAnsiString; + ImageFileName, Ext: String; +begin + for i := 0 to RVData.ItemCount-1 do + case RVData.GetItemStyle(i) of + rvsPicture, rvsHotPicture: + begin + RVData.GetItemExtraStrProperty(i, rvespImageFileName, ImageFileName); + ImageFileName := ExtractFilePath(Application.ExeName)+ImageFileName; + if not (FileExists(ImageFileName)) then begin + RVData.GetPictureInfo(i, s, gr, VAlign, Tag); + Ext := GraphicExtension(TGraphicClass(gr.ClassType)); + // using relative path + ImageFileName := ExtractRelativePath(ExtractFilePath(Application.ExeName), + CopyImageToTheImagesDir('Image.'+Ext, gr)); + RVData.SetItemExtraStrProperty(i, rvespImageFileName, ImageFileName); + end; + end; + rvsTable: + begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + SaveAllUnknownImages(table.Cells[r,c].GetRVData); + end; + end; +end; +{------------------------------------------------------------------------------} +// After loading from RTF, full file names are assigned to rvespImageFileName +// properties. This procedure is called to convert them to relative paths. +procedure TForm1.ConvertAllPathsToRelativePaths(RVData: TCustomRVData); +var i,r,c: Integer; + table: TRVTableItemInfo; + ImageFileName: String; +begin + for i := 0 to RVData.ItemCount-1 do + case RVData.GetItemStyle(i) of + rvsPicture, rvsHotPicture: + begin + RVData.GetItemExtraStrProperty(i, rvespImageFileName, ImageFileName); + ImageFileName := ExtractRelativePath(ExtractFilePath(Application.ExeName), + ImageFileName); + RVData.SetItemExtraStrProperty(i, rvespImageFileName, ImageFileName); + end; + rvsTable: + begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + ConvertAllPathsToRelativePaths(table.Cells[r,c].GetRVData); + end; + end; +end; +{------------------------------------------------------------------------------} +// Before copying to the clipboard +procedure TForm1.RichViewEdit1Copy(Sender: TObject); +begin + SaveAllUnknownImages(RichViewEdit1.RVData); +end; +{------------------------------------------------------------------------------} +// Loading doc +procedure TForm1.Button3Click(Sender: TObject); +var r: Boolean; +begin + if OpenDialog2.Execute then begin + RichViewEdit1.Clear; + r := False; + case OpenDialog2.FilterIndex of + 1: r := RichViewEdit1.LoadRVF(OpenDialog2.FileName); + 2: begin + r := RichViewEdit1.LoadRTF(OpenDialog2.FileName); + ConvertAllPathsToRelativePaths(RichViewEdit1.RVData); + end; + end; + RichViewEdit1.Format; + if not r then + Application.MessageBox('Document loading error', 'Error', 0); + end; +end; +{------------------------------------------------------------------------------} +// Saving doc +procedure TForm1.Button2Click(Sender: TObject); +var r: Boolean; +begin + if SaveDialog1.Execute then begin + SaveAllUnknownImages(RichViewEdit1.RVData); + r := False; + case SaveDialog1.FilterIndex of + 1: r := RichViewEdit1.SaveRVF(SaveDialog1.FileName, False); + 2: r := RichViewEdit1.SaveRTF(SaveDialog1.FileName, False); + 3: r := RichViewEdit1.SaveHTMLEx(SaveDialog1.FileName, 'Shared Image Demo', + 'img', '', '', '', [rvsoUseCheckpointsNames, rvsoUseItemImageFileNames]); + end; + if not r then + Application.MessageBox('Document saving error', 'Error', 0); + end; +end; + + + + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/demo.rtf b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/demo.rtf new file mode 100644 index 0000000..da011e6 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/demo.rtf @@ -0,0 +1,12 @@ +{\rtf1\ansi\ansicpg0\uc1\deff0\deflang0\deflangfe0{\fonttbl{\f0\fnil Arial;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} + +\uc1 +\pard\fi0\li0\ql\ri0\sb0\sa0\itap0 \plain \f0\fs20 This demo shows how to work with RVF and RTF files containing external images, like this one: +\par {\field{\*\fldinst INCLUDEPICTURE "images\\\\image.bmp" \\d }} +\par \plain \f0\fs20 This image is actually stored in the Images subdirectory (as well as other images that you can paste here). +\par Only one problem is not covered - deleting pictures that are not used by any RVF file. +\par +\par This is the second reference to the same image: +\par {\field{\*\fldinst INCLUDEPICTURE "images\\\\image.bmp" \\d }} +\par \plain \f0\fs20 +\par \par} \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/demo.rvf b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/demo.rvf new file mode 100644 index 0000000..60128a9 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/demo.rvf differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/images/image.bmp b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/images/image.bmp new file mode 100644 index 0000000..11f1929 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/SharedImages/images/image.bmp differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/ToImage.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/ToImage.dpr new file mode 100644 index 0000000..2fe31eb --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/ToImage.dpr @@ -0,0 +1,13 @@ +program ToImage; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/ToImage.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/ToImage.dproj new file mode 100644 index 0000000..00b8651 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/ToImage.dproj @@ -0,0 +1,99 @@ + + + {6C432875-B7B7-4BB1-8DA0-7AE356DA152B} + ToImage.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + ToImage.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + ToImage.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/ToImage.res b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/ToImage.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/ToImage.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/Unit1.dfm new file mode 100644 index 0000000..bf917bf Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/Unit1.pas new file mode 100644 index 0000000..7edbd46 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Graphics/ToImage/Unit1.pas @@ -0,0 +1,112 @@ +{==============================================================================} +{ Example: two ways of drawing RichView document onto Canvas } +{==============================================================================} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ExtCtrls, RVScroll, RichView, RVStyle, ComCtrls, + PtblRV, RVReport; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + RVStyle1: TRVStyle; + RichView1: TRichView; + Image1: TImage; + Button1: TButton; + Image2: TImage; + Button2: TButton; + RVReportHelper1: TRVReportHelper; + Label1: TLabel; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; +begin + // For Example 1 + RichView1.AddNL('This is a line of text',1,1); + for i := 1 to 20 do + RichView1.AddNL('This is a line of text',0,0); + RichView1.Format; + + // For Example 2 + RVReportHelper1.RichView.Style := RVStyle1; + RVReportHelper1.RichView.AddNL('This is a line of text',1,1); + for i := 1 to 20 do + RVReportHelper1.RichView.AddNL('This is a line of text',0,0); +end; + +const VERYLARGEVALUE = $FFFFFFF; + +// Example 1 +procedure TForm1.Button1Click(Sender: TObject); +var wmf: TMetafile; + Canvas: TMetafileCanvas; + Width, Height: Integer; +begin + RichView1.HScrollPos := 0; + RichView1.VScrollPos := 0; + RichView1.Deselect; + RichView1.Invalidate; + Width := RichView1.RVData.DocumentWidth+RichView1.LeftMargin+RichView1.RightMargin; + Height := RichView1.RVData.DocumentHeight; + + wmf := TMetafile.Create; + wmf.Width := Width; + wmf.Height := Height; + + Canvas := TMetafileCanvas.Create(wmf, 0); + Canvas.Brush.Color := clWindow; + Canvas.FillRect(Rect(0,0,Width,Height)); + RichView1.RVData.PaintTo(Canvas, Rect(0,0,VERYLARGEVALUE,VERYLARGEVALUE), + False, False, False, False, 0, 0); + Canvas.Free; + + Image1.Picture.Graphic := wmf; + wmf.Free; +end; + +// Example 2 + +procedure TForm1.Button2Click(Sender: TObject); +var wmf: TMetafile; + Canvas: TMetafileCanvas; +const Width = 200; +begin + RVReportHelper1.Init(Self.Canvas, Width); + while RVReportHelper1.FormatNextPage(VERYLARGEVALUE) do; + + wmf := TMetafile.Create; + wmf.Width := Width; + wmf.Height := RVReportHelper1.EndAt; + + Canvas := TMetafileCanvas.Create(wmf, 0); + RVReportHelper1.DrawPage(1,Canvas,True,RVReportHelper1.EndAt); + Canvas.Free; + + Image2.Picture.Graphic := wmf; + wmf.Free; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.dpr new file mode 100644 index 0000000..576161e --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.dpr @@ -0,0 +1,15 @@ +program CreateHyperlink; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + Unit2 in 'Unit2.pas' {Form2}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.dproj new file mode 100644 index 0000000..2a2bfb9 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.dproj @@ -0,0 +1,102 @@ + + + {57C6DD8A-115F-4783-88DA-2F7A34810398} + CreateHyperlink.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + CreateHyperlink.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ +
Form2
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + CreateHyperlink.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.res b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/CreateHyperlink.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit1.dfm new file mode 100644 index 0000000..e309319 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit1.pas new file mode 100644 index 0000000..acc9308 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit1.pas @@ -0,0 +1,295 @@ +unit Unit1; + +{ Properties: + rvoTagsArePChars is added in Options + rvoCtrlJumps is added in EditorOptions + "Allow adding styles dynamically" in the "Settings" in the context menu +} +{ + This demo shows: + - how to create document with hyperlinks; + - how to make hyperlink from the selected text (hyperlink is blue and underlined); + - how to insert new hyperlinks (when the selection is empty) + - how to remove hyperlinks from the selected text (if user entered empty hyperlink target); + - how to close hyperlinks when user presses Space, Tab or Enter key; + - how to get hypertext style (having all properties of normal style, but + blue, underlined and hypertext), and vice versa. +} + + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, RVEdit, Buttons, ExtCtrls, Unit2, CRVFData, + ShellApi, StdCtrls; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Panel1: TPanel; + SpeedButton1: TSpeedButton; + CheckBox1: TCheckBox; + procedure SpeedButton1Click(Sender: TObject); + procedure RichViewEdit1Jump(Sender: TObject; id: Integer); + procedure FormCreate(Sender: TObject); + procedure CheckBox1Click(Sender: TObject); + procedure RichViewEdit1StyleConversion(Sender: TCustomRichViewEdit; + StyleNo, UserData: Integer; AppliedToText: Boolean; + var NewStyleNo: Integer); + procedure RichViewEdit1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + private + procedure SetTargetToSelection(const Target: String); + function GetTargetFromSelection: String; + procedure ExpandSelectionToHyperlink; + function GetHypertextStyleNo(StyleNo: Integer): Integer; + function GetNonHypertextStyleNo(StyleNo: Integer): Integer; + procedure TerminateHyperlink; + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{ Constants for calling RichViewEdit1.OnStyleConversion } +const CONVERT_TO_HYPERTEXT = 1; + CONVERT_TO_NONHYPERTEXT = 2; + + +procedure TForm1.FormCreate(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit1.AddNL('Select text and click the button. ',0,0); + RichViewEdit1.AddNLTag('Hyperlink example', GetHypertextStyleNo(0), -1, + Integer(StrNew('http://www.trichview.com'))); + RichViewEdit1.Format; +end; +{------------------------------------------------------------------------------} +{ This function sets tags of all selected items. + If Target is an empty string, it sets tags = 0, otherwise tags are pointers + to dynamically allocated copies of Target. } +procedure TForm1.SetTargetToSelection(const Target: String); +var i, StartNo, EndNo, StartOffs, EndOffs: Integer; + rve: TCustomRichViewEdit; +begin + { Important: when working with the selection item indices, always use + TopLevelEditor. } + rve := RichViewEdit1.TopLevelEditor; + { Receiving the range of selected items } + rve.GetSelectionBounds(StartNo, StartOffs, EndNo, EndOffs, True); + { If nothing is selected, exiting } + if StartNo<0 then + exit; + { May be the outermost items are not included in the selection? In this case, + excluding them } + if StartOffs >= rve.GetOffsAfterItem(StartNo) then + inc(StartNo); + if EndOffs <= rve.GetOffsBeforeItem(EndNo) then + dec(EndNo); + { Changing tags of the selected items } + rve.BeginUndoGroup(rvutTag); + rve.SetUndoGroupMode(True); + if Target<>'' then + for i := StartNo to EndNo do + rve.SetItemTagEd(i, Integer(StrNew(PChar(Target)))) + else + for i := StartNo to EndNo do + rve.SetItemTagEd(i, 0); + rve.SetUndoGroupMode(False); +end; +{------------------------------------------------------------------------------} +{ Returns the first non-empty tag of the selected items } +function TForm1.GetTargetFromSelection: String; +var i, StartNo, EndNo, StartOffs, EndOffs: Integer; + rve: TCustomRichViewEdit; +begin + Result := ''; + rve := RichViewEdit1.TopLevelEditor; + { Receiving the range of selected items } + rve.GetSelectionBounds(StartNo, StartOffs, EndNo, EndOffs, True); + if StartNo<0 then + exit; + if StartOffs >= rve.GetOffsAfterItem(StartNo) then + inc(StartNo); + if EndOffs <= rve.GetOffsBeforeItem(EndNo) then + dec(EndNo); + { Finding the first selected item with non-empty tag } + for i := StartNo to EndNo do + if rve.GetItemTag(i)<>0 then begin + Result := PChar(rve.GetItemTag(i)); + exit; + end; +end; +{------------------------------------------------------------------------------} +{ Expand the selection: if hyperlink is selected partially, selects it completely } +procedure TForm1.ExpandSelectionToHyperlink; +var StartNo, EndNo, StartOffs, EndOffs: Integer; + rve: TCustomRichViewEdit; +begin + rve := RichViewEdit1.TopLevelEditor; + { Receiving a range of selected items } + rve.GetSelectionBounds(StartNo, StartOffs, EndNo, EndOffs, True); + { If no selection exists, using caret position } + if StartNo<0 then begin + StartNo := rve.CurItemNo; + StartOffs := rve.OffsetInCurItem; + EndNo := StartNo; + EndOffs := StartOffs; + end; + if StartOffs >= rve.GetOffsAfterItem(StartNo) then begin + inc(StartNo); + if StartNo=rve.ItemCount then + exit; + end; + if EndOffs <= rve.GetOffsBeforeItem(EndNo) then begin + dec(EndNo); + if EndNo<0 then + exit; + end; + { Expanding the selection to the whole items, if necessary } + if (rve.GetItemStyle(StartNo)>=0) and RVStyle1.TextStyles[rve.GetItemStyle(StartNo)].Jump then + StartOffs := rve.GetOffsBeforeItem(StartNo); + if (rve.GetItemStyle(EndNo)>=0) and RVStyle1.TextStyles[rve.GetItemStyle(EndNo)].Jump then + EndOffs := rve.GetOffsAfterItem(EndNo); + rve.SetSelectionBounds(StartNo, StartOffs, EndNo, EndOffs); + rve.Invalidate; +end; +{------------------------------------------------------------------------------} +{ Clicking "Create Hyperlink" button. If user enters non-empty Target, making + the selection hypertext. If user enters empty Target, making the selection + non-hypertext. Then assigning Target to tags of the selected items. } +procedure TForm1.SpeedButton1Click(Sender: TObject); +var Target: String; +begin + ExpandSelectionToHyperlink; + Target := GetTargetFromSelection; + Form2.Edit1.Text := Target; + if Form2.ShowModal=mrOk then begin + Target := Form2.Edit1.Text; + if RichViewEdit1.SelectionExists then begin + if Target='' then + RichViewEdit1.ApplyStyleConversion(CONVERT_TO_NONHYPERTEXT) + else + RichViewEdit1.ApplyStyleConversion(CONVERT_TO_HYPERTEXT); + SetTargetToSelection(Target); + end + else + if Target='' then + Beep + else begin + RichViewEdit1.CurTextStyleNo := GetHypertextStyleNo(RichViewEdit1.CurTextStyleNo); + RichViewEdit1.InsertStringTag('New link', Integer(StrNew(PChar(Target)))); + end; + end; +end; +{------------------------------------------------------------------------------} +{ Clicking hyperlink. } +procedure TForm1.RichViewEdit1Jump(Sender: TObject; id: Integer); +var URL: String; + RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo); + URL := PChar(RVData.GetItemTag(ItemNo)); + ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOW); +end; +{------------------------------------------------------------------------------} +{ Switching readonly/editing mode. In editing mode, hypertext works only + if holding Ctrl key. } +procedure TForm1.CheckBox1Click(Sender: TObject); +begin + RichViewEdit1.ReadOnly := CheckBox1.Checked; + if CheckBox1.Checked then + RichViewEdit1.Color := clBtnFace + else + RichViewEdit1.Color := clWindow; + SpeedButton1.Enabled := not CheckBox1.Checked; + RichViewEdit1.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Returns the index of text style having the same properties as + RVStyle1.TextStyles[StyleNo], but blue, underlined and hypertext. + If such text style does not exist, creates it and returns its index. } +function TForm1.GetHypertextStyleNo(StyleNo: Integer): Integer; +var fi: TFontInfo; +begin + fi := TFontInfo.Create(nil); + fi.Assign(RVStyle1.TextStyles[StyleNo]); + fi.Color := clBlue; + fi.Style := fi.Style + [fsUnderline]; + fi.Jump := True; + Result := RVStyle1.TextStyles.FindSuchStyle(StyleNo, fi, RVAllFontInfoProperties); + if Result<0 then begin + RVStyle1.TextStyles.Add; + Result := RVStyle1.TextStyles.Count-1; + RVStyle1.TextStyles[Result].Assign(fi); + RVStyle1.TextStyles[Result].Standard := False; + end; +end; +{------------------------------------------------------------------------------} +{ Returns the index of text style having the same properties as + RVStyle1.TextStyles[StyleNo], but with normal color, not underlined and + not hypertext. + If such text style does not exist, creates it and returns its index. } +function TForm1.GetNonHypertextStyleNo(StyleNo: Integer): Integer; +var fi: TFontInfo; +begin + fi := TFontInfo.Create(nil); + fi.Assign(RVStyle1.TextStyles[StyleNo]); + fi.Color := clWindowText; + fi.Style := fi.Style - [fsUnderline]; + fi.Jump := False; + Result := RVStyle1.TextStyles.FindSuchStyle(StyleNo, fi, RVAllFontInfoProperties); + if Result<0 then begin + RVStyle1.TextStyles.Add; + Result := RVStyle1.TextStyles.Count-1; + RVStyle1.TextStyles[Result].Assign(fi); + RVStyle1.TextStyles[Result].Standard := False; + end; +end; +{------------------------------------------------------------------------------} +{ This event is called for all selected text items when you call + ApplyStyleConversion, see SpeedButton1Click } +procedure TForm1.RichViewEdit1StyleConversion(Sender: TCustomRichViewEdit; + StyleNo, UserData: Integer; AppliedToText: Boolean; + var NewStyleNo: Integer); +begin + case UserData of + CONVERT_TO_HYPERTEXT: + NewStyleNo := GetHypertextStyleNo(StyleNo); + CONVERT_TO_NONHYPERTEXT: + NewStyleNo := GetNonHypertextStyleNo(StyleNo); + end; +end; +{------------------------------------------------------------------------------} +{ If the caret is at the end of hyperlink, and there is no selection, + switching the current text style to non-hypertext } +procedure TForm1.TerminateHyperlink; +var rve: TCustomRichViewEdit; +begin + rve := RichViewEdit1.TopLevelEditor; + if (rve.CurTextStyleNo=rve.CurItemStyle) and + RVStyle1.TextStyles[rve.CurTextStyleNo].Jump and + not rve.SelectionExists and + (rve.OffsetInCurItem>=rve.GetOffsAfterItem(rve.CurItemNo)) then + rve.CurTextStyleNo := GetNonHypertextStyleNo(rve.CurTextStyleNo); +end; +{------------------------------------------------------------------------------} +{ Closing hypelinks when user presses Space, Tab, or Enter } +procedure TForm1.RichViewEdit1KeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if (Key in [VK_SPACE, VK_TAB, VK_RETURN]) and not RichViewEdit1.ReadOnly then + TerminateHyperlink; +end; + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit2.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit2.dfm new file mode 100644 index 0000000..37de056 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit2.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit2.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit2.pas new file mode 100644 index 0000000..0aa6f31 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/CreateHyperlink/Unit2.pas @@ -0,0 +1,35 @@ +unit Unit2; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ExtCtrls; + +type + TForm2 = class(TForm) + Button1: TButton; + Button2: TButton; + Panel1: TPanel; + Edit1: TEdit; + Label1: TLabel; + procedure FormActivate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form2: TForm2; + +implementation + +{$R *.DFM} + +procedure TForm2.FormActivate(Sender: TObject); +begin + Edit1.SetFocus; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/PhoneBook.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/PhoneBook.dpr new file mode 100644 index 0000000..ff05471 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/PhoneBook.dpr @@ -0,0 +1,15 @@ +program PhoneBook; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + Unit2 in 'Unit2.pas' {Form2}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/PhoneBook.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/PhoneBook.dproj new file mode 100644 index 0000000..f2ac6be --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/PhoneBook.dproj @@ -0,0 +1,102 @@ + + + {3562C5EA-30DE-476E-BF90-CA7C333E1D1E} + PhoneBook.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + PhoneBook.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ +
Form2
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + PhoneBook.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/PhoneBook.res b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/PhoneBook.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/PhoneBook.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit1.dfm new file mode 100644 index 0000000..efc560b Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit1.pas new file mode 100644 index 0000000..79bb2c0 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit1.pas @@ -0,0 +1,182 @@ +{==============================================================================} +{ + This demo shows how to implement listbox-like selection using hypertext. + Property settings: + - rvoTagsArePChars is included in rv.Options + - rvoAllowSelection is excluded from rv.Options + - rv.TabNavigation = rvtnNone + - rv.Style = RVStyle1 + - 3 text styles are created in RVStyle.TextStyles + TextStyles[0] - normal text + TextStyles[1] - hypertext + TextStyles[2] - hypertext with background + + NOTE: This demo is a bit overcomplicated. + If you do not use tables (TRVTableItemInfo), you do not need to + work with RVData variables (because documents without tables + have only one RVData - rv.RVData) + NOTE2: phonebook can be saved (rv.SaveRVFFromFile) + and loaded (rv.LoadRVFFromFile). In order to load bullets (images with phones), + process OnRVFImageListNeeded. +} +{==============================================================================} +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + ImgList, + Dialogs, StdCtrls, RVScroll, RichView, RVStyle, CRVFData; + +type + TForm1 = class(TForm) + ImageList1: TImageList; + RVStyle1: TRVStyle; + rv: TRichView; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Label1: TLabel; + Label2: TLabel; + Edit1: TEdit; + procedure FormCreate(Sender: TObject); + procedure rvJump(Sender: TObject; id: Integer); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + private + { Private declarations } + FSelectedRVData: TCustomRVFormattedData; + FSelectedItemNo: Integer; + function MakeTag(s: String): Integer; + function GetTagStr(tag: Integer): String; + procedure Select(RVData: TCustomRVFormattedData; ItemNo: Integer); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +uses Unit2; + +{$R *.dfm} + +{ TForm1 } + +const + TEXTSTYLE_NOTMALTEXT = 0; + TEXTSTYLE_JUMP = 1; + TEXTSTYLE_SELECTED = 2; + +function TForm1.MakeTag(s: String): Integer; +begin + Result := Integer(StrNew(PChar(s))); +end; + +function TForm1.GetTagStr(tag: Integer): String; +var i: Integer; +begin + // reverse function + Result := PChar(tag); + for i := 1 to Length(Result) do + if Result[i]=#1 then + Result[i] := ' '; +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + rv.AddNL('Telephone directory:',0,0); + rv.AddBulletEx('',0, ImageList1, 0); + rv.AddNLTag('Kim Lumber',TEXTSTYLE_JUMP, -1, MakeTag('123-4567')); + rv.AddBulletEx('',0, ImageList1, 0); + rv.AddNLTag('Phil Forest',TEXTSTYLE_JUMP, -1, MakeTag('234-5678')); + rv.AddBulletEx('',0, ImageList1, 0); + rv.AddNLTag('Woody Young',TEXTSTYLE_JUMP, -1, MakeTag('345-6789')); + rv.Format; +end; + +procedure TForm1.Select(RVData: TCustomRVFormattedData; ItemNo: Integer); +begin + if (FSelectedRVData<>nil) and (FSelectedRVData=RVData) and + (FSelectedItemNo=ItemNo) then begin + Button2.Click; + exit; + end; + if FSelectedRVData<>nil then + FSelectedRVData.GetItem(FSelectedItemNo).StyleNo := TEXTSTYLE_JUMP; + if RVData<>nil then begin + Edit1.Text := GetTagStr(RVData.GetItemTag(ItemNo)); + RVData.GetItem(ItemNo).StyleNo := TEXTSTYLE_SELECTED; + end; + FSelectedRVData := RVData; + FSelectedItemNo := ItemNo; + rv.Refresh; + { + In this demo, two text styles (TEXTSTYLE_SELECTED and TEXTSTYLE_JUMP) + have difference only in colors. + But if they had different font name/size/style, or different jump flag, + Refresh would be not enough - change this line to rv.Format; + } +end; +{------------------------------------------------------------------------------} +procedure TForm1.rvJump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + rv.GetJumpPointLocation(id, RVData, ItemNo); + Select(RVData, ItemNo); +end; +{------------------------------------------------------------------------------} + +procedure TForm1.Button1Click(Sender: TObject); +begin + Form2.Edit1.Text := ''; + Form2.Edit2.Text := ''; + if Form2.ShowModal=mrOk then begin + rv.AddBulletEx('',0, ImageList1, 0); + rv.AddNLTag(Form2.Edit1.Text ,TEXTSTYLE_JUMP, -1, MakeTag(Form2.Edit2.Text)); + rv.FormatTail; + Select(rv.RVData, rv.ItemCount-1); + end; +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + if FSelectedRVData=nil then begin + Beep; + exit; + end; + Form2.Edit1.Text := FSelectedRVData.GetItemText(FSelectedItemNo); + Form2.Edit2.Text := GetTagStr(FSelectedRVData.GetItemTag(FSelectedItemNo)); + if Form2.ShowModal=mrOk then begin + FSelectedRVData.SetItemText(FSelectedItemNo, Form2.Edit1.Text); + FSelectedRVData.SetItemTag(FSelectedItemNo, MakeTag(Form2.Edit2.Text)); + rv.Format; + Edit1.Text := Form2.Edit2.Text; + end; +end; + + +procedure TForm1.Button3Click(Sender: TObject); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + if FSelectedRVData=nil then begin + Beep; + exit; + end; + RVData := FSelectedRVData; + ItemNo := FSelectedItemNo; + Select(nil, -1); + RVData.DeleteItems(ItemNo-1, 2); // deleting two items: image and text + rv.Format; + Edit1.Text := ''; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit2.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit2.dfm new file mode 100644 index 0000000..5f9feb4 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit2.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit2.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit2.pas new file mode 100644 index 0000000..650a25b --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/PhoneBook/Unit2.pas @@ -0,0 +1,41 @@ +unit Unit2; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls; + +type + TForm2 = class(TForm) + Button1: TButton; + Button2: TButton; + Edit1: TEdit; + Edit2: TEdit; + Label1: TLabel; + Label2: TLabel; + procedure Edit1Change(Sender: TObject); + procedure FormActivate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var Form2: TForm2; + +implementation + +{$R *.dfm} + +procedure TForm2.Edit1Change(Sender: TObject); +begin + Button1.Enabled := (Edit1.Text<>'') and (Edit2.Text<>''); +end; + +procedure TForm2.FormActivate(Sender: TObject); +begin + Edit1.SetFocus; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/ScanURLs.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/ScanURLs.dpr new file mode 100644 index 0000000..44285e0 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/ScanURLs.dpr @@ -0,0 +1,14 @@ +program ScanURLs; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + URLScan in 'URLScan.pas'; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/ScanURLs.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/ScanURLs.dproj new file mode 100644 index 0000000..a181ad1 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/ScanURLs.dproj @@ -0,0 +1,100 @@ + + + {FFBE3A95-0C55-4B10-84A1-5910001257F8} + ScanURLs.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + ScanURLs.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + ScanURLs.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/ScanURLs.res b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/ScanURLs.res new file mode 100644 index 0000000..7628804 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/ScanURLs.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/URLScan.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/URLScan.pas new file mode 100644 index 0000000..747031b --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/URLScan.pas @@ -0,0 +1,449 @@ +unit URLScan; +{==============================================================================} +{ Scanning RichView for URLs } +{ Copyright (c) Sergey Tkachenko } +{==============================================================================} +{ Unicode uppercase URLs can be processed only in WinNT/2000/XP } +{==============================================================================} + +interface + +{$I RV_Defs.inc} + +uses Windows, Messages, SysUtils, Classes, Clipbrd, + RVStyle, RVScroll, RichView, CRVFData, RVTable, RVEdit, RVFuncs, RVItem, + RVUni, RVStr, RVTypes; + +type + TRVURLScanProcedure = procedure (OldStyleNo: Integer; + var NewStyleNo: Integer; ToHypertext: Boolean) of object; + +//--------------------- Document scanning ------------------------------------- +// Detecting URLs +function ScanURLs(RVData: TCustomRVFormattedData; + URLScanProcedure: TRVURLScanProcedure; AssignTags: Boolean): Boolean; +// Removing all URLs +function ClearHypertext(RVData: TCustomRVFormattedData; + URLScanProcedure: TRVURLScanProcedure; ClearTags: Boolean): Boolean; +//---------------------- Detect on typing ------------------------------------- +// Closing hyperlink +procedure TerminateHyperlink(rve: TCustomRichViewEdit; + URLScanProcedure: TRVURLScanProcedure; Forced: Boolean); +// Detecting URL on typing +procedure DetectURL(rve: TCustomRichViewEdit; URLScanProcedure: TRVURLScanProcedure; + AssignTags: Boolean); +//----------------------- Clipboard ------------------------------------------- +// Pasting text with URL detection +function PasteTextWithURLs(rve: TCustomRichViewEdit; + URLScanProc: TRVURLScanProcedure): Boolean; + +implementation + +uses CRVData; + +{======================= Processing ANSI text =================================} +function FindChar(pc: PRVAnsiChar; Len: Integer): Integer; +var i: Integer; +begin + for i := 0 to Len-1 do + if pc[i] in [' ',',','(',')',';','"','''', '‘', '’', '“', '”', '<','>' ] then begin + Result := i+1; + exit; + end; + Result := 0; +end; +{--------------------------------------------------------------} +// This function uses some undocumented methods +function DetectURLsA(var RVData: TCustomRVFormattedData; Index: Integer; + URLScanProcedure: TRVURLScanProcedure; AssignTags: Boolean): Boolean; +var CurrentWord: TRVAnsiString; + i,p: Integer; + s,s1: TRVAnsiString; + tagstr : String; + pc, pcstart: PRVAnsiChar; + Len, URLStyle: Integer; + StringList: TStringList; + sourceitem,item: TCustomRVItemInfo; +begin + s := RVData.GetItemTextA(Index); + pc := PRVAnsiChar(s); + pcstart := pc; + Len := Length(s); + StringList := nil; + while Len>0 do begin + p := FindChar(pc, Len); + if p=1 then begin + inc(pc); + dec(Len); + continue; + end; + if p=0 then + p := Len+1; + SetLength(CurrentWord, p-1); + Move(pc^, PRVAnsiChar(CurrentWord)^, p-1); + if (RV_CharPos(PRVAnsiChar(CurrentWord), '.', p-1)<>0) and + (RVIsURL(String(CurrentWord)) or RVIsEmail(String(CurrentWord))) then begin + if StringList=nil then + StringList := TStringList.Create; + if pcstartnil; + if Result then begin + URLStyle := RVData.GetItemStyle(Index); + URLScanProcedure(URLStyle, URLStyle, True); + if URLStyle=RVData.GetItemStyle(Index) then begin + StringList.Free; + Result := False; + exit; + end; + if pcstartnil then begin + item.StyleNo := UrlStyle; + if AssignTags then begin + tagstr := StringList[i]; + if RVIsEmail(tagstr) and not RVIsURL(tagstr) then + tagstr := 'mailto:'+tagstr; + item.Tag := Integer(StrNew(PChar(tagstr))); + end; + end; + RVData.Items.InsertObject(Index+1, TRVAnsiString(StringList[i]),item); + end; + if StringList.Objects[0]<>nil then begin + sourceitem.StyleNo := UrlStyle; + if AssignTags then begin + tagstr := StringList[0]; + if RVIsEmail(tagstr) and not RVIsURL(tagstr) then + tagstr := 'mailto:'+tagstr; + sourceitem.Tag := Integer(StrNew(PChar(tagstr))); + end; + end; + RVData.Items[Index] := TRVAnsiString(StringList[0]); + end; + StringList.Free; +end; +{======================= Processing Unicode text ==============================} +{$IFDEF RICHVIEWDEF3} +{------------------------------------------------------------------------------} +function CharPosW(const Str: PRVUnicodeChar {EAX}; Chr: TRVUnicodeChar {DX} ; + Length: Integer {ECX}): Integer; assembler; +asm + TEST EAX,EAX + JE @@2 + PUSH EDI + PUSH EBX + MOV EDI,Str + MOV EBX,Str + MOV AX,Chr + REPNE SCASW + MOV EAX,0 + JNE @@1 + MOV EAX,EDI + SUB EAX,EBX +@@1: POP EBX + POP EDI +@@2: +end; +{--------------------------------------------------------------} +function FindCharW(pc: PRVUnicodeChar; Len: Integer): Integer; +var i: Integer; +begin + for i := 0 to Len-1 do + if CharInSet(pc[i], [' ', ',' ,'(', ')', ';', '"', + '''', '‘', '’', '“', '”', '<', '>']) then begin + Result := i+1; + exit; + end; + Result := 0; +end; +{--------------------------------------------------------------} +// This function uses some undocumented methods +function DetectURLsW(var RVData: TCustomRVFormattedData; Index: Integer; + URLScanProcedure: TRVURLScanProcedure; AssignTags: Boolean): Boolean; +var CurrentWord: TRVUnicodeString; + i,p: Integer; + s : TRVUnicodeString; + s1: TRVUnicodeString; + pc, pcstart: PRVUnicodeChar; + tagstr: String; + Len, URLStyle: Integer; + StringList: TStringList; + sourceitem,item: TCustomRVItemInfo; +begin + s := RVData.GetItemTextW(Index); + pc := PRVUnicodeChar(s); + pcstart := pc; + Len := Length(s); + StringList := nil; + while Len>0 do begin + p := FindCharW(pc, Len); + if p=1 then begin + inc(pc); + dec(Len); + continue; + end; + if p=0 then + p := Len+1; + SetLength(CurrentWord, p-1); + Move(pc^, PRVUnicodeChar(CurrentWord)^, (p-1)*2); + if (CharPosW(PRVUnicodeChar(CurrentWord), '.', p-1)<>0) and + (RVIsURL(CurrentWord) or RVIsEmail(CurrentWord)) then begin + if StringList=nil then + StringList := TStringList.Create; + if pcstartnil; + if Result then begin + URLStyle := RVData.GetItemStyle(Index); + URLScanProcedure(URLStyle, URLStyle, True); + if URLStyle=RVData.GetItemStyle(Index) then begin + StringList.Free; + Result := False; + exit; + end; + if pcstartnil then begin + item.StyleNo := UrlStyle; + if AssignTags then begin + tagstr := StringList[i]; + if RVIsEmail(tagstr) and not RVIsURL(tagstr) then + tagstr := 'mailto:'+tagstr; + item.Tag := Integer(StrNew(PChar(tagstr))); + end; + end; + RVData.Items.InsertObject(Index+1, RVU_GetRawUnicode(StringList[i]),item); + end; + if StringList.Objects[0]<>nil then begin + sourceitem.StyleNo := UrlStyle; + if AssignTags then begin + tagstr := StringList[0]; + if RVIsEmail(tagstr) and not RVIsURL(tagstr) then + tagstr := 'mailto:'+tagstr; + sourceitem.Tag := Integer(StrNew(PChar(tagstr))); + end; + end; + RVData.Items[Index] := RVU_GetRawUnicode(StringList[0]); + end; + StringList.Free; +end; +{$ENDIF} +{========================== Common functions ==================================} +function ScanURLs(RVData: TCustomRVFormattedData; + URLScanProcedure: TRVURLScanProcedure; AssignTags: Boolean): Boolean; +var i,r,c: Integer; + table: TRVTableItemInfo; + RVStyle: TRVStyle; + StyleNo: Integer; +begin + Result := False; + RVStyle := RVData.GetRVStyle; + for i := RVData.Items.Count-1 downto 0 do begin + StyleNo := RVData.GetItemStyle(i); + if StyleNo=rvsTable then begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + if ScanURLs(TCustomRVFormattedData(table.Cells[r,c].GetRVData), URLScanProcedure, + AssignTags) then begin + Result := True; + table.Changed; + end; + end + else if (StyleNo>=0) then + if not RVStyle.TextStyles[StyleNo].Unicode then + Result := DetectURLsA(RVData, i, URLScanProcedure, AssignTags) or Result + {$IFDEF RICHVIEWDEF3} + else + Result := DetectURLsW(RVData, i, URLScanProcedure, AssignTags) or Result + {$ENDIF}; + end; +end; +{--------------------------------------------------------------} +function ClearHypertext(RVData: TCustomRVFormattedData; + URLScanProcedure: TRVURLScanProcedure; ClearTags: Boolean): Boolean; +var i,r,c: Integer; + table: TRVTableItemInfo; + RVStyle: TRVStyle; + StyleNo: Integer; +begin + Result := False; + RVStyle := RVData.GetRVStyle; + for i := RVData.Items.Count-1 downto 0 do begin + StyleNo := RVData.GetItemStyle(i); + if StyleNo=rvsTable then begin + table := TRVTableItemInfo(RVData.GetItem(i)); + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + if table.Cells[r,c]<>nil then + if ClearHypertext(TCustomRVFormattedData(table.Cells[r,c].GetRVData), + URLScanProcedure, ClearTags) then begin + Result := True; + table.Changed; + end; + end + else if (StyleNo>=0) and RVStyle.TextStyles[StyleNo].Jump then begin + URLScanProcedure(StyleNo,StyleNo,False); + if StyleNo<>RVData.GetItemStyle(i) then begin + RVData.GetItem(i).StyleNo := StyleNo; + if ClearTags then + RVData.SetItemTag(i, 0); + Result := True; + end; + end; + end; + if Result then + RVData.Normalize; +end; +{------------------------------------------------------------------------------} +procedure DetectURL(rve: TCustomRichViewEdit; URLScanProcedure: TRVURLScanProcedure; + AssignTags: Boolean); +var ItemNo, WordEnd, WordStart, CurStyleNo, HypStyleNo: Integer; + s: String; + EndShifted: Boolean; +begin + rve := rve.TopLevelEditor; + if rve.SelectionExists then + exit; + ItemNo := rve.CurItemNo; + if (rve.GetItemStyle(ItemNo)<0) or rve.Style.TextStyles[rve.GetItemStyle(ItemNo)].Jump then + exit; + WordEnd := rve.OffsetInCurItem; + if WordEnd<=1 then + exit; + s := rve.GetItemTextW(ItemNo); + WordStart := WordEnd-1; + while (WordStart>1) and (s[WordStart-1]<>' ') do + dec(WordStart); + EndShifted := False; + s := Copy(s, WordStart, WordEnd-WordStart); + if (Length(s)>0) and CharInSet(s[1], ['<','(','{','[','''','"','‘','’','“','”']) then begin + inc(WordStart); + s := Copy(s, 2, Length(s)-1); + end; + if (Length(s)>0) and CharInSet(s[Length(s)], ['>',')','}',']','''','"','‘','’','“','”',',',':',';']) then begin + dec(WordEnd); + s := Copy(s, 1, Length(s)-1); + EndShifted := True; + end; + if RVIsEmail(s) or RVIsURL(s) then begin + CurStyleNo := rve.CurTextStyleNo; + rve.SetSelectionBounds(ItemNo, WordStart, ItemNo, WordEnd); + HypStyleNo := rve.GetItemStyle(ItemNo); + URLScanProcedure(HypStyleNo, HypStyleNo, True); + rve.ApplyTextStyle(HypStyleNo); + if not RVIsURL(s) and RVIsEmail(s) then + s := 'mailto:'+s; + if AssignTags and (rvoTagsArePChars in rve.Options) then + rve.SetCurrentTag(Integer(StrNew(PChar(s)))); + rve.SetSelectionBounds(rve.CurItemNo, rve.OffsetInCurItem, rve.CurItemNo, rve.OffsetInCurItem); + if EndShifted then + SendMessage(rve.Handle, WM_KEYDOWN, VK_RIGHT, 0); + rve.CurTextStyleNo := CurStyleNo; + end; +end; +{------------------------------------------------------------------------------} +procedure TerminateHyperlink(rve: TCustomRichViewEdit; + URLScanProcedure: TRVURLScanProcedure; Forced: Boolean); +var StyleNo: Integer; +begin + if (rve.CurTextStyleNo=rve.CurItemStyle) and + rve.Style.TextStyles[rve.CurTextStyleNo].Jump and + not rve.SelectionExists then begin + rve := rve.TopLevelEditor; + if (rve.OffsetInCurItem>=rve.GetOffsAfterItem(rve.CurItemNo)) or Forced then begin + StyleNo := rve.CurTextStyleNo; + URLScanProcedure(StyleNo, StyleNo, False); + rve.CurTextStyleNo := StyleNo; + end; + end; +end; +{------------------------------------------------------------------------------} +// Pastes plain text from the Clipboard with URL detection +// Works only if RVF and RTF is not available in the Clipboard +function PasteTextWithURLs(rve: TCustomRichViewEdit; + URLScanProc: TRVURLScanProcedure): Boolean; +var RichView: TRichView; + Stream: TMemoryStream; +begin + Result := False; + if not Clipboard.HasFormat(CF_TEXT) or + Clipboard.HasFormat(CFRV_RVF) or + Clipboard.HasFormat(CFRV_RTF) then + exit; + RichView := TRichView.Create(nil); + try + RichView.Style := rve.Style; + RichView.Visible := False; + RichView.Options := rve.Options; + RichView.Parent := rve.Parent; + if rve.Style.TextStyles[rve.CurItemStyle].Unicode and + Clipboard.HasFormat(CF_UNICODETEXT) then + RichView.AddTextNLW(Clipboard.AsText, rve.CurItemStyle, rve.CurParaStyleNo, + rve.CurParaStyleNo, False); + ScanURLs(RichView.RVData, URLScanProc, True); + Stream := TMemoryStream.Create; + try + RichView.SaveRVFToStream(Stream, False); + Stream.Position := 0; + rve.InsertRVFFromStreamEd(Stream); + Result := True; + finally + Stream.Free; + end; + finally + RichView.Free; + end; +end; + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/Unit1.dfm new file mode 100644 index 0000000..d29dc0a Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/Unit1.pas new file mode 100644 index 0000000..cbaf3b9 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Hypertext/URLs/Unit1.pas @@ -0,0 +1,338 @@ + +{*******************************************************} +{ } +{ RichView } +{ Demo: URL detection } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{ + This demo shows: + - how to detect all URLs in text; + - how to detect URLs in pasted text; + - how to detect URLs on typing; + - how to close hyperlink when user presses Space, Enter or punctuation character; + - how to remove hyperlink using popup menu; + - how to implement hypertext in editor without using Ctrl key; + - how to modify hyperlink's tag when its visible text is changed; + - how to remove hyperlink when its visible text was changed to non-URL; + - how to display hyperlinks targets in hints. +} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, StdCtrls, ExtCtrls, ShellApi, + RVStyle, RVScroll, RichView, RVEdit, CRVData, CRVFData, + RVUni, RVFuncs, RVItem, RVLinear, + URLScan, Menus, RVTypes; + +type + TForm1 = class(TForm) + Panel1: TPanel; + btnOpen: TButton; + btnScan: TButton; + rve: TRichViewEdit; + RVStyle1: TRVStyle; + od: TOpenDialog; + cbAutodetect: TCheckBox; + cbAutoremove: TCheckBox; + StatusBar1: TStatusBar; + cbUseCtrl: TCheckBox; + PopupMenu1: TPopupMenu; + mitRemoveHyperlink: TMenuItem; + cbPasteDetect: TCheckBox; + procedure btnOpenClick(Sender: TObject); + procedure btnScanClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure rveJump(Sender: TObject; id: Integer); + procedure rveItemTextEdit(Sender: TCustomRichViewEdit; + const OldText: TRVRawByteString; RVData: TCustomRVData; ItemNo: Integer; + var NewTag, NewStyleNo: Integer); + procedure rveItemHint(Sender: TCustomRichView; RVData: TCustomRVData; + ItemNo: Integer; var HintText: String); + procedure cbUseCtrlClick(Sender: TObject); + procedure rveRVMouseUp(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure rveKeyPress(Sender: TObject; var Key: Char); + procedure PopupMenu1Popup(Sender: TObject); + procedure mitRemoveHyperlinkClick(Sender: TObject); + procedure rvePaste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); + procedure rveGetItemCursor(Sender: TCustomRichView; RVData: TCustomRVData; + ItemNo: Integer; var Cursor: TCursor); + private + { Private declarations } + SimpleClickHypertext : Boolean; + procedure URLScanEvent(OldStyleNo: Integer; var NewStyleNo: Integer; + ToHypertext: Boolean); + procedure DisplayHint(Sender: TObject); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +begin + // Uncomment this line to test working with Unicode + // RVStyle1.TextStyles[0].Unicode := True; + rve.Clear; + rve.AddNL('This demo shows how to implement URL scanning',0,0); + rve.AddNL('Click the button, and URLs (like this - "www.richedit.com/") will be highlighted.',0,0); + rve.AddNL('Ctrl+click URL to launch browser or e-mail client',0,0); + rve.Format; + Application.OnHint := DisplayHint; +end; +{------------------------------------------------------------------------------} +{ Opening text or RTF file } +procedure TForm1.btnOpenClick(Sender: TObject); +var r: Boolean; +begin + if not od.Execute then + exit; + Screen.Cursor := crHourglass; + rve.Clear; + rve.DeleteUnusedStyles(True,True,True); + case od.FilterIndex of + 1: r := rve.LoadText(od.FileName,0,0,False); + 2: r := rve.LoadRTF(od.FileName); + else r := False; + end; + rve.Format; + Screen.Cursor := crDefault; + if not r then + Application.MessageBox('Error loading file', 'Error', MB_OK or MB_ICONSTOP); +end; +{------------------------------------------------------------------------------} +{ Removing all hyperlinks, then rescanning the whole document for URLs. + Clearing undo buffers. } +procedure TForm1.btnScanClick(Sender: TObject); +var r: Boolean; +begin + Screen.Cursor := crHourglass; + // Moving caret to the beginning + rve.SetSelectionBounds(0, rve.GetOffsBeforeItem(0), 0, rve.GetOffsBeforeItem(0)); + // Clearing undo/redo buffers + rve.ClearUndo; + // removing old hypertext links + r := ClearHypertext(rve.RVData, URLScanEvent, True); + // scanning for URLs + r := ScanURLs(rve.RVData, URLScanEvent, True) or r; + if r then + rve.Format; + Screen.Cursor := crDefault; + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Callback procedure, called from ClearHypertext and ScanURLs. Also used in + rve.OnItemTextEdit and OnPaste events. + Returns index of style (NewStyleNo) for converting the original style + (OldStyleNo) to. + If ToHypertext=True, this procedure converts style to hyperlink. + If ToHypertext=False, this procedure converts style to normal text. } +procedure TForm1.URLScanEvent(OldStyleNo: Integer; var NewStyleNo: Integer; + ToHypertext: Boolean); +var Style: TFontInfo; +begin + // Constructing the desired style + Style := TFontInfo.Create(nil); + Style.Assign(RVStyle1.TextStyles[OldStyleNo]); + Style.Jump := ToHypertext; + if ToHypertext then begin + // Hypertext links will be blue and underlined + Style.Style := Style.Style+[fsUnderline]; + Style.Color := clBlue; + Style.JumpCursor := crJump; + end + else begin + // Plain text will be black and not underlined + Style.Style := Style.Style-[fsUnderline]; + Style.Color := clWindowText; + end; + // May be such style already exists? + NewStyleNo := RVStyle1.TextStyles.FindSuchStyle(OldStyleNo,Style,RVAllFontInfoProperties); + if NewStyleNo=-1 then begin + // Does not exist, adding... + RVStyle1.TextStyles.Add.Assign(Style); + NewStyleNo := RVStyle1.TextStyles.Count-1; + RVStyle1.TextStyles[NewStyleNo].Standard := False; + end; + Style.Free; +end; +{------------------------------------------------------------------------------} +{ STANDARD HIPERTEXT PROCESSING. + OnJump event. Called when the user clicks hyperlink in standard hypertext mode + (holding Ctrl key) } +procedure TForm1.rveJump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; + url: String; +begin + if SimpleClickHypertext then + exit; + rve.GetJumpPointLocation(id, RVData, ItemNo); + url := PChar(RVData.GetItemTag(ItemNo)); + ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOW); +end; +{------------------------------------------------------------------------------} +{ ALTERNATIVE HYPERTEXT PROCESSING + OnRVMouseUp event. We use it to process click on hyperlink in the simple click + mode (without using Ctrl key) } +procedure TForm1.rveRVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); +var LRVData: TCustomRVFormattedData; + LItemNo, LOffs: Integer; + url: String; + pt: TPoint; +begin + if not SimpleClickHypertext or (Button<>mbLeft) or + Sender.SelectionExists then + exit; + pt := Sender.ClientToDocument(Point(X,Y)); + if Sender.GetItemAt(pt.X, pt.Y, LRVData, LItemNo, LOffs, True) and + LRVData.GetItem(LItemNo).GetBoolValueEx(rvbpJump, Sender.Style) then begin + url := PChar(LRVData.GetItemTag(LItemNo)); + ShellExecute(0, 'open', PChar(url), nil, nil, SW_SHOW); + end; +end; +{------------------------------------------------------------------------------} +{ ALTERNATIVE HYPERTEXT PROCESSING + Returning hypertext cursor } +procedure TForm1.rveGetItemCursor(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; var Cursor: TCursor); +begin + if SimpleClickHypertext and + RVData.GetItem(ItemNo).GetBoolValueEx(rvbpJump, Sender.Style) then + if RVData.GetItemStyle(ItemNo)>=0 then + Cursor := Sender.Style.TextStyles[RVData.GetItemStyle(ItemNo)].JumpCursor + else + Cursor := Sender.Style.JumpCursor; +end; +{------------------------------------------------------------------------------} +{ OnKeyPress. Detecting URLs on typing (if cbAutodetect is checked). + URL is detected when the user presses Space, Enter, Tab, semicolon, comma. + This procedure also closes hyperlink (sets current style to normal text) } +procedure TForm1.rveKeyPress(Sender: TObject; var Key: Char); +begin + if CharInSet(Key, [' ', #13, #9, ';', ',']) then begin + // url detection + if cbAutodetect.Checked then + DetectURL(rve, URLScanEvent, True); + // closing url if necessary + TerminateHyperlink(rve, URLScanEvent, CharInSet(Key, [' ', #9, ';', ','])); + end; +end; +{------------------------------------------------------------------------------} +{ OnItemTextEdit. Updating tag when text of hyperlink is edited. + Removing hyperlink when the text is not an URL any more (if cbAutoremove is + checked) } +procedure TForm1.rveItemTextEdit(Sender: TCustomRichViewEdit; + const OldText: TRVRawByteString; RVData: TCustomRVData; ItemNo: Integer; + var NewTag, NewStyleNo: Integer); +var OldText2, NewText: String; + StyleNo: Integer; +begin + if NewTag=0 then + exit; + StyleNo := RVData.GetItemStyle(ItemNo); + if Sender.Style.TextStyles[StyleNo].Unicode then + OldText2 := RVU_RawUnicodeToWideString(OldText) + else + OldText2 := RVU_RawUnicodeToWideString( + RVU_AnsiToUnicode(RVData.GetStyleCodePage(StyleNo), OldText)); + NewText := RVData.GetItemText(ItemNo); + if cbAutoremove.Checked and (NewText='') then begin + // If new text is empty, removing hyperlink + NewTag := 0; + URLScanEvent(NewStyleNo, NewStyleNo, False); + exit; + end; + if (StrComp(PChar(OldText2), PChar(NewTag))=0) then begin + // If text before editing was equal to tag ... + if cbAutoremove.Checked and + (RVIsURL(OldText2) or RVIsEmail(OldText2)) and + not (RVIsURL(NewText) or RVIsEmail(NewText)) then begin + // ... if text is not URL any more, removing hyperlink + NewTag := 0; + URLScanEvent(NewStyleNo, NewStyleNo, False); + exit; + end; + // ... update tag to new text + NewTag := Integer(StrNew(PChar(NewText))); + end; +end; +{------------------------------------------------------------------------------} +{ OnItemHint. Displaying tag strings in hints } +procedure TForm1.rveItemHint(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; var HintText: String); +begin + HintText := PChar(RVData.GetItemTag(ItemNo)); +end; +{------------------------------------------------------------------------------} +{ Switching the standard and the simple-click hypertext modes. } +procedure TForm1.cbUseCtrlClick(Sender: TObject); +begin + SimpleClickHypertext := not cbUseCtrl.Checked; +end; +{------------------------------------------------------------------------------} +{ Disabling/enabling the popup menu items on popup } +procedure TForm1.PopupMenu1Popup(Sender: TObject); +begin + mitRemoveHyperlink.Enabled := rve.TopLevelEditor.GetItem + (rve.TopLevelEditor.CurItemNo).GetBoolValueEx(rvbpJump, RVStyle1); +end; +{------------------------------------------------------------------------------} +{ Removing hyperlink at the caret position } +procedure TForm1.mitRemoveHyperlinkClick(Sender: TObject); +var LStyleNo: Integer; + LPos: Integer; +begin + with rve.TopLevelEditor do begin + if not GetItem(CurItemNo).GetBoolValueEx(rvbpJump, RVStyle1) then + exit; + LPos := RVGetLinearCaretPos(rve.TopLevelEditor); + SetSelectionBounds(CurItemNo, GetOffsBeforeItem(CurItemNo), + CurItemNo, GetOffsAfterItem(CurItemNo)); + BeginUndoGroup(rvutTag); + SetUndoGroupMode(True); + try + SetCurrentTag(0); + URLScanEvent(CurItemStyle, LStyleNo, False); + ApplyTextStyle(LStyleNo); + finally + SetUndoGroupMode(False); + end; + RVSetLinearCaretPos(rve.TopLevelEditor, LPos); + end; +end; +{------------------------------------------------------------------------------} +{ Displaying hints in status bar } +procedure TForm1.DisplayHint(Sender: TObject); +begin + StatusBar1.SimpleText := GetLongHint(Application.Hint); +end; +{------------------------------------------------------------------------------} +{ Detecting URLs on pasting plain text (only if RVF or RTF is not available) } +procedure TForm1.rvePaste(Sender: TCustomRichViewEdit; + var DoDefault: Boolean); +begin + if cbPasteDetect.Checked then + DoDefault := not PasteTextWithURLs(Sender, URLScanEvent); +end; + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Accents.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Accents.dpr new file mode 100644 index 0000000..e7900b0 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Accents.dpr @@ -0,0 +1,13 @@ +program Accents; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Accents.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Accents.dproj new file mode 100644 index 0000000..5a29abc --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Accents.dproj @@ -0,0 +1,99 @@ + + + {710B050B-0C6F-412A-95DF-8CCCC80205FD} + Accents.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Accents.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Accents.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Accents.res b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Accents.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Accents.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Unit1.dfm new file mode 100644 index 0000000..684dcaa Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Unit1.pas new file mode 100644 index 0000000..f22f86f --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/Unit1.pas @@ -0,0 +1,48 @@ +{==============================================================================} +{ + This demo shows working with Unicode composite characters. + Special processing for these characters is available only in WinNT/2000/XP. + (and depends on Windows version...) +} +{==============================================================================} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, RVEdit, RVStyle; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichViewEdit1: TRichViewEdit; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit1.LoadRVF(ExtractFilePath(Application.ExeName)+'test.rvf'); + // May be your computer does not have 'Arial Unicode MS' font + if Screen.Fonts.IndexOf('Arial Unicode MS')<0 then + for i := 0 to RVStyle1.TextStyles.Count-1 do + if RVStyle1.TextStyles[i].FontName = 'Arial Unicode MS' then + RVStyle1.TextStyles[i].FontName := 'Lucida Sans Unicode'; + + RichViewEdit1.Format; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/test.rvf b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/test.rvf new file mode 100644 index 0000000..1dba07f Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/International/Accents/test.rvf differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/RTL.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/RTL.dpr new file mode 100644 index 0000000..b9c769c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/RTL.dpr @@ -0,0 +1,13 @@ +program RTL; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/RTL.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/RTL.dproj new file mode 100644 index 0000000..3af1db8 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/RTL.dproj @@ -0,0 +1,99 @@ + + + {99A37E04-3CEA-4539-989C-AED6C370C228} + RTL.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + RTL.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + RTL.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/RTL.res b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/RTL.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/RTL.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/Unit1.dfm new file mode 100644 index 0000000..4b05c99 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/Unit1.pas new file mode 100644 index 0000000..6317e79 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/Unit1.pas @@ -0,0 +1,173 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ComCtrls, RVStyle, RVScroll, RichView, RVEdit, + ExtCtrls, CRVData, RVTable; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + Panel1: TPanel; + cmbA: TComboBox; + rveA: TRichViewEdit; + rvsA: TRVStyle; + btnOpenA: TButton; + Label1: TLabel; + Panel2: TPanel; + Label2: TLabel; + cmbH: TComboBox; + btnOpenH: TButton; + rveH: TRichViewEdit; + rvsH: TRVStyle; + od: TOpenDialog; + procedure FormCreate(Sender: TObject); + procedure cmbAClick(Sender: TObject); + procedure cmbHClick(Sender: TObject); + procedure btnOpenAClick(Sender: TObject); + procedure btnOpenHClick(Sender: TObject); + private + { Private declarations } + CurrentCharset: TFontCharset; + Found: Boolean; + procedure FillComboBox(cmb: TComboBox; Charset: TFontCharset); + procedure ApplyFont(const FontName: String; rvs: TRVStyle; + Charset: TFontCharset; + rve: TRichViewEdit); + public + { Public declarations } + procedure OpenFile(rve: TRichViewEdit); + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} +// Callback function for EnumFontFamilies +function EnumFontCharsets(var EnumLogFont: TEnumLogFontEx; + PTextMetric: PNewTextMetricEx; FontType: Integer; Data: LPARAM): Integer; + export; stdcall; +var frm: TForm1; +begin + frm := TForm1(Data); + frm.Found := EnumLogFont.elfLogFont.lfCharSet=frm.CurrentCharset; + if frm.Found then + Result := 0 + else + Result := 1; +end; +{=============================== TForm1 =======================================} +procedure TForm1.FormCreate(Sender: TObject); +begin + Screen.Cursor := crHourGlass; + FillComboBox(cmbA, ARABIC_CHARSET); + FillComboBox(cmbH, HEBREW_CHARSET); + rveA.Clear; + rveH.Clear; + if cmbA.Items.Count>0 then begin + rveA.AddNL('Open Arabic RTF or text file, for example ARABIC.RTF',0,0); + rveA.Format; + cmbA.ItemIndex := 0; + cmbAClick(cmbA); + end + else begin + rveA.AddNL('There are no Arabic fonts installed',0,0); + rveA.Format; + btnOpenA.Enabled := False; + end; + if cmbH.Items.Count>0 then begin + rveH.AddNL('Open Hebrew RTF or text file, for example HEBREW.RTF',0,0); + rveH.Format; + cmbH.ItemIndex := 0; + cmbHClick(cmbH); + end + else begin + rveH.AddNL('There are no Hebrew fonts installed',0,0); + rveH.Format; + btnOpenH.Enabled := False; + end; + + Screen.Cursor := crDefault; +end; +{------------------------------------------------------------------------------} +// Filling combobox with fonts with given charset +procedure TForm1.FillComboBox(cmb: TComboBox; Charset: TFontCharset); +var DC: HDC; + i: Integer; +begin + CurrentCharset := Charset; + DC := GetDC(0); + cmb.Items.BeginUpdate; + try + for i := 0 to Screen.Fonts.Count-1 do begin + Found := False; + EnumFontFamilies(DC, PChar(Screen.Fonts[i]), @EnumFontCharsets, Longint(Self)); + if Found then + cmb.Items.Add(Screen.Fonts[i]); + end; + finally + cmb.Items.EndUpdate; + ReleaseDC(0, DC); + end; +end; +{------------------------------------------------------------------------------} +// Changing font of all text styles +procedure TForm1.ApplyFont(const FontName: String; rvs: TRVStyle; + Charset: TFontCharset; rve: TRichViewEdit); +var i: Integer; +begin + for i := 0 to rvs.TextStyles.Count-1 do begin + rvs.TextStyles[i].FontName := FontName; + rvs.TextStyles[i].Charset := Charset; + end; + rve.SetSelectionBounds(0, rve.GetOffsBeforeItem(0),0, rve.GetOffsBeforeItem(0)); + rve.Format; +end; +{------------------------------------------------------------------------------} +procedure TForm1.OpenFile(rve: TRichViewEdit); +var r: Boolean; +begin + if not od.Execute then + exit; + rve.Clear; + r := False; + case od.FilterIndex of + 1: r := rve.LoadRTF(od.FileName); + 2: r := rve.LoadText(od.FileName,0,0,False); + end; + if not r then + Application.MessageBox('Error loading file', 'Error', MB_OK or MB_ICONSTOP); + rve.Format; +end; +{------------------------------------------------------------------------------} +procedure TForm1.cmbAClick(Sender: TObject); +begin + if cmbA.ItemIndex>=0 then + ApplyFont(cmbA.Items[cmbA.ItemIndex], rvsA, ARABIC_CHARSET, rveA); +end; +{------------------------------------------------------------------------------} +procedure TForm1.cmbHClick(Sender: TObject); +begin + if cmbH.ItemIndex>=0 then + ApplyFont(cmbH.Items[cmbH.ItemIndex], rvsH, HEBREW_CHARSET, rveH); +end; +{------------------------------------------------------------------------------} +procedure TForm1.btnOpenAClick(Sender: TObject); +begin + OpenFile(rveA); + cmbAClick(cmbA); +end; +{------------------------------------------------------------------------------} +procedure TForm1.btnOpenHClick(Sender: TObject); +begin + OpenFile(rveH); + cmbHClick(cmbH); +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/arabic.rtf b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/arabic.rtf new file mode 100644 index 0000000..f9dcd2c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/arabic.rtf @@ -0,0 +1,554 @@ +{\rtf1\ansi\ansicpg1251\uc1 \deff0\deflang1049\deflangfe1049{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f28\fswiss\fcharset128\fprq2{\*\panose 020b0604020202020204}Arial Unicode MS;} +{\f29\fswiss\fcharset128\fprq2 @Arial Unicode MS;}{\f31\froman\fcharset178\fprq2{\*\panose 00000000000000000000}Times New Roman (Arabic);}{\f33\fswiss\fcharset178\fprq2{\*\panose 00000000000000000000}Arial Unicode MS (Arabic){\*\falt Arial};} +{\f161\froman\fcharset238\fprq2 Times New Roman CE;}{\f162\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f164\froman\fcharset161\fprq2 Times New Roman Greek;}{\f165\froman\fcharset162\fprq2 Times New Roman Tur;} +{\f166\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f167\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f168\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f387\fswiss\fcharset0\fprq2 Arial Unicode MS Western;} +{\f385\fswiss\fcharset238\fprq2 Arial Unicode MS CE;}{\f386\fswiss\fcharset204\fprq2 Arial Unicode MS Cyr;}{\f388\fswiss\fcharset161\fprq2 Arial Unicode MS Greek;}{\f389\fswiss\fcharset162\fprq2 Arial Unicode MS Tur;} +{\f390\fswiss\fcharset177\fprq2 Arial Unicode MS (Hebrew);}{\f391\fswiss\fcharset178\fprq2 Arial Unicode MS (Arabic);}{\f392\fswiss\fcharset186\fprq2 Arial Unicode MS Baltic;}{\f395\fswiss\fcharset0\fprq2 @Arial Unicode MS Western;} +{\f393\fswiss\fcharset238\fprq2 @Arial Unicode MS CE;}{\f394\fswiss\fcharset204\fprq2 @Arial Unicode MS Cyr;}{\f396\fswiss\fcharset161\fprq2 @Arial Unicode MS Greek;}{\f397\fswiss\fcharset162\fprq2 @Arial Unicode MS Tur;} +{\f398\fswiss\fcharset177\fprq2 @Arial Unicode MS (Hebrew);}{\f399\fswiss\fcharset178\fprq2 @Arial Unicode MS (Arabic);}{\f400\fswiss\fcharset186\fprq2 @Arial Unicode MS Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255; +\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0; +\red128\green128\blue128;\red192\green192\blue192;\red240\green0\blue6;\red242\green232\blue180;\red255\green255\blue255;\red226\green221\blue156;\red255\green250\blue230;\red253\green211\blue149;}{\stylesheet{ +\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \ul\cf2 \sbasedon10 Hyperlink;}{ +\s16\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\cf1\lang1049\langfe1049\loch\f28\hich\af28\dbch\af28\cgrid\langnp1049\langfenp1049 \sbasedon0 \snext16 Normal (Web);}{\*\cs17 \additive +\ul\cf12 \sbasedon10 FollowedHyperlink;}}{\info{\title This page is from http://weather}{\author Sergey Tkachenko}{\operator Sergey Tkachenko}{\creatim\yr2001\mo11\dy19\hr15\min50}{\revtim\yr2001\mo11\dy19\hr15\min57}{\version3}{\edmins7}{\nofpages1} +{\nofwords0}{\nofchars0}{\*\company Home}{\nofcharsws0}{\vern8249}}\paperw11906\paperh16838\margl1701\margr850\margt1134\margb1134 +\deftab708\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1701\dgvorigin1134\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl +{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5 +\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 { +\lang1033\langfe1049\langnp1033 This page is from http://weather.naseej.com.sa +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f167\cf9 \loch\af167\dbch\af0\hich\f167 \'cd\'c7\'e1\'c9}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\f167\cf9 +\loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d8\'de\'d3}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\f167\cf9 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'e3\'ca\'e6\'de\'da\'c9}{\b\cf9\lang1033\langfe1049\langnp1033 +\hich\af0\dbch\af0\loch\f0 }{\b\f167\cf9 \loch\af167\dbch\af0\hich\f167 \'e1\'e3\'cf\'ed\'e4\'c9}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\f167\fs36\cf17 \loch\af167\dbch\af0\hich\f167 \'c7\'d3\'d8\'e4\'c8\'e6\'e1}{ +\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\cf9\lang1033\langfe1049\langnp1033 \line }{\b\f167\cf9 \loch\af167\dbch\af0\hich\f167 \'e1\'ed\'e6\'e3}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\f167\cf9 +\loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d3\'c8\'ca}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 }{\b\cf9\lang1033\langfe1049\langnp1033 \~}{\b\cf9\lang1033\langfe1049\langnp1033 \hich\af0\dbch\af0\loch\f0 17-11-2001 }{ +\b\fs27\cf9\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth3\trwWidth6351\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 \clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\clcbpat18\cltxlrtb\clftsWidth3\clwWidth6351 \cellx6351\nestrow}{\nonesttables +\par }}\trowd \trqc\trleft-15\trftsWidth2\trwWidth2529\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth5000 +\cellx6366\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\fs20\lang1033\langfe1049\langnp1033 \trowd \trqc\trleft-15\trftsWidth2\trwWidth2529\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\cltxlrtb\clftsWidth2\clwWidth5000 \cellx6366\row }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'ed\'e6\'e3\'ed\'e4}{\b\lang1033\langfe1049\langnp1033 +\hich\af0\dbch\af0\loch\f0 }{\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'de\'c7\'cf\'e3\'ed\'e4}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'ed\'e6\'e3}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat8\cltxlrtb\clftsWidth2\clwWidth3501 \cellx4497\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat8\cltxlrtb\clftsWidth2\clwWidth1413 \cellx6277 +\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'c5\'cb\'e4\'ed\'e4}{\lang1033\langfe1049\langnp1033 }{ +\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'c3\'cd\'cf}{\lang1033\langfe1049\langnp1033 }{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d3\'c8\'ca}{\lang1033\langfe1049\langnp1033 }{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat20\cltxlrtb\clftsWidth2\clwWidth1834 \cellx2356\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat20\cltxlrtb\clftsWidth2\clwWidth1639 \cellx4497\clvertalc +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat20\cltxlrtb\clftsWidth2\clwWidth1413 \cellx6277\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1027{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw1085\pich1032\picwgoal615\pichgoal585\pngblip\bliptag632555790{\*\blipuid 25b4090ee6c023eaa4f12def25cdc878}89504e470d0a1a0a0000000d49484452000000290000002708020000001d08f6d10000000373424954050605330b8d80000000017352474200aece1ce900000c +874944415458474d58cf6f2449567e558ef446bab3dc113d99dd15332e70ccb4974da3465b46b3928d765663a43dec6d971be2c6811bbb42fc0dfc055c3870d8 +037358890b2bcd01a44602a91b31c846db626aa45ec811369bc954d219d8a1ca6877b89aef6579d1e66497632a23e3fdfedefb6aa444a97353fb2e4822dcf808 +24233e25450af8ff2c7591484915ebe01d494531287c1f02097e075f9148f9cdd84b11f014bb89d2107a99a541f4d82a231f4f78ca2f6227e92847569d96c773 +ca2808aa711cbf275321593cbfdf510665d22e761a4708bc089dc25484e03a5e67069f381ec252d14b72c3e99224cbea70600ca924aba4c5f5d8da995199d294 +9e7e783a667b334db9ee73495325f72c4d6d9fe94ae93aa70e5691ebf157ca0e6766aa93ba974ae36411eade7512cf82932c8e37b0d302deeac8d58a5c16cc63 +63a746e5b8b552388675ea236b3b26c18a76be73f0277c3bb8a481be19b9509b29756e81ef529912047348b00a4af65a7421c27417f0069c99111cae62af326a +da1aaab8e854cec121b87d90c241e488dc5d637e21935a6a230d36b2d2224c7384bc36194eaeec54055773d01002d212e120a76365652363133cccdea44a67a4 +b3d1e9cbaaab2b08933e68911a248ad27a22395e31f47dc0b5113e0e83f9bc55e0e01439930adcbc55291522d97d6365489b334948a5bb9d4ab832278d00c35b +ac4dd0b1d654975355bd38435011e6723a3578940e375e8c3d642301d98ac10d635833a437dcd26321452aa342dc52619c97b47fbcb8ac7fef1b64eba72654e4 +6b8a1036a4ae24050baeb186e5014fade886a7f2e49bf3329f1e1d1c963353ee5bbbc7c14eb374a3fac6f99b78f769b6c900244a47f079749b92e8052a44c374 +45dde9134dd57318977250a02f8c1e6a811d8e12eaa614e633bd68ebf2e3133333a7c727365727f3d2ceb4992a93c38943a66d64dff95c4053180173a17b6da9 +96b00f3775703e8ad8a0fa5b870a38b152564f55a8c9392514796932c99e68617138cc91fbd22173ca239bdb43587c0073558a8afad56b02370f3002bbd964a4 +1fea08d52153a5c8e6c1aa202fcfa71e7a747ddbb9883a54734573e1c2e2b976082d29e48740981b7b7d7648b09bdc7550fbd6ec9553541417840c4875383543 +ba292c78bd317db07e4bacf547c727695644917a84cbb5faa631b17e2247e9551ba34b803a32496fbc5dfbc37b22b8cb220d07db41081fdeb693317deb1d7ff4 +304104abab447f7062f60eed04a2a3dc151439b02c680d33872073b08588e293bffc648c8ce14073de4bd2369d5a460787f20018d1711694af425b75ad53a103 +5a9c96ea641f40cbbbe6fbea7b1fd27c9fa6d99065b1d7ecc5219f39a5f950a40bfcca450800dedcd8038c80dd6afbb7bef59dd33841ed465ac778334a288b42 +2f6f2843146567e3b258c74968b5f4939da8a7d27ca0d399269dccee53715f8cbe163c053fd6c983993007619c88318d28e956d7a3ad34061f6e4284ddeb410b +7caee189f493bff8f15676931dfda60d3797e97a6984d702b1854fa20b7e7455db75fdf55d289126e4d5bb6276900b3dc91eaaa88ad18e563b42eca462478cb6 +32bf4ec4fd2288e27a2d466214c7b1bdf210e3ae7c84ec95f7c1dfc21b6f46f08458c59ffcf8275b4f4438fd6d63c40bb35ee8abc5ebfffc2c71cbe426889be5 +84bc5835f1c6d1d841eae403430fb47c686967467246a2900240aa85980959d028be8eb10d898f4902680cb7fd2a4258bce10044880ef000ff89f877153efdeb +4fb766db941674f9efcf476fddeca19e2965328de299ed26f15535720e90ae1eca099cfc2017ef1d086de89e1113235334b6106e625c033027000977d5fa15e4 +f4c94eda79f445e1bde3c87b8785c705eb57c1c1a5eef5f3bffb872d2ff3dffdfd3ff0f9ec65483ffba279f98be5af41f676d0eea2ccdcec0163efec37728158 +3eb2b46bc4fb07f4a04063e5f41d45b11ec185fe46084a12a2ebff79f9dab7f5575e6cc978e3896ec30a3623e4916f349fff0dedd5d2bff28b7f7eb145bb071f +7efbb45e459115f2a1c1e3eadf5e5e7cf1a21879f6b9a0c9036058261ebc4be94ce633dac97852100997cd7a446f9147a8a400ef67db44af5f4e9251d746f487 +f6ca75ab08d5fac15c34fc8df968ea8879f5af2fb766e3c3ef7ee7bbc5a3023914639cec1afd4e21ef6517fff5e5ed16c5316539a5f78a4c19f424da2db84cc7 +903aa1885e1ac8bb1896e2c647283af6a35505c0715f3a7fe55ffcbcb978d5a138dd2b58eefc2a3a76382eef5bec69c6bdefb8dbb4755f2d0c0583e61f9ccef5 +e17c0e904ad55d4f63f4bf464b752cefffefa1196f8621ee65b1db2c6c4e46049b5199a53a7629c370159a057002ba32fe0fa8ba7520f547bf6393d78b837b4b +7af522f355b1f67637e17612bbc97614e330d1401a41db9ad681de12ad3c79dc3521637b1ff1e53a8871f4574d58bb800abecd606741c981926627cc767cb11d +8d8c26a37c37d52a3372529ffd6c8411e9d93f7e4a6f2a9576a16b9efdcbb34fffe629700d3d0a5be707a473b2384369959740d7a1130c9321a323fef5403498 +127ced1c4686d03b7217f4ec39fba817985e06cf00db0750eb13cdb3652feb7f6ab6b43af8c33ff951ff966e1f58f14e59d88fa22eeb572427997e4f1739fa39 +2022242317c7d771dd8a7182b940c62890dfeb288004eb25ddb47185c6e3b1f7b623ff152d1dbdfc8ace5bf27ba5d307eefefb7e627107f575392db347073fff +d9c548c9f2ecc5b3c5e20c4dcc60c0c9b46bfbeea24a3100c62a5c3eeb97e78893dd235370470ad20c830ada513a60355a3e9200912684a05ef2f416a20a64ce +1a3aafa99e18caad4433951867b981a6689631fdab3ffbf32d25267ffac77fe4572e19f7f4f696f13f065d188cbcc696612d9ba68dee3ab65efb2801c55f4373 +ba156befaf6a811ebe0ef1aa97e349fbdfa15b65e7ffe1fffe1c93a512dbfadddda2286609c645914070fe4ef16e9115f7338d04ccd4f94fff76ab10fa873ffa +a1eb834013d91efaea9a1b3af775d4128998a4fabe4ec632009919105d78e56e51a1378046bfac5b7f155faf447715fd6ab2f805555f85a82172a61fcd8af76c +f6ebef678f8a740b858ef13ec12421339545faeca74fc5c001a412d2712e70d31b467b3813427a60a5de2f319657d7f4f9178dbeae4e9fa0e73afcc7dc028c22 +4a2cabcb669a4b6465f9f848ef4bf9e444ed590c0c98860cc621a27ae9eaa6e618213ac855901b0a981571f1e078374e20961c4d9e3af8093e272003ba4b58fc +02392a24e6aeaaa167e754373c22748e9e3ea7f38b500595ce4a7bfc3dfbe1b17e320fc6b80c0d1d9440dbd9d43e06f952ae75f5256632163bee65df605a41cf +049d61b730d14136c1e948ab40aabba606f4e70da59361dec3601bd5f9053dbd048782865aa35c73aa127b26cacfc9d442d68cdc8e35bfab492e4b5340038b13 +e0b0aead5196cc4b7adf77cb3a74005a500d389389cda62a917a4ddbd5108ed04cad86299456810557916a528e549f4d95b5b43f0fb97502199e52cf51431c71 +4b4c951b0db0ceb4e5816eba71ea388d69583a77e9fa16c3f65dac592ae741e8e150f4bc6b3026044a42d822d0990b9fe3e1378e1b69aaa8319b523ea51c6005 +d6c21414c5c624ae1daa8fc92c04e36b96870ab2fb8766df721a733962478b44c753052845fae0eb8e6129b8b6867fbac6d56dc53e58365dacb02dcdad9d9f48 +e124a8d47e490718aa3951f486eee0b34f915128e68053982d0f232303030ff603d1c617088fef9817810320123d30925f771d6c863f40ae40bb3b5a76c121b5 +7a32f345e57ef0fd1f180dce6130f763bf017fe316c303e4e05b3e1a6e1b46d420b3411f0622fe9a2902f35894306aa9691c5098f706b05187f8d655f5e5a281 +e0252b503715f3ab83e9e9c7a7cdb52ce7c7d618b3a7f5cc30872cf0a9914a062c3757e881e904b4958b65f0c01dd9e7055b3cfc68003db83b21d7406543a85f +56c812bc8cf5026bce46160c95404dec1ec7b206afc6f03a3fd453540e00181d02a5c15a63cd3418f1da5c4330793a1e7ea718b20774196d2fa403ef43468f41 +c3ab0b0e2a082918ea62b1383f3f83f8eab2c67c523e2e8fbe797cf2ed93938f4f8db55553e3d783e990a87282d306b3800d83894c8f399f375c15193ee8314c +c67c632f7aee3558f05d5845c840ea71133044817581db7987d59c104578d66c3047495433325d97e511436e08e91b0ce504a6cf87b2e99cce2c6d1079279849 +40baa1fce13a0c8e1c4073d04a685247e5bc7c52322dc14e741b9c9b293867833ec3054df15b833d7a7252a227fac1441427bb95e84da064e3c6cda977ceb833 +7a633ae81e0ec4f0381020de81df7a4a9a83a235be615447cc22a2e2184b016d43c20fb4fd2e6319ef86e0e1c2663ee757f8f4ddfa97fa6efefe5297e1d78e0d234344707e94ff07bb61fa6ed3bbcc810000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1085\pich1032\picwgoal615\pichgoal585\wmetafile8\bliptag632555790{\*\blipuid 25b4090ee6c023eaa4f12def25cdc878} +010009000003b809000000009409000000000400000003010800050000000b0200000000050000000c02270029000500000007010400000094090000430f2000 +cc000000270029000000000027002900000000002800000029000000270000000100180000000000e4120000c40e0000c40e0000000000000000000031002939 +0c39210021290029310c39310839210029290029310431310029310029310431290031290431210431290831210429210021210021290c312904292908292908 +2929042929042929082929082929082929082929082929082929082929083129082929082921042121002121002121042129042931003100311021b59eaddecb +d6ded3d6e7dbe7efe3e7e7dbdef7e7e7efdbdee7d3dee7d3dee7d3deded3ded6d3deb5b2bd84828cada2b5a596a5ada2adc6bacec6b6c6cec3cecebececec3ce +d6c3d6d6cbd6decbded6cbd6d6cbd6decfdedecfdedecbdee7cbe7dec7e7d6bed6c6b2c6b59eb5a592a5ad92adbd9ab53100290021101084757b7b75738c8684 +9c9e9494968c848a7b9c9a8c9c9a94b5aeadcec7c6cecbcececfceced7de94aaad4a555a84868c9c9e9ca5a6a5bdbec6c6c3c6cecfd6d6d3d6d6d7d6cecfd6d6 +d7d6d6d7ded6d7d6d6d7d6dedbdededbdeded7dee7d7e7decfe7d6cbd6cebeceb5aab5ad9aa5ad9aadbda2bd290429001804187b697b6b61737b79847b7d846b +71735a6163636563524d4a63595a7369737b75848c92a5a5b2c68496ad394d5a525d639ca29cadaeadbdc3bdc6cfceced3ced6dbd6ced7d6ced7d6d6d7d6d6d7 +d6ced3ceced3ced6d7d6d6d7d6ced3d6ded7ded6d3ded6d3d6d6cfd6c6c3c6bdb6b5bdb2bdceb6ce2904290021082194869c847584847d8c84868c949a9c8c92 +946b6d6b6b696b5a555a4a454a42455252556b63718c63759452657b313c42848684a5a6a5b5b6b5cecfceced3ced6d7d6cecfced6d7d6ced3cececfcececfce +cecfceced3ceced3ceced3d6dedbded6d7ded6d7d6d6d7d6cecfc6c6c3bdc6bac6cebace29042900210421a58aa58c7d8ca5a2a5adaeadadb2adadb2ada5aaa5 +94928c8c86847b717b635d6b39415231385239516b5a6d843938425a555a948e94a5a2a5c6c3c6d6cfd6d6cfd6cecbcecec7cec6bec6bdbabdc6bec6c6c3c6ce +c7ced6cfd6d6d7ded6d7d6d6d7d6d6dbd6d6dbced6dbced6d7ced6cfd6decbde21082900290821bda2b59c869ca59aa5b5aeb5bdbebdc6c3bdc6c3bdbdb2adad +a29c8c868c736d7b5a596b393c52212c42182c4231455a2124317b757394868cada6b5bdbecebdbacebdbac6bdb2b5b5aaadada6adb5aab5bdb6bdc6bec6d6c7 +d6ded7ded6d7d6d6dfd6d6dfd6d6dbceced7ced6d7ceded7d6decfde21042900210421ceaece9c86a5a59eb5b5b2bdc6c7ced6d3ceded7cecec7bdc6bebdada6 +ad8c86946b65734a515242494a21344200305a10385a29282173695a636d8c6b86b594a6ce8c96ad94968c9c9e949c96a5a5a2b5a5a6b5c6becedec7d6e7d3de +ded3d6d6cfced6d3ced6d7ced6d7ced6d7ced6cfc6cebec621042900210c21cebed6a59aadb5aabdbdbac6cecbced6d7d6ded7ceded7ced6cfcec6babda59aa5 +7b7d846b6d6b5a615a39556b215da5104d940814183938393155844269ad4a71ad39557b6b756b8c8a7b948e94a5a2b5a5aeb5bdc7ced6c7d6decbd6ded3d6de +d7d6ded7d6d6d3d6cecfcececbc6c6beb5bdb2b521043100181018ded3deb5b6bdbdbec6bdc7c6c6d3ced6d7d6d6d7cededbd6decfc6d6cbc6b5aaa58c8a8c73 +797b52616b2955842165ce185dc6001442001039184d9c316dce3969bd21417b52616b7b7d73948a8ca5a2a5adbab5c6d7ced6dbd6dedbdeded7ded6d7deced3 +d6ced3d6cecfceb5b6b59c9e949c929c21043100180c18e7dfe7cecbcececfcececfceced7d6cedbd6ced7d6d6dbd6d6cfc6ded3cec6bebd9ca2a5737d8c3149 +63103c731865de1865e700308400145a084db5216dde215dc600206b21416b5a697b84869c9ca2adb5c3b5c6d7c6ced7c6d6d7ceced3d6ced3dec6cbd6c6cfd6 +bdc3c694969484827b948a9421043100210421f7e3ffdecfdedecfd6d6d3ced6d3ceced3d6c6d3d6ced3debdc7ceced3d6c6cbceadb2bd738294213c5a002c63 +186dd60869de004db500309c0055ce1065d60851b5000c63003c8c3165ad6b86c6949ec6bdc7ced6dbceced7c6ced3c6c6cbd6c6d3debdcbd6b5babd9ca6a584 +868484867bad9ea529042900210429ffe3ffdecbdedecbced6cfcececfcec6cbcec6cbd6c6cbd6bdc7cec6cbd6b5bece9caac6637da521497b003c8c1069ce00 +61ce0065d60061d6006de70869d60861c60045a50859bd216dce4269bd4a65a58492ada5aebdb5becebdc7d6b5c3ceb5c3cea5aeb58c969c8c9294949a94a5a2 +94b5a6a529042900210821f7e3f7d6c7cecec3cececbcececbcecec7cececbced6cfd6d6d3debdbed68c9ebd638ac63971c6105dce0865de0075de0075de088a +e7088ae70886e70079de0875de1879e7106dd62169ce10459400246b294d844a6da56382c67b8ece8c9ab58c969c7b868c7b82848c8e8ca5a294b5aa94b59e9c +31042900210818efdfefc6bec6bdbec6c6c7cececbcecec7cedecfd6cec3ced6d3e79caace4a75ad1859ad0055bd0065e7087df71896f7219aef219ef71896ef +219ef7219eff188ef72192ff107de71879de0055ad0030841855a53165bd4269c65265ad5a698463656b73716b8c867b9492849c9684a59a84b59a8c31042100 +290810efdbdebdb2b5c6babdd6d3d6e7dfdedecbcebdaebdada6c68ca2ce5286c62171bd005db50079d6088eef109af729a2ef31a6ef39a6f742aaff42a6f731 +a2f7219af71092f71096f7088af70075de006dde1069d62969ce29519c29386b424552635952736d5a7b756384755a8c7d5a9c8663a5827339081800311021ef +dbe7cecbded6dbe7d6dbefcecfe79492a54a496b31417329518c1865b5006dc60079d6008ae7189eef21a6ef42b2f74ab2f752b2ff5ab2ff5ab2ff52aeff39ae +ff29aaff109ef70092f7008af70079e7005dce00389c00186b000c4229344a39414a42494a4a4d4a52514a63594a7365527b655a31042100180021cec3e7adbe +e79cc7f784b6ef4a82b508346b00246300206b002c840051b50065c6108ae7219aef4aaeff52b2f75abaf763baf763baf763baf763b6f75ab6f74ab2f742b2ff +29a6f70896e7009ae7008ade006dce00349400248400287b00246b002c6b08346b103863183c6329415a31414a39384a210031002908319486ad6b7da55a82b5 +396d9c31699c31619c4271b53165b51861bd0869ce0075de2196f739a2ff63b2ff6bbeff7bcfff7bd3ff84d3ff7bcfff7bc7ff6bbef75abaf74ab6f74abaff29 +a6ef089ee7089ae71882de1061bd2159b53969bd3165ad2961a529599429558c315984425d7b52657363617b18003900310018bd8ead94829473717b737d846b +7d844a5d734a658c3161a52165b50065c6087de72196f74aaeff6bb6ff84cfff8ce3ff94ebffa5ebffa5e3ff8cd7ff73c7ff5abaff4ab6f752baff39aef7089a +ef109af71071d62161b529518442597b394d6b39496331455a31415239454a42454a4a4d4a5a4d5229042900420c21b58a94ad968c9c92847b7d6b73756b5a65 +7339517b00307b0045a50055bd0079de2192ef4ab2ff73c3ff94dfff94ebff9cf3ffadf3ffadebff94dbff73c7ff5abaf752b2f752b2f74ab2ff1096ef1092ef +105db5295d9c294563394d524a515a52515a52555a5a595a5a595252514a524d425a454a290429003114089c8a7b7b755a73755a63715a39515218305a002873 +0845b50055d60061de0075e71896ef42b2f76bc3f78cdfff9cf3ffa5f7ffa5f7ff9cebff8cdbff73cbff6bbef763b6ef6bb2ff5aaeff188ede2186ce31699c5a +799c5a75846b797b7b7d8473757b7371736b71736b6d6b6b69636b695a73656b29042900180c1084868463756b425d5221414a18415a4265a54271c62961ce10 +65de0065de0065d61896f739aaf75ac3f773d3f794f3ff9cf3ff9cefff94e3ff7bcfff6bbeff6bb6f76baeef63aef74a9ee7217dbd2975a54a758c738a947b8e +948492948c8a8c848284848284848284848284847d7b7b797384717b29042900080839394d73083c6b1055843175ad3975b54a71b55271b54a71b518519c0041 +a50065ce0879de219aef39aeef5ac7f76bcfff7bcfff8cd3ff8ccfff6bbaff5ab2f763aef763b2ff52aef7318ece4282ad5a869c84a2a58c9a949c9e9c949694 +9c96949492948c8e948c8e948c92949496949c9294a58e9c290429001004396b699c4a719c39719c31699c2155843955844a598439557b29558c0851ad0059c6 +0061ce1882e7299eef31aaf74ab6ff5abaff6bbef76bbaef5ab6ff52b6ff52aeff4aa6f73192de398ac6638aa58492949caaa5a5aaa5a5a29cada6a5ada6a5ad +a6a5a5a2ada5a6ada5aaadadaeadb5aeb5bdaabd2904290031001894697b84716b7b756b7b7d7b7b7d7b7b757b6b697b525d6b3155841861c6186de72165d608 +59c60875de1892ff2196f731aaff42b2ef42aee731aaff29a6ff189ef7188ee7217dc64a8abd849aad9ca29cadb2adb5bab5adaea5bdbab5b5b2adb5b6b5b5b6 +bdb5babdbdbec6c6c3c6cec7c6d6c3d6290429004a0c18b57d7bad866b9c7d5a947d5a84755a736d6b63657352617b42699c3171c6185dbd1855ad084dad005d +d60065e71079e72192ef299ae72196de1892f7108ef70082e70079d62171bd4a79ad94a2adadaea5bdbabdc6bec6bdbebdcecbc6c6c7c6c6c7c6cecbcececfd6 +ced3d6ced3d6d6d3d6e7d3de29042900390c109c717394756394755a94825a7379634a65733155844269ad4269a542699c295173215173215594105dde0859de +105dc61065c61069ce1071d61071d6006dce0069d61071de2165bd395d94949aa5bdb6adcec3cec6c3ceced3d6ced3ced6d3ced6d3d6d6d3ded6d7ded6d7d6d6 +d7d6ded7d6e7d3de29042900290c089479739c7d6b8c755a73715a52615a42657b39658c42659c4259844a5d634a5d6342657b3169a52165ce1859ce00348410 +458c185dce1869d60051a50038840049a52165c63169bd4261948c9294c6baadd6c7d6cec7d6d6dbdeced3d6d6d7d6d6d7d6d6d3d6ced3d6ced3d6ced3d6d6cf +d6decbde29042900311c088c75637b69526b6552636d735a717b63757b636d6b4a55526b695a73694a5a5d5a315d8c3979bd2965b508387b21304a31456b3169 +c6316dd6103c84001c4a18345a395584426dbd4a75ad637d73adaa94c6babdcec7d6d6d3d6ced3cededbd6d6d7ced6d3d6cecfd6ced3d6ced3d6d6d3d6decfde +290429002914008c796384795a6b6d525a656b5a616b6b615a6b5d4a7b714a8475428471426b716329619c296dbd29558418344a5a59524a555a3169b53169c6 +1838731820394a41394a555a426da55282bd425d63848e7bada6a5cec7c6cecbceded7d6d6cfc6cecbc6c6c3c6c6c3c6c6c7c6c6cbced6cfcedecbde29042900 +3910089475637b715273714a736d5273614a8c69528c654a8c714a8471398c7942525d4a3975b5215da521344a5a55427361425a655a2165a52975c6102c5a31 +2c396b553952513931597b4a82b53155735265738c9284b5aa9cb5a6a5cec3c6c6c3bdbdbab5b5b2b5b5b2b5b5b6b5bdbebdcec7cedecbde29042900420c088c +695a7b694a7b714a84754a84694a9c6d4a9469428c71427b6d427b754a5261524a75a51030635a554a7359318469395a615221659c2171b51030523934317355 +316355313959633965844a699c18244a73756b7b715aa59284a5928cb5a69cada29ca59e9ca5a2a5adaeadbdbab5cec7cedecbde29042900390c108c615a8469 +4a846d4a846d4a7b65428c71428c7142736d3973795242554a6b7d7b4a4d525249427b5d318c6531946d39635d5229659c2169ad1838424241316b55316b5d39 +5a614a4a61635a6d9c10204a424531635d317b6d528c756394867394867b948a8c9c969cadaaa5bdb6b5cec7cedecfde290429004210188c615a84654a846942 +7b65397b65398c6d39846d39736931636942425952525d5a524531846139845d298c612994693963594a39618c215584213431524d29635131735d3173653963 +61524a5573424d6b2928106b613163552984714a8c7d6b8c7d73948684a59a9cb5aeadc6bebdd6c7cedecbde290429004a0c1084554a735d396b61297b65298c +6d319469318459218c6d296b5d296369524245396b55398461427b5d317b61318c65317359425a657b394d633938296359316b5929735d298465317359395a59 +5263695a4a41216b5d316b61217b6d39846d527b6d638c7973a59694bdb2b5cec7c6decfd6decbde290429004a081084554a84694a7b6d397b69298c6d319469 +398c61398c61298465396351396b554a7355397b59396b51317b6142845d317b5939635d6b4a49524a3c317359397359317b59298459317b5531635d42635d4a +6355396b55397b65316b5929846d528469638c7573a59694bdb6b5d6cbcedecfd6decbde2904290042102173494a73554a7359426b51296b51297351397b5542 +7b514a84515273494a7b554a8455427351316b51426b554a7355426b514263555a5245525a454a73514a7b51427b51398451397b55426b554a6b554a734d4a7b +554a7b554a734d396b49396b5142736163948284b5a6a5cec3c6decfd6e7cfe729042900290410421821310c08311400311c00311c0031140831101039081839 +0418390410421010420c004a1c00311810210c08311408291008291018210818290c18310c18390c08421008421008390c08311010290c10390c10420c10390408421010391408311408291010291018211418211418210c182108182904290005000000070101000000030000000000}}}{ +\cf1\loch\af28\hich\af28\dbch\af28 \nestcell{\nonesttables +\par }}{{\*\shppict{\pict{\*\picprop\shplid1026{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}} +\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1085\pich1032\picwgoal615\pichgoal585\pngblip\bliptag632555790{\*\blipuid 25b4090ee6c023eaa4f12def25cdc878} +89504e470d0a1a0a0000000d49484452000000290000002708020000001d08f6d10000000373424954050605330b8d80000000017352474200aece1ce900000c +874944415458474d58cf6f2449567e558ef446bab3dc113d99dd15332e70ccb4974da3465b46b3928d765663a43dec6d971be2c6811bbb42fc0dfc055c3870d8 +037358890b2bcd01a44602a91b31c846db626aa45ec811369bc954d219d8a1ca6877b89aef6579d1e66497632a23e3fdfedefb6aa444a97353fb2e4822dcf808 +24233e25450af8ff2c7591484915ebe01d494531287c1f02097e075f9148f9cdd84b11f014bb89d2107a99a541f4d82a231f4f78ca2f6227e92847569d96c773 +ca2808aa711cbf275321593cbfdf510665d22e761a4708bc089dc25484e03a5e67069f381ec252d14b72c3e99224cbea70600ca924aba4c5f5d8da995199d294 +9e7e783a667b334db9ee73495325f72c4d6d9fe94ae93aa70e5691ebf157ca0e6766aa93ba974ae36411eade7512cf82932c8e37b0d302deeac8d58a5c16cc63 +63a746e5b8b552388675ea236b3b26c18a76be73f0277c3bb8a481be19b9509b29756e81ef529912047348b00a4af65a7421c27417f0069c99111cae62af326a +da1aaab8e854cec121b87d90c241e488dc5d637e21935a6a230d36b2d2224c7384bc36194eaeec54055773d01002d212e120a76365652363133cccdea44a67a4 +b3d1e9cbaaab2b08933e68911a248ad27a22395e31f47dc0b5113e0e83f9bc55e0e01439930adcbc55291522d97d6365489b334948a5bb9d4ab832278d00c35b +ac4dd0b1d654975355bd38435011e6723a3578940e375e8c3d642301d98ac10d635833a437dcd26321452aa342dc52619c97b47fbcb8ac7fef1b64eba72654e4 +6b8a1036a4ae24050baeb186e5014fade886a7f2e49bf3329f1e1d1c963353ee5bbbc7c14eb374a3fac6f99b78f769b6c900244a47f079749b92e8052a44c374 +45dde9134dd57318977250a02f8c1e6a811d8e12eaa614e633bd68ebf2e3133333a7c727365727f3d2ceb4992a93c38943a66d64dff95c4053180173a17b6da9 +96b00f3775703e8ad8a0fa5b870a38b152564f55a8c9392514796932c99e68617138cc91fbd22173ca239bdb43587c0073558a8afad56b02370f3002bbd964a4 +1fea08d52153a5c8e6c1aa202fcfa71e7a747ddbb9883a54734573e1c2e2b976082d29e48740981b7b7d7648b09bdc7550fbd6ec9553541417840c4875383543 +ba292c78bd317db07e4bacf547c727695644917a84cbb5faa631b17e2247e9551ba34b803a32496fbc5dfbc37b22b8cb220d07db41081fdeb693317deb1d7ff4 +304104abab447f7062f60eed04a2a3dc151439b02c680d33872073b08588e293bffc648c8ce14073de4bd2369d5a460787f20018d1711694af425b75ad53a103 +5a9c96ea641f40cbbbe6fbea7b1fd27c9fa6d99065b1d7ecc5219f39a5f950a40bfcca450800dedcd8038c80dd6afbb7bef59dd33841ed465ac778334a288b42 +2f6f2843146567e3b258c74968b5f4939da8a7d27ca0d399269dccee53715f8cbe163c053fd6c983993007619c88318d28e956d7a3ad34061f6e4284ddeb410b +7caee189f493bff8f15676931dfda60d3797e97a6984d702b1854fa20b7e7455db75fdf55d289126e4d5bb6276900b3dc91eaaa88ad18e563b42eca462478cb6 +32bf4ec4fd2288e27a2d466214c7b1bdf210e3ae7c84ec95f7c1dfc21b6f46f08458c59ffcf8275b4f4438fd6d63c40bb35ee8abc5ebfffc2c71cbe426889be5 +84bc5835f1c6d1d841eae403430fb47c686967467246a2900240aa85980959d028be8eb10d898f4902680cb7fd2a4258bce10044880ef000ff89f877153efdeb +4fb766db941674f9efcf476fddeca19e2965328de299ed26f15535720e90ae1eca099cfc2017ef1d086de89e1113235334b6106e625c033027000977d5fa15e4 +f4c94eda79f445e1bde3c87b8785c705eb57c1c1a5eef5f3bffb872d2ff3dffdfd3ff0f9ec65483ffba279f98be5af41f676d0eea2ccdcec0163efec37728158 +3eb2b46bc4fb07f4a04063e5f41d45b11ec185fe46084a12a2ebff79f9dab7f5575e6cc978e3896ec30a3623e4916f349fff0dedd5d2bff28b7f7eb145bb071f +7efbb45e459115f2a1c1e3eadf5e5e7cf1a21879f6b9a0c9036058261ebc4be94ce633dac97852100997cd7a446f9147a8a400ef67db44af5f4e9251d746f487 +f6ca75ab08d5fac15c34fc8df968ea8879f5af2fb766e3c3ef7ee7bbc5a3023914639cec1afd4e21ef6517fff5e5ed16c5316539a5f78a4c19f424da2db84cc7 +903aa1885e1ac8bb1896e2c647283af6a35505c0715f3a7fe55ffcbcb978d5a138dd2b58eefc2a3a76382eef5bec69c6bdefb8dbb4755f2d0c0583e61f9ccef5 +e17c0e904ad55d4f63f4bf464b752cefffefa1196f8621ee65b1db2c6c4e46049b5199a53a7629c370159a057002ba32fe0fa8ba7520f547bf6393d78b837b4b +7af522f355b1f67637e17612bbc97614e330d1401a41db9ad681de12ad3c79dc3521637b1ff1e53a8871f4574d58bb800abecd606741c981926627cc767cb11d +8d8c26a37c37d52a3372529ffd6c8411e9d93f7e4a6f2a9576a16b9efdcbb34fffe629700d3d0a5be707a473b2384369959740d7a1130c9321a323fef5403498 +127ced1c4686d03b7217f4ec39fba817985e06cf00db0750eb13cdb3652feb7f6ab6b43af8c33ff951ff966e1f58f14e59d88fa22eeb572427997e4f1739fa39 +2022242317c7d771dd8a7182b940c62890dfeb288004eb25ddb47185c6e3b1f7b623ff152d1dbdfc8ace5bf27ba5d307eefefb7e627107f575392db347073fff +d9c548c9f2ecc5b3c5e20c4dcc60c0c9b46bfbeea24a3100c62a5c3eeb97e78893dd235370470ad20c830ada513a60355a3e9200912684a05ef2f416a20a64ce +1a3aafa99e18caad4433951867b981a6689631fdab3ffbf32d25267ffac77fe4572e19f7f4f696f13f065d188cbcc696612d9ba68dee3ab65efb2801c55f4373 +ba156befaf6a811ebe0ef1aa97e349fbdfa15b65e7ffe1fffe1c93a512dbfadddda2286609c645914070fe4ef16e9115f7338d04ccd4f94fff76ab10fa873ffa +a1eb834013d91efaea9a1b3af775d4128998a4fabe4ec632009919105d78e56e51a1378046bfac5b7f155faf447715fd6ab2f805555f85a82172a61fcd8af76c +f6ebef678f8a740b858ef13ec12421339545faeca74fc5c001a412d2712e70d31b467b3813427a60a5de2f319657d7f4f9178dbeae4e9fa0e73afcc7dc028c22 +4a2cabcb669a4b6465f9f848ef4bf9e444ed590c0c98860cc621a27ae9eaa6e618213ac855901b0a981571f1e078374e20961c4d9e3af8093e272003ba4b58fc +02392a24e6aeaaa167e754373c22748e9e3ea7f38b500595ce4a7bfc3dfbe1b17e320fc6b80c0d1d9440dbd9d43e06f952ae75f5256632163bee65df605a41cf +049d61b730d14136c1e948ab40aabba606f4e70da59361dec3601bd5f9053dbd048782865aa35c73aa127b26cacfc9d442d68cdc8e35bfab492e4b5340038b13 +e0b0aead5196cc4b7adf77cb3a74005a500d389389cda62a917a4ddbd5108ed04cad86299456810557916a528e549f4d95b5b43f0fb97502199e52cf51431c71 +4b4c951b0db0ceb4e5816eba71ea388d69583a77e9fa16c3f65dac592ae741e8e150f4bc6b3026044a42d822d0990b9fe3e1378e1b69aaa8319b523ea51c6005 +d6c21414c5c624ae1daa8fc92c04e36b96870ab2fb8766df721a733962478b44c753052845fae0eb8e6129b8b6867fbac6d56dc53e58365dacb02dcdad9d9f48 +e124a8d47e490718aa3951f486eee0b34f915128e68053982d0f232303030ff603d1c617088fef9817810320123d30925f771d6c863f40ae40bb3b5a76c121b5 +7a32f345e57ef0fd1f180dce6130f763bf017fe316c303e4e05b3e1a6e1b46d420b3411f0622fe9a2902f35894306aa9691c5098f706b05187f8d655f5e5a281 +e0252b503715f3ab83e9e9c7a7cdb52ce7c7d618b3a7f5cc30872cf0a9914a062c3757e881e904b4958b65f0c01dd9e7055b3cfc68003db83b21d7406543a85f +56c812bc8cf5026bce46160c95404dec1ec7b206afc6f03a3fd453540e00181d02a5c15a63cd3418f1da5c4330793a1e7ea718b20774196d2fa403ef43468f41 +c3ab0b0e2a082918ea62b1383f3f83f8eab2c67c523e2e8fbe797cf2ed93938f4f8db55553e3d783e990a87282d306b3800d83894c8f399f375c15193ee8314c +c67c632f7aee3558f05d5845c840ea71133044817581db7987d59c104578d66c3047495433325d97e511436e08e91b0ce504a6cf87b2e99cce2c6d1079279849 +40baa1fce13a0c8e1c4073d04a685247e5bc7c52322dc14e741b9c9b293867833ec3054df15b833d7a7252a227fac1441427bb95e84da064e3c6cda977ceb833 +7a633ae81e0ec4f0381020de81df7a4a9a83a235be615447cc22a2e2184b016d43c20fb4fd2e6319ef86e0e1c2663ee757f8f4ddfa97fa6efefe5297e1d78e0d234344707e94ff07bb61fa6ed3bbcc810000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1085\pich1032\picwgoal615\pichgoal585\wmetafile8\bliptag632555790{\*\blipuid 25b4090ee6c023eaa4f12def25cdc878} +010009000003b809000000009409000000000400000003010800050000000b0200000000050000000c02270029000500000007010400000094090000430f2000 +cc000000270029000000000027002900000000002800000029000000270000000100180000000000e4120000c40e0000c40e0000000000000000000031002939 +0c39210021290029310c39310839210029290029310431310029310029310431290031290431210431290831210429210021210021290c312904292908292908 +2929042929042929082929082929082929082929082929082929082929083129082929082921042121002121002121042129042931003100311021b59eaddecb +d6ded3d6e7dbe7efe3e7e7dbdef7e7e7efdbdee7d3dee7d3dee7d3deded3ded6d3deb5b2bd84828cada2b5a596a5ada2adc6bacec6b6c6cec3cecebececec3ce +d6c3d6d6cbd6decbded6cbd6d6cbd6decfdedecfdedecbdee7cbe7dec7e7d6bed6c6b2c6b59eb5a592a5ad92adbd9ab53100290021101084757b7b75738c8684 +9c9e9494968c848a7b9c9a8c9c9a94b5aeadcec7c6cecbcececfceced7de94aaad4a555a84868c9c9e9ca5a6a5bdbec6c6c3c6cecfd6d6d3d6d6d7d6cecfd6d6 +d7d6d6d7ded6d7d6d6d7d6dedbdededbdeded7dee7d7e7decfe7d6cbd6cebeceb5aab5ad9aa5ad9aadbda2bd290429001804187b697b6b61737b79847b7d846b +71735a6163636563524d4a63595a7369737b75848c92a5a5b2c68496ad394d5a525d639ca29cadaeadbdc3bdc6cfceced3ced6dbd6ced7d6ced7d6d6d7d6d6d7 +d6ced3ceced3ced6d7d6d6d7d6ced3d6ded7ded6d3ded6d3d6d6cfd6c6c3c6bdb6b5bdb2bdceb6ce2904290021082194869c847584847d8c84868c949a9c8c92 +946b6d6b6b696b5a555a4a454a42455252556b63718c63759452657b313c42848684a5a6a5b5b6b5cecfceced3ced6d7d6cecfced6d7d6ced3cececfcececfce +cecfceced3ceced3ceced3d6dedbded6d7ded6d7d6d6d7d6cecfc6c6c3bdc6bac6cebace29042900210421a58aa58c7d8ca5a2a5adaeadadb2adadb2ada5aaa5 +94928c8c86847b717b635d6b39415231385239516b5a6d843938425a555a948e94a5a2a5c6c3c6d6cfd6d6cfd6cecbcecec7cec6bec6bdbabdc6bec6c6c3c6ce +c7ced6cfd6d6d7ded6d7d6d6d7d6d6dbd6d6dbced6dbced6d7ced6cfd6decbde21082900290821bda2b59c869ca59aa5b5aeb5bdbebdc6c3bdc6c3bdbdb2adad +a29c8c868c736d7b5a596b393c52212c42182c4231455a2124317b757394868cada6b5bdbecebdbacebdbac6bdb2b5b5aaadada6adb5aab5bdb6bdc6bec6d6c7 +d6ded7ded6d7d6d6dfd6d6dfd6d6dbceced7ced6d7ceded7d6decfde21042900210421ceaece9c86a5a59eb5b5b2bdc6c7ced6d3ceded7cecec7bdc6bebdada6 +ad8c86946b65734a515242494a21344200305a10385a29282173695a636d8c6b86b594a6ce8c96ad94968c9c9e949c96a5a5a2b5a5a6b5c6becedec7d6e7d3de +ded3d6d6cfced6d3ced6d7ced6d7ced6d7ced6cfc6cebec621042900210c21cebed6a59aadb5aabdbdbac6cecbced6d7d6ded7ceded7ced6cfcec6babda59aa5 +7b7d846b6d6b5a615a39556b215da5104d940814183938393155844269ad4a71ad39557b6b756b8c8a7b948e94a5a2b5a5aeb5bdc7ced6c7d6decbd6ded3d6de +d7d6ded7d6d6d3d6cecfcececbc6c6beb5bdb2b521043100181018ded3deb5b6bdbdbec6bdc7c6c6d3ced6d7d6d6d7cededbd6decfc6d6cbc6b5aaa58c8a8c73 +797b52616b2955842165ce185dc6001442001039184d9c316dce3969bd21417b52616b7b7d73948a8ca5a2a5adbab5c6d7ced6dbd6dedbdeded7ded6d7deced3 +d6ced3d6cecfceb5b6b59c9e949c929c21043100180c18e7dfe7cecbcececfcececfceced7d6cedbd6ced7d6d6dbd6d6cfc6ded3cec6bebd9ca2a5737d8c3149 +63103c731865de1865e700308400145a084db5216dde215dc600206b21416b5a697b84869c9ca2adb5c3b5c6d7c6ced7c6d6d7ceced3d6ced3dec6cbd6c6cfd6 +bdc3c694969484827b948a9421043100210421f7e3ffdecfdedecfd6d6d3ced6d3ceced3d6c6d3d6ced3debdc7ceced3d6c6cbceadb2bd738294213c5a002c63 +186dd60869de004db500309c0055ce1065d60851b5000c63003c8c3165ad6b86c6949ec6bdc7ced6dbceced7c6ced3c6c6cbd6c6d3debdcbd6b5babd9ca6a584 +868484867bad9ea529042900210429ffe3ffdecbdedecbced6cfcececfcec6cbcec6cbd6c6cbd6bdc7cec6cbd6b5bece9caac6637da521497b003c8c1069ce00 +61ce0065d60061d6006de70869d60861c60045a50859bd216dce4269bd4a65a58492ada5aebdb5becebdc7d6b5c3ceb5c3cea5aeb58c969c8c9294949a94a5a2 +94b5a6a529042900210821f7e3f7d6c7cecec3cececbcececbcecec7cececbced6cfd6d6d3debdbed68c9ebd638ac63971c6105dce0865de0075de0075de088a +e7088ae70886e70079de0875de1879e7106dd62169ce10459400246b294d844a6da56382c67b8ece8c9ab58c969c7b868c7b82848c8e8ca5a294b5aa94b59e9c +31042900210818efdfefc6bec6bdbec6c6c7cececbcecec7cedecfd6cec3ced6d3e79caace4a75ad1859ad0055bd0065e7087df71896f7219aef219ef71896ef +219ef7219eff188ef72192ff107de71879de0055ad0030841855a53165bd4269c65265ad5a698463656b73716b8c867b9492849c9684a59a84b59a8c31042100 +290810efdbdebdb2b5c6babdd6d3d6e7dfdedecbcebdaebdada6c68ca2ce5286c62171bd005db50079d6088eef109af729a2ef31a6ef39a6f742aaff42a6f731 +a2f7219af71092f71096f7088af70075de006dde1069d62969ce29519c29386b424552635952736d5a7b756384755a8c7d5a9c8663a5827339081800311021ef +dbe7cecbded6dbe7d6dbefcecfe79492a54a496b31417329518c1865b5006dc60079d6008ae7189eef21a6ef42b2f74ab2f752b2ff5ab2ff5ab2ff52aeff39ae +ff29aaff109ef70092f7008af70079e7005dce00389c00186b000c4229344a39414a42494a4a4d4a52514a63594a7365527b655a31042100180021cec3e7adbe +e79cc7f784b6ef4a82b508346b00246300206b002c840051b50065c6108ae7219aef4aaeff52b2f75abaf763baf763baf763baf763b6f75ab6f74ab2f742b2ff +29a6f70896e7009ae7008ade006dce00349400248400287b00246b002c6b08346b103863183c6329415a31414a39384a210031002908319486ad6b7da55a82b5 +396d9c31699c31619c4271b53165b51861bd0869ce0075de2196f739a2ff63b2ff6bbeff7bcfff7bd3ff84d3ff7bcfff7bc7ff6bbef75abaf74ab6f74abaff29 +a6ef089ee7089ae71882de1061bd2159b53969bd3165ad2961a529599429558c315984425d7b52657363617b18003900310018bd8ead94829473717b737d846b +7d844a5d734a658c3161a52165b50065c6087de72196f74aaeff6bb6ff84cfff8ce3ff94ebffa5ebffa5e3ff8cd7ff73c7ff5abaff4ab6f752baff39aef7089a +ef109af71071d62161b529518442597b394d6b39496331455a31415239454a42454a4a4d4a5a4d5229042900420c21b58a94ad968c9c92847b7d6b73756b5a65 +7339517b00307b0045a50055bd0079de2192ef4ab2ff73c3ff94dfff94ebff9cf3ffadf3ffadebff94dbff73c7ff5abaf752b2f752b2f74ab2ff1096ef1092ef +105db5295d9c294563394d524a515a52515a52555a5a595a5a595252514a524d425a454a290429003114089c8a7b7b755a73755a63715a39515218305a002873 +0845b50055d60061de0075e71896ef42b2f76bc3f78cdfff9cf3ffa5f7ffa5f7ff9cebff8cdbff73cbff6bbef763b6ef6bb2ff5aaeff188ede2186ce31699c5a +799c5a75846b797b7b7d8473757b7371736b71736b6d6b6b69636b695a73656b29042900180c1084868463756b425d5221414a18415a4265a54271c62961ce10 +65de0065de0065d61896f739aaf75ac3f773d3f794f3ff9cf3ff9cefff94e3ff7bcfff6bbeff6bb6f76baeef63aef74a9ee7217dbd2975a54a758c738a947b8e +948492948c8a8c848284848284848284848284847d7b7b797384717b29042900080839394d73083c6b1055843175ad3975b54a71b55271b54a71b518519c0041 +a50065ce0879de219aef39aeef5ac7f76bcfff7bcfff8cd3ff8ccfff6bbaff5ab2f763aef763b2ff52aef7318ece4282ad5a869c84a2a58c9a949c9e9c949694 +9c96949492948c8e948c8e948c92949496949c9294a58e9c290429001004396b699c4a719c39719c31699c2155843955844a598439557b29558c0851ad0059c6 +0061ce1882e7299eef31aaf74ab6ff5abaff6bbef76bbaef5ab6ff52b6ff52aeff4aa6f73192de398ac6638aa58492949caaa5a5aaa5a5a29cada6a5ada6a5ad +a6a5a5a2ada5a6ada5aaadadaeadb5aeb5bdaabd2904290031001894697b84716b7b756b7b7d7b7b7d7b7b757b6b697b525d6b3155841861c6186de72165d608 +59c60875de1892ff2196f731aaff42b2ef42aee731aaff29a6ff189ef7188ee7217dc64a8abd849aad9ca29cadb2adb5bab5adaea5bdbab5b5b2adb5b6b5b5b6 +bdb5babdbdbec6c6c3c6cec7c6d6c3d6290429004a0c18b57d7bad866b9c7d5a947d5a84755a736d6b63657352617b42699c3171c6185dbd1855ad084dad005d +d60065e71079e72192ef299ae72196de1892f7108ef70082e70079d62171bd4a79ad94a2adadaea5bdbabdc6bec6bdbebdcecbc6c6c7c6c6c7c6cecbcececfd6 +ced3d6ced3d6d6d3d6e7d3de29042900390c109c717394756394755a94825a7379634a65733155844269ad4269a542699c295173215173215594105dde0859de +105dc61065c61069ce1071d61071d6006dce0069d61071de2165bd395d94949aa5bdb6adcec3cec6c3ceced3d6ced3ced6d3ced6d3d6d6d3ded6d7ded6d7d6d6 +d7d6ded7d6e7d3de29042900290c089479739c7d6b8c755a73715a52615a42657b39658c42659c4259844a5d634a5d6342657b3169a52165ce1859ce00348410 +458c185dce1869d60051a50038840049a52165c63169bd4261948c9294c6baadd6c7d6cec7d6d6dbdeced3d6d6d7d6d6d7d6d6d3d6ced3d6ced3d6ced3d6d6cf +d6decbde29042900311c088c75637b69526b6552636d735a717b63757b636d6b4a55526b695a73694a5a5d5a315d8c3979bd2965b508387b21304a31456b3169 +c6316dd6103c84001c4a18345a395584426dbd4a75ad637d73adaa94c6babdcec7d6d6d3d6ced3cededbd6d6d7ced6d3d6cecfd6ced3d6ced3d6d6d3d6decfde +290429002914008c796384795a6b6d525a656b5a616b6b615a6b5d4a7b714a8475428471426b716329619c296dbd29558418344a5a59524a555a3169b53169c6 +1838731820394a41394a555a426da55282bd425d63848e7bada6a5cec7c6cecbceded7d6d6cfc6cecbc6c6c3c6c6c3c6c6c7c6c6cbced6cfcedecbde29042900 +3910089475637b715273714a736d5273614a8c69528c654a8c714a8471398c7942525d4a3975b5215da521344a5a55427361425a655a2165a52975c6102c5a31 +2c396b553952513931597b4a82b53155735265738c9284b5aa9cb5a6a5cec3c6c6c3bdbdbab5b5b2b5b5b2b5b5b6b5bdbebdcec7cedecbde29042900420c088c +695a7b694a7b714a84754a84694a9c6d4a9469428c71427b6d427b754a5261524a75a51030635a554a7359318469395a615221659c2171b51030523934317355 +316355313959633965844a699c18244a73756b7b715aa59284a5928cb5a69cada29ca59e9ca5a2a5adaeadbdbab5cec7cedecbde29042900390c108c615a8469 +4a846d4a846d4a7b65428c71428c7142736d3973795242554a6b7d7b4a4d525249427b5d318c6531946d39635d5229659c2169ad1838424241316b55316b5d39 +5a614a4a61635a6d9c10204a424531635d317b6d528c756394867394867b948a8c9c969cadaaa5bdb6b5cec7cedecfde290429004210188c615a84654a846942 +7b65397b65398c6d39846d39736931636942425952525d5a524531846139845d298c612994693963594a39618c215584213431524d29635131735d3173653963 +61524a5573424d6b2928106b613163552984714a8c7d6b8c7d73948684a59a9cb5aeadc6bebdd6c7cedecbde290429004a0c1084554a735d396b61297b65298c +6d319469318459218c6d296b5d296369524245396b55398461427b5d317b61318c65317359425a657b394d633938296359316b5929735d298465317359395a59 +5263695a4a41216b5d316b61217b6d39846d527b6d638c7973a59694bdb2b5cec7c6decfd6decbde290429004a081084554a84694a7b6d397b69298c6d319469 +398c61398c61298465396351396b554a7355397b59396b51317b6142845d317b5939635d6b4a49524a3c317359397359317b59298459317b5531635d42635d4a +6355396b55397b65316b5929846d528469638c7573a59694bdb6b5d6cbcedecfd6decbde2904290042102173494a73554a7359426b51296b51297351397b5542 +7b514a84515273494a7b554a8455427351316b51426b554a7355426b514263555a5245525a454a73514a7b51427b51398451397b55426b554a6b554a734d4a7b +554a7b554a734d396b49396b5142736163948284b5a6a5cec3c6decfd6e7cfe729042900290410421821310c08311400311c00311c0031140831101039081839 +0418390410421010420c004a1c00311810210c08311408291008291018210818290c18310c18390c08421008421008390c08311010290c10390c10420c10390408421010391408311408291010291018211418211418210c182108182904290005000000070101000000030000000000}}}{ +\cf1\loch\af28\hich\af28\dbch\af28 \nestcell{\nonesttables +\par }}{{\*\shppict{\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn posh}{\sv 2}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}} +\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1085\pich1032\picwgoal615\pichgoal585\pngblip\bliptag1057133062{\*\blipuid 3f029206024f6b118a7b7cfe78b5d351} +89504e470d0a1a0a0000000d49484452000000290000002708020000001d08f6d10000000373424954050605330b8d80000000017352474200aece1ce9000007 +bb4944415458476d584d8b24c711cdeec99ecdf456a12a9885eee31ef738061f56078164ec837c306840c2bfc17bf62f11fe233e6b7530f817e8a083600f3af4 +c22e74811a3af11683de7b1199552d6d4ed0935d9595f1912f5e44f5661f5e8c7787e3f95452083160a4984a299c455c0a9a9530871412bfcf762d7131e67a24 +c45ce68b66cbe0e23ab489ad948a529e9fd3e6c5f0f2fee51f4b0c2525ae980b7473fbc209aedbf08d9a325dac3baeb4984175b41b57bae146296ffef3bfcd3e +dd3ffce32174f08a7b5de690a109f373a1dfd84b9f16813297e36c31e1c06268e2d76b95bc8730d0ee9cdc94252a650ee399ba6fba38fef92f9fcdb71112fb98 +9fc6b89dd39314b6521a437c12e39390728a3733428f65e53686ed7cc1d6db5020b021eee61816816a5cb9dde1f1791be614309fb75843098f33b679f7d3cf37 +cfba675f7ef5f7dd277dee77fd90fb2ef739e63fc4fe6982c4a7297531757d8f6760cd93b0d9c8c739e610378f73f93fdc9be3e32e3e8688050a01e7fa34e318 +1d59c6406c0374c7799e7efcf92685fee19baff3001d50121346dc0d5d8ef0f436efd26673bbeb71e376ce309c27d06f6e22f78553dbb003ccc226df12a81c5b +09e636e19a1811517d4d5a12b1fe31bcfbe10d4d4d5093f2388c549cd2d8a5dcf1cb38a401a31b5207cbf83976a3ce12b137e1dc4e3d57543630e30aa0830746 +804b9225426ec6ad2d1cd4760e1f6e812b423b0477618a0f05c5063044836937ffa78eb1a6321360cca3cf8c858c008c920582b9e19fa7a138531f6ecb153ee0 +895b21cdedb84ce799725652d8f132292cddf994049720d2daf63123ec8ad4f1e869a606ace1d4094446b481c042901ea49d72619c3f2c7753b4bcc3e72232cf +38ca456c21fe50ca0a8555b3694512b781af17a63554522b92def235c3af5d483b77059321af24724e2f793421f40141c7275deb01ee904127446a554c4bc48b +507629e5749e28d3349d4b99f057a67338953015dc04be16a6aaeeafd80d66217ebb2530b6da8e8c28c199f1bc19075ad13673bfcf97693a1da7132c38ca8813 +0d3052b3d3e501cb33c79f1d30b75e80c6731f62400a1fba7418c6c31de4808974db7954a3ec841000683979fc31bfc8ddcb6405836036a515bb641a5c001e49 +c8660fd700e1102ace7b2a1e9edfed0ff8db1f8835e7d95a8e8cbd49ec8a52438e54825797305a46b8844ba61814da45e47441d9180a53fc10d2400910780d23 +b70bc871484bace087a981295449cc28bb9a57a91b21234849b25c67002808b5652feeee8dac62065f33d1452a2c050e75e50c8006ee3f21c2a8005c91755716 +5e679d539b5968ace09f173b0a7bd6488679e9d1547dd3ed2d6ce3d912cbc036a713312c2f798a9540486ae20c036a3de876064950e09ef0dbee3ae85a0857e7 +a529b1f6e6ed11727c7f7cfbfead207df22664c52dda57da8d9b9cb9aa297e1c8415cbc1720004a0b35b75c3fd0961b3efee5ffdeb9f08135b17fca942726f1e +b031a2f3a295019e8b41e13ac5115b4bb0abe19543d5c33b11a26708c3abbf3e6ca112c1129e95bb96b55d0d94f8cfca83069790db592d2c8bbc7e789151ad83 +eb14c5009f6031acd41188536a03869897dcad09a2da6e5eaa50d67e4745f36a2cec66070c18bb0e43fbea93e8b91ee4f33df2fd6e20dddc8de81a44c15e241b +4bc82dd473a72d079d3c30ad4e501e39076383aa573cc329b856744bac39cfdd1df664bb018258ad4c9473f6985056aba1e0a7a2c92bad663bdadb23ae0ff526 +98e0a4b4fb1649c97ec5ab7a9bcbbf9a489e2d96603579a9b279ace6150506bc8b0e9569d2da753f26ac359274d050b7da89654358df1a8cb5ef8e34a6c02ac8 +5608ec9ef3abca8dd560bc6f40680a8a7d61bdff10ca8782af175218fcd6c3cc10d663db77d56c685bef02985466b8ba1819ddda12bdbb78ef662dc632cea7a9 +4a017dfd82afd24da3b4bfcec03b2977bd965b1eb6f1946797e7959f77f59b9d93da1b8ade1c283806c859c239da028684ba69af8007c6a07f8e29e13c8691c2 +3a683511c85852c50a43c3a059b0b401febd5d25710110dedacaef867e3e074761879a0164d3c0d618c52aa73e0f192dbca5ec8ad24517bc6abdacb78b1ec845 +f9625f8310275b12a415164b1e6f7a734279ec47efc28cb4a0840d5add9310e1c5a1277781cec85fd6322866d6aa32a3aab44425cb2be64eda5ef9c14d7832af +eb811e1620f402e0eadd85da7f0d3dfa43bc4d343aab8c6b750784d1b145c46d9007180c1ba196bc78fdfd6b78052896a857821480c35555a881222acb49394c +137840d6f42564f6d57bc9faaca32d6f23a12681541e3e7fc07b09df57013cd8b2c72bcf8c7eb430244b45526ae92548996a801242d5968bc6afb6ffcd17ab37 +56a52a7928e6a8d6e35d06a0a682b43b62c5a0171cbefd47d28429569543fa4e528cdec38a9fd4bb2cef006b1a2790886db84b8f353c909bfdf0fcf57fbf2be7 +497d09390151c5eec89fc57c7116430762aa550da06049364ac7828fb94e25e8bd6ca805951dfc41e06f2fbf602d99de4d08267aa6e37bb42c3839bc811e2e33 +5e7cc07da43fe38afa12a4f7a69d29b6d2863c347a6c3eb5b9d85a4cac860e5a8910736bf37c78f1edbfbf45cf8c5702f08e990fe791d9662ed79967cbe0cf21 +84d9ba57f95d79f6c797075b72d39a4ffff4c5e63edcc3eae93cd16684c5ca0326cbcf2a6b9c2fb1e52f41ed87a18fbc22ad6d1534daa158419ad3af83dd29f97217a6cc0000000049454e44ae426082}}{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw1085\pich1032\picwgoal615\pichgoal585\wmetafile8\bliptag1057133062{\*\blipuid 3f029206024f6b118a7b7cfe78b5d351}010009000003b809000000009409000000000400000003010800050000000b0200000000050000000c02270029000500000007010400000094090000430f2000 +cc000000270029000000000027002900000000002800000029000000270000000100180000000000e4120000c40e0000c40e0000000000000000000031003139 +0c39290029290029290431290829290829290c312104292104292104292904292904292904292900292900292904292904292904293108312904293108313108 +3129042929042929042929042929042929042929042929042929042929042929042929042129082129082129082129042129042931003100291021bda6b5d6be +cecebac6c6b2bdc6b6bdc6b6bdb5aeb5c6babdc6babdc6babdc6bac6cebec6cebac6cebac6cebac6cebac6c6bac6cebec6d6c7ced6cbcedecfd6ded3deded3de +e7d7dee7d7dee7d7dee7d7dee7d7dee7d7dee7d7dee7d7dee7d3e7e7d3e7e7d3e7efd3e7efd3e7efd3e7efd3e7efcfef31042900211018cebec6cec3c6cec7c6 +c6c3bdc6c7bdcecbc6d6d7cebdc7bdbdc7bdbdc3bdc6c3bdc6c3bdc6c3bdc6bebdc6bebdc6beb5bdbeb5c6c3bdcecbc6d6d3c6dedbd6e7dfd6dedfd6ded7ced6 +d7ceded7ced6d7ceded7ced6d7ceded7ceded7d6ded3dedecfdeded3deded3d6e7d3d6e7cfdee7cfdee7cbe729042900211018ded3d6cec7ced6cfd6d6d7d6ce +cfcec6c7bdbdc7bdc6cbc6c6cbc6c6cbc6c6cbc6c6c7c6c6c3c6c6c3bdc6bebdbdbeb5bdbeb5bdbeb5c6c7bdcecbc6ced3c6d6d7ced6d3ced6d7ced6d7ced6d7 +ced6d7ced6d7ced6d7ced6d7ced6d7d6ded3d6ded3d6ded3d6ded7d6ded7ceded3d6e7cfd6e7cbde29042900180010e7dbe7e7d3ded6cbcececbced6cfced6d7 +d6d6d7ceced3ceced3c6cecfc6cecfcececbcececbc6cec7c6c6c3bdc6bebdbdbab5bdbeb5c6c3bdcec7bdcecfc6d6d3cececfc6d6cfc6d6cfc6d6cfc6d6cfc6 +d6cfc6d6cfc6d6cfc6d6cfc6cecfcececfced6cfc6d6cfc6d6cfc6d6cfc6decbcedec7d629082100291021dec7d6dec7d6e7d3dee7d7ded6cbced6cbc6d6d3ce +d6d3ced6cfced6cfced6cfced6cfced6cbced6c7ced6c7c6cebebdc6bab5c6bab5cec3bdcec7bdd6cbc6decfced6cbc6d6cbc6d6cbc6d6cbc6d6cbc6d6cbc6d6 +cbc6d6cbc6d6cbc6cecfc6ced3c6ced3c6ced3bdd6d3bdd6cfc6d6cbcedec7d629082100290c18e7cbd6efd3dedec7ced6cbc6decfceded7d6d6cbc6d6cfced6 +cfced6cfcedecfcedecfcedecfcedecbced6cbcecec3bdcebab5cebab5cebebdd6c3bdd6cbc6decbc6d6c7bdd6cbc6d6cbc6d6cbc6d6cbc6d6cbc6d6cbc6d6cb +c6d6cbc6cecfc6cecfbdcecfbdcecfbdcecfbdd6cfbdd6cbc6d6c7ce29082100290c18decfd6decfced6cfc6cecbbdcecfc6d6cfc6cec7c6d6cbc6d6cbc6d6cb +c6d6cfc6d6cfc6d6cbc6cec7c6cec7c6cebeb5c6beb5c6baadc6beb5cec3b5cec7b5cec7bdcec7b5cec7bdcec3b5c6beb5c6baadc6b6adbdb6adbdb2a5b5aea5 +b5b2a5b5b6adbdbaadb5baa5b5b6a5b5b2a5bdb6adc6b2b529042900210c18decbd6d6cfced6cfbdcecbbdcecbbdcec7bdc6bebdcec3bdcec3bdcec3bdcec7bd +cecbbdcecbbdcec7bdcec3bdc6beb5c6baadc6baadc6beadcec3b5cec3b5cec3b5c6beadc6baadbdbaa5bdb6a5bdb2a5bdb2a5b5aea5b5ae9cb5aa9cb5aa9cb5 +aea5b5aea5b5aea5adaa9cadaa9cb5aa9cbda6a529042900210821dec7d6d6c7cecec7bdc6c7b5c6c3b5c6beb5bdb6b5bdb2b5bdb6b5c6baadc6beadc6c3adc6 +c3b5c6beb5c6beb5c6baadc6baadc6baadc6baadc6beadc6baadbdb6a5bdb6a5b5ae9cb5ae9cb5ae9cb5ae9cb5aa9cb5aa9cada69cada69cada69cadaa9cadaa +9cadaa9cada69cada694ada694b59e9c29042900210421dec3d6d6c3c6cec7bdc6c3bdc6beb5bdb6b5b5aeadb5aaa5b5aaa5b5aea5bdb2a5bdb6a5bdbaa5bdb6 +a5bdb6adc6b6a5c6b6a5c6b6a5c6baa5c6baa5bdb6a5b5ae9cb5aa9cada694b5aa94adaa9cb5aa9cb5aa9cadaa9cada69cada69cada69cada69cada694a5a694 +a5a69cada694ada694ad9e9c29042900290421debed6d6bec6cec3c6cec3b5c6bab5bdb2adb5aaa5ada29cb5a69cb5aa94b5ae94b5b294b5b29cb5b29cb5ae9c +bdb2a5c6b6a5c6b6a5bdb6a5bdb69cbdb29cb5aa94ada694ada694b5aa94b5aa9cb5aa9cb5aa9cadaa9cada69cada69cada69cada69cada69cada69cadaa9cad +aa9cb5aa94b5a2a529042900290829debed6cebec6cec3bdc6c3b5c6baadbdb2adb5aa9cada294b5a294b5a694b5aa8cb5ae94b5b294b5ae94b5ae94bdb29cc6 +b29cc6b29cbdb29cbdae9cb5ae94b5aa94ada694adaa94adaa9cb5ae9cb5aea5b5aea5adaaa5adaaa5adaaa5b5aea5b5aea5b5b2a5b5b2a5b5b2a5bdb2a5bdb6 +a5c6aead29042900290821debececebabdcebeb5c6beadc6baa5b5aea5b5a69cada294b5a294b5a68cb5aa8cbdae8cbdb294bdb294bdae94bdb29cbdb29cbdb2 +9cbdb294b5ae94b5aa94b5aa94ada694b5aa94b5ae9cb5b2a5b5b2a5b5b2adb5b2adb5b2adb5b2adbdb6adc6baadc6beb5c6beb5c6beb5c6beadcec3adcebabd +29042900290818d6bec6cebab5cebeadc6beadbdbaa5b5ae9cb5a694ada28cb5a28cb5a68cb5aa8cbdae8cbdb294bdb294bdb29cbdb294bdb294bdae94bdae94 +b5aa94b5aa94b5aa8cada694b5ae94b5b29cbdb6a5bdbaadbdbaadbdbab5c6beb5c6beb5c6bab5c6beb5cec3b5c6c3b5c6c3b5cec3b5cec7b5d6c3c629042900 +290c10ceb6b5cebaadcebea5c6be9cb5b294b5ae94ada68cad9e84b5a284b5a684b5aa84bdaa84bdae8cbdaa94bdae94bdaa8cbdaa94bdae94b5aa94b5aa8cb5 +a68cb5a68cb5aa94b5ae9cbdb6a5c6beadc6beadc6beb5c6beb5c6beb5c6beb5c6beb5c6beb5c6c3b5cec3b5cec3b5cec3b5d6c7b5d6c3c629042900290c10bd +a29cb5a694b5aa8cadaa84a5a27ba59e7ba59a7bad9e84b5a284b5a684bdaa84bdaa84bdaa8cbda68cb5aa8cb5a28cb5a68cb5aa8cb5a68cb5a28cada284ada2 +8cada68cb5ae94bdb29cc6baadc6beadc6beadc6bab5c6bab5c6baadc6baadc6baadc6beadc6beadc6beb5c6beb5cec3b5d6c3bd29042900291010a58e84a592 +7b9c96739c966b9c966b9c9673a59a7ba5967bad9a7bad9e7bb5a27bb5a67bb5a284ad9e84ad9a84b59e84b5a284b5a284b5a284ada284ada284ada284ada284 +b5aa94bdb29cc6baa5c6baadc6baadc6baadc6baadc6b6adc6b6adc6b6adc6baadc6baadc6baadc6baadcebeadd6bebd290429003110109c827b9c8a73948e6b +948e6394966b9c926ba59a7ba59a7bad9a7bb5a27bb5a67bb5a684b5a284b59e84ad9e84b59e84b5a284b5a284b5a284b5a284ada284ada284ada284b5aa8cbd +ae94bdb69cc6b6a5bdb6a5bdb6a5bdb2a5bdb2a5bdaea5bdb2a5bdb2a5bdb6adc6baadc6baadcebeadd6bebd29042900310c189c82849c8a7b9c8e73948e6b94 +926b948e6b9c8e73a5967bad9a7bad9e7bb59e7bb5a27bb5a27bb59e84b59e84b59e84b5a27bb5a27bad9e7bad9e7bad9e7bad9e7bad9e7bada284b5a68cb5aa +94b5aa94b5aa94b5aa94b5aa94b5a694b5a694b5a69cb5ae9cbdb2a5bdb6a5c6baa5c6beadd6bebd29042900310c21b5969cb59e94ada28ca59e84a59e7b9c92 +739c8e739c8e73a58e73a5926ba5966ba5966bad9673ad967bad967bad9a7bad9a7bad9a73ad9a73a59673a59673a59673a59673a59673ad9a7bad9a84ad9e84 +ad9a84ad9a84ad9a84a59684a59a8cad9e94ada694b5ae9cbdb2a5bdb6a5c6baa5cebab531042900310c21ceaebdceb6b5c6b6a5bdb29cb5aa94ada284a5927b +9c8e73a59273a5926ba5966ba5966bad9673a59673a59673a59673a59673a59273a59273a59273a5926ba5926ba5926b9c8e73a59273a59273a59273a5927ba5 +927ba5927b9c8e7ba59284a59a8cada294b5aa9cbdaea5bdb2a5c6b6a5ceb6b531042900290421d6b6c6d6bebdcebeb5c6beadbdb29cb5a6949c927b9c8a739c +8e73a58e6ba5926ba5926ba5926ba58e6ba58e6ba5926ba5926ba5926ba5926ba5926ba5926ba5926ba5926ba5926ba59273a5926b9c8e73a59273a59273a58e +739c8a739c8e84a5968cada294b5aa9cbdaea5bdb2a5c6b6a5ceb6b531042900290c21d6bac6d6bebdcec3b5c6beadbdbaa5adaa94a59a8c948e7b948a739c8e +6ba5966b9c926ba5926ba5926ba5926ba5926ba5926ba5926bad966bad966ba5926ba5926ba5966ba5966ba5966ba5966ba5926ba5926ba5926b9c8e739c8e73 +9c8a7ba5928cb5a29cbdaaa5c6aea5c6b2a5c6b2a5ceaeb531042900290c18d6bac6cebebdcebeb5c6baa5bdb6a5ada6949c9684948a7b948a73948e6b9c926b +9c8e639c8a63a58e6b9c8a6b9c8a639c8a639c8a639c8a639c8a639c8a5a9c8a5a9c8e5a9c8e639c8e639c8e639c8e639c8a639c8a639c8a6394866b9486739c +8a7ba59684b5a294bdaa94bdae9cc6b29cc6aaad31042900290c21d6bac6cebabdcebeb5bdb6a5b5b2a5ada2949c968c948a84948a73948e739c92739c8e6b9c +8a639c8a6b9c86639c8a639c8a639c8a639c8e639c8e639c8e5a9c8e5aa58e5aa58e5a9c8e5a9c8e639c8e5a9c8e639c8e639c8a639c8a639c8e6b9c926ba59a +73ada27bb5aa84bdae8cc6b28cc6aa9c31042100290c21d6b6c6cebabdcebaadbdb2a5bdb2a5ada294a59a949c928c948e849c927ba59a7ba59673a59273a592 +73a58a739c8a639c866394865a94865a9c865a9c865a9c865a9c8a5a9c8a5a9c86529c865a94865a94865a94865a94865a94865a948a5a948a5a9c8e5a9c9263 +a5966ba59a6bad9a73ad928431082100290821ceb6c6ceb6bdcebab5bdb2a5bdb2a5b5a69cada29ca59e94a59e94ada294b5a68cb5a28cb5a284b59a84ad927b +9c8a6b94866394825a94825a94825a947d52947d529482529c825294825294825294825294825294825a94825a94825294825294864a94864a94864a94865294 +865294865a9c826b31082100290821ceb6c6ceb6b5cebab5c6b6adbdb2a5b5aea5b5aaa5b5aaa5b5aaa5bdb2a5bdb29cbdb294bdaa94b5a694ad9a8ca5927b9c +8e6b9c866394825a94825a947d52947d52948252948252948252948252948252947d52948252947d5294825294825294864a94865294864a94824a9482529482 +5294796331082100290c21ceb6c6ceb6b5cebaadc6b6a5bdb6a5bdb2adbdb2adbdb2adbdb2adbdb6a5bdbaa5bdb69cbdb29cbdae9cb5a694a596739c8e6b9486 +5a947d528c7d528c794a8c794a8c7d4a8c79428c79428c79428c79428c79428c79428c794a8c794a94794a94794a94754a94794a94794a8c75529475528c6d5a +31042100290c21ceb6bdceb6b5c6baadbdb6a5bdb6a5bdb2a5bdb6adbdb6adbdb6adbdb6a5bdbaa5bdb69cbdb6a5bdb2a5b5aa9cad9e7ba5966b948a63948252 +8c7d528c794a8c794a9479428c794294794294794294794294794294794294794294794a94794a94754a94714a94754a9475529475528c714a8c655a39042100 +291021c6aeb5c6b2adcebeadbdb69cbdbaa5bdb6a5b5b2a5bdb2adbdb6adbdb6a5bdbaa5bdb69cbdb69cb5aa9cb5a694ad9a7b9c8e6b94825a94825a8c79528c +754a8c71428c794a8c75428c75428c75428c75428c71428c71428c75428c754294754a94754a94714a8c71428c714a8c714a8c6d4a84615239082100210c18c6 +aeb5c6b6adcebeadbdb69cbdb69cb5b2a5bdb6a5b5aea5b5b2a5b5b29cb5ae94b5ae94b5ae94ada694ad9e8ca592739486638c795a8c79528c754a846d428469 +398c6d428c71428c71398c71398c71398c71398c6d398c71428c71428c71428c71428c71398c71398c71428c7142846d3984614a39082100210818bda6adbdae +a5bdae9cb5ae94b5ae94ada694adaa9cada694ada294a5a28ca5a284ada28ca5a28ca59a8c9c927ba592739c8a63947d5a947d528c794a8c7142846d428c7142 +8c6d398c71398c71398c71398c6d398c6d398c6d398c71398c71318c75318c75318c75318c75398c7539846d397b614239081800291021ad969cad968ca59684 +a59e84a59e849c96849c96849c92849c92849c927b9c967ba59a7ba596849c8e7b948a739482638c7d528c754a8c754a8471428469317b693184693184693184 +6d31846d31846d31846931846931846931846d31846d29846d29847129847129846d31846d317b653173593939081800290818947984947973947d6b94866b94 +866b8c7d6b9482738c796b8c7d6b8c7d6b94826b94866b9c8a739482738c79638c79528c7942847542847539847139846d317b6929846d29846d29846d29846d +29846d29846929846929846d29846d31846931846d31846d318469318469318469317b61317355393908180031081884616b8c6d6b8c756b8c75638c715a8c71 +638c796b846d638c71638c7563947963947d63947d6b94756b8c7163846d4a846d42846d42846d42846939846539846531846931846531846531846531846531 +8465317b61317b65318465318461398461397b61397b61397b61397b61397b5d31735142390421003910296b495a6b4d5273554a7355426b514273554a73554a +6b4d4273514a73554273554273554273554a73554a73514a73554a73554a73554a73554a7355427355427b55427b55427b55427b55427b59427b55427b55427b +55427b55427b554a7b554a7b554a7b55427b55427b55427b59427b5542734d4a3900290029001842142931081031100831140831140839181031100831100839 +1408391408391400311400311000391008391010390c10310c10390c10391010390c10391010391010421410391008391008391008391008391008391008391010391010391010391010391008391008391008391408391408310c103900310005000000070101000000030000000000}}}{ +\cf1\loch\af28\hich\af28\dbch\af28 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1834 \cellx2356\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1639 \cellx4497\clvertalc +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1413 \cellx6277\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'e3\'d4\'e3\'d3\loch\f167 \hich\f167 \'cc\'d2\'c6\'ed\'c7}{ }{\cf1\loch\af28\hich\af28\dbch\af28 +\nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'e3\'d4\'e3\'d3\loch\f167 \hich\f167 \'cc\'d2\'c6\'ed\'c7}{ }{\cf1\loch\af28\hich\af28\dbch\af28 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'db\'c7\'c6\'e3}{\lang1033\langfe1049\langnp1033 }{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1834 \cellx2356\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1639 \cellx4497\clvertalc +\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth1413 \cellx6277\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 41}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 +\nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 5}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'df\'c8\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 39}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 4}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'df\'c8\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 50}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 10}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'df\'c8\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx623\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth409 \cellx1135\clvertalc\clbrdrt +\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx1955\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx2585 +\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth472 \cellx3174\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx3994\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx4625\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone +\clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth504 \cellx5253\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx6277\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 36}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 +\nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 2}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d5\'db\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 28}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ -2}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d5\'db\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 F}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 34}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\fs15\lang1033\langfe1049\langnp1033 C}{\b\fs20\lang1033\langfe1049\langnp1033 \~ 1}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\b\f167\fs20 \loch\af167\dbch\af0\hich\f167 \'c7\'e1\'d5\'db\'d1\'ec}{\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd +\trqc\trgaph45\trftsWidth2\trwWidth5000\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl45\trpaddt45\trpaddb45\trpaddr45\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\taprtl \clvertalc\clbrdrt\brdrnone \clbrdrl +\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx623\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth409 \cellx1135\clvertalc\clbrdrt +\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx1955\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx2585 +\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth472 \cellx3174\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone +\clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx3994\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth488 \cellx4625\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone +\clbrdrr\brdrnone \clcbpat21\cltxlrtb\clftsWidth2\clwWidth504 \cellx5253\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \clcbpat22\cltxlrtb\clftsWidth2\clwWidth622 \cellx6277\nestrow}{\nonesttables +\par }}\trowd \trqc\trleft-15\trftsWidth2\trwWidth2529\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 \clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth4942 +\cellx6292\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth58 \cellx6366\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { +\cf1\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1033\langfe1049\langnp1033 \cell }\pard +\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\fs20\lang1033\langfe1049\langnp1033 \trowd \trqc\trleft-15\trftsWidth2\trwWidth2529\trautofit1\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalt\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth4942 \cellx6292\clvertalc\clbrdrt\brdrnone \clbrdrl\brdrnone \clbrdrb\brdrnone \clbrdrr\brdrnone \cltxlrtb\clftsWidth2\clwWidth58 \cellx6366 +\row }\pard\plain \s16\qc \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\cf1\lang1049\langfe1049\loch\af28\hich\af28\dbch\af28\cgrid\langnp1049\langfenp1049 {\field\fldedit{\*\fldinst { +\b\fs36\cf2\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 \hich\af28\dbch\af28\loch\f28 HYPERLINK\hich\af28\dbch\af28\loch\f28 "http://www.naseej.com" }{\b\fs36\cf2\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b2e00000068007400740070003a002f002f007700770077002e006e0061007300650065006a002e0063006f006d002f000000}}}{\fldrslt {\cs15\b\fs36\ul\cf2\lang1033\langfe1049\langnp1033 +\hich\af28\dbch\af28\loch\f28 Naseej }{{\*\shppict{\pict{\*\picprop\shplid1028{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}} +\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw794\pich661\picwgoal450\pichgoal375\pngblip\bliptag232017502{\*\blipuid 0dd44e5efa294c339c7cc3de40e83fda} +89504e470d0a1a0a0000000d494844520000001e000000190802000000a957094d0000000373424954050605330b8d80000000017352474200aece1ce9000006 +6a49444154484b555671681b5518ff96bd9517b9e28bb67091167663556ea898ce0dd73f840574d8e1742d4e4c1c8275c2c8e61fcb1cb8965146b681640e478b +e83a9049264e52b0239d389ac12aa9ac98201bc9b02519b478870dbb633976cfe5ecf9bdbb6cc3c797cbcbbbeffddef7beeff77d5fd618aecb75c89ecd739d1b +261c38da6faf07de011af030400828e5c01c0014c6014c701800051cf88b02af73cabc9f380817d21a148ca62baf1fa01089b0d83696a01005880e9fcd69ae9b +ba94c9cd96eda66bafb8aeedba38b10d7cb6c4b61f4e5cf7a182a787d60a81a1fd338cc5188d0ebd93324a6271e6422e222b0c98563292fb938cc885bc66375c +3cc3308488339a02c2b6abe269d802d017f141ab84e085130003541a18fe2c2bd61ba8acb937cbb9bda90830235f4e1d4c295ddb8046129fe60488c0758d06da +6cd84d012d6cc75d8fa15b56073c9fe1277ce24c86e3d4a9d5ce8d9ddfbd93cfe7a6f71d1e8c46691d3217ce033733df4f8742f1e96bbc721ba844b9434d2b28 +fc4d3c08e289837e6f492071300634041006aa8c1c1f072778feec7888d8fcce5c7936977865b078ad58b89a379a5573b982bbe21fc6fb770fe67f35118249b2 +c9291a44a587d0888e4a7880430394e8c06b6069d4099f3e93d74b10ea0a73d063dfa4a31fc7233de19d5b7ad3a7c6b545a8ba33ea768513535fac0cbe7978fc +94ae2dfb5c0193233e1e86e271c97b06a2af45c499c831cb60d037723c173f94d6805d3c960246f3d7b232a387df4b6e527be77eab652753d1ed11b651a5541d +3996eddb32595b1438948a23b8e79847e86bbffe76cc32add28d3b8e43c2d2d6c2e2cd76dadeb3b977e1af85853fe6f82aa9dfb376bdff41e7c60d073ed99138 +3a127feb75536f9ffd7959eee833ebed5f7e3535f8f6d6f6a7c0219c80e30021ab0430820108e0551287861499320235ab12667da9efcad0135763c9e93b9a29 +811a51f47a65f8782c7624913a3382468d1ce9579f57b965a3918a1ceddb72227f052dc6544241e798229e3804676c7766aa8a99a2b034c0184036f252317b49 +abce958d5f0ac6544e90b969978deab67d43d50692cead2eb90069a5a30030c1684696d3998b9a473f643932524c41f0d4cbb4e4fe310643029a94119dc963b8 +6e2fd86e034543a936b4c24275664e13945e7167f2883ecca48c2c650192eac6f4c4c5b2878e477b29e3e38a95a6cba4015462ac4029a2e794ae2c26b68dd04d +db6e602278a9a6095384410d37378de8684d928abb2694f5c313170a8fd0d7a64646f5bb20490e0f389bd4be4b3f4c51a7d37910ec967a6b750d17fbde086330 +25e48005e43e480cac7b1cf5491be95644aacc5e2f48b49392b05e5f5caa69bd2ff72acf60e0c8dad1d151d2064ba6d5fe84d4a38694a7372cfdbea45b2bd683 +1081d0fced5a65b9be6367f78a6986da3c128bdaa691360be09ffabd9557b76fed7c72c3d4952c63ddd67daeeb1605d6bb4591280191fe783bbca92d2e8af3cc +e7da369655a12893223a1de4b14c1e1de3dae84054169ed10ca3e0ba182e0c9dd806d08f9e913b845b6429999bc4f2e2825f2d1f163351bb8c25b73c2b9ca8c8 +19c62680a46847323be9b9b8a56cdb4d11282f5c3877b353550a18a701a50b3986de1f40cd3508ed5dd3cb269f8f40f53ad875d8a0c6b11930296c621990203b +39a6aa10964572238df1c622b91d4a09e30e0cc5c6f3572bba6950825be0f41769cc1b1fd7836e0930064106869149ec8f9b560d9dcbadcae09e9dd397e7383a +d93b1ee1d0adfec43421be77c8340d81e2705c29964a9ed57e3dc43c72d0965649c4d75862b0ea6095e87fe723fd0ed251a459fa643ab1afdf2f75be0e9aef6b +2add07b0089a960960c81d61c110614440946a1270b8d37056d739010aaba20e90003801ccec5dfa5db3b25c422e4dff34150c743edbf38224097bea7f732c3e +b44dd4bbc53fa154ac747448ce8335a6b5b476f4e8a840217e6745f47524400850eb3e561a81fe2f5ac220baa36f93aabcf85c4fb954bb5eb831f9e3240d867a +37f74812115623c02a4c5d5e98bf75c3ba6fa1897bde1d04410f1177bfffb47a4fabcd35ddaac86a91b9de3bfc768bf3067651ac4beafa68eaf844715e68608a +22e1d48d094663940c6056e3cf35082d3c855e96bcc8fbff0130389cfb5558373963182b41092a3a88b85ee59699b9787efcdcb869194a97aae9fe2e1cc1c4c104ee3b7c68c0837e345a5479bcf068e6ffe9f09ad3ffde8e1c3d1da4d4168bd824839cdbe993c86b31fe0386074dcce08397a20000000049454e44ae426082} +}{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw794\pich661\picwgoal450\pichgoal375\wmetafile8\bliptag232017502{\*\blipuid 0dd44e5efa294c339c7cc3de40e83fda} +010009000003c40400000000a004000000000400000003010800050000000b0200000000050000000c0219001e0005000000070104000000a0040000430f2000 +cc00000019001e000000000019001e0000000000280000001e000000190000000100180000000000fc080000c40e0000c40e00000000000000000000fffbffff +fbfffffbfffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7fffffffffffffbfffffbfffffbfffffbfffffbff8c757b947d +8494797b9c797ba57d7b9c7573fffbfffffbfffffbff0000fffbfffff7fff7f3f7fffffff7ffffeffffff7fffffffffff7f7f7fffffffffffff7efe7fffff7f7 +fbeff7fff7fffffffffbfffff7ffefcbd68c717b210c10100000391c21310408390408390408420408ad7173ad797bffebeffbfffffbfffff7fff7fbfff7ffff +efffffefffffeffffff7fffffffffffffbf7f7e7defffff7fff7effffff7efffeffffff7efcbce8455632100004220299c8284e7cbcefff7f7ffe7e7efaeb56b +24295a0810520408520c10efaeb5717bfff7fffff7fff7ffffefffffe7ffffe7ffffeffffffffffffff3effffbf7fffbf7ffe7e7fffff7fffbefb5b2a5948a84 +391418390c104a2029b5969cfffbfffffbfffff7fffff7fffff3ffb559635a00005a00005a0408a5595a2029fffbfffffbfff7ffffefffffe7ffffdefbf7effb +f7fffff7fffbf7fffbf7fff7f7ffe3defff7f78c6963291808291408210000a57984ffdfe7fffbfffffbfff7e3e7ffebeffff7fffff3f7b559636b0008731418 +6304084a0000969cfff7fffffbffffffffefffffe7fbf7effffff7fffffffffffffbf7fff7f7ffefefffcbce632018390000290000290400b58a8cffeff7fffb +fffffffffffbf7fff7f7fffbfffff7ffffeff76b0c18730c106300005200006b1418fbfffff7fffffbfffffbffeffbffefffffeffffffffffffffbf7ffe7e7ff +efefc6696b6300005200004200004a1008c69694ffefeffffbfffffbf7f7fbf7f7fffff7fbf7fffbf7ffebe7f7b2b55a00085a00006300006b0c10c66d73ffff +fff7fffff7fffffbfff7fbfff7fffff7ffffffffffffebe7ffd7de5a00006b0000840c106b00006b0c08ffbab5ffe3defffbf7fffbfff7fbf7f7ffffe7fff7ef +fbf7fffffffffbf794555a6b10185a00006b04086b1018f79ea5fbf7fff7fffffbfffffbfff7fbf7f7ffffffffffffe3efffc3d6630000a518219c1010840400 +731408ffaeadfff7f7fff7f7fffbfff7fbffe7fbf7e7ffffe7fff7f7fffffffbf7deb2ad5200085200008c1c21630000520000fff7f7fffffff3fffffbffffff +f7f7f7e7f7fff7fffbffe78aa5ad1039ce0029ce0418ad0000941800f7bea5ffffefffe7f7fff3ffeff3ffe7ffffc6efefdeffffe7fffff7fff7fff7f74a0000 +6300009414186b0000730c18efaeb5fffbf7fffffffbfffff7f7efebdefffff7fffff7ce929c9c18399c0008d60008d60008b51408c66d52ffffe7efefdefff7 +fffff3fff7fbffdef3f7deffffe7ffffdeefe7fff7efce8a8c5a00009414187300006b0000bd656bffe7e7fffbfffffffff7ffffe7e7f7fffff7fff7deaead5a +0000a50410c60008ef0c21b50000d67973ffffeffffbeffffffffff3ffffeffffffbfff7ebeff7fffffffffffffbf7b57d7b5a00008c08109408106300007b30 +31efcbc6fffffff7fffffffffff7f7fffbfff7fffffffbff520c10730000c61010d60808b50000ad1c21ffeff7f7f3f7f7fbffeff3f7fffffffffff7ffe7e7ff +f7f7fffbf7fff3f7ffb6b56300007300009400086b00007b2021c6a29cfffff7effff7e7fff7fffffffbf7fff7f7fffbff946973630010940000d60400ad0000 +941810fff7f7f7dbf7f7f3ffe7f3ffe7f3ffe7f3dededbc6e7c7bdfff7f7ffebefffbebd7b0000a50c10ad0c187300008c2429d6a69cfffff7effff7e7fff7e7 +fffff3f7fffff7fff7f7deb2bd4200008c1021940000ad0000ce3031e7aaadd6c7dec6baefb5b2efefeffff7fbffdeefd6636539fff3defff7efffe3de8c0000 +c614219c0000a508108c1818e7a6a5fffff7f7fff7def7eff7fffff7ffffbebdf7f7eff7e7de6b20297304108c0000b510217b0008e79aad9c8aad1018523134 +847365bdad8ec6fff7ff73825a7b8e5affffe7ffefe7ad2c29bd0810c60000d61821840008f7aeadfff7eff7fff7f7fff7eff3effffffffffbff0000fffff794 +7573630808730000b50c217b0008a55d848c75ad29308429389c312894523494d6a2dea57584080c00ffffd6ffffe7b5796b840000c61418c60008940000ffcb +cefff7efefffefe7fff7f7fff7fffbfffffbfffffbff0810d6bebd420c087308007b00008c00109c3c63b5aae710288c1020a59c9eff311c9c8c5dbd9c598c31 +0000dec7a5ffffd67361425224108c1810940000ad1418ffd3d6fff7f7fffff7effff7e7fff7fffffffffbfffff7fffff7ff1418a5797b4200006b00008c0c08 +520000e7bae729388c0028a58ca2ff948eff845dde844da5290018ffd7d6ffffde7b5129422000290000631008e78284ffdfdefff7f7fff7f7f7f7efeffff7ef +fffffffffffffbfffffbfffff7ff0000bd7573630800840c00731000947173e7ebff101c7b1828ad0008a53928bd6b38ad52185a94798cfffbef4200005a1000 +521c08522418efc3b5fffbeffffbf7fff7effff7f7fffffffffffffffffffffffffffffffffbfffffbff82846308085200006b0c00520800ffeff7deefff7b8a +de21249c3928ad8465e718004284598cd6bec62100006b1c105a0800f7baadffd3cefffff7f7fbefe7efe7f7fffffffffffff3f7fffbfffffbfffffbfff7ffff +f7fffff7fffffbef6b0808520000520c08ad797bfff7fffff3ffe7efffd6d3ff845db5100031d6beef846d84391c21310800b5756bfff7effffbf7fffbf7f7f3 +efeffff7defbf7effffffffbfffff3fffff7fffff7fff7ffffefffffefffffeffffffbefbd69635a1010420810845563ffcfefffefffb5a2bd211831100010ef +cfe7736973180410e7bec6fff3f7fffbf7ffefefffefeffffbfff7fbf7efffffdef7f7effffff7eff7fff7fffff7fffff7fff7ffffe7ffffe7ffffe7fffffff7 +fffbef5220183100085a10316b1039420008420000b5927bffffe7a5aa84d6c3b5fffbf7ffebf7fff7fffffbffeff7f7fffbfffffbfffffbfff7f7fffffbffff +fbfffff7ffffebfffff7fffffbfff7ffffefffffefffffefffffffffffffefffe7e7bd7994b5618cb5517bffcbe7ffebdeffffd6f7ffbdf7ffd6ffffe7fff7ef +fff3ffffeffff7ffffe7fffff7fbfffffbfffffbfffff3fffffbfff7e7f7fff7fffff7fffff7fff7fbffefffffefffffeffffff7fffff7ff05000000070101000000030000000000}}}{\cs15\b\f33\fs36\ul\cf2 \loch\af33\dbch\af28\hich\f33 \'e4\'dc\'d3\'dc\'ed\'dc\'cc}}}{ +\fs36\cf2\lang1033\langfe1049\langnp1033 \line +\par }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'cd\'de\'e6\'de}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'c7\'e1\'e4\'d4\'d1}{\fs15\lang1033\langfe1049\langnp1033 +\hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'e6\'c7\'e1\'d8\'c8\'da}{\f387\fs15\lang1033\langfe1049\langnp1033 \hich\af387\dbch\af28\loch\f387 \hich\f387 \'a9\loch\f387 97-1999 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'c7 +\'e1\'e4\'d9\'e3}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'c7\'e1\'da\'d1\'c8\'ed\'c9}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 }{\f33\fs15 +\loch\af33\dbch\af28\hich\f33 \'c7\'e1\'e3\'ca\'d8\'e6\'d1\'c9}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 . }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'cc\'e3\'ed\'da}{\fs15\lang1033\langfe1049\langnp1033 +\hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'c7\'e1\'cd\'de\'e6\'de}{\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 }{\f33\fs15 \loch\af33\dbch\af28\hich\f33 \'e3\'cd\'dd\'e6\'d9\'c9}{ +\fs15\lang1033\langfe1049\langnp1033 \hich\af28\dbch\af28\loch\f28 \line }{\f387\fs15\lang1033\langfe1049\langnp1033 \hich\af387\dbch\af28\loch\f387 \hich\f387 Copyright \'a9\loch\f387 1999 Arabian Advanced Systems. }{\fs15 +\hich\af28\dbch\af28\loch\f28 All rights reserved +\par }\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 { +\par }} \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/hebrew.rtf b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/hebrew.rtf new file mode 100644 index 0000000..dd3cdff --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/International/RTL/hebrew.rtf @@ -0,0 +1,1367 @@ +{\rtf1\ansi\ansicpg1251\uc1 \deff0\deflang1049\deflangfe1049{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f28\fswiss\fcharset128\fprq2{\*\panose 020b0604020202020204}Arial Unicode MS;} +{\f29\fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}@Arial Unicode MS;}{\f30\froman\fcharset177\fprq2{\*\panose 00000000000000000000}Times New Roman (Hebrew){\*\falt Times New Roman};}{\f159\froman\fcharset238\fprq2 Times New Roman CE;} +{\f160\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f162\froman\fcharset161\fprq2 Times New Roman Greek;}{\f163\froman\fcharset162\fprq2 Times New Roman Tur;}{\f164\froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f165\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f166\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f385\fswiss\fcharset0\fprq2 Arial Unicode MS Western;}{\f383\fswiss\fcharset238\fprq2 Arial Unicode MS CE;} +{\f384\fswiss\fcharset204\fprq2 Arial Unicode MS Cyr;}{\f386\fswiss\fcharset161\fprq2 Arial Unicode MS Greek;}{\f387\fswiss\fcharset162\fprq2 Arial Unicode MS Tur;}{\f388\fswiss\fcharset177\fprq2 Arial Unicode MS (Hebrew);} +{\f389\fswiss\fcharset178\fprq2 Arial Unicode MS (Arabic);}{\f390\fswiss\fcharset186\fprq2 Arial Unicode MS Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255; +\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} +{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{\*\cs15 \additive \ul\cf2 \sbasedon10 Hyperlink;}} +{\info{\upr{\title ????-?? }{\*\ud\uc0{\title {\uc1\u1489 ?\u1497 ?\u1489 ?\u1488 ?-\u1500 ?\u1514 ? }}}}{\author Sergey Tkachenko}{\operator Sergey Tkachenko}{\creatim\yr2001\mo11\dy19\hr16\min46}{\revtim\yr2001\mo11\dy19\hr17\min13}{\version6}{\edmins5} +{\nofpages1}{\nofwords0}{\nofchars0}{\*\company Home}{\nofcharsws0}{\vern8249}}\paperw11906\paperh16838\margl1701\margr850\margt1134\margb1134 +\deftab708\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1701\dgvorigin1984\dghshow1\dgvshow1 +\jexpand\viewkind5\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl +{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5 +\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 { +\lang1033\langfe1049\langnp1033 This page is from http://www.israelweather.co.il +\par }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth4785 \cellx4564\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 +\cltxlrtb\clftsWidth3\clwWidth5016 \cellx9463\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\b\f30 \loch\af30\dbch\af0\hich\f30 \'e1\'e9\'e1\'e0}{\b\lang1033\langfe1049\langnp1033 -}{\b\f30 \loch\af30\dbch\af0\hich\f30 +\'ec\'fa}{\b\lang1033\langfe1049\langnp1033 }{\b\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\field\fldedit{\*\fldinst {\b\lang1033\langfe1049\langnp1033 HYPERLINK "http://www.israelweather.co.il/images.html" \\t "new" }{\b {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000040000006e00650077000000e0c9ea79f9bace118c8200aa004ba90b5600000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0069006d0061006700 +650073002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\b\f30\cf2 \loch\af30\dbch\af0\hich\f30 \'e0}{\cs15\b\cf2\lang1033\langfe1049\langnp1033 .}{\cs15\b\f30\cf2 \loch\af30\dbch\af0\hich\f30 \'ee}}}{\lang1033\langfe1049\langnp1033 +\nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f30 \loch\af30\dbch\af0\hich\f30 \'e0}{\b\lang1033\langfe1049\langnp1033 .}{\b\f30 \loch\af30\dbch\af0\hich\f30 \'ee}{\lang1033\langfe1049\langnp1033 +\nestcell{\nonesttables +\par }}{\b\lang1033\langfe1049\langnp1033 '}{\b\f30 \loch\af30\dbch\af0\hich\f30 \'f4\'ee\'e8}{\lang1033\langfe1049\langnp1033 \nestcell{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\b\f30 \loch\af30\dbch\af0\hich\f30 \'ea\'e9\'f8\'e0\'fa}{\b\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw688\pich635\picwgoal390\pichgoal360\pngblip\bliptag-27807591{\*\blipuid fe57b099a6a5af771309c2fb381ea5f5}89504e470d0a1a0a0000000d494844520000001a000000180803000000d35c1df7000000017352474200aece1ce900000300504c5445b9b9b9eaeaeaffffffdb +dbdba4a4a4bb9900444444696969f5f5f55858589076003636367c7c7cffd500322b0bc3c3c3272726838383acacac969696767676473a001414148e8e8e9c9c +9cf4c700cecece302f2afcfcfc725e00fafafaffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc6daad0000000097048 +597300000ec300000ec401882e3ea3000000cb494441542853b5914912832010455b4110908844712009f7bf65988c5a890b17f90bb0eaf1a4e906771ab882c8 +7af8dbb2bf91726e348d737e77ee6881b24fceadc247c49421602b2965758bff5c2d6d2784b418e43ccf92f73b84142a7d908aa832c2d799adae0ba42cc76118 +b8e4345ba3b0d6b022224a00d86dbd6b224b51b4b40d04933aa8269721e22d293d84f521f2bbd46b43e9b34ebd024776563ad4f87e4474a79b159d4ea42efae219a14d4aef4305cbfd0def6ab5d618e329062fe743f9ccf6d294ff67bd01ad7a38b3179212ab0000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw688\pich635\picwgoal390\pichgoal360\wmetafile8\bliptag-27807591\blipupi95{\*\blipuid fe57b099a6a5af771309c2fb381ea5f5} +010009000003d60100000000b201000000000400000003010800050000000b0200000000050000000c0218001a0005000000070104000000b2010000430f2000 +cc00000018001a000000000018001a0000000000280000001a000000180000000100080000000000a0020000c30e0000c40e0000200000002000000000000000 +14141400262727000b2b32002a2f300036363600003a47004444440058585800005e72006969690076767600007690007c7c7c00838383008e8e8e0096969600 +0099bb009c9c9c00a4a4a400acacac00b9b9b900c3c3c30000c7f400cecece0000d5ff00dbdbdb00eaeaea00f5f5f500fafafa00fcfcfc00ffffff001f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f05001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f +1f1f1f1f1f1f32001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f69001f1f1f18141414141414101410101010141a1f1f1f1f1f1f1f1fbb00 +1f1f08070a0b0b0b0b0b0b0b0b0b0b0a0a02081f1f1f1f1f1f1fce001f100a1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f0e051f1f1f1f1f1fff001f071a1f1f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f0b0b1f1f1f1f1f00001f021f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f071f1f1f1f1f00001f051a1f1f1f1f1f1f1f1f1f1f0b151f +1f1f1f1f05021f1f1f1f00001f10071a1b1b180a181f1f1f1f14071f1f1f1f0e011f1f1f1f1f00001f1f0e05040401081b1f1f1f1f1f0a0715150803031f1f1f +1f1f00001f1f1f1f1f1f0e0e1f1f1f1f1f1f0e0606030c190c0a1f1f1f1f00001f1f1f1f1f1f1a021a1f1f1f1f1a021919171719110105071f1f00001f1f1f1f +1f1f1f1404101a1a14050619171919190c0b1f1f1f1f00001f1f1f1f1f1f1f1f1f0802010715041119191911031f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f +1f150204090c0c0202141f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f021f1f0e010e1f1f021f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f021f1f +1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f071f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f000005000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e7}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 .}{\f30 \loch\af30\dbch\af0\hich\f30 \'ee}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 24-17}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 16/11}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1026{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw820\pich820\picwgoal465\pichgoal465\pngblip\bliptag-147130767{\*\blipuid f73af6715607b03c3c1e14bebe891bd2}89504e470d0a1a0a0000000d494844520000001f0000001f08030000002870e60b000000017352474200aece1ce900000300504c5445000000ffffff20202b99 +99cc9797ca6d6d920303049999cb9a9acc22222d9a9acb9999c976769b9898c79696c38484a98d8db37d7d9f8080a22626307474929b9bc29393b88a8aab3232 +3e71718b57576b12121665657b2e2e385e5e727a7a935252633838436161744848565858670707081010120b0b0c9597c99798ca9b9ccc9a9bc79497ca9095c9 +8b93ca404250161820424a636f86c15f74a35466904f7ac8000f28051e450e2a571b4d9b235fbd083a8610387405050502020201010100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f4b4cc6000000097048 +597300000ec400000ec401952b0e1b0000011b49444154384fcd935b7382301085cf182b6a51410ae52a08adda6a8bb51785aafcff7f25844032a5f8d6999eb7 +ecb7bb39bb99805c17fe1337669ea3058a6849f4e72f50e8ec0e7986c07dc0b4a6771110f6eb04cef51eecdb22ee67309a5c7211b1be3ee26e95c0ea8d99f998 +a92cb876a005f7e5a1e4865318d39873699e1f7a3ee7fa129e6b9f6095359287204fa126687d886844c824a0f6f26ecbc5480a10d77c8ba9b813459e10a2648e +c0f3c00f89fc01b3060f85fefa19812adf70c9aa9d814e58cea7d0f9b832e064d125b3fd8cc3f9a033e8d4f26cb60bf1fd9e56dd4a52e587f3cdeef3b5e1b2ea +4f9e77699abeb4f2fefb7792a49b563e3e1c8ec764d5ca87f1d77effd1c4f5fdbab97d5b5fe1bf201afaebff750177351c615ae3aad30000000049454e44ae426082}}{\nonshppict{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw820\pich820\picwgoal465\pichgoal465\wmetafile8\bliptag-147130767\blipupi96{\*\blipuid f73af6715607b03c3c1e14bebe891bd2}010009000003b602000000009202000000000400000003010800050000000b0200000000050000000c021f001f000500000007010400000092020000430f2000 +cc0000001f001f00000000001f001f0000000000280000001f0000001f0000000100080000000000e0030000c40e0000c40e0000400000004000000000000000 +01010100020202000403030005050500080707000c0b0b00280f0000121010001612120020181600451e05002b2020002d22220030262600572a0e00382e2e00 +3e3232007438100043383800863a08005042400056484800634a42009b4d1b00635252006b57570067585800725e5e00bd5f2300746161007b65650090665400 +926d6d008b717100a3745f00927474009b767600c87a4f00937a7a009f7d7d00a2808000a9848400c1866f00ab8a8a00b38d8d00ca938b00b8939300c9959000 +c3969600ca979400c9979500ca979700ca989700c7989800c9999900cb999900cc999900cb9a9a00cc9a9a00c79b9a00c29b9b00cc9c9b00ffffff0039393939 +39393939393939393939393939393939393939393939393939393902393939393939393939393939393939393939393939393939393939393939390039393939 +39393939393939393939393939393939393939393939393939393900393939393939393939393939393939393939393939393939393939393939390039393939 +3939393e1109173939393939393939393939393939393939393939003939393939393915070b0b20393939393939393939393939393939393939390039393939 +3939390b0f121218393939393939393939393939393939393939390039393939393939231418181d393939393939393939393939393939393939390039393939 +393939392b1d1d1d2e39393939393939393939393939393939393900393939393939393939392b262e3939393939393939393939393939393939390039393939 +39393939393939393939393939393939393939393939393939393900393939393939391f110d0d0d0d0d0d0d0a0d0d0d0c0c111a3d3939393939393939393939 +393d0800000000000000000000000000000000000025393939393939393939393e0000152c251f251f251f251f251f251f25251a00002c393939393939393939 +1a001a39393939393939393939393939393939391a001539393939393939393909002c39393939393939393939393939393939393d0008393939393939393939 +08002c3939393939393939393939392f252c39392c00083939393939393939391f00153939392c1a393939393939393d000839391a0011393939393939393939 +3d0000111f1a0000243939393939393911001a1100003d393939393939393939393d08000000000c2c3939393939393e11000000002539393939393939393939 +39393d1a1100002c393939393939393e08000d1a2c393939393939393939393939393939391f00153939393939393e2500113939393939393939393939393939 +39393939393d00001a39393939392500003d393939393939393939393939393939393939393925000011242c251500001f393939393939393939393939393939 +3939393939393925000000000000001f3939393939393939393939393939393939393939393939393d1f0d080c1a2d3939393939393939393939393939393939 +39393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939 +393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393905000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'f8\'f2}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e7\'e5\'f8}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 20-15}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'fa\'e1\'f9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1027{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw820\pich820\picwgoal465\pichgoal465\pngblip\bliptag-951386033{\*\blipuid c74b004fee71b5e9a7e6122ae74f9e61}89504e470d0a1a0a0000000d494844520000001f0000001f08030000002870e60b000000017352474200aece1ce900000300504c5445000000ffffffacabc6a2 +a1cc20202b9999cc9797ca6d6d920303049999cb9a9acc22222d9a9acb9999c976769b9c9ccc9898c79696c38484a99c9cc78d8db37d7d9f8080a22626307474 +929b9bc29393b88a8aab32323e71718b57576b12121665657b2e2e385e5e727a7a935252633838436161744848565858670707081010120b0b0c9597c99798ca +9b9ccc9a9bc79497ca9095c98b93ca404250161820424a636f86c15f74a35466904f7ac8000f28051e450e2a571b4d9b235fbd083a86103874eae253d2cd80cb +c8a2c0bc94b8b6b40505050202020101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f60f0e3c000000097048 +597300000ec400000ec401952b0e1b0000017d49444154384fad93d97682301086e788b16e75ab4ba10a22a8adda6aabb58b4a2510e5fd9fa8930410eaa937ed +7f0113bec9e49f2400b92cf8774e5d3f51f3bc3e752972c664d22f5ca1ae4c88b936308d8edd2444ccf75caaa4b83501ae639f30ea938c1b4e8fe65b00dd5efb +760cb29e426995901ba6845ccd837ecd811580c6df55acceb807915fe8c3b82cfd5ab0cc89a04a5dbe08726dd07d085a61cf73033af61d1f488b4034831beba0 +73516a8883bc8551463408ea14ccbe7e805ec84db0314598107c04e31a210d5bd8c3c5a6935ac1862586cc47c10ada512e7f372b0d7c0406863e1a7491e3871f +929c5114dcc3e08c8f447db9be7a04bb55b93aa9d2d203c00e958ce0a429fa3b290038f48abc7f4ff44feaa361295bcac63275b1171ebaf3e2f37d9ce5221538 +c5e3c1fd8ff862fdf19274a9787c6f95f0fc9ed68ee33c479cf92c7dfec5b7afddce5944fcecfed4b7dbfd7e374bf1e4fd2b2f3f379bf778f9f0fe7ae850f44f88da5dbdce13fcf2fd4feff65fffbf6f5f8d3c36fdceeedb0000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw820\pich820\picwgoal465\pichgoal465\wmetafile8\bliptag-951386033\blipupi96{\*\blipuid c74b004fee71b5e9a7e6122ae74f9e61} +010009000003c80200000000a402000000000400000003010800050000000b0200000000050000000c021f001f0005000000070104000000a4020000430f2000 +cc0000001f001f00000000001f001f0000000000280000001f0000001f0000000100080000000000e0030000c40e0000c40e0000490000004900000000000000 +01010100020202000403030005050500080707000c0b0b00280f0000121010001612120020181600451e05002b2020002d22220030262600572a0e00382e2e00 +3e3232007438100043383800863a08005042400056484800634a42009b4d1b00635252006b57570067585800725e5e00bd5f2300746161007b65650090665400 +926d6d008b717100a3745f00927474009b767600c87a4f00937a7a009f7d7d00a2808000a9848400c1866f00ab8a8a00b38d8d00ca938b00b8939300c9959000 +c3969600ca979400c9979500ca979700ca989700c7989800c9999900cb999900cc999900cb9a9a00cc9a9a00c79b9a00c29b9b00cc9c9b00c79c9c00cc9c9c00 +cca1a200c6abac00b4b6b80094bcc000a2c8cb0080cdd20053e2ea00ffffff003939393939393939393939393939393939393939393939393939393939393902 +39393939393939393939393939393939393939393939393939393939393939003939393939413939393939393939393939393939393939393939393939393900 +39393939110a17393939393939393939394647443939393939393939393939003939391507070b20393939393939393939464746393939434539393939393900 +3939390f0f121418393939393939393939464746393942464743393939393900393939231418181d393939393939393939464746393945474642393939393900 +393939392b1d1d1d2e39393939393939394344433942474742393939393939003939393939392b262e3939393939393939393939393945464239393943413900 +39393939393939393939393939393939393939393939393939394346474539003939391a110d0c0c0c0c0c0d0a0d0d090d0c111a3d3939393945474747453900 +393d0800000000000000000000000000000000000024393939454745423939003900001a252521212121211f251f25212125251a00002c393942423939393900 +1a001a39393939393939393939393939393939391f001539393939393939390209002c39393939393939393939393939393939392d0008393939434646464600 +08002c3939393939393939393939392c252c39392d00083939394447474747001f00154239392c1a393939393939393d000839391a0015393939434444444400 +3900000e1f1f00001f3939393939393911001a1100003d393939393939393900393d00000000000d3d3939393939393911000000002539393942433939393900 +39393d1f11000025393939393939393908000c1a2c393939394547463939390039393939391f0015423939393939392500153939393939393946474747433900 +39393939393900001a39393939412500003d393939393941393943464743390039393939393925000011252c2415000039393939393946463939393943423900 +3939393939393925080000000000001f3943464439424747433939393939390039393939393939393d1a0d080d1a2d3939464746393945474642393939393939 +39393939393939393939393939393939394647463939424647433939393939393939393939393939393939393939393939464746393939434339393939393939 +39393939393939393939393939393939394647443939393939393939393939393939393939393939393939393939393939393939393939393939393939393939 +3939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393905000000070101000000030000000000}}}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 +\nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e9\'ee\'e5\'f7\'ee}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'f9 +\'e2}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 19-12}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'e0}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'e5\'e9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1028{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw688\pich635\picwgoal390\pichgoal360\pngblip\bliptag1937214181{\*\blipuid 73778ae5d1e0906170f771562c150f73}89504e470d0a1a0a0000000d494844520000001a000000180803000000d35c1df7000000017352474200aece1ce900000300504c5445898989cda800715d002a +2a2affd700f4c700ffd100222222969696b49400977c008d74001313137474746565652c2712414141343434312f298069003432239f8400ffd8004c4c4ca1a1 +a1505050b1b1b17b7b7b33301ebababa352e0fffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011242424000000097048 +597300000ec300000ec401882e3ea300000086494441542853c591d90e84200c45d1820ae2864e6653efffffe50c3141abe8ab7d699a93dbdb45e034c46da8dd +3af3315c1c1120ec17f8e72556d5442e7df423bd8e084ecb4c264de8b9aa8a542aa56459ed55efce1a8f326dbbe7de4b2c2a5347bc86c47bcd112f50536a33e71144052a5be31318bf465897afecab8b1bb2bfdef76536c60f861c4556db8e51b20000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw688\pich635\picwgoal390\pichgoal360\wmetafile8\bliptag1937214181\blipupi95{\*\blipuid 73778ae5d1e0906170f771562c150f73} +010009000003d80100000000b401000000000400000003010800050000000b0200000000050000000c0218001a0005000000070104000000b4010000430f2000 +cc00000018001a000000000018001a0000000000280000001a000000180000000100080000000000a0020000c30e0000c40e0000210000002100000000000000 +131313002222220012272c002a2a2a000f2e3500292f31001e3033002332340034343400414141004c4c4c0050505000005d7100656565000069800074747400 +00748d007b7b7b00007c970000849f00898989000094b40096969600a1a1a10000a8cd00b1b1b100bababa0000c7f40000d1ff0000d7ff0000d8ff00ffffff00 +20202020202020202020202020202020202020202020202020200500202020202020202020202020202020202020202020202020202000002020202020202020 +20202020202020202020202020202020202000002020202020202020202020202020202020202020202020202020000020202020202020202020202020202020 +202020202020202020202c0020202020202020202020202020202020202020202020202020204100202020202020202020202020200a20202020202020202020 +20208d002020202020202020202020202004202020202020202020202020a10020202020202020202002172010000e201b022020202020202020ff0020202020 +2020202020200203111613030220202020202020202020202020202020202020202002191d1d1f19032020202020202020202020202020202020202020150d1f +1c1c1c1d130e20202020202020202020202020202020200b0901131f1c1c1d1d1601090a2020202020202020202020202020202020170d1f1d1d1c1f13102020 +20202020202020202020202020202020202009161f1f1f190220202020202020202020202020202020202020201b02080d140f08021a20202020202020202020 +20202020202020202002202015011020200220202020202020202020202020202020202020202020200320202020202020202020202020202020202020202020 +20202020200a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 +20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202005000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e0\'f0}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 20-12}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'e1}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'e5\'e9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1029{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw688\pich635\picwgoal390\pichgoal360\pngblip\bliptag1937214181{\*\blipuid 73778ae5d1e0906170f771562c150f73}89504e470d0a1a0a0000000d494844520000001a000000180803000000d35c1df7000000017352474200aece1ce900000300504c5445898989cda800715d002a +2a2affd700f4c700ffd100222222969696b49400977c008d74001313137474746565652c2712414141343434312f298069003432239f8400ffd8004c4c4ca1a1 +a1505050b1b1b17b7b7b33301ebababa352e0fffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011242424000000097048 +597300000ec300000ec401882e3ea300000086494441542853c591d90e84200c45d1820ae2864e6653efffffe50c3141abe8ab7d699a93dbdb45e034c46da8dd +3af3315c1c1120ec17f8e72556d5442e7df423bd8e084ecb4c264de8b9aa8a542aa56459ed55efce1a8f326dbbe7de4b2c2a5347bc86c47bcd112f50536a33e71144052a5be31318bf465897afecab8b1bb2bfdef76536c60f861c4556db8e51b20000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw688\pich635\picwgoal390\pichgoal360\wmetafile8\bliptag1937214181\blipupi95{\*\blipuid 73778ae5d1e0906170f771562c150f73} +010009000003d80100000000b401000000000400000003010800050000000b0200000000050000000c0218001a0005000000070104000000b4010000430f2000 +cc00000018001a000000000018001a0000000000280000001a000000180000000100080000000000a0020000c30e0000c40e0000210000002100000000000000 +131313002222220012272c002a2a2a000f2e3500292f31001e3033002332340034343400414141004c4c4c0050505000005d7100656565000069800074747400 +00748d007b7b7b00007c970000849f00898989000094b40096969600a1a1a10000a8cd00b1b1b100bababa0000c7f40000d1ff0000d7ff0000d8ff00ffffff00 +20202020202020202020202020202020202020202020202020200500202020202020202020202020202020202020202020202020202000002020202020202020 +20202020202020202020202020202020202000002020202020202020202020202020202020202020202020202020000020202020202020202020202020202020 +202020202020202020202c0020202020202020202020202020202020202020202020202020204100202020202020202020202020200a20202020202020202020 +20208d002020202020202020202020202004202020202020202020202020a10020202020202020202002172010000e201b022020202020202020ff0020202020 +2020202020200203111613030220202020202020202020202020202020202020202002191d1d1f19032020202020202020202020202020202020202020150d1f +1c1c1c1d130e20202020202020202020202020202020200b0901131f1c1c1d1d1601090a2020202020202020202020202020202020170d1f1d1d1c1f13102020 +20202020202020202020202020202020202009161f1f1f190220202020202020202020202020202020202020201b02080d140f08021a20202020202020202020 +20202020202020202002202015011020200220202020202020202020202020202020202020202020200320202020202020202020202020202020202020202020 +20202020200a20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020 +20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202005000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'f8\'e9\'e4\'e1}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 22-13}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'e2}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'e5\'e9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1030{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw688\pich635\picwgoal390\pichgoal360\pngblip\bliptag-27807591{\*\blipuid fe57b099a6a5af771309c2fb381ea5f5}89504e470d0a1a0a0000000d494844520000001a000000180803000000d35c1df7000000017352474200aece1ce900000300504c5445b9b9b9eaeaeaffffffdb +dbdba4a4a4bb9900444444696969f5f5f55858589076003636367c7c7cffd500322b0bc3c3c3272726838383acacac969696767676473a001414148e8e8e9c9c +9cf4c700cecece302f2afcfcfc725e00fafafaffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc6daad0000000097048 +597300000ec300000ec401882e3ea3000000cb494441542853b5914912832010455b4110908844712009f7bf65988c5a890b17f90bb0eaf1a4e906771ab882c8 +7af8dbb2bf91726e348d737e77ee6881b24fceadc247c49421602b2965758bff5c2d6d2784b418e43ccf92f73b84142a7d908aa832c2d799adae0ba42cc76118 +b8e4345ba3b0d6b022224a00d86dbd6b224b51b4b40d04933aa8269721e22d293d84f521f2bbd46b43e9b34ebd024776563ad4f87e4474a79b159d4ea42efae219a14d4aef4305cbfd0def6ab5d618e329062fe743f9ccf6d294ff67bd01ad7a38b3179212ab0000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw688\pich635\picwgoal390\pichgoal360\wmetafile8\bliptag-27807591\blipupi95{\*\blipuid fe57b099a6a5af771309c2fb381ea5f5} +010009000003d60100000000b201000000000400000003010800050000000b0200000000050000000c0218001a0005000000070104000000b2010000430f2000 +cc00000018001a000000000018001a0000000000280000001a000000180000000100080000000000a0020000c30e0000c40e0000200000002000000000000000 +14141400262727000b2b32002a2f300036363600003a47004444440058585800005e72006969690076767600007690007c7c7c00838383008e8e8e0096969600 +0099bb009c9c9c00a4a4a400acacac00b9b9b900c3c3c30000c7f400cecece0000d5ff00dbdbdb00eaeaea00f5f5f500fafafa00fcfcfc00ffffff001f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f05001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f00001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f +1f1f1f1f1f1f32001f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f69001f1f1f18141414141414101410101010141a1f1f1f1f1f1f1f1fbb00 +1f1f08070a0b0b0b0b0b0b0b0b0b0b0a0a02081f1f1f1f1f1f1fce001f100a1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f0e051f1f1f1f1f1fff001f071a1f1f1f1f1f +1f1f1f1f1f1f1f1f1f1f1f0b0b1f1f1f1f1f05001f021f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f071f1f1f1f1f00001f051a1f1f1f1f1f1f1f1f1f1f0b151f +1f1f1f1f05021f1f1f1f00001f10071a1b1b180a181f1f1f1f14071f1f1f1f0e011f1f1f1f1f00001f1f0e05040401081b1f1f1f1f1f0a0715150803031f1f1f +1f1f2c001f1f1f1f1f1f0e0e1f1f1f1f1f1f0e0606030c190c0a1f1f1f1f41001f1f1f1f1f1f1a021a1f1f1f1f1a021919171719110105071f1f8d001f1f1f1f +1f1f1f1404101a1a14050619171919190c0b1f1f1f1fa1001f1f1f1f1f1f1f1f1f0802010715041119191911031f1f1f1f1fff001f1f1f1f1f1f1f1f1f1f1f1f +1f150204090c0c0202141f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f021f1f0e010e1f1f021f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f021f1f +1f1f1f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f071f1f1f1f1f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f20201f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f202005000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'e7}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 .}{\f30 \loch\af30\dbch\af0\hich\f30 \'ee}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 23-14}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\f30 \loch\af30\dbch\af0\hich\f30 \'e3}{\f30\lang1033\langfe1049\langnp1033 \hich\af30\dbch\af0\loch\f30 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'e5\'e9}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {{\*\shppict{\pict{\*\picprop\shplid1031{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw820\pich820\picwgoal465\pichgoal465\pngblip\bliptag-1674956380{\*\blipuid 9c2a31a40e510e1e1aaef54eae7aa4e1}89504e470d0a1a0a0000000d494844520000001f0000001f08030000002870e60b000000017352474200aece1ce900000300504c5445000000ffffff20202b99 +99cc9797ca6d6d920303049999cb9a9acc22222d9a9acb9999c976769b9898c79696c38484a98d8db37d7d9f8080a22626307474929b9bc29393b88a8aab3232 +3e71718b57576b12121665657b2e2e385e5e727a7a935252633838436161744848565858670707081010120b0b0c9597c99798ca9b9ccc9a9bc79497ca9095c9 +8b93ca404250161820424a636f86c15f74a35466904f7ac8000f28051e450e2a571b4d9b235fbd083a8610387405050502020201010100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f4b4cc60000011b4944 +4154384fcd935b7382301085cf182b6a51410ae52a08adda6a8bb51785aafcff7f25844032a5f8d6999eb7ecb7bb39bb99805c17fe1337669ea3058a6849f4e7 +2f50e8ec0e7986c07dc0b4a6771110f6eb04cef51eecdb22ee67309a5c7211b1be3ee26e95c0ea8d99f998a92cb876a005f7e5a1e4865318d39873699e1f7a3e +e7fa129e6b9f6095359287204fa126687d886844c824a0f6f26ecbc5480a10d77c8ba9b813459e10a2648ec0f3c00f89fc01b3060f85fefa19812adf70c9aa9d +814e58cea7d0f9b832e064d125b3fd8cc3f9a033e8d4f26cb60bf1fd9e56dd4a52e587f3cdeef3b5e1b2ea4f9e77699abeb4f2fefb7792a49b563e3e1c8ec764d5ca87f1d77effd1c4f5fdbab97d5b5fe1bf201afaebff750177351c615ae3aad30000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw820\pich820\picwgoal465\pichgoal465\wmetafile8\bliptag-1674956380{\*\blipuid 9c2a31a40e510e1e1aaef54eae7aa4e1} +010009000003b602000000009202000000000400000003010800050000000b0200000000050000000c021f001f000500000007010400000092020000430f2000 +cc0000001f001f00000000001f001f0000000000280000001f0000001f0000000100080000000000e0030000c40e0000c40e0000400000004000000000000000 +01010100020202000403030005050500080707000c0b0b00280f0000121010001612120020181600451e05002b2020002d22220030262600572a0e00382e2e00 +3e3232007438100043383800863a08005042400056484800634a42009b4d1b00635252006b57570067585800725e5e00bd5f2300746161007b65650090665400 +926d6d008b717100a3745f00927474009b767600c87a4f00937a7a009f7d7d00a2808000a9848400c1866f00ab8a8a00b38d8d00ca938b00b8939300c9959000 +c3969600ca979400c9979500ca979700ca989700c7989800c9999900cb999900cc999900cb9a9a00cc9a9a00c79b9a00c29b9b00cc9c9b00ffffff0039393939 +39393939393939393939393939393939393939393939393939393902393939393939393939393939393939393939393939393939393939393939390039393939 +39393939393939393939393939393939393939393939393939393900393939393939393939393939393939393939393939393939393939393939390039393939 +3939393e1109173939393939393939393939393939393939393939003939393939393915070b0b20393939393939393939393939393939393939390039393939 +3939390b0f121218393939393939393939393939393939393939390039393939393939231418181d393939393939393939393939393939393939390039393939 +393939392b1d1d1d2e39393939393939393939393939393939393900393939393939393939392b262e3939393939393939393939393939393939390039393939 +39393939393939393939393939393939393939393939393939393900393939393939391f110d0d0d0d0d0d0d0a0d0d0d0c0c111a3d3939393939393939393939 +393d0800000000000000000000000000000000000025393939393939393939393e0000152c251f251f251f251f251f251f25251a00002c393939393939393939 +1a001a39393939393939393939393939393939391a001539393939393939393909002c39393939393939393939393939393939393d0008393939393939393939 +08002c3939393939393939393939392f252c39392c00083939393939393939391f00153939392c1a393939393939393d000839391a0011393939393939393939 +3d0000111f1a0000243939393939393911001a1100003d393939393939393939393d08000000000c2c3939393939393e11000000002539393939393939393939 +39393d1a1100002c393939393939393e08000d1a2c393939393939393939393939393939391f00153939393939393e2500113939393939393939393939393939 +39393939393d00001a39393939392500003d393939393939393939393939393939393939393925000011242c251500001f393939393939393939393939393939 +3939393939393925000000000000001f3939393939393939393939393939393939393939393939393d1f0d080c1a2d3939393939393939393939393939393939 +39393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939 +393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393905000000070101000000030000000000}}}{ +\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\f30 \loch\af30\dbch\af0\hich\f30 \'ed\'f9\'e2}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 21-12}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}{\lang1033\langfe1049\langnp1033 22/11}{\lang1033\langfe1049\loch\af28\hich\af28\dbch\af28\langnp1033 \nestcell{\nonesttables +\par }}\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap2 {\fs20\lang1033\langfe1049\langnp1033 {\*\nesttableprops\trowd \trqc\trgaph120\trleft8\trbrdrt\brdroutset\brdrw15 \trbrdrl\brdroutset\brdrw15 \trbrdrb +\brdroutset\brdrw15 \trbrdrr\brdroutset\brdrw15 \trftsWidth1\trftsWidthB3\trftsWidthA3\trautofit1\trspdl15\trspdt15\trspdb15\trspdr15\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl120\trpaddt120\trpaddb120\trpaddr120\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3 +\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx788\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr +\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx1975\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx2835\clvertalc\clbrdrt\brdroutset\brdrw15 \clbrdrl +\brdroutset\brdrw15 \clbrdrb\brdroutset\brdrw15 \clbrdrr\brdroutset\brdrw15 \cltxlrtb\clftsWidth1 \cellx3697\nestrow}{\nonesttables +\par }}\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth4785 \cellx4564\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 +\cltxlrtb\clftsWidth3\clwWidth5016 \cellx9463\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 +\par \cell }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {{\*\shppict{\pict{\*\picprop\shplid1034{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}} +{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0 +\picw5927\pich12751\picwgoal3360\pichgoal7229\pngblip\bliptag-1490620335{\*\blipuid a726f05110190ec58a307fa3f29399ed}89504e470d0a1a0a0000000d49484452000000e0000001e2040300000003bcdd6d00000001735247420240c07dc500000012504c544579746abdbbb3f7f5eed4 +ecf9ebd8caf0d6c73eec65bc000000097048597300000ec400000ec401952b0e1b000017204944415478dad59d7d76e32acfc0e3395d8049e9ff6387bb80c459 +4071c402e61cbcffadbc08fcfd854468cff3fadeb9ed4da7f945421212c8f872f9edeb4fddd6b5727f6697aaf99792707c6921fc5763dbcb1fd5344ddd846bf8 +3a5ef5e695c50f6fe3f70f0fecf0b29d359d850e2c98cebde45eef7901f86ab25ccabdbbed81c3e5c0fe020126fc3f02f3f09a3bcae245c3f70e24fc16f156a8 +e103e404820421ad539e70ffb861b34283e3bb0ff24f7a6de367c909d40e28d03c842c85c46f4be947b0d3f23f2fa0a306e033035018043aaad005020b2d0a21 +bd62417f8dc31a808f6c4094503bf18a19d06ad1ad81b70cc00e81d203dd8540719181274d7ee053763a0c9c079612a917f44df73dac25cc7069302310bf3851 +dd5709f8cdcf00bddb8fb1cc19a43116835a0bad96dd7f0197cf2d9ed26058b1d606bb74df03fa01081765d5660cb3016721cd7aa0903833fc804a5d609b42a8 +8f6ccedfadf987bc5a75b98135da8c59205b0dcab9254e5cc32c9213f87486b804fa882a24ceac55762b7dd4cd1a0870152e9843fd23c0678d5eb1048aabd23d +1084c90c546d7347e04c10d0758d16ea2f917d0c6f41c2e97d2d38180ce94e09f9fdd06b6d2ea19ce5575576c7bf3572ca2b82cd80cb03db11985fa533197a23 +5d6490c6e456a98439d1c2bf994aa1d6d266063e252c756ae712ce073113f0be94d00117a9bc12b981621e2ef1fab790504d59541ea0de006155ac649650ae79 +1ba0cc0c342b5ea7672ac5ea2caf4aef41be19d5ce256ceb3633300467b3002e35aab38ee13d183d4cb1d4825856ab53ea9d017877c55f9fab8dbc39d04dfa0a +721a8de3198fb2c60e91542c8d346ba4c1a8e6500e29b51c814b8deaac405776fa8c1e737b94d460e6bd1ac29cb3050211e5fead315774d985fbdf3530e36cf1 +c4e1ea975db44ff165abdae518ce929a4cc071ac5cba3d0f32a3843f04acb51b4ba87f1328e52a6ce7072e96c9d494392ddcc2fc970fa897efbdc7ab75975142 +ddee327e0e08511cba4b463f940460563f5c799dfa69e0f31a17f0f78139a7a77bdc46f326c214239d879ab7819ac2cb2c2141a9225f68d3a43d878c40a863a1 +0d3f50c63411d69b2cfb12e603928cc605d3dff5c3bacc09dc12bd19b53f26616fa58b08d0baecbefd29603b517ae9c29f59aea874bedae23ef34335472b2127 +b5ea7141f1c7ac54e97981013f0fd4af665642b5f980638631b791b6ae00d3ab49de6cc0290d56f5ecdb1af067e387517924d49f0b29167ee87ed43cc6415459 +c6f0eec6e97990b3a9d70af8c7bc0f047511a2ddc5d5154a384b77b22c7dbdd4a5c030a35aa8d7e9a1fa7ccd245479220dd4a5b8ba5a5749d1aab588e2e68093 +d1c81c40a7cdbf7fbe3f84c09dd01d376c1e6378adbe5416a0fabe5c0adfee502c71ad5238887ad4e860326f6de73993406079290a51ac332970128e73e59407 +bf0bfcfbf15d78218b8db54af7376ee15518e68a695b3d1df8f708a85b37863d30d3ce4c5bb7d555fbcde51d7f54d7e619c290d29936bbbc2f80cbd9dc3fed36 +3995cdb3f743ed3710cdbbc0a78720aa5de517bdd934fd7a949b89675b96e9c058ba067e3e54506b1188c66f0dff1c5087fd2ed05700dcdd47de5b567aafcfcb +98ca6bd4c53dec3641bbf29bfb6f006504a804666de20bfb927049d32bf61dc7ffac23975f7493c66018058babb6f2ad8ea128d0996ec8474d37b462a977541a +05b69558b47d7480ed35c9c0fbb58d11c3a0cd2e6ce4f941a0127d0bc87059eccd4a0746d7f442bfc07c231ac41b7d6df7d8624215b6f81612ea2f2b5381b1ca +b75a1a4c20fec3b6a59f026e799db5003a15185b81aaa64dd1d9281a489630e68615b45333e4cc6e52c7f01905a24a3740930e8c2e044b3f396c80a92a8d0385 +b13ba3d8a51a0d01382dac67003efa94f354c260266bb34903d64d14a8f7149a1abc1fb7675c42c80a8cc66e25724a88b13b06946d66601d03e696307255d266 +0546770faacc1246fd5e4356607c0328b384f72830b35b10b6b8f202094beba2cb2a619497d90feff10da0bc1212769cf202e31b5c4a6605c6b72975d6318ccf +8647d3e14f02ff5f4b189d9c0e034d2290b069284c4e9512f6d2f57f39258c0f61e631bcfaf754e7c08c2a0d93d379b4819c40cabeafcea9d2ff49609553a594 +66882aa78494868f2ae7f40484860ff595117825a8342790d406953389f2461a536ace1483d4ef011925a4b5416504d21abdf201e34b345ec27cb5c5830694d9 +56311e149bc939868494cdab349b84b42ea88c6348c811ebac8e4ff30af5954da52423adebaf5c2aa5d94cc6d98208cc37013f097ddd75ce148328e1c1fa6c0a +906633dfbf0c54ec6246859bf46f9b1fd042f751283d043eeadb03547f0ec7e3d5f8b7c16fd595742c487bb05c7a08bc5f2e6d2d6a28eab6fa6cebbbd4b2fd96 +b7e6515d492a3dc8bb4f54fa8dc722d4d54528bcb9104489674f086a13f2accd8b0afc2bb00fe8bb2cb5e3c8ba2c8aa214e5951a492bb684775d5c8adbf74588 +b2bc08f9edf065a1252dbfa85bbe4a2bed10aa2c8b4b291cb0fa280402ef44205fa595704a5442898b9697f676ff281c517c12031b547c20f6dd3452495981b3 +95e62a0468d108a291f281fdf923def15fa3733644952658698f58469ab6d9ef7edc03a6cd169b33488e1b2296f758e9afddfd5176f0be5fe104381bc3837d12 +763fcdbdad68567ab410c5056a177428a1eda858e3abf4f2876633b980cfcb9504cc2661bbdbf5bcbd5add65011213a8fa3887fa31a0ca03a4154e7e10f3b885 +201f73a66506e0cd4d1e4411559543c21b69cd2b6834cf18de5bb24a53e6c3cdf5601c5497c52d68eb25bd4e4d67de069256117ba3b91a66e6bd3f8474609658 +4a5bbee8c730875bd092ee8c462319072ae690f07c08d562a13f292fe50da15ade268f8b18bb86ca00c68670416c4dd7d937258cb93ddeece0efc86b6b70400b +bb992919788bb93d4850aa0550d08268c3b974ef00552c9b015795978e54ca5216e2c3155fb0b70dcc00fa713aa62a89f7cf388ef0b7985ccaf26ba7fd920eac +c3ed8b8740050814a2b878a0fbbefceade9230a2d14a608d8cf740b94216d16529df0256911154175916589d3be287abce857853c2732fac2e2e45d6ce4e650b +68a17836dcfe944806ca08f08a67f9617cf323ad04b460f65c9f088c79a12a006fd4e9b74e9d8c7771b0af4e959031f9ba4bbc1ab15b22d20b52cee45b57f2f5 +94c3e951894046fee4057c36ef019f2de520836140a52b955f016813c790b086e80277ff99f08e558da753be013cf7c295f095e35ddb66b7779e08a4d78578dd +bc46fd996aa940da3906c3f56a1eba790f281926833702d6c21fa1ba55e9be956e4e157e4ac5c949658376fa04f2186e80f796b64aea4d14efe386ab3f1b3a9c +3e9da052e2664c0f845753bd3c10200d089c3003b57c3dd048f5aecd50800fe262d02022dc6a8d9ed1fbbde5035971d455158dbf09388452bb562b01c8a843f1 +12783c7be355ea8f0f5f65a7a74034d7bae169d449f7a89d91364239d9b686439090b6423a1aa983552dfe9ac62c7c9380c781d475fce1ba62e84660b81b1740 +32813be7bd9d5c2d02717e7a4a89c76be33f4c950afa6a508df9e9f5d660e8be2ba9c36dde4c099f92056c1d10437773d73db062022bd2913e732bad6fe08122 +1c96ae792ac5931f9840dcc0f1402fe23a5b8c01995e1f129a1068f0ec69cd73fc869b00bbcbcff537ff2001e1ebe1d584110112374467178e5feb81786224de +88cb929019d66a4c68dc3078b708362359123e05973702b59a79a12103d91af54126586938d51f56b73b9f03f91a45a09f9dee7d9cf1cb5164e095ad519fe6a3 +953efb67a4786d5255caf6093c27a67954086cbc7d6e1787ce800f4e323a019b1bc6d2fe786800464e43ecf3d8001f38864d380c83037c5077b417d70b7fd103 +fdfb6f6e953d01b2d2d1b9d1cc811d03486c4ad8029ba052ee7a297b9e58029fecbe36bed3e3e5cf6b9af2603af0913482c14a9b90073381bca277a1d2270281 +09dc3b2b970abc7ff6f52f1df860edc2ac55ea81cc8d92f9930d9280dc2d59d83dc58772f52ae56c053d81b92eb3068a170fd828e6bacc06d8003ed183a1d22a +cd07fda5b150d32f1e50a4da28767d34f7ab041ed0d52fe9c0eaa55da1f67a1a7a4fd453bf0174b5854b0d592ac513d5df0162b3a666180d2ec79fa7bfab75b7 +e5875378c60888fbc1a9185ba06f263d9f99d474887dbb25d6f806eb3afb1878f78b9ce765fddff263383a14dd476f809d1587ed342b609fbafe3bf5c3bfa250 +5289da69a2705fbf453dcfb6b0c2f627895180fd8e91fb84273ac5e39fbe2ffa820dae97e2fb525ec4acf7ac7531cd1c8a1716686f4dbf448a3cef3d569c4d15 +7f8ba22c4b514864627b6d213e269b11c7b46e5a117e60bd0372ac8f4fade6efd551ca4b21cb8b074a6c261eae7e19e8b063d7036b35da67bf6b7b067435186e +473af7c65dc2d26f154e40159e8f82c048a4417d9a61c7efc44cab8b1057171c04b442fa473e88fed15c3d50840c3f06d472b6dd67b53c019eb5b263592f8ff5 +3901efcb27c59ce588a753890ba4ce4ecf8801b85ed5b427c16d5a98da19e8cf171ea2aae0a02f6200de052c956e8f3be6dae97ce29deb13eb6d01c781c6fbe1 +7378c2e40c7864a6ad42095bdf10dc86efe6076c43e354fe14e7a10dfd01dd610ee42d92ce8cc615dc9f2e0dd327c00f393e856ed27b2ab07a364ab8b8753f70 +0b8c341f419ff863185f86542056252e2dc5c7151d03edf6659b98b755d825d2030f556a606bc396bfe6354a58e3aa893c4984b7407b3e419d5c7e114adc9aa3 +f377bc4a8d5d039d4ad3ea5f9f7823509edce0f161767a2620d54c954ff59fd7b396ddbd46a264470cc055685e03775eb690989b627d289be719f06357db896b +0ac31afbf918ee0213fda2050f145c9526fb85f3c4a70ba6d21ed43287c02eb52655d89ea44fa7a703e0359158eb7e763207c08f2e275085e2e254c23d6d9b64 +330525e12ca90912ae3f90fb0ca966aa2a799a7ba384bbc0d4f9a21647b73ace55ba074c0adfeaf89c9809085be01bf3853aaf66700ced2e30d54c8fef073a95 +307dbed0e70222b0db0726fac5ef034d14687681a98e480042b70bb449e11b37b5237eb817693c3065eba96eb58a010fc6d00d620ab08e4b78348669e97eccef +8f1c3fd96ab48cbbc511b0e302b148d5900e64a735d0e2daa54956293fb8b5d1111c52fd4cc070a4a78900f726e070718110e6c218f0a33b329a7fec681ad7e8 +a984ec2c4345e6c20168b200dbe3535957403892507125ac64672d017874231dcf4cdb70d3616c148384bb40cbf60b0fc4e758f4ef875fc6341bbfc229b0632f +9eac81081bd6b72c4c40730864063704cec7d0f6828def0f831fe602caee7c32b461023e5629731063195b6f34ddb16969ce20aa79e8b678af9c31f3b92398cf +39903307b7f3bac904a6f5db2ee66780f8001b7c4be31b75030886157e0b4420a7a2e90fdbb21a9fb862000b6ff7a7c3fec47f520fcb5d214d3c301a9ed5f4a1 +db9652172540212488521a2825e862ac7170c63f99c238f97e7f3254004a2874e1242c1cacf0c06e021e6cbea1de3983a847e0b7d41f4ec2029b21a5075efa1d +4cbfd975b8db677883d857150158c0c54929a0f440dca932212884a5af439572eae0e1d9048ee125f4406ca3759f40144353e469a431e8fae42682feb46918c6 +b0147e0c4b819fe022a7e0dd9de53d5a527ba0550f74dac4273c69e18d46b6d8e9ad65398de1c729906e35c3f1657e1f5fe26d01fe79eb3e0ae8e17015139590 +3e610c40d3079ace079821a4c0043c9770cff5f73fc298e4cf6e70debfff3002a4bafeee9aec36a8c424dc8935fb5654c9581943035a6a72bab73562775e8b02 +a966ba772e23f08110d9d39f69744f40be4aedaa863a8c02b12536b24aa9459b3e33199b1f48287de9408a23aad8e2c50cf827079052a85181942ca3a5a4c054 +20c9f3c943980b48d628054858c6a414f70c604bb0192a8fe0169429383390e0155f0c6006a3693547c21c564a77c3e30d4b1650180a8b08a44c8874bff7c0c8 +e2517cbaa0876e1230be5ac3f07b12303a88f4b9823486719d328c940034f1199161332409a333625ea089aa949ed06402925344aa4a639ecf88a4246074428c +ed51ae801fb1bf1e9d101991742848df04d2e58b97dc14950ab08684eb55da4596e2a32d670222db3f4be0f1cecc70c5224d7493720d3411606c102b26b08b02 +232272234d17dd4e81c8ad884c60740cb1d03f552ac3114f37bb7a5a173554a684703e867eede37c2d8329614ca57e45fe54a7646078f23805783a4529f26c11 +8031b78802393954df8b71fe0bf8d3b33403e74332720cde266c9d1cee5e9e588d302ce054aef5c05e8dfd5b0c49eb1970f7a81d02b09b7d37f6330ec093392a +d642730aec0621d7addf3f001c1e850e6638156cbe7e7662a69c40d327513dd0f81381209cd563fa8f300ceaa1992a4ea09903351e60831b70e22a0cb6c15a21 +e4043cb41a961b8e6e613b5be251fd45f9d59512f7c37027e7326acb01555620e0269501fda1bfba6fdc0fc38d155d4c9bb8c756c3a99de64663bfc5176e2e82 +d7ad2efc7f66f9d8a1d5bc090c7b9a06811d4ad865070e79a95369872a755295ae80c1fd373db3bfe3be3a7ddc637d0a846034e2c34968ba7f052075f63e87d1 +94b1ee3557a9051df6a5a57307ac7a0d6e928c40bb0f54ef007bc70fa79e79c75f361aec9a69cb997f972af58774f45bfefdac6be3401fdac803d81daf26daf1 +66a809b86f352d1778503d996ef5fa7134cd03b46be051aaa8d815701762e91ab6b90ec3f7fb40669b5b127029cb3ef0c84cdf07866bf9221c475326305ae347 +81a9567a9eeac161e9cd4d314efb69e6d75196513193a88f688d3f0ab90f64ad29d04aee01b86ba62ada879c2ce1be5ff004a4d5f8237063a6f17b64f6805409 +f76ab696b385d003812ae1aed530354a58548800991a65486810b8b11a75f484f11320d16860df6a981a7d1b180a8bac0b430be0c64c7502902ee18e5ff8a494 +5ee11b56a4d9ebdee765c1dde93d333b97cd028c2ed09e4978f840b7632047a55b0959936f0f6448b849dc78b37d0620afbe0f4096d1ac635bc58c33cce0bd0d +35bc729bafd24de2c64a495380f0eb4091016818c1d7594dbb04d2d71107e0b8d64602aeac46537f710ee4fc750f9c2dbaa558697cd3797ead244cf2430e705d +e8a7180d4ba56b334d9130bae97c06fc0509976d753f6f34ab8d3d566998045c3a22a7552811b88ca6ec8c866f344bab4902b2245c9e26a1f836c3957079d602 +3fa361bb8559580dbb92e9180b437b40568b423a50ce80e45f7c0338b31a566f521ab05bf8053fce503a688f81aca68f74e0e41729439804bcfe2e708aa6bf02 +9cdff1f15bc051422db949e99b126a88de2a9e47c209c81bfc1ec875fc49a522d6359243c26ee6f9825105bd0184c1f3d56f4938584dcaf4fb1e3061ae48329a +01989041bd0774b3217335f84da03096d32a340213c6b01db2eea4f93041c27608dd9c56a16409877b2e2b7ce449173bff2603d00c407ccaa9064647720fe495 +dcddb8c2a7fd735c8b0be7d7431774fc37ecf01fe3372944a82bfc29d0052fdc1081988dfa89298c181a4d751125c0e5c20412558a405066389201817f2f781c +f4a528ca9f0062a5ed9f698656295cd5adbc8468a63f23a10786432010f84f2a3755e8f9b379f203f1ec00ff042e59005a8d7a35b829c3e61181161ced53f48f +fdc260aafb8774fcd0c290c587a87d62cfd4131f51f5ef8acf1e7ba6a4a57495fac737f9c30bf0984ae58fe4fe51a03f00021bfab0734af887d525cc86a43b4a +bc4ec7470bfa0b9fd17172ce6c0609b1ee0d8f16f43c7fbeb44c990e4940df04269ede4625b62cca261c689d90e98fc06db2307c7ce3cf38d1e22efa0b64d303 +f7cfeaf36727cddecc6c80761768e65f9d16b57f6c1b76f64dc03de58c53cbfcebf4d341c2ad72166fa6851e0494f0e9812905fe0cb8f940cb4fa0a50e447cc8 +e0eb0d603f86e3f91c33e042426f9b7db4461fc4a7851e3ca3e3f0438737f29d0ad6775ae363d2c6f7ef422bb46fc3f6cf14b0e15986ce213f03d03fa46efc58 +1036948c0dcdd4fe130e8f2433fed7bad070e90fc481f013f7377c0a814d982634605b57e4f627950c979e03fd613ac66fccc304ec3faf0947ede04bb66fe346e06f5fff07cea8096bac9236d00000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw5927\pich12751\picwgoal3360\pichgoal7229\wmetafile8\bliptag-1490620335\blipupi96{\*\blipuid a726f05110190ec58a307fa3f29399ed} +010009000003c269000000009e69000000000400000003010800050000000b0200000000050000000c02e201e000050000000701040000009e690000430f2000 +cc000000e201e00000000000e201e0000000000028000000e0000000e20100000100040000000000e0d20000c40e0000c40e000006000000060000006a747900 +b3bbbd00c7d6f000cad8eb00f9ecd400eef5f7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000053333333333232222223322333232222222322333333233333332333323332323333332222222333333333333333333311444444444554411333332 +22333322322232232222332233223322223223223333323333223333332232333322322222232233332323333222223333333335053322233332332222333322 +33222222222222223333223333332223332233222233333222232223333133333333233333144444444455441133333222233222222222222222332232223322 +22322322333332233322333333332233332322222222323333233333222222233333333505322222332222222222222233222222222222222222222332222222 +22222222222222222233333333111333333333333331444444445544313323222222222222222222222222222222222222222222232222222222222222222223 +22222222222222222222222222222222222233350532222222222222222222222322222222222222222222232222222222222222222222222231133131111111 +11113111133134444444454411332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222232222222222222222222222222222222222322222222222222222222222223111311111111111111111133314444444454411332222 +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222335053223222222332223322222 +22222222222222222222222232222222222222223222222222331111313111111113111113331344444445444133222232222222222222222222222222222222 +22222222232222222223222222222222222322222222222222222222222222222222233505322222222233222332222222222222222222222222222233222222 +22222222322333222233311141111111111111111133134444444544413322223322222222222222222222222222222222222222232332222223322222222222 +22222222223222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222223222223331143111331 +11111311133331134444454441332223232222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222222222222222222222222222222222333115533333333133333333333111144454441132233 +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235033222222222222222222222 +22222222222222222222222222222222222222222222222222233333533333333333333333333333113444444313333322222222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222222222233111133111331333111313332233311314444444133322222222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222233113111111111 +33311111133222331353444444411332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222222222222222222222222222222222222222222222222222222222222222222222233113311114111133314311133332211555134444431332 +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222222222222223331311111411111331111111332231155531444443133222223322222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222222222233113311131111113311130133221155555334443113322233333222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222233311111333311 +11333333113321135355531131133333333333333222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222222222222222222222222222222223331111333333311223333113331155355510011101111 +11110111322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222222222223222233333533233333322223333223135555550001110111100010110322222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222222322223332223222233333322222222313555555100111033330000011132222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222232222222223222222 +32323222222211555555555331100011011101113222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322235053222222222222222222222222222222222222222222222222222222222222222222222222222222222222222232222222311555555555531101111 +01000100322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222322235032222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222232231155555555555110111101313311222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222222323115555555555511111111122333322222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222222222231355555555551133222332223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222231355555555553133222 +33222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222222223115555555555511322333222332222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222222222311555555555553113223332222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222222222231155555555555511322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222231155555555555531322 +22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222222223115555555555553113222222222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222223323313555555555555311322232222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222222223311555555555555551132223322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223313555555555555551132 +22322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222232222331555555555555555313322322222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222223222231155555555555555531332323222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222322223313555555555555553113232222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222322223115555555555555555113 +32222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222222331355555555555555511332222222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222222331155555555555555551133222222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222222233135555555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222222222222222222222222222222222222331155555555555555555311 +33222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222222233115555555555555555551133222222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222223222233311555555555555555555311322222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322223311355555555555555555551133222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222222222222222222222222222222322223311555555555555555555551 +13332222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222232222331155555555555555555555313332222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222223222233135555555555555555555531132222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322233115555555555555555555553313322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233115555555555555555555555 +51132222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223313555555555555555555555551132222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222223311555555555555555555555555313322222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22223331155555555555555555555555551133222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223331555555555555555555555555 +55313322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222331155555555555555555555555555313222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222233115555555555555555555555555551332222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22233313555555555555555555555555553132222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223115555555555555555555555555 +55513322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222223311555555355555555555555555555313322222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222331155555555555555555555555555531222222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350332222233222222222222222222222222222222222222222222222222222222222222222222222222222222 +22231135355555555555555555555555553132232222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032232223322222222222222222222222222222222222222222222222222222222222222222222222222222222331155555555555555555555555555 +55313222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032232223322222222222222 +22222222222222222222222222222222222222222222222222222222222222222233135555555555555555555555555555313222222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503223222332222222222222222222222222222222222222222222222 +22222222222222222222222222222222223113555555555555555555555555555531322222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350533322233222222222222222222222222222222222222222222222222222222222222222222222222222222 +23311555555555555555555555555555553133222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053232223322222222222222222222222222222222222222222222222222222222222222222222222222222223113555555555555555555555555555 +55513322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032232223322222222222222 +22222222222222222222222222222222222222222222222222222222222222222311555555555555555555555555555555511332222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503223222332222222222222222222222222222222222222222222222 +22222222222222222222222222222222231155555555555555555555555555555553113222222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350323322233222222222222222222222222222222222222222222222222222222222222222222222222222222 +23135555555555555555555555555555555511322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052232223322222222222222222222222222222222222222222222222222222222222222222222222222222221135555555555555555555555555555 +55553112222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053232223322222222222222 +22222222222222222222222222222222222222222222222222222222222222222313555555555555555555555555555555555113222222222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503233222332222222222222222222222222222222222222222222222 +22222222222222222222222222222222211355555555555555555555555555555555511322222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222222222222222233222222 +33135555555555555555555555555555555551132222222332222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322235053332223322222222222222222222222222222222222222222222222222222222222222222222223322222331135555555555555555555555555555 +55553113322222223322222222222222222222222222222222222222222222222222222222222222222222222222222222222235052322223322222222222222 +22222222222222222222222222222222222222222222222222222222332222233115555555555555555555555555555555555113322222223322222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505232222332222222222222222222222222222222222222222222222 +22222222222222222222222233222223311555555555555555555555555555555555531333222222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350533222233222222222222222222222222222222222222222222222222222222222222222222222232222233 +11355555555555555555555555555555555553113232222222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053332223322222222222222222222222222222222222222222222222222222222222222222222222222223311555555555555555555555555555555 +55555511333222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053322223322222222222222 +22222222222222222222222222222222222222222222222222222222222222331155555555555555555555555555555555555531133322222222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505233222332222222222222222222222222222222222222222222222 +22222222222222222222222222222233135555555555555555555555555555555555355313332222222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222222222222222222222331 +15555555555555555555555555555555555355551133322222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032332223322222222222222222222222222222222222222222222222222222222222222222222222222233135555555555555555555555555555555 +55555555311333222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223322222222222222 +22222222222222222222222222222222222222222222222222222222222233313555555555555555555555555555555555555555531133322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503233222332222222222222222222222222222222222222222222222 +22222222222222222222222222223311555555555555555555555555555555555555555555311333222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350323222232222222222222222222222222222222222222222222222222222222222222222222222222233311 +55555555555555555555555555555555555555555551113322222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222233222222222222222222222222222222222222222222222222222222222332222311355555555555555555555555555555555 +55555555555311322222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222222222222222233222231155555555555555555555555555555555555555555555511322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222322222 +22222222222222222222223322223115555555555555555555555555555555555555555555553132222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222233222222222222222222222222222222222222222222233135 +55555555555555555555555555555555555555555555313222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222232222222222222222222222223322222222222222222222222222222222222222222223115555555555555555555555555555555555 +55555555555531322222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222232222222222 +22222222222222232222222222222222222222222222222222222222223311555555555555555555555555555555555555555555555531322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222322222222 +32222222222222222222222222331155555555555555555555555555555555555555555553553132222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222322222222232222222222222222222222223331355 +55555555555555555555555555555555555555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222333222222233222222222222222222222222331155555555555555555555555555555555555 +55555555355511322222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222333323 +22333333322222232222233322222223333222222222222222222222233135555555555555555555555555555555555555555555555511322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222233333333223333333333322233222233332222232 +33322222222222222222222223313555555555555555555555555555555555555555355555531322222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222223333111113333111113332311322231133222232311322222222222222222232223115555 +55555555555555555555555555555555555355555551132222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222233101111333101110332331032222101333222310132222222222222222222222311555555555555555555555555555555555555 +55555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222223101322 +33310331013323103222310113332231113222222222222222222223331555555555555555555555555555555555555555555555553133222222322222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222330111233101310133233101332310111132231 +01323322222222222222222231155555555555555555555555555555555555555555555555313322222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222233011123310133333223111133331011113333101332332222222222222222231155555 +55555555555555555555555555555555555555555531332222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222332223101332333103311222300101333111310133310132333222222222222222233135555555555555555555555555555555555555 +55555555553133222222222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222232223101111 +33310110122210130133310110133311001133222222222222222333115355555555555555555555555555555555555555555555555113322222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222322222222231111333331111332211151132311111332311 +11132222222222222222233311555555555555555555555555555555555555555555555555511332222222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222232222222223333322333333332333333332223333222223333222222222222222222233313555555 +55555555555555555555555555555555555555555553113222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222333322222233222233323322222223222222333222222222222222222222311555555555555555555555555555555555555555 +55555555555511332222222222222222222222222222222222222222222222222222222222222222222222222222222222222235032222223222222222222222 +22222222223322222222222322222222222222222222222222222331355555555555555555555555555555555555555555555555555511332223222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222223222222222222222333333222222 +22222223222222222222223135555555555555555555555555555555555555555555555555551133222322222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222223322222332222222222222333223222222222222223222222222222221155555555 +55555555555555555555555555555555555555555555113322233222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222223222222332222233222232222222222222222222222222222222222222222223115555555555555555555555555555555555555555 +55555555555511322222322222222222222222222222222222222222222222222222222222222222222222222222222222222235053232223222222222222222 +22222222222222222222222222222222222222222222322222223313555555555555555555555555555555555555555555555555555531132222322222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505223222332222222222222222222222222222222222222222222222 +22222222222333222222311555555555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222333222222311555555555 +55555555555555555555555555555555555555555555531322222222222222222222222222222222222222222222222222222222222222222222222222222222 +23322235052322223322222222222222222222222222222222222222222222222222222222233322222311355555555555555555555555555555555555555555 +55555555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222223322235053332223322222222222222 +22222222222222222222222222222222222222222333322222331155555555555555555555555555555555555555555555555555555555113222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505332222332222222222222222222222222222222222222222222222 +22222222232222223331155555555555555555555555555555555555555555555555555555555511332222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222222233311355555555555 +55555555555555555555555555555555555555555555551132222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223322222222222222222222222222222222222222222222222222222222222233111555555555555555555555555555555555555555555555 +55555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222222222222235052232223322222222222222 +22222222222222222222222222222222222222222222233113555555555555555555555555555555555555555555555555555555555553113322222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505233222332222222222222222222222222222222222222222222222 +22222222222223113555555555555555555555555555555555555555555555555555555555555113332222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222222222222222222231135555555555555555 +55555555555555555555555555555555555555555555311333222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223322222222222222222222222222222222222222222222222222222222333115555555555555555555555555555555555555555555555555 +55555555555511332232222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555555555555555511332332222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222222222222222222222222222222222222222222222222222 +22222222222311355555555555555555555555555555555555555555555555555555555555551122222222222222222222222222222222222222222222222222 +22222222222222222222222222222222223222350332222222222222222222222222222222222222222222222222222222222222222311355555555555555555 +55555555555555555555555555555555555555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222222 +22322235053222222222222222222222222222222222222222222222222222222222222222233135555555555555555555555555555555555555555555555555 +55555555555531322222222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222222222313555555555555555555555555555555555555555555555555555555555555531132222222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222322231155555555555555555555555555555555555555555555555555555555555553113322222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222322231155555555555555555 +55555555555555555555555555555555555555555555531133222222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555 +55555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222222222222222222222223222311355555555555555555555555555555555555555555555555555555555555555113322222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222222231155555555555555555555555555555555555555555555555555555555555555531332222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532232222222222222222222222222222222222222222222222222222222222222311555555555555555555 +55555555555555555555555555555555555555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235053223222222222222222222222222222222222222222222222222222222222222231355555555555555555555555555555555555555555555555555 +55555555555555531332222222222222222222222222222222222222222222222222222222222222222222222222222222222235053223222222222222222222 +22222222222222222222222222222222222222222231155555555555555555555555555555555555555555555555555555555555555555531333222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222222222222222 +22222222223135555555555555555555555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350532222222222222222222222222222222222222222222222222222222222222231155555555555555555555 +55555555555555555555555555555555555555555555555511322222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222223115555555555555555555555555555555555555555555555555555 +55555555555555553133222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222311555555555555555555555555555555555555555555555555555555555555555555353113222222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222231155555555555555555555555555555555555555555555555555555555555555555555511222222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222231135555555555555555555 +55555555555555555555555555555555555555555555555551132222222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555555 +55555555555555555113222222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222222331555555555555555555555555555555555555555555555555555555555555555555555313322222222222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222222222222 +22222222231155555555555555555555555555555555555555555555555555555555555555555555551332222222222222222222222222222222222222222222 +22222222222222222222222222222222222222350522222232222222222222222222222222222222222222222222222222222222231155555555555555555555 +55555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222222222222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222222233135555555555555555555555555555555555555555555555555555 +55555555555555553531332222222222222222222222222222222222222222222222222222222222222222222222222222222235052222223222222222222222 +22222222222222222222222222222222222222223113555555555555555555555555555555555555555555555555555555555555555555555551133222222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22222222311355555555555555555555555555555555555555555555555555555555555555555555555313332222222222222222222222222222222222222222 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222222311555555555555555555555 +55555555555555555555555555555555555555555555555555531133222222222222222222222222222222222222222222222222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222222231155555555555555555555555555555555555555555555555555555 +55555555555555555555313332222222222222222222222222222222222222222222222222222223222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222322223115555555555555555555555553555555555555555555555555555555555555555555555555311332222222 +22222222222222222222222222222222222222222222222222222222222222222222223503222222322222222222222222222222222222222222222222222222 +22332222313555555555555555555555555555555555555555555555555555555555555555555555555551133222222222222222222222222222222222222333 +22222222222222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222333115555555555555555555555 +55555555555555555555555555555555555555555555555555555511322222222222222222222222222222222222223333322222222222222222222222222222 +22222235032222223222222222222222222222222222222222222222222222222222232311555555555555555555555555555555555555555555555555555555 +55555555555555555555553133322222222222222222222222222222222222233332222222222222222222222222222222222235032222223222222222222222 +22222222222222222222222222222222222222331355555555555555555555555555555555535555555555555555555555555555555555555555555113333222 +22222222222222222222222222222222222222222222222222222222222222222222223505222222322222222222222222222222222222222222222222222222 +22222331135555555555555555555555555555555555555555555555555555555555555555555555555555551133332222222222222222222222222222222222 +22232222322222222222222222222222222222350322222232222222222222222222222222222222222222222222222222222331155555555555555555555555 +55555555555535555555555555555555555555555555555555555555113332222222222222322322222222222222222223222222222222222222222222222222 +22222235052222223222222222222222222222222222222222222222222222222222231135555555555555555555555555555555555555555555555555555555 +55555555555555555555555551132222222222223232333333322222223322222333332222222222222233333222222222322235032222223222222222222222 +22222222222222222222222222222222222233115555555555555555555555555555555555555555555555555555555555555555555555555555555551132222 +22222222311133333113222333331333311333323333333231333133322222222232223505222222322222222222222222222222222222222222222222222222 +22223113535555555555555555555555555555555555555555555555555555555555555555555555555555555311222222222222310133311111133111310133 +11111335111311133113101332222222223222350522222232222222222222222222222222222222222222222222223222223113335555555555555555555555 +55555555555555555555555555555555555555555555555555555555551122222222222233101331011013330110113311110133101110133113001333222222 +33222235033222223222222222222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555113222222222223310133113310333011013331133111331111013301101133322222232222235053333223222222222222222 +22222222222222222222222222223222223331355555555555555555555555555555555555555555555555555555555555555555555555555555555555313222 +22222222231013301331013300101333113310133101013310111113322222232222223503233322322222222222222222222222222222222222222222233322 +22331155555555555555555555555555555555555555555555555555555555555555555555555555555555555531132222222222231013301331033301110133 +11331113310101333100111332222222223222350323222232222222222222222222222222222222222222222222222222331355555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555113222222222223101331011013330131013311110133310101333101311322222222 +22222235032222223222222222222222222222222222222222222222222222222331155555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555531332222222222310133101103333011113331110133233101333310131133222222222222235052222223322222222222222 +22222222222222222222222222222222333135555555555555555555555555555555555555555555555555555555555555555555555555555555555555531132 +22222222233133331111323311113333111133223331333321133132222322222222223505222222332222222222222222222222222222222222222222222222 +33115555555555555555555555555555555555555555555555555555555555555555555555555555555555555553111332222222323332333333322222233222 +33333322223333222223332222233222222222350522222233222222222222222222222222222222222222222222222233115555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555355351133322222222222222223222222223222223333222222332222222222222233222 +22222235052222223322222222222222222222222222222222222222222222223113555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555535311332222222222222222222322223223323233322222222222222222222223322222222235052222223222222222222222 +22222222222222222222222222222223311555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555531 +33222222222222222222222222222222222222222222222222222222222222222222223503223222322222222222222222222222222222222222222222222223 +11355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555113222223222222222222222222222222 +22222222222222222222222222222222232222350533322232222222222222222222222222222222222222222222222311355555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555511222222322222222222222222222222322222232222222223222222222222222 +33222235053322223222222222222222222222222222222222222222222222231355555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555551122222333222233232222222222222233222222333222222222222233322222233222235053322223222222222222222 +22222222222222222222222222232331155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555551 +12222233322223323222222222222232222222233222222222222222322222223322223505333222322222222222222222222222222222222222222222222331 +15555555555555555555555555555555555555555555555555555555555555555555555555555555555555553555555112222233222222222222222222222222 +22222222222222222222222222222222222222350533222233222222222222222222222222222222222222222222531155555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555511322232322222222222222222222222222222222222222222222222222222222 +22222235052332223322222222222222222222222222222222222222222223115555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555535555551133222222222222222222222222222222222222222222222222222222222222222222235052322223322222222222222 +22222222222222222222222222222311555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555553 +13322222222222222222222222222222222222222222222222222222222222222222223503223222332222222222222222222222222222222222222222222113 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555511332222222222222222222222222222 +22222222222222222222222222222222222222350523222233222222222222222222222222222222222222222222311555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555533551133322222322222222222222222222222222222222222222222222222222222 +22222235033232223322222222222222222222222222222222222222222331155555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555511332222232222222222222222222222222222222222222222222222222222222222235032332223322222222222222 +22222222222222222222222222233115555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555535 +53113322222222222222222222222222222222222222222222222222222222222222223505233222332222222222222222222222222222222222222222231135 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555333555311133322222222222222222222222 +22222222222222222222222222222222222222350523322233222222222222222222222222222222222222222222115555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555553555555313333222222222222222222222222222222222222222222222222222222 +22222235032332223322222222222222222222222222222222222222223311555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555531133322222222222222222222222222222222222222222222222222222222222235053232223322222222222222 +22222222222222222222222222331555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555311332222222222222222222222222222222222222222222222222222222222223505223222332222222222222222222222222222222222222223331555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555511332223222222222222222222 +22222222222222222222222222222222222222350322222233222222222222222222222222222222222222222351155555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555353153222322222222222222222222222222222222222222222222222222 +22222235053322223322222222222222222222222222222222222222233155555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555533113322232222222222222222222222222222222222222222222222222222222235053232223322222222222222 +22222222222222222222222233115555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555531322222222222222222222222222222222222222222222222222222222222223505223222332222222222222222222222222222222222222333135555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555531322222222222222222222222 +22222222222222222222222222222222222222350522322233222222222222222222222222222222222222233313555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555553133222222222222222222222222222222222222222222222222222222 +22222235053332223322222222222222222222222222222222222223311555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555313322222222222222222222222222222222222222222222222222222222222235032332223322222222222222 +22222222222222222232222231155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555531133222222222222222222222222222222222222222222222222222222222223505333222332222222222222222222222222222222232222331355555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555553113322222222222222222222 +22222222222222222222222222222222222222350523322233222222222222222222222222222222233222233135555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555553555511333222222222222222222222222222222222222222222222222222 +22222235052322223322222222222222222222222222222223322223115555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555551113232222222222222222222222222222222222222222222222222222222235032222223322222222222222 +22222222222222222332223311555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555553511333222222222222222222222222222222222222222222222222222222223505233222222222222222222222222222222222222232223313555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555533531333333332222222222222 +22222222222222222222222222222222222222350322222222222222222222222222222222222222222222311555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555535555113333333322222222222222222222222222222222222222222222 +22222235053222222222222222222222222222222222222222222231155555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555531111133332222223222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222222223155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555553333113333133222222222222222222222222222222222222222222222222223505322222222222222222222222222222222222222222231135555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555551444314444313232332222222 +22222222222222222222222222222222222222350332222222222222222222222222222222222222222233115555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555353344441344441133332222222222222222222222222222222222222222 +22222235033222222222222222222222222222222222222222223313555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553344444134444133332222222222222222222222222222222222222222222222235053222222222222222222222 +22222222222222222223331335555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555314444413444313333322222222222222222222222222222222222222222222223505323222222222222222222222222222222222222223311555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555334444411444113333322222222 +22222222222222222222222222222222222222350332322223222222222222222222222222222222223331155555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555533444441144431533332222222222222222222222222222222222222222 +22222235033223222322222222222222222222222222223222233135555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555534444444115444133332222222222222222222222222222222222222222222222235053233222322222222222222 +22222222222222232223113555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55531344444411544431333222222222222222222222222222222222222222222232223503323322232222222222222222222222222222222223115555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555514444455513544444133322222222 +22222222222222222222222222222222222222350333232222222222222222222222222222222232222313555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555551444453311444444413322222222222222222222222222222222222222222 +22222235033333222222233222222233222222222222223222331555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555144444531144444441332223222222222222222222222222222222222222222322235031333323222232222222223 +22222222222222222231155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55514344531144454441332222322222222222222222222222222222222222222232223505311133333232222223332222222222222222222331155555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555314445511444433331332222222222 +22222222222222222222222222222222222222350554431333332222222333222222222222222222231135555555555555555555555555555555555555555555 +55553553533555553553555535553535555535535533555335555555555555555533445511334311113333222222222222222222222222222222222222222222 +22222235054444411133333322223222222222222222222223115355555555555555555555555555555555555555555555555535553555555555535555555555 +55555555555555555555555555555555551444531344113333332222222222222222222222222222222222222222222222222235054444443333333332222222 +22222222222222222311555555555555555555555555555555555555555555555555555553355555555555555555355555555555555555555555555555555555 +55143431344313533322222322222222222222222222222222222222222222222222223505444444444113333322222222222222222222223313555555555555 +55555555555555555555555555555555555555551133555555555555555555555555555555555555555555555555555555131111353133333222222222222222 +22222222222222222222222222222222222222350544444444443113333222232222222222222223311355555555555555555555555555555555555555555555 +55555551001553555555555555555555555555555555555555555555555555555531331133133332222222222222222222222222222222222222222222222222 +22222235054444444444443113333332322232222222222231155555555555555555555555555555555555555555555555555551001111153111311133351113 +13313111311133111155555555555555555553131133332222333322223222222222222222222222222222222222222222222235054455534444444431113333 +33323222222222223135555555555555555555555555555555555555555555555555555511311101101110111113111001111011100111110155555555555555 +55555313333322222233322222322222222222222222222222222222222222222222223505444444453544444433133333333322222222223135555555555555 +55555555555555555555555555555555555555555550151010001000011310000110101000130111015555555555555555553313332222222233322222222222 +22222222222222222222222222222222222222350554444444454444444431133333233222222223115535555555555555555555555555555555555555555555 +55555555555001011010101101130011011010100011011103555555555555555553551133222222222222222222222222222222222222222222222222222222 +22322235054444444444444444444431133333333222222311355555555555555555555555555555555555555555555555555555355111113000310011011001 +00013000100011000555555555555555555535313322323322222222222222222222222222222222222222222222222222322235054444444444444444444444 +33333333333222211355555555555555555555555555555555555555555555555555555555501101531353115533333101135311301155113555555555555555 +55555551133322333322322222222222222222222222222222222222222222222222223505444444444444444444444444411333332223311555555555555555 +55555555555555555555555555555555555555555550100355553555555555531355555531355555555555555555555555555555113322231133332222222222 +22222222222222222222222222222222222222350544444444444444444444444444311133333331355555555555555555555555555555555555555555555555 +55555555555333335555555555555555355555555535555555555555555555555555555511333333131113322222222222222222222222222222222222222222 +22222235054444444444444444444444444444411133331155555555555555555555555555555555555555555555555555555555555333555555555555555555 +55555555355555555555555555555555555553555113333311411133232222222222222222222222222222222222222222222235054444444444444444444444 +44444444311131133555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555311133333144413222222222222222222222222222222222222222222222223505444444444444444444444444444444444331133555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555131111133134413222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444313355555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555355134311313313443322332222222222222222222222222222222222222 +22222235054444444444444444444444444444444444441133555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555535314441151333344132222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444511355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555531444413313134413222222222222222222222222222222222222222222222223505444444444444444444444444444444444453443155555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534444411443344413222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444433344433555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555553444441134444431332222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444335555335555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555344444411444443133222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444433355555355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555314444441144444513322222222222222222222222222222222222222222222223505444444444444444444444444444444444444444544335555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555314444441144444433322222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444433355555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555533444444114444443133222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444531555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553344444431344444433332222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444453313555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555314444444134444443133222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444431355555 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555114444444134444444133222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444315555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555533444444413444444431322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444441115555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553344444441344444444132223222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444331355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555334444445114444444413222222222222232222222222222222222222222222223505444444444444444444444444444444444444444444444444451135 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534444445114444444413222222 +22223323222222222222222222222222222222350544444444444444444444444444444444444444444444444444511555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555531444444513444444441333333322223333232222222222222222222222 +22222235054444444444444444444444444444444444444444444444444445335555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553144444541144444444113333222222333323222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444441355555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555314444551135444444411333333223333332222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +15555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555334444431135444444313333333 +33333332222222223222222222222222222222350544444444444444444444444444444444444444444444444444444431355555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555533444445313444444413111111111111132232222223322222222222222 +22222235054444444444444444444444444444444444444444444444444444444313555555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553344444433544444441311311113111113333322222332222222222222222222235054444444444444444444444 +44444444444444444444444444444444431155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555534444443154444443153111111111111133322222232222222222222222222223505444444444444444444444444444444444444444444444444444444 +44313555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534444443154444444153111131 +11111113333222222222222222222222222222350544444444444444444444444444444444444444444444444444444444431355555555555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555553344444435544444413311313311331133333322222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444413555555555555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555314444441354444441333111353333533333322222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444443155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555553344444134444444133331333333133333333222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444511555535555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555134444354444444131111331 +11111133113322222222222222222222222222350544444444444444444444444444444444444444444444444444444444444451555335555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555513555433444444413111111131111111311332222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444313355355555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555535531554551144444441311331111111111151133322222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444441135535555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55553353155444314444444153133111111111111113332222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444311555555555555555555555555555555555555555555555555555555555555555555555555555555555555555553555154444533444444313133113 +11131113111332222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444411355555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555515444431154444441311111333333333331333222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444135553555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555553551544445135444444133133335333333333333322222222222222222222222235054444444444444444444444 +44444444444444444444444444444445444444554431355555555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555134445551544444411533333323333333333322222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444315555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555114445531344444431333333 +22233333333322222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444513555555555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555531334455134444444133222222222333333332222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444453135555555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555333545531544444313322222223222223222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444331355555555555555555555555555555555555555555555555555555555555555555555555555555555 +55555533551334453134444431333322233222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444435555555555555555555555555555555555555555555555555555555555555555555555555555555555555553553334445134444441333333 +33333222222222222222222222222222222222350544444444444444444444444444444444444544444444444444444444444444444444413535355555555555 +55555555555555555555555555555555555555555555555555555555555555555555555355551444331544444133332222333222222222222222222222222222 +22222235054444444444444444444444444444444444454444444444444444444444444444444443135333555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555134453134444433333222223322222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444413553555555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555513445511444443133222222332222222222222222222222222222232223505444444444444444444444444444444444444444444444444444444 +44444444444444443155555555555555555555555555555555555555555555555555555555555555555555555555555555555555555534444531444444133333 +22233222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444335555555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555444443134444413333322233222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555555555555555555555555 +55555555555555355555555555555555555555555555514444311535441333222223322222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444315553555555555555555555555555555555555555555555555555555555555555555553353335 +55555555555553344444315544313322222223222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444443355535555555555555555555555555555555555555555555555555555555555555555555555555555555555553134444313444413322 +22222322222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444135555555555 +55555555555555555555555555555555555555555555555555555555555555555555555555555511344443444441332222222222222222222222222222222222 +22322235054444444444444444444444444444444444444444444444444444444444444444444444444441555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555113344313444133222222222222222222222222222222222222322235054444444444444444444444 +44444444444444444444444444444444444444444444444444444135555555555555555555555555555555555555555555555555555555555555555555555555 +55555555555555551134441133113322222222222222222222222222222222222232223505444444444444444444444444444444444444444444444444444444 +44444444444444444454431555555555555555555555555555555555555555555555555555555555555301335533555533555535555555353333411133333222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444441355555555 +55555555555555555555555555555555555555555555555555510015553333335355355535555555355311333533322223222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555555555555555555555555555555 +55555555555555555551003531353113335313353335333333311333333332223222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444451555555555555555555555555555555555555555555555555555555555555335300131001 +10110011011101031110011111101222322222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444445335555555555555555555555555555555555555555555555555555555555555511103011110111101110101010001101110101322 +32222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444445513553555 +55553555555555555555555555555555555555555555555555555553331300011011110100110001000000011010122232222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444533155555555533555555555555555555555555555 +55555555555555555555555553130001100011010111000100000100101012233322222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444453313555555555555555555555555555555555555555555555555555555555555533133113 +10113533101310130111031101013332322222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444445443155555555555555555555555555555555555555555555555555555555555553313335353353333533335331135333333333333 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444135555 +55555555555555555555555555555555555555555555555555555555553335555553353555553555335535322333233222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555555555555555555 +55555555555555555555555555535555555555555555555555553532222223222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444155555555555555555555555555555555555555555555555555555555555353555555 +55555555555555555553511322223223222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444413555555555555555555555555555555555555555555555555555555555535535555555555555555555555533511222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444441355 +55535555555555555555555555555555555555555555555555555555555555555555555555555555555531332222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555553132222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444441555555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555313322222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444135555555555555555555555555555555555555555555555555555555555555555555555555555555555553133222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444315 +55555555555555555555555555555555555555555555555555555555555555555555555555555555555315322322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444451355555555555555555555555555555555 +55555555555555555555555555555555555555555555555555553332223222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444445535555555555555555555555555555555555555555555555555555555555555555 +55555555555555555555313222222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444441355355555555555555555555555555555555555555555555555555555555555555555555555555555555511222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444445444 +15555555555555555555555555555555555555555555555555555555555555555555555555555555553353322222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444544413533555555555555555555555555555 +55555555555555555555555555555555555555555555555555535133222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444441153555555555555555555555555555555555555555555555555555555555555 +55555555555555555555311322222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444413555555555555555555555555555555555555555555555555555555555555555555555555555555555333322222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +43355555555555555555555555555555555555555555555555555555555555555555555555555555555553322222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555555555 +55555555555555555555555555555555555555555555555555553132222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444435313555555555555555555555555555555555555555555555555555555555 +55555555555555555535312222222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444300155555555555555555555555555555555555555555555555555555555555555555555555555533133222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44410005555555555555555555555555555555555555555555555555555555555555555555555555553113322222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444311113555355555555555555555555 +55555555555555555555555555555555555555555555555555331332222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444441355135555555555555555555555555555555555555555555555555555555 +55555555555555555533113322222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444115335555555555555555555555555555555555555555555555555355555555555555555555555533313332222222 +22222222222222222222222222222222223222350544444444444444444444444444444444444444444444444444444444455444444444444444444444444444 +44441535555555555555555555555555555555555555555555555555535555355555555555555555555531122332222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444445544444444444444444444444444435441135555555555555555555555555 +55555555555555555555555555555555555555555555555555553112332222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444454444444454444444443444444444444444455544411355555555555555555555555555555555555555555555555555555555 +55555555555555555555311222222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444445153111333 +44135313135133114444441511113331114411155555555555555555555555555555555555555555555555555555555555555555555555555533511222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444511101010153115311003113003554410301011110 +11144335355555555555555555555555555555555555555555555555555555555555555555555555553351122222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444451310111015310100100101100111351030111100131134113555555555555555555555555 +55555555555555555555555555555555555555555555555555353112222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444131010001543000111110100011133001110110013113431355555555555555555555555555555555555555555555555555555555 +55555555555555555535333222222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444445011011101 +55301010311011111355100101011011101544335555555555555555555555555555555555555555555555555555555555555555555555555553513222222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444301111130155510011533111333333111011131011 +11444431555355555555555555555555555555555555555555555555555555555555555555555555555531122222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444100003555115533015535511435554113311335301354444551155555555555555555555555 +55555555555555555555555555555555555555555555555555553332222222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444455554453353445555444444444534445555555555444444455315535555555555555555555555555555555555555555555555555555 +55555555555555555555351323222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444445344455444 +44445444444444444444444444444444444444441355555555555555555555555555555555555555555555555555555555555555555555555553531332222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444435555555555555555555555555555555555555555555555555555555555555555555555555553315222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444435555555555555555555555 +55555555555555555555555555555555555555555555555555555530322222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555555555555555555555555555555555 +55555555555555555555553132222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444335355555555555555555555555555555555555555555555555555555555555555555555555555133222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444433555555555555555555555555555555555555555555555555555555555555555555555555555511322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555 +55555555555555555555555555555555555555555555555555555553122222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444135555555555555555555555555555555555555555555555555555 +55555555555555555555555512322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444433555555555555555555555555555555555555555555555555555555555555555555555555555312332222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444155555555555555555555555555555555555555555555555555555555555555555555555555531322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444135555555555555555555 +55555555555555555555555555555555555555555555555555555553113222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555555555555555555555555555555555 +55555555555555555555555311332222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444445355555555555555555555555555555555555555555555555555555555555555555555555555313322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444513555555555555555555555555555555555555555555555555555555555555555555555555531333222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444313555555555555555555 +55555555555555555555555555555555555555555555555555555553113222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555555555555555555555555555555 +55555555555555555555555513322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444315555555555555555555555555555555555555555555555555555555555555555555555555313322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444441355555555555555555555555555555555555555555555555555555555555555555555555331332222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441355555555355555555 +55555555555555555555555555555555555555555555555555555553132222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444315555555555555555555555555555555555555555555555555 +55555555555555555555555313322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444441555555555555555555555555555555555555555555555555555555555555555555555555312222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444335553555555555555555555555555555555555555555555555555555555555555555555531222222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555355555555555 +55555555555555555555555555555555555555555555555555555551132222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444453555555555555555555555555555555555555555555555555 +55555555555555555555555133222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444135555555555555555555555555555555555555555555555555555555555555555555555133322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444413555555555555555555555555555555555555555555555555555555555555555555555313322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444413555555555555555 +55555555555555555555555555555555555555555555555555555531332222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444443155555555553555555555555555555555555555555555555 +55555555555555555555553333322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444415555555555553555555555555555555555555555555555555555555555555555555551133322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444443555555555555555555555555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443355555555555555 +55555555555555555555555555555555555555555555555555555531522222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444315555555555555555555555555555555555555555555555 +55555555555555555555551132322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444441555555555555555555555555555555555555555555555555555555555555555555551132222222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444335555555555555555555555555555555555555555555555555555555555555555555113322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555 +55555555555555555555555555555555555555555555555555555511333222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555555555555555555555555555 +55555555555555555555551133222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444335555555555555555555555555555555555555555555555555555555555555555553113322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444453555555555555555555555555555555555555555555555555555555555555555555531322222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444431555355555555 +55555555555555555555555555555555555555555555555555555555112222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444155535555555555555555555555555555555555555555 +55555555555555555555555511222222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444435555555555555555555555555555555555555555555555555555555555555555555313322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444441355555555555555555555555555555555555555555555555555555555555555555551122222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443155555555555 +55555555555555555555555555555555555555555555555555555555113222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444115555555555555555555555555555555555555555555 +55555555555555555555555311322222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444431555555555555555555555555555555555555555555555555555555555555555555113322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444135555555555555555555555555555555555555555555555555555555555555555313332222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555 +55555555555555555555555555555555555555555555555555555551133222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444441555555555555555555555555555555555555555555 +55555555555555555555555113232222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444155555555555555555555555555555555555555555555555555555555555555555313322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444415535555555555555555555555555555555555555555555555555555555555555531335222222222222222222222222222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444554413535555555 +55555555555555555555555555555555555555555555555555555553113222222222222222222222222222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444455443355555555555555555555555555555555555555555 +55555555555555555555555511332222222222222222222222222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444554435555555555555555555555555555555555555555555555555555555555555555531322222 +22222222222222222222222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444445543555555555555555555555555555555555555555555555555555555555555555551132222222222233222222222222222222222222 +22222233054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444431355555555 +55555555555555555555555555555555555555555555555555555555113323222222222222222222222222222222222222222231054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444443135555555555555555555555555555555555555555 +55555555555555555555555511322332222222222222222222222222222222222222223105444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444313555555555555555555555555555555555555555555555555555555555555555513332333 +22222222222222222222222222222222223233110544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444431455555555555555555555555555555555555555555555555555555555555555511333222223322222222222222222222222222222 +22323313054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441455555555 +55555555555555555555555555555555555555555555555555555551333522222332222222222222222222222222222222333313054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555555555555555555555555555555 +55555555555555555555555153322222222222222222222222222222222222223332331105444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444431555555555555555555555555555555555555555555555555555555555555555113332222 +22222222222222222222222222222223233333310544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444443155555555555555555555555555555555555555555555555555555555555555511113332222222222222222222222222222222223 +21111111054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444155553555 +55555555555555555555555555555555555555555555555555555555511133332222223322222222222222222222233331122313054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444413535555555555555555555555555555555555555 +55555555555555555555555555511333222222332222222222222222222233331132233505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444441153555555555555555555555555555555555555555555555555555555555555555531133 +32222233222222222222222222222333113333350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444115355555555555555555555555555555555555555555555555555555555555555555111333333222222222222222222222222231 +11222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444414555555 +55555555555555555555555555555555555555555555555555555555553551111113332222222222222222222222331113222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444441455555555555555555555555555555555555555 +55555555555555555555555555553355533113222222322222332222333333115322223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444145555555555555555555555555555555555555555555555555555555555555555313355 +55551332325322222233232233331113233222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444413555555355555555555555555555555555555555555555555555555555555555311353555551112333332232232333311111333 +33322235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441555555 +35555555555555555555555555555555555555555555555555555555513113555555531311333322311111111133332333222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444135555555555555555555555555555555555555 +55555555555555555555555531331355555555333115333311311111322223323322223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444413555555555555555555555555555555555555555555555555555555555555533441135 +55555333553111111333333322322223322222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444443355355555535355355355555335555555555555555555555555555555555553344311355555555555311133333332222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444355355 +55553353355535553535535555555555555555555555555555555555134443115555555555553133333322223222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444435553551153113111111111111355555555555 +55555555555555555555555315444331355555555553311333222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444441555555003500100000100000135555555555555555555555555555555553135444533 +35555555555533113322222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444155555500330010000010000013555555555555555555555555555555555134444445435555555555533311322222222222223 +33222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444155555 +30000001100001011101553555555555555555555555555555553334444444413555555555555551133222222222222222322235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444435555330000001000000000001555555555555 +55555555555555553553531444444431555555555555535531322222222222222232223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444443555555005300311111101111355555555555555555555555555555555313444444533 +55555555555555555112532222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444335510111531135553131135535555555555555555555555555555535511544444451355555555555555555313332222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444345300 +01355355555335335555555355555555555555555555555555531434444445115555555555555553553133222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433530011113555555555555555555555555555 +55555555555555535551144444444315555555555555555555311222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444155313443135555555555555555555555555555555555555555555553344444444511 +55555555555555555333053222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444443114444431355555555555555555555555555555555555555553555514444444451155555555555555555333133322222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444335555555555555555553553555555555555555555355553344444443135555555555555555533513332222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444413555555555555555535555555 +55555555555555553555513344443135555555555555555555531333222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444443155555555555555555555555555555555555555555555553134441135 +55555555555555555535133322222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444315555555555555555555555555555555555555555555555533133115555555555555555555533133322222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444441555355555555555555555553555555555555555535555555531113553555555555555555553113332222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441353555555555555555553555 +55555553555555535555555355533535555555555555555553311322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444135535555555555553355555555555555555555555535555333355555 +55555555555555555531332222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444413535555555555555555555555555555555555553555555553555555555555555555555555531332222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444441355555555555555555555555555555555555555555555555555555555555555555555555551033222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444431555555555555555555555555 +55555555555555555555555555555555555555555555555555313322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444443355533555555555555555555555555555555555555555555555555555 +55555555555555555511222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444335535355555555555555555555555555555555555555555555555555555555555555355555511222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444431555355555555555555555555555555555555555555555555555555555555555555555555551152222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433555535555555555555555555 +55555555555555555555555555555555555555555555555555115222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444443155555555555555555555555555555555555555555555555555555555 +55555555555555555311322222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444335555555555555555555555555555555555555555555555555555555555555555555555555511322222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444441355555555555555555555555555555555555555555555555555555555555555555555555531132222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443155555555555555555555555 +55555555555555555555555555555555555555555555555551133222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444315555555555555555555555555555555555555555555555555555555 +55555555555555551133222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444441555555555555555555555555555555355555555555555555555555555555555555555551133222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444135555555555555555555555555555555555555555555555555555555555555555555555113322222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444335555555555555555555555 +55555555555555555555555555555555555555555555555531332322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444431353555555555555555555555555555555555555555555555555555 +55555555555555553122222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444443155555555555555555555555555553555555555555555555555555555555555555555553122222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444535555555555555555555555555355553555555555555555555555555555555555555555313252222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444433555555555555555555555 +55311313333555555555555555555555555555555555555511322222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444443355555555555555555555555313113313355555555555555555555 +55555555555555551132222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444335555555555555555555553113332223311555555555555555555555555555555555551132222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444433555555553355555555555313332222233133553353555555555555555555555555555113322222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444431131331131133331133355 +33323222223331113113555555555555555555555555555511322322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444443113133133331133131113113332222223233333333555555555555 +55555555555555551132322222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444313333223322333222213311322222222222233331155555555555555555555555555553113322222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444441133323233222222222332232222222222223333113555555555555555555555555555511332222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444111333223222222223333 +22222222222222233333115555555555555555555553555553331322222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444111322222222233223322222222222222222333115555555555 +55555555555555555511222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444441133222222223232222222222222222222222333555555555555555555555555555331322222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444413322222222223222222222222222222222233335555555555555555555553555355312222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441332222222222222 +22222222222222222222311555555555555555555555355555531222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444133333222222222222222222222222222222333555555555 +55555555555555555553132222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444431113333222222222222222222222222222233355555555555555555555555555553322222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444411333322222222222222222222222222222115555555555555555555555555533112222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444441133332222222 +22222222222222222222233555555555555555555555555553113222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444313333222222232222222222222222222231555555555 +55555555555555555113322222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444441333322222222222222222222222233321135555555555555555555533553113232222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444445444133222222222222222222222222222333315555555555555555555555553133232222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445444133222222232 +22222222222222222233333335555535555555555555555113222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444411322222223322222222222222222222331355555555 +55555555555555511332222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444454443132223222332222222222222222222333135555335555555555555555103332222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444533544413222322233222222222222222222223331555511135555555555555511332222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444435544313222322223 +22222222222222222222331115533113333355555555331132222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444445554413332232222322222222222222222222333315113313 +33335555555551133322222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444455431333223222232222222222222222222222333311331111135355555551133322222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444445544313332322223222222222222222222222235313353331111555555553333332222222222222222222235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444413322232222 +22222222222222222232222233332223322113555553555322222222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444443133223322222222222222222222332222223332222 +23331113555553353322222222222222222222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444313322332222223232322222222333332222233222223333311555553531332222222222222 +22222235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444443132222322223333333333333333332333223232233333333135333531132252222222222222322235054444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443133323111 +13111131111131131111311331113113111333311331111333222222222222222222223505444444455444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444431322311113111131111131111111101311111111 +00133333331110133322222222222222222222350544444445544444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444112231133311133111113111111111130131111100132222222331111332222222222222 +22222235054444444544444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444411323113331111311111311113110113013111011113222222222331112222222222222222222235054444444344444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444411323113 +33113331131131011310111301311101111322222222333331122222222222222222223505444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444133311333111131111133111310111311113111 +10132222333333223113522222222223332222350544444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444444444444444444444444444444444444413333133311132311333311331133333111231131332223333322222113333322222223 +33322235054444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444 +44444444444444444444444441332222332332222333322222223222222222223332222223222222231153222222222223322235053444444444444444444444 +44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444453333222 +23222222222223222222222222222222233222222222222233113332222222222332233505534444445544444444444444554444444444444444444444444444 +44445555444444444444444444444444444444444444444444444444444444555554444444444444444444455313333333222222222223222332222333223323 +33322233222233333311113333333333333223350555355555533555555555555555555555555555535555555555555555555555555555555555555555555555 +55555555555555555555555555555555555555555555555555555555531333333333333333333333333333333333333333333333333333333331111133333333 +33322335000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000070101000000030000000000}}}{\lang1033\langfe1049\langnp1033 \line }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Harmon.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5600000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0048006100 +72006d006f006e002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Hermon}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Golan.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5400000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0047006f00 +6c0061006e002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Golan}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Galil.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5400000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0047006100 +6c0069006c002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Galil}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Jerusalem.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5c00000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f004a006500 +72007500730061006c0065006d002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Jerusalem}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Shomron.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0053006800 +6f006d0072006f006e002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Shomron}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK "http +://www.israelweather.co.il/Shfela.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5600000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0053006800 +660065006c0061002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Shfela}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/hifa.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5200000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0068006900 +660061002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Haifa}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/carmel.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5600000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0063006100 +72006d0065006c002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Carmel}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/TelAviv.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0054006500 +6c0041007600690076002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Tel-Aviv}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Kineret.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f004b006900 +6e0065007200650074002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Kineret}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/NorthFalyes.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b6000000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f004e006f00 +720074006800460061006c007900650073002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 North Valley}}}{\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Negev.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5400000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f004e006500 +6700650076002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Negev}}}{\lang1033\langfe1049\langnp1033 }{\field\fldedit{\*\fldinst {\lang1033\langfe1049\langnp1033 HYPERLINK + "http://www.israelweather.co.il/Bika.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5200000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0042006900 +6b0061002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 +\par }{\cf2\lang1033\langfe1049\langnp1033 Bika}}}\pard\plain \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 {\lang1033\langfe1049\langnp1033 | }{\field\fldedit{\*\fldinst { +\lang1033\langfe1049\langnp1033 HYPERLINK "http://www.israelweather.co.il/Hrava.html" \\t "table" }{\lang1033\langfe1049\langnp1033 {\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b0200000083000000060000007400610062006c0065000000e0c9ea79f9bace118c8200aa004ba90b5400000068007400740070003a002f002f007700770077002e00690073007200610065006c0077006500610074006800650072002e0063006f002e0069006c002f0048007200 +6100760061002e00680074006d006c000000000000000000000000}}}{\fldrslt {\cs15\cf2\lang1033\langfe1049\langnp1033 Eilat +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 }}\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 { +\lang1033\langfe1049\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 !! }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e6\'e4\'f8\'e4}{\lang1033\langfe1049\langnp1033 +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f30 \loch\af30\dbch\af0\hich\f30 \'e0\'fa\'f8}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e6\'e4}{\lang1033\langfe1049\langnp1033 }{\f30 +\loch\af30\dbch\af0\hich\f30 \'e4\'e5\'f7\'ed}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e1\'ee\'e8\'f8\'e4}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ec\'fa\'fa}{\lang1033\langfe1049\langnp1033 } +{\f30 \loch\af30\dbch\af0\hich\f30 \'ec\'f6\'e9\'e1\'e5\'f8}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ee\loch\af30\dbch\af0\hich\f30 \'e9\'e3\'f2}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'f8\'e1} +{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e1\'eb\'e5\'ec}{\lang1033\langfe1049\langnp1033 +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'f7\'f9\'e5\'f8}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e1\'ee\'e6\'e2}{ +\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e0\'e5\'e5\'e9\'f8}{\lang1033\langfe1049\langnp1033 -}{\f30 \loch\af30\dbch\af0\hich\f30 \'e9\'fa\'eb\'f0\'e5}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 +\'e8\'f2\'e5\'e9\'e5\'fa}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e5\'ee\'e9\'e3\'f2}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'ee\'e5\'e8\'f2\'e4}{\lang1033\langfe1049\langnp1033 +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 +\par }\pard \qc \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f30 \loch\af30\dbch\af0\hich\f30 \'ec\'eb\'ef}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'eb\'ec}{\lang1033\langfe1049\langnp1033 }{\f30 +\loch\af30\dbch\af0\hich\f30 \'f9\'e9\'ee\'e5\'f9}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e9\'e9\'f0\'e5}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'f2\'ec}{\lang1033\langfe1049\langnp1033 } +{\f30 \loch\af30\dbch\af0\hich\f30 \'e0\'e7\'f8\'e9\'e5\'fa\'e5}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'e1\'ec\'f2\'e3\'e9\'fa}{\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'f9\'ec}{ +\lang1033\langfe1049\langnp1033 }{\f30 \loch\af30\dbch\af0\hich\f30 \'e4\'ee\'f9\'fa\'ee\'f9}{\lang1033\langfe1049\langnp1033 +\par }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 \cell }\pard \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\lang1033\langfe1049\langnp1033 \trowd +\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \trftsWidth1\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth4785 \cellx4564\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 +\cltxlrtb\clftsWidth3\clwWidth5016 \cellx9463\row }\pard \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\lang1033\langfe1049\langnp1033 +\par }} \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/BulletsAndNumbering.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/BulletsAndNumbering.dpr new file mode 100644 index 0000000..56b463c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/BulletsAndNumbering.dpr @@ -0,0 +1,13 @@ +program BulletsAndNumbering; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/BulletsAndNumbering.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/BulletsAndNumbering.dproj new file mode 100644 index 0000000..2e0a249 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/BulletsAndNumbering.dproj @@ -0,0 +1,99 @@ + + + {37FF3980-84A4-476E-A91D-57998EBC1C60} + BulletsAndNumbering.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + BulletsAndNumbering.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + BulletsAndNumbering.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/BulletsAndNumbering.res b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/BulletsAndNumbering.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/BulletsAndNumbering.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/Unit1.dfm new file mode 100644 index 0000000..def36af Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/Unit1.pas new file mode 100644 index 0000000..248abc7 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/Bullets/Unit1.pas @@ -0,0 +1,161 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVStyle, RVScroll, RichView, RVEdit, Buttons, ExtCtrls, StdCtrls; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + RVStyle1: TRVStyle; + Panel1: TPanel; + btnBullets: TSpeedButton; + btnNumbering: TSpeedButton; + procedure btnBulletsClick(Sender: TObject); + procedure RichViewEdit1CaretMove(Sender: TObject); + procedure btnNumberingClick(Sender: TObject); + private + { Private declarations } + function CreateBullets: Integer; + function CreateNumbering: Integer; + function GetListNo(rve: TCustomRichViewEdit; ItemNo: Integer): Integer; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +{------------------------------------------------------------------------------} +function TForm1.GetListNo(rve: TCustomRichViewEdit; + ItemNo: Integer): Integer; +var Level, StartFrom: Integer; + Reset: Boolean; +begin + rve.GetListMarkerInfo(ItemNo, Result, Level, StartFrom, Reset); +end; +{------------------------------------------------------------------------------} +// Returns index of bulleted list style. Creates it, if necessary. +function TForm1.CreateBullets: Integer; +var ListStyle: TRVListInfo; +begin + // 1. Creating desired list style + ListStyle := TRVListInfo.Create(nil); + with ListStyle.Levels.Add do begin + ListType := rvlstBullet; + Font.Name := 'Symbol'; + {$IFDEF RICHVIEWCBDEF3} + Font.Charset := SYMBOL_CHARSET; + {$ENDIF} + Font.Size := 12; + FirstIndent := 0; + LeftIndent := 24; + end; + // 2. Searching for existing style with these properties. Creating it, if not found + Result := RVStyle1.ListStyles.FindSuchStyle(ListStyle, True); + ListStyle.Free; +end; +{------------------------------------------------------------------------------} +function TForm1.CreateNumbering: Integer; +var ListStyle: TRVListInfo; + rve: TCustomRichViewEdit; + i, StartNo, EndNo, a, b, ListNo: Integer; +begin + Result := -1; + // 1. Creating desired list style + ListStyle := TRVListInfo.Create(nil); + with ListStyle.Levels.Add do begin + ListType := rvlstDecimal; + Font.Name := 'Arial'; + Font.Size := 12; + FirstIndent := 0; + LeftIndent := 24; + FormatString := '%0:s.'; + end; + // 2. Searching for such style in the selected paragraphs, the paragraph before, + // and the paragraph after. If found, using it. + rve := RichViewEdit1.TopLevelEditor; + rve.GetSelectionBounds(StartNo, a, EndNo, b, True); + if StartNo<0 then begin + StartNo := rve.CurItemNo; + EndNo := StartNo; + end; + // ExpandToPara is an undocumented method that changes item range StartNo..EndNo + // so that it completely includes paragraphs containing StartNo..EndNo + rve.RVData.ExpandToPara(StartNo, EndNo, StartNo, EndNo); + if StartNo>0 then + dec(StartNo); + if EndNo + + {DAA239EB-5D81-4D25-935A-20A6E4F008EC} + ImageListBullets.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + ImageListBullets.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + ImageListBullets.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + + diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/ImageListBullets/ImageListBullets.res b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/ImageListBullets/ImageListBullets.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/ImageListBullets/ImageListBullets.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/ImageListBullets/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/ImageListBullets/Unit1.dfm new file mode 100644 index 0000000..e789424 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/ImageListBullets/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/ImageListBullets/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/ImageListBullets/Unit1.pas new file mode 100644 index 0000000..fca796b --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/ListStyles/ImageListBullets/Unit1.pas @@ -0,0 +1,74 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVScroll, RichView, RVEdit, RVStyle, + ImgList, + StdCtrls, ComCtrls; + +type + TForm1 = class(TForm) + ImageList1: TImageList; + RVStyle1: TRVStyle; + RichViewEdit1: TRichViewEdit; + ImageList2: TImageList; + procedure FormCreate(Sender: TObject); + procedure RichViewEdit1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +{------------------------------------------------------------------------------- + RVStyle1.ListStyles[0] has two levels - + 0th - imagelistcounter + 1st - imagelist +-------------------------------------------------------------------------------} + +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; +const text = 'Text text text. Text text text text. Text text text. Text text text text. Text text text. Text text text text.'; +begin + with RichViewEdit1 do begin + Clear; + for i := 1 to 5 do begin + SetListMarkerInfo(-1, 0, 0, 1, 0, False); + Add(text, 3); + SetListMarkerInfo(-1, 0, 1, 1, 0, False); + Add(text, 0); + SetListMarkerInfo(-1, 0, 1, 1, 0, False); + Add(text, 0); + SetListMarkerInfo(-1, 0, 1, 1, 0, False); + Add(text, 0); + end; + Format; + end; +end; + + +// This event is not used in this demo. +// But if you want to save and load this document in RVF, it is necessary. +// Note: ImageList1.Tag is set to 1, ImageList2.Tag is set to 2. +procedure TForm1.RichViewEdit1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + case ImageListTag of + 1: il := ImageList1; + 2: il := ImageList2; + end; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/LoadRVF.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/LoadRVF.dpr new file mode 100644 index 0000000..200e2a7 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/LoadRVF.dpr @@ -0,0 +1,13 @@ +program LoadRVF; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/LoadRVF.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/LoadRVF.dproj new file mode 100644 index 0000000..79889ca --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/LoadRVF.dproj @@ -0,0 +1,99 @@ + + + {775B5396-9DC5-48A1-9610-A41DAA9AB820} + LoadRVF.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + LoadRVF.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + LoadRVF.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/LoadRVF.res b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/LoadRVF.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/LoadRVF.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/Unit1.dfm new file mode 100644 index 0000000..b95650d Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/Unit1.pas new file mode 100644 index 0000000..5fce2a5 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Load RVF/Unit1.pas @@ -0,0 +1,105 @@ +unit Unit1; + +interface +{==============================================================================} +{ Demo: how to load RVF file saved in demo editor. } +{ Sergey Tkachenko } +{------------------------------------------------------------------------------} +{ Providing pictures and controls on request from RichView is not supported in } +{ this demo. } +{==============================================================================} + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVScroll, RichView, StdCtrls, ExtCtrls, RVStyle, OleCtnrs, RVTable; + +type + TForm1 = class(TForm) + RichView1: TRichView; + OpenDialog1: TOpenDialog; + Panel1: TPanel; + RVStyle1: TRVStyle; + ImageList1: TImageList; + Button1: TButton; + procedure Button1Click(Sender: TObject); + procedure RichView1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{ +Notes about loading from RVF files: +1. In simplest cases you can just write: RichView1.LoadRVF(); +2. If file contains inserted Delphi Controls, these controls must be registered + with RegisterClasses functions before loading (see FormCreate below) +3. If file contains images from image lists, you need to process + OnRVFImageListNeeded event (see RichView1RVFImageListNeeded below) + If you have several image lists, you can distinguish them using + ImageListTag parameter of this event. +4. You must have the same (or compatible) TRVStyle object assigned to + RichView1.Style as in editor. + Otherwise, you need to set option "Allow adding styles dynamically" + both in richview which saves and in richview which loads RVF + (right-click RichView in Delphi, choose "Settings" in the context menu) +5. If some items in RVF file have character strings associated as items' tags + (rvoTagsArePChars was in editor's Options), you need also set rvoTagsArePChars + in RichView1.Options. +} + + +procedure TForm1.FormCreate(Sender: TObject); +begin + RegisterClasses([TButton, TEdit, TOleContainer]); +end; + + +procedure TForm1.Button1Click(Sender: TObject); +begin + if OpenDialog1.Execute then begin + // Clearing and deleting unused text styles. + // If RVF contains collections of styles, it is not necessary, + // because collections from the file will replace the existing collections + RichView1.Clear; + RichView1.DeleteUnusedStyles(True, True, True); + // Resetting background. + // If RVF contains background information and rvfoLoadBack is in RVFOptions, + // it is not necessary + RichView1.BackgroundBitmap := nil; + // Resetting layout properties. + // If RVF contains layout information and rvfoLoadLayout is in RVFOptions, + // it is not necessary + RichView1.LeftMargin := 5; + RichView1.TopMargin := 5; + RichView1.RightMargin := 5; + RichView1.BottomMargin := 5; + RichView1.MinTextWidth := 0; + RichView1.MaxTextWidth := 0; + // Loading + if not RichView1.LoadRVF(OpenDialog1.FileName) then + Application.MessageBox('Error Loading File', nil, MB_OK); + // Formatting (necessary before displaying) + RichView1.Format; + end; +end; + +procedure TForm1.RichView1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + il := ImageList1; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Quiz.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Quiz.dpr new file mode 100644 index 0000000..6534ea9 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Quiz.dpr @@ -0,0 +1,13 @@ +program Quiz; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Quiz.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Quiz.dproj new file mode 100644 index 0000000..e3fd252 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Quiz.dproj @@ -0,0 +1,99 @@ + + + {A744714C-CFB8-4C1F-BDAA-83DD2F2F2F66} + Quiz.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Quiz.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Quiz.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Quiz.res b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Quiz.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Quiz.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Unit1.dfm new file mode 100644 index 0000000..df9795e Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Unit1.pas new file mode 100644 index 0000000..1f5826c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/PlanetQuiz/Unit1.pas @@ -0,0 +1,292 @@ +{==============================================================================} +{ This demo shows how to work with tables, mouse events, GetItemAt method } +{==============================================================================} +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, RVTable, RVScroll, RichView, RVStyle, CRVFData, StdCtrls, MMSystem; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + procedure FormCreate(Sender: TObject); + procedure RichView1MouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); + procedure RichView1RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + HighlightedRVData: TCustomRVFormattedData; // highlighted cell + AnsweredCount: Integer; // number of answered count + Ready: Boolean; // "ready!" is clicked + procedure AddTable(const Question: String; Answers: TStringList; CorrectAnswer: Integer); + procedure HighlightCell(RVData: TCustomRVFormattedData); + procedure SelectCell(RVData: TCustomRVFormattedData); + procedure FillQuestion(sl: TStringList; const arr: array of String; var CorrectAnswer: Integer); + procedure BuildQuiz; + public + { Public declarations } + + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +// Sorted array of answers. +const Answers : array [0..3, 0..8] of String = + ( + ('Mercury', 'Venus', 'Earth', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Pluto'), + ('Pluto', 'Neptune', 'Uranus', 'Saturn', 'Jupiter', 'Mars', 'Earth', 'Venus', 'Mercury'), + ('Pluto', 'Mercury', 'Mars', 'Venus', 'Earth', 'Neptune', 'Uranus', 'Saturn', 'Jupiter'), + ('Jupiter', 'Saturn', 'Uranus', 'Neptune', 'Earth', 'Venus', 'Mars', 'Mercury', 'Pluto') + ); + +// Array of questions +const Questions: array [0..3] of String = + ( 'Which of these planets is closest to the Sun?', + 'Which of these planets is the most distant from the Sun?', + 'Which of these planets is the smallest?', + 'Which of these planets is the largest?' + ); + + +{ TForm1 } + +const + TABLECOLOR = $CCFFFF; + HEADCOLOR = $990033;//$CCFF33; + HLTCOLOR = $66CCFF; + SELCOLOR = $3399CC; + PASSCOLOR = $00FF33; + FAILCOLOR = $0033FF; + +procedure TForm1.FormCreate(Sender: TObject); +begin + Randomize; + BuildQuiz; +end; +{------------------------------------------------------------------------------} +// Filling RichView. Preparing the quiz +procedure TForm1.BuildQuiz; +var sl: TStringList; + i, CorrectAnswer: Integer; +begin + RichView1.Clear; + AnsweredCount := 0; + sl := TStringList.Create; + for i := 0 to High(Questions) do begin + // adding questions. one question is one table + FillQuestion(sl, Answers[i], CorrectAnswer); + AddTable(Questions[i], sl, CorrectAnswer); + RichView1.AddNL('',0,0); + end; + sl.Free; + // adding hypertext "button" + RichView1.AddNL('Ready!', 2, 1); + RichView1.Format; + Ready := False; + RVStyle1.TextStyles[2].HoverBackColor := FAILCOLOR; +end; +{------------------------------------------------------------------------------} +// This function chooses 3 answers from ARR and add them in SL. +// Index of the correct answer is returned in CORRECTANSWER +procedure TForm1.FillQuestion(sl: TStringList; const arr: array of String; + var CorrectAnswer: Integer); +var i,j,v: Integer; +var Options: array [0..2] of Integer; +begin + sl.Clear; + // Choosing 3 different random answers + for i := 0 to High(Options) do + repeat + v := Random(High(arr)+1); + for j := 0 to i-1 do + if Options[j]=v then begin + v := -1; + break; + end; + if v>=0 then begin + Options[i] := v; + sl.Add(arr[v]); + end; + until v>=0; + // Finding the correct answer. arr is sorted so that the correct answer + // is an answer with smaller index + CorrectAnswer := -1; + j := High(arr)+1; + for i := 0 to High(Options) do begin + if Options[i]nil then begin + TRVTableCellData(HighlightedRVData).Color := clNone; + HighlightedRVData.Invalidate; + HighlightedRVData := nil; + end; + if not (RVData is TRVTableCellData) or (TRVTableCellData(RVData).Color=SELCOLOR) then + exit; + TRVTableCellData(RVData).GetTable.GetCellPosition(TRVTableCellData(RVData),r,c); + if r=0 then + exit; + TRVTableCellData(RVData).Color := HLTCOLOR; + RVData.Invalidate; + HighlightedRVData := RVData; +end; +{------------------------------------------------------------------------------} +// If RVData is a table cell, this function selects this cell. +// Selected cell has color = SELCOLOR. +// Updates number of answered questions (AnsweredCount). +// If all questions are answered, changes highlight of hypertext jump from +// red to green. +procedure TForm1.SelectCell(RVData: TCustomRVFormattedData); +var r,c: Integer; + table: TRVTableItemInfo; +begin + if not (RVData is TRVTableCellData) then + exit; + table := TRVTableCellData(RVData).GetTable; + table.GetCellPosition(TRVTableCellData(RVData),r,c); + if r=0 then + exit; + for r := 1 to table.Rows.Count-1 do begin + if table.Cells[r,0].Color=SELCOLOR then + dec(AnsweredCount); + table.Cells[r,0].Color := clNone; + end; + TRVTableCellData(RVData).Color := SELCOLOR; + inc(AnsweredCount); + TRVTableCellData(RVData).Invalidate; + if HighlightedRVData=RVData then + HighlightedRVData := nil; + if AnsweredCount=High(Questions)+1 then + RVStyle1.TextStyles[2].HoverBackColor := PASSCOLOR; +end; +{------------------------------------------------------------------------------} +// OnMouseMove event - highlighting cell +procedure TForm1.RichView1MouseMove(Sender: TObject; Shift: TShiftState; X, + Y: Integer); +var RVData: TCustomRVFormattedData; + a,b: Integer; +begin + if Ready then + exit; + inc(X, RichView1.HScrollPos); + inc(Y, RichView1.VScrollPos*RichView1.VSmallStep); + RichView1.GetItemAt(X, Y, RVData, a, b, False); + HighlightCell(RVData); +end; +{------------------------------------------------------------------------------} +// OnRVMouseUP event - selecting cell +procedure TForm1.RichView1RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); +var RVData: TCustomRVFormattedData; + a,b: Integer; +begin + if Ready then + exit; + inc(X, RichView1.HScrollPos); + inc(Y, RichView1.VScrollPos*RichView1.VSmallStep); + RichView1.GetItemAt(X, Y, RVData, a, b, False); + SelectCell(RVData); +end; +{------------------------------------------------------------------------------} +// On hyperlink click. +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var i,r: Integer; + table: TRVTableItemInfo; + Score: Integer; +begin + if not Ready then begin // clicking on "Ready!" + if AnsweredCountHigh(Questions)+1 then + SndPlaySound('CHORD.WAV', SND_SYNC or SND_NODEFAULT) + else + SndPlaySound('TADA.WAV', SND_SYNC or SND_NODEFAULT); + end + else begin // clicking on "Try Again" + BuildQuiz; + RichView1.ScrollTo(0); + Caption := 'PlanetQuiz'; + end; +end; + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Headers.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Headers.dpr new file mode 100644 index 0000000..e5780c9 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Headers.dpr @@ -0,0 +1,14 @@ +program Headers; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + PreviewFrm in 'PreviewFrm.pas' {frmPreview}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Headers.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Headers.dproj new file mode 100644 index 0000000..22bc04d --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Headers.dproj @@ -0,0 +1,102 @@ + + + {A47B2BC1-52E9-4AC5-A7D9-7821FD0894D4} + Headers.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Headers.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ +
frmPreview
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Headers.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Headers.res b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Headers.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Headers.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/PreviewFrm.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/PreviewFrm.dfm new file mode 100644 index 0000000..cebc53c Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/PreviewFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/PreviewFrm.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/PreviewFrm.pas new file mode 100644 index 0000000..218d885 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/PreviewFrm.pas @@ -0,0 +1,106 @@ +unit PreviewFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVScroll, CRVPP, RVPP, ExtCtrls; + +type + TfrmPreview = class(TForm) + Panel1: TPanel; + rvpp: TRVPrintPreview; + cmb: TComboBox; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + Label1: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure cmbExit(Sender: TObject); + procedure cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvppZoomChanged(Sender: TObject); + private + { Private declarations } + procedure UpdateZoom; + public + { Public declarations } + end; + +var + frmPreview: TfrmPreview; + +implementation + +{$R *.DFM} +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button1Click(Sender: TObject); +begin + rvpp.First; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button2Click(Sender: TObject); +begin + rvpp.Prev; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button3Click(Sender: TObject); +begin + rvpp.Next; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button4Click(Sender: TObject); +begin + rvpp.Last; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbExit(Sender: TObject); +begin + UpdateZoom; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_RETURN then begin + UpdateZoom; + Key := 0; + end; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.UpdateZoom; +var s: String; + zoom: Integer; +begin + s := Trim(cmb.Text); + if s='Page width' then begin + rvpp.ZoomMode := rvzmPageWidth; + exit; + end; + if s='Full page' then begin + rvpp.ZoomMode := rvzmFullPage; + exit; + end; + if (s<>'') and (s[Length(s)]='%') then + s := Copy(s,1,Length(s)-1); + zoom := StrToIntDef(s,0); + if (zoom<10) or (zoom>500) then + Application.MessageBox('Please enter number from 10 to 500','Scale',MB_OK or MB_ICONSTOP) + else + rvpp.SetZoom(zoom); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.rvppZoomChanged(Sender: TObject); +begin + cmb.Text := IntToStr(rvpp.ZoomPercent)+'%'; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Unit1.dfm new file mode 100644 index 0000000..d9fd7ee Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Unit1.pas new file mode 100644 index 0000000..2480b3d --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/Unit1.pas @@ -0,0 +1,179 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, Menus, RVScroll, RichView, RVEdit, ComCtrls, RVStyle, PreviewFrm, + PtblRV, StdCtrls; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + TabSheet3: TTabSheet; + TabSheet4: TTabSheet; + RichViewEdit1: TRichViewEdit; + RichViewEdit2: TRichViewEdit; + RichViewEdit3: TRichViewEdit; + MainMenu1: TMainMenu; + File1: TMenuItem; + Open1: TMenuItem; + Print1: TMenuItem; + Exit1: TMenuItem; + RVStyle1: TRVStyle; + RVStyle2: TRVStyle; + RVStyle3: TRVStyle; + RVPrint1: TRVPrint; + N1: TMenuItem; + N2: TMenuItem; + PrintPreview1: TMenuItem; + OpenDialog1: TOpenDialog; + GroupBox1: TGroupBox; + Label1: TLabel; + txtLeft: TEdit; + Label2: TLabel; + txtRight: TEdit; + Label3: TLabel; + txtTop: TEdit; + Label4: TLabel; + txtBottom: TEdit; + GroupBox2: TGroupBox; + Label5: TLabel; + Label6: TLabel; + txtHeader: TEdit; + txtFooter: TEdit; + New1: TMenuItem; + PrinterSetupDialog1: TPrinterSetupDialog; + procedure PrintPreview1Click(Sender: TObject); + procedure Open1Click(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure New1Click(Sender: TObject); + procedure Print1Click(Sender: TObject); + procedure Exit1Click(Sender: TObject); + private + { Private declarations } + function IsEmpty(rve: TCustomRichViewEdit): Boolean; + procedure PreparePrinting; + procedure OpenFile(const FileName: String); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +function TForm1.IsEmpty(rve: TCustomRichViewEdit): Boolean; +begin + Result := (rve.ItemCount=0) or ((rve.ItemCount=1) and (rve.GetItemStyle(0)>=0) and + (rve.GetItemText(0)='')); +end; + +procedure TForm1.PreparePrinting; +begin + RVPrint1.AssignSource(RichViewEdit1); + if not IsEmpty(RichViewEdit2) then begin + if StrToIntDef(txtHeader.Text,-1)<0 then + txtHeader.Text := '10'; + RVPrint1.SetHeader(RichViewEdit2.RVData); + end + else + RVPrint1.SetHeader(nil); + if not IsEmpty(RichViewEdit3) then begin + if StrToIntDef(txtFooter.Text,-1)<0 then + txtFooter.Text := '10'; + RVPrint1.SetFooter(RichViewEdit3.RVData) + end + else + RVPrint1.SetFooter(nil); + RVPrint1.LeftMarginMM := StrToIntDef(txtLeft.Text,0); + RVPrint1.RightMarginMM := StrToIntDef(txtRight.Text,0); + RVPrint1.TopMarginMM := StrToIntDef(txtTop.Text,0); + RVPrint1.BottomMarginMM := StrToIntDef(txtBottom.Text,0); + RVPrint1.HeaderYMM := StrToIntDef(txtHeader.Text,0); + RVPrint1.FooterYMM := StrToIntDef(txtFooter.Text,0); + RVPrint1.FormatPages(rvdoALL); +end; + +procedure TForm1.New1Click(Sender: TObject); +begin + RichViewEdit1.Clear; + RichViewEdit2.Clear; + RichViewEdit3.Clear; + RichViewEdit1.DeleteUnusedStyles(True,True,True); + RichViewEdit2.DeleteUnusedStyles(True,True,True); + RichViewEdit3.DeleteUnusedStyles(True,True,True); + RichViewEdit1.Format; + RichViewEdit2.Format; + RichViewEdit3.Format; +end; + +procedure TForm1.OpenFile(const FileName: String); +begin + RichViewEdit1.Clear; + RichViewEdit2.Clear; + RichViewEdit3.Clear; + RichViewEdit1.DeleteUnusedStyles(True,True,True); + RichViewEdit2.DeleteUnusedStyles(True,True,True); + RichViewEdit3.DeleteUnusedStyles(True,True,True); + RichViewEdit1.RTFReadProperties.SetHeader(RichViewEdit2.RVData); + RichViewEdit1.RTFReadProperties.SetFooter(RichViewEdit3.RVData); + RichViewEdit1.LoadRTF(FileName); + RichViewEdit1.Format; + RichViewEdit2.Format; + RichViewEdit3.Format; + txtHeader.Text := IntToStr(RichViewEdit1.RTFReadProperties.HeaderYMM); + txtFooter.Text := IntToStr(RichViewEdit1.RTFReadProperties.FooterYMM); +end; + +procedure TForm1.FormCreate(Sender: TObject); +begin + OpenFile(ExtractFilePath(Application.ExeName)+'doc.rtf'); +end; + +procedure TForm1.Open1Click(Sender: TObject); +begin + if OpenDialog1.Execute then + OpenFile(OpenDialog1.FileName); +end; + +procedure TForm1.PrintPreview1Click(Sender: TObject); +var frm: TfrmPreview; +begin + PreparePrinting; + frm := TfrmPreview.Create(Application); + frm.rvpp.RVPrint := RVPrint1; + frm.Button1Click(nil); + frm.ShowModal; + frm.Free; +end; + +procedure TForm1.Print1Click(Sender: TObject); +var PrintIt: Boolean; +begin + {$IFDEF RICHVIEWDEF3} + PrintIt := PrinterSetupDialog1.Execute; + {$ELSE} + PrintIt := True; + {$ENDIF} + if PrintIt then begin + RVPrint1.AssignSource(RichViewEdit1); + RVPrint1.FormatPages(rvdoALL); + if RVPrint1.PagesCount>0 then + RVPrint1.Print('RichView Edit Demo',1,False); + end; +end; + +procedure TForm1.Exit1Click(Sender: TObject); +begin + Close; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/doc.rtf b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/doc.rtf new file mode 100644 index 0000000..a0a9e46 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Headers/doc.rtf @@ -0,0 +1,139 @@ +{\rtf1\ansi\ansicpg1251\uc1 \deff0\deflang1049\deflangfe1049{\fonttbl{\f0\froman\fcharset204\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fmodern\fcharset204\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f34\froman\fcharset0\fprq2 Times New Roman;}{\f32\froman\fcharset238\fprq2 Times New Roman CE;} +{\f35\froman\fcharset161\fprq2 Times New Roman Greek;}{\f36\froman\fcharset162\fprq2 Times New Roman Tur;}{\f37\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f38\froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f39\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f50\fmodern\fcharset0\fprq1 Courier New;}{\f48\fmodern\fcharset238\fprq1 Courier New CE;}{\f51\fmodern\fcharset161\fprq1 Courier New Greek;}{\f52\fmodern\fcharset162\fprq1 Courier New Tur;} +{\f53\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f54\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f55\fmodern\fcharset186\fprq1 Courier New Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255; +\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0; +\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{ +\s15\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext15 header;}{\s16\ql \li0\ri0\widctlpar +\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext16 footer;}{\*\cs17 \additive \ul\cf2 \sbasedon10 Hyperlink;}}{\*\listtable{\list\listtemplateid-1480431944 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid-635391706\'01\u-3929 ?;}{\levelnumbers;}\f14\fs24\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 +\fi-360\li360\jclisttab\tx360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\chbrdr\brdrnone\brdrcf1 +\chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li1080\jclisttab\tx1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f14\chbrdr +\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li1800\jclisttab\tx1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747265 +\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li2520\jclisttab\tx2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext +\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li3240\jclisttab\tx3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0 +{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f14\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li3960\jclisttab\tx3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace360\levelindent0{\leveltext\leveltemplateid68747265\'01\u-3913 ?;}{\levelnumbers;}\f3\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li4680\jclisttab\tx4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747267\'01o;}{\levelnumbers;}\f2\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li5400\jclisttab\tx5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid68747269\'01\u-3929 ?;}{\levelnumbers;}\f14\chbrdr\brdrnone\brdrcf1 \chshdng0\chcfpat1\chcbpat1\fbias0 \fi-360\li6120\jclisttab\tx6120 }{\listname ;}\listid1157529120}} +{\*\listoverridetable{\listoverride\listid1157529120\listoverridecount0\ls1}}{\info{\author Sergey}{\operator Sergey}{\creatim\yr2002\mo10\dy23\hr20\min29}{\revtim\yr2002\mo10\dy23\hr21\min1}{\version5}{\edmins6}{\nofpages2}{\nofwords500}{\nofchars2851} +{\nofcharsws0}{\vern8249}}\paperw11906\paperh16838\margl1701\margr850\margt1134\margb1134 \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1701 +\dgvorigin1134\dghshow1\dgvshow1\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd +\linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl {\header \pard\plain \s15\qr \li720\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {{\*\shppict{\pict{\*\picprop\shplid1026{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}} +{\sp{\sn fAllowOverlap}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1111\pich953\picwgoal630\pichgoal540\pngblip\bliptag-119480166{\*\blipuid f8e0e09a38b660bbe813b3241ade2f82} +89504e470d0a1a0a0000000d494844520000002a000000240803000000c8175819000000017352474200aece1ce900000300504c544500000080000000800080 +8000000080800080008080c0c0c0c0dcc0a6caf00404040808080c0c0c1111111616161c1c1c2222222929295555554d4d4d424242393939ff7c80ff5050d600 +93ccecffefd6c6e7e7d6ada990330000660000990000cc0000003300333300663300993300cc3300ff3300006600336600666600996600cc6600ff6600009900 +339900669900999900cc9900ff990000cc0033cc0066cc0099cc00cccc00ffcc0066ff0099ff00ccff00000033330033660033990033cc0033ff003300333333 +3333663333993333cc3333ff3333006633336633666633996633cc6633ff6633009933339933669933999933cc9933ff993300cc3333cc3366cc3399cc33cccc +33ffcc3333ff3366ff3399ff33ccff33ffff33000066330066660066990066cc0066ff0066003366333366663366993366cc3366ff3366006666336666666666 +996666cc6666009966339966669966999966cc9966ff996600cc6633cc6699cc66cccc66ffcc6600ff6633ff6699ff66ccff66ff00cccc00ff00999999339999 +0099cc0099000099333399660099cc3399ff0099006699336699663399996699cc6699ff3399339999669999999999cc9999ff999900cc9933cc9966cc6699cc +99cccc99ffcc9900ff9933ff9966cc9999ff99ccff99ffff990000cc3300996600cc9900cccc00cc0033993333cc6633cc9933cccc33ccff33cc0066cc3366cc +6666999966cccc66ccff66990099cc3399cc6699cc9999cccc99ccff99cc00cccc33cccc66cccc99ccccccccccffcccc00ffcc33ffcc66ff9999ffccccffccff +ffcc3300cc6600ff9900ff0033cc3333ff6633ff9933ffcc33ffff33ff0066ff3366ff6666cc9966ffcc66ffff66cc0099ff3399ff6699ff9999ffcc99ffff99 +ff00ccff33ccff66ccff99ccffccccffffccff33ffff66ffcc99ffffccffffff666666ff66ffff666666ffff66ff66ffffa500215f5f5f777777868686969696 +cbcbcbb2b2b2d7d7d7dddddde3e3e3eaeaeaf1f1f1f8f8f8fffbf0a0a0a4808080ff000000ff00ffff000000ffff00ff00ffffffffff58224eb7000000097048 +597300000ec400000ec601a71d6c990000016f49444154384fc59441ae84300c4359e72a5d72945e87bbf36d27294961d6bf42a3013d1c3b293deebaacdd6d37 +472387ddbfe98a9a0dc3faa55c509083d707aa67151d58f39354a98eda848597aa4d0954af909cf4bbb1205fa88d490f0d45118a7655c8d16b47ed4625906ccc +6380a0a3c52e8bc7b21e0b4f41860516158ab0ecccd62c97965b150535f14c66dbb4348274eb1e5185e0de2c8d6be5528fd03db7da62dd6a404587c3c96e7bc0 +43a91e6d321217feb5580c42b7b90f33bc6f8d8e6aa0be0d29eb8d53475eb17cf622a922a72c1d9bb87abddca3d0ccb26655fa8a57afeb8ada40e12f43c974a2 +7683220a36e7a92c8ae46d8d69813a09e2d7f3cb8166174e726babf879ca7fecab9855b10a552f0c8eba500d593661858bcf50c54fb7802b66c5febac9f5bd43 +55626936db057491f1ad1d2aaf45274f678bef071592680eccc7dbbe48c6328ad1242710fb60ced771c0c12e812542a3dfe8fb3cf93ae4daa1f9bcf2efe8d7e1fd07d9f1db775a28335a0000000049454e44ae426082}}{\nonshppict +{\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1111\pich953\picwgoal630\pichgoal540\wmetafile8\bliptag-119480166\blipupi96{\*\blipuid f8e0e09a38b660bbe813b3241ade2f82} +0100090000035e05000000003a05000000000400000003010800050000000b0200000000050000000c0224002a00050000000701040000003a050000430f2000 +cc00000024002a000000000024002a0000000000280000002a00000024000000010008000000000030060000c40e0000c60e0000000100000001000000000000 +33000000660000008000000099000000cc000000ff00000000003300330033006600330099003300cc00330000006600330066006600660099006600cc006600 +ff006600000080008000800000009900330099006600990099009900cc009900ff0099002100a5000000cc003300cc006600cc009900cc00cc00cc00ff00cc00 +9300d6000000ff003300ff006600ff009900ff00cc00ff00ff00ff0004040400080808000c0c0c0011111100161616001c1c1c00222222002929290000330000 +333300006633000099330000cc33000000333300333333006633330099333300cc333300ff33330000336600333366006633660099336600cc336600ff336600 +00339900333399006633990099339900cc339900ff3399000033cc003333cc006633cc009933cc00cc33cc00ff33cc000033ff003333ff006633ff009933ff00 +cc33ff00ff33ff0039393900424242004d4d4d005050ff00555555005f5f5f0000660000336600006666000099660000cc660000ff6600000066330033663300 +6666330099663300cc663300ff66330000666600336666006666660099666600cc666600ff66660000669900336699006666990099669900cc669900ff669900 +0066cc003366cc006666cc009966cc00cc66cc00ff66cc000066ff003366ff006666ff009966ff00cc66ff00ff66ff0077777700807cff000080000080800000 +0080800080808000868686009696960000990000339900006699000099990000cc990000ff99000000993300339933006699330099993300cc993300ff993300 +00996600339966006699660099996600cc996600ff99660000999900339999006699990099999900cc999900ff9999000099cc003399cc006699cc009999cc00 +cc99cc00ff99cc000099ff003399ff006699ff009999ff00cc99ff00ff99ff00a4a0a00090a9ad00b2b2b200c0c0c000f0caa600cbcbcb0000cc000033cc0000 +66cc000099cc0000cccc0000ffcc000000cc330033cc330066cc330099cc3300cccc3300ffcc330000cc660033cc660066cc660099cc6600cccc6600ffcc6600 +00cc990033cc990066cc990099cc9900cccc9900ffcc990000cccc0033cccc0066cccc0099cccc00cccccc00ffcccc0000ccff0033ccff0066ccff0099ccff00 +ccccff00ffccff00c6d6ef00d7d7d700c0dcc000dddddd00e3e3e300d6e7e700eaeaea00ffeccc00f1f1f100f8f8f800f0fbff0000ff000066ff000099ff0000 +ccff0000ffff000033ff330066ff330099ff3300ccff3300ffff330000ff660033ff660066ff660099ff6600ccff6600ffff660000ff990033ff990066ff9900 +99ff9900ccff9900ffff990000ffcc0033ffcc0066ffcc0099ffcc00ccffcc00ffffcc0000ffff0033ffff0066ffff0099ffff00ccffff00ffffff00ffffffff +ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff2400ffffffffffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff0000 +ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffff6600ffffff00ffffffffffffffffffffffffffffffff +ff000000ffffffffffffffffffffffffffffffffffff9900ffffff0000ffff0000ffffff00ffffffffffffffff0000a4a4ffffffffffffffffffffffffffffff +ffffff00ff000000e40000ffe400ff00e400ffffffffffff000000a4a4ffffffffffffffffffffffffffffffffff1c0000e40000e4e400e4e4e40000e4e400ff +ffffffff0000ff00002bffff0000ffffffffffffffffffffffff330000e4e4e4e4e4e4e4e4e40000e4e40000ffffff0000ffff0000000000000000ffffffffff +ffffffffffff9900ff00e4e4e4afe4e4e4afe4e4e4e4e400ffffff0000ffffff0000a4a4a4a40001000000ffffffffffffffff00ff00e4e4afe4af00e4e4afe4 +e4afe4e400ff0000ffffffff000000a4a4a4a4000000000000ffffffffff0000ff0000e4e4e4e4af0000afe4e4e4afe4ffff00ffffffff0000a40000a4a4a4a4 +a4a4a4000000ffffffff3300ffffffff000000e4e4afaf0000000000000000ffffffff00a4a4a40000a4a4a4a4a4a4a4a4a400ffffff9900ffffffffff00e4e4 +afe4e4e4e4e4afe4ff00ffffffff00a4a4a4a471007171a4a4a4a4a4a4a400ffffffff00ffffffffff00ffe4e40000e4e4e4e400ff00ffffff00a4a4a47171a4 +000071717171a4a4a4a40000ffff0000ffffffffffffffff000000e4e4e400ffff00ffffff00a4a47171a4a4a400cea4a4a4a4a4a4a4a400ffff3300ffffffff +ffffffffffff00e40000ffffff0000ffff00a4a4a4a4a4a4a40000a4a4a4a4a4a4a4a400ffff9900ffffffffffffffffffffffffffffffffff0000ffff00a400 +00ffa4a4a4000071a4a40000000000ffffffff00ffffffffffffffffffffffffffffffff00000000ffff00ffffffa4a47100007171717171000000ffffff0000 +ffffffffffffffffffffff00000071710071ff00ffffffffffffa4a4a4a400a4717171717171a40000ff6600ffffffffffffffffffff000071717100007100ff +0000ffffff00a471a4a4a400a4a4a4a4a471a4a400ffcc00ffffffffffffffffffff00717171a400a4717100ffffffffff00a471a4a4a40000a4a4a4a4a4a4a4 +0000ff00ffffffffffffffffffffff0000717100a4717100ffffffffff00a4a4a40000a400a4a4a4a4a4a40000ffff00ffffffffffffffffffffff0071710071 +71a4717100ffffffff00a4a4000000a4710071a4000000ffffff6600ffffffffffffffffffff0071717100717171717100ffffffff00000000ff00a471a40071 +71a40000ffff9900ffffffffffffffffffff007171a4a4a47100007100ffffffffff00ffffff00a4a4a4a400a47171a400ffff00ffffffffffffffffff007171 +717171a47171000000ffffffffffffffffff00a4a4a4a4a4a4a4a4a4a400ffffffffffffffffffffff007100717171a4717100ffffffffffffffffffffff00ff +a400a4a40000000000ffffffffffffffffffffffffffff0071a47171717100ffffffffffffffffffffffff0000ff00a4a40000ffffffffffffffffffffffffff +ffffff71a400a400007100ffffffffffffffffffffffffffffff00a4a4a400ffffffffffffffffffffffffffffff00717100a4710000ffffffffffffffffffff +ffffffffffffff00a4a400ffffffffffffffffffffffffffffff0071717171a400ffffffffffffffffffffffffffffffffffffff000000ffffffffffffffffff +ffffffffffff0000717100717100ffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffff00007100000000ffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007100ff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05000000070101000000030000000000}}}{\b +Printing Demo. This is a header +\par }}{\footer \trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 +\trftsWidth2\trwWidth5000\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth2\clwWidth4000 \cellx7549\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth2\clwWidth1000 \cellx9463\pard\plain \s16\ql \li0\ri0\widctlpar\intbl\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\field{\*\fldinst { HYPERLINK "http://www.trichview.com" }{{\*\datafield +00d0c9ea79f9bace118c8200aa004ba90b02000000170000001900000068007400740070003a002f002f007700770077002e007400720069006300680076006900650077002e0063006f006d000000e0c9ea79f9bace118c8200aa004ba90b3400000068007400740070003a002f002f007700770077002e00740072006900 +6300680076006900650077002e0063006f006d002f0000000000}}}{\fldrslt {\cs17\ul\cf2 http://www.trichview.com}}}{\cell }{\b This is a footer\cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 +\trftsWidth2\trwWidth5000\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth2\clwWidth4000 \cellx7549\clvertalt\clbrdrt +\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth2\clwWidth1000 \cellx9463\row }\pard\plain \s16\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 { +\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}} +{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8 +\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s15\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 +\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\b From the Delphi help file: +\par +\par }{When you start Delphi, you are immediately placed within the integrated development environment, also called the IDE. This environment provides all the tools you need to design, develop, test, debug, and deploy applications. +\par Delphi\rquote s development environme +nt includes a visual form designer, Object Inspector, Object TreeView, Component palette, Project Manager, source code editor, and debugger among other tools. Some tools may not be included in all versions of the product. You can move freely from the visu +a +l representation of an object (in the form designer), to the Object Inspector to edit the initial runtime state of the object, to the source code editor to edit the execution logic of the object. Changing code-related properties, such as the name of an ev +ent handler, in the Object Inspector automatically changes the corresponding source code. In addition, changes to the source code, such as renaming an event handler method in a form class declaration, is immediately reflected in the Object Inspector. + +\par +\par The IDE supports application development throughout the stages of the product life cycle\emdash from design to deployment. Using the tools in the IDE allows for rapid prototyping and shortens development time. +\par }\pard \s15\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {A more complete overview of the development environment is presented in the Quick Start manual included with the product. +\par +\par }\pard \s15\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {Delphi includes all the tools necessary to start designing applications: +\par +\par A blank window, known as a form, on which to design the UI for your application. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}}\pard \s15\ql \fi-360\li360\ri0\widctlpar\jclisttab\tx360\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0 { +Extensive class libraries with many reusable objects. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}An Object Inspector for examining and changing object traits. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}A Code editor that provides direct access to the underlying program logic. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}A Project Manager for managing the files that make up one or more projects. +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}Many other tools such as an image editor on the toolbar and an integrated debugger on menus to support application development in the IDE. + +\par {\listtext\pard\plain\s15 \f14\lang1033\langfe1033\langnp1033\langfenp1033 \loch\af14\dbch\af0\hich\f14 \'a7\tab}Command-line tools including compilers, linkers, and other utilities. +\par }\pard \s15\ql \li0\ri0\widctlpar\tqc\tx4677\tqr\tx9355\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 { +\par You can use Delphi to design any kind of 32-bit application\emdash from general-purpose utilities to sophisticated data access programs or distributed applications. Delphi\rquote +s database tools and data-aware components let you quickly develop powerful desktop database and client/server applications. Using Delphi\rquote +s data-aware controls, you can view live data while you design your application and immediately see the results of database queries and changes to the application interface. +\par +\par Creating applications introduces Delphi\rquote s support for different types of applications. +\par Many of the objects provided in the class library are accessible in the IDE from the Component palette. The Component palette shows all of the controls, both visual and nonvisual, that you can place on a form. Each tab contains components grouped +by functionality. By convention, the names of objects in the class library begin with a T, such as TStatusBar. +\par +\par One of the revolutionary things about Delphi is that you can create your own components using Object Pascal. Most of the components provided are + written in Object Pascal. You can add components that you write to the Component palette and customize the palette for your use by including new tabs if needed. +\par }\pard \s15\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {You can also use Delphi for cross platform development on both Linux and Windows by using tCLX +. CLX contains a set of classes that, if used instead of those in the VCL, allow your program to port between Windows and Linux. +\par }} \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Printing.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Printing.dpr new file mode 100644 index 0000000..60836a3 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Printing.dpr @@ -0,0 +1,13 @@ +program Printing; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Printing.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Printing.dproj new file mode 100644 index 0000000..39a2f31 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Printing.dproj @@ -0,0 +1,99 @@ + + + {99FAD219-2AED-4100-B840-333F06A71FED} + Printing.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Printing.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Printing.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Printing.res b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Printing.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Printing.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Unit1.dfm new file mode 100644 index 0000000..ecce5e7 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Unit1.pas new file mode 100644 index 0000000..d0a1e52 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/Printing/Unit1.pas @@ -0,0 +1,300 @@ +unit Unit1; +{$I RV_Defs.inc} +{==============================================================================} +{ RichView Printing Demo. } +{------------------------------------------------------------------------------} +{ Note: } +{ This demo does not show how to create user interface to setup margins. } +{------------------------------------------------------------------------------} +{ Note: } +{ This demo does not show how to implement custom scaling of print preview. } +{ Look at the example of RichViewEdit based editor. } +{==============================================================================} + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, ExtCtrls, ComCtrls, PtblRV, CRVPP, RVPP, RVStyle, + ImgList, + StdCtrls, CtrlImg; + +type + TForm1 = class(TForm) + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + Panel1: TPanel; + RichView1: TRichView; + RVPrintPreview1: TRVPrintPreview; + RVPrint1: TRVPrint; + Image1: TImage; + Panel2: TPanel; + Button1: TButton; + Edit1: TEdit; + RVStyle1: TRVStyle; + Label1: TLabel; + PrintDialog1: TPrintDialog; + btnPrint: TButton; + Image2: TImage; + StatusBar1: TStatusBar; + Panel3: TPanel; + ScrollBar1: TScrollBar; + procedure FormCreate(Sender: TObject); + procedure ScrollBar1Change(Sender: TObject); + procedure RVPrint1PrintComponent(Sender: TCustomRVPrint; PrintMe: TControl; + var ComponentImage: TBitmap); + procedure btnPrintClick(Sender: TObject); + procedure RVPrint1Formatting(Sender: TCustomRichView; PageCompleted: Integer; + Step: TRVPrintingStep); + procedure RVPrint1SendingToPrinter(Sender: TCustomRichView; + PageCompleted: Integer; Step: TRVPrintingStep); + procedure RVPrint1PagePrepaint(Sender: TRVPrint; PageNo: Integer; + Canvas: TCanvas; Preview: Boolean; PageRect, PrintAreaRect: TRect); + procedure PageControl1Change(Sender: TObject); + procedure Panel3Resize(Sender: TObject); + private + { Private declarations } + PreviewCreated: Boolean; + procedure UpdatePreview; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +const longtext:String = 'A simple way of describing Delphi is a sophisticated Pascal compiler.'+ + ' Delphi’s roots lie in Borland’s Turbo Pascal, introduced in the mid-1980s.'+ + ' This view of Delphi, however, doesn’t capture the real power of Delphi.'+ + ' Object Pascal, the object-oriented extensions to Pascal, is the underlying'+ + ' language of Delphi. The Visual Component Library, or VCL, is a hierarchy of '+ + 'Object Pascal objects that allow you to design programs. A better way of describing '+ + 'Delphi is an Object Pascal-based visual development environment.'#13+ + + 'The VCL is intimately tied to the Delphi IDE, and is what gives you the ability '+ + 'to quickly develop applications. The Component palette and Object Inspector allow '+ + 'you to drop VCL components on forms and then manipulate the properties and events of '+ + 'those controls without having to write a single line of code.'#13+ + + 'Despite its name, the VCL is not entirely made up of visual components. '+ + 'In fact, of the over 600 objects in the VCL, most are not visual. '+ + 'The Delphi IDE allows you to visually add some nonvisual components to '+ + 'your programs. For example, if you wanted to write a database application '+ + 'that connected to a table, you would drop a TDataSource component on your '+ + 'form. TDataSource is a nonvisual component, but is represented on the form by '+ + 'an icon (which doesn’t show up at runtime), and you can manipulate the properties '+ + 'and events of TDataSource in the Object Inspector just as you would a visual control.'#13+ + + 'All VCL objects, and in fact all objects in Object Pascal, are derived from TObject. '+ + 'TObject is unique in that it is an abstract object that has no properties or events, '+ + 'only methods that allow you to derive objects from this base class. Use TObject as the '+ + 'immediate base class when writing simple objects that are not components. Components are '+ + 'objects that you can manipulate at design time. All components in the VCL are derived '+ + 'from the abstract component type TComponent. The VCL components you will likely use the '+ + 'most are the VCL’s controls, such as TForm or TSpeedButton. Controls are visual components'+ + ' derived from the abstract component type TControl.'#13+ + + 'You can use Delphi to create Object Pascal objects without using the VCL, '+ + 'although by creating any objects in Object Pascal, both your objects and VCL '+ + 'objects will share a common ancestor in TObject. However, by deriving new objects '+ + 'from VCL object, much of the work in designing applications is done for you by Delphi. '+ + 'For example, if you wanted to use a progress bar in your application but didn’t like '+ + 'TProgressBar, Delphi’s control that creates a progress bar, you could create a new '+ + 'object based on TProgressBar and override its properties, events, or methods.'; +var gr: TGraphic; +begin + + // Creating sample document + RichView1.AddNL('Printing Demo',1,2); + RichView1.AddTextNL(longtext,0,0,0); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,1,1); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,2,2); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,3,3); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,4,4); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,5,5); + RichView1.AddBreak; + RichView1.AddTextNL(longtext,0,7,7); + + RichView1.AddControlEx('', Panel2, 2, rvvaBaseline); + + gr := TIcon.Create; + gr.Assign(Image1.Picture); + RichView1.AddPictureEx( '', gr, -1, rvvaBaseLine); + + gr := TMetafile.Create; + gr.Assign(Image2.Picture); + RichView1.AddPictureEx( '', gr, -1, rvvaBaseLine); + + // Created... + RichView1.Format; + + // Assigning margins: 20 mm. + RVPrint1.LeftMarginMM := 20; + RVPrint1.RightMarginMM := 20; + RVPrint1.BottomMarginMM := 20; + // Top margin: 25 mm. + RVPrint1.TopMarginMM := 25; + + // Making printable area on preview visible... + RVPrintPreview1.MarginsPen.Style := psDot; +end; +{------------------------------------------------------------------------------} +{ Switching page to "Preview" } +{------------------------------------------------------------------------------} +procedure TForm1.PageControl1Change(Sender: TObject); +begin + if (PageControl1.ActivePage.PageIndex=1) and not PreviewCreated then begin + PreviewCreated := True; + UpdatePreview; + end; + RVPrintPreview1.ZoomMode := rvzmFullPage; +end; +{------------------------------------------------------------------------------} +procedure TForm1.UpdatePreview; +begin + Screen.Cursor := crHourglass; + // Assigning document for printing: + RVPrint1.AssignSource(RichView1); + // Formatting pages: + RVPrint1.FormatPages(rvdoAll); + // Updating user interface for preview: + Scrollbar1.Min := 1; + Scrollbar1.Position := 1; + {$IFDEF RICHVIEWDEF4} + Scrollbar1.PageSize := 1; + {$ENDIF} + Scrollbar1.Max := RVPrint1.PagesCount; + // Preview will show full page: + RVPrintPreview1.ZoomMode := rvzmFullPage; + // Preview will show 1st page: + RVPrintPreview1.First; + Screen.Cursor := crDefault; +end; +{------------------------------------------------------------------------------} +{ Page turning: } +{------------------------------------------------------------------------------} +procedure TForm1.ScrollBar1Change(Sender: TObject); +begin + if Scrollbar1.Position>0 then begin + RVPrintPreview1.PageNo := Scrollbar1.Position; + StatusBar1.SimpleText := Format('Page %d of %d', + [RVPrintPreview1.PageNo, RVPrint1.PagesCount]); + end; +end; +{------------------------------------------------------------------------------} +{ Event: printing inserted components. } +{ We need to create bitmap, draw component onto it, } +{ and assign this bitmap to ComponentImage parameter. } +{ Bitmap should have the same size as component (if not, it will be scaled) } +{ CtrlImg.pas from RichView package has useful function DrawControl. } +{------------------------------------------------------------------------------} +procedure TForm1.RVPrint1PrintComponent(Sender: TCustomRVPrint; + PrintMe: TControl; var ComponentImage: TBitmap); +begin + ComponentImage := DrawControl(PrintMe); + // actually, DrawControl is used by default. You need to process this + // event only if you are not satisfied with its results. +end; +{------------------------------------------------------------------------------} +{ Printing... } +{------------------------------------------------------------------------------} +procedure TForm1.btnPrintClick(Sender: TObject); +begin + if not PreviewCreated then begin + PreviewCreated := True; + UpdatePreview; + end; + // do not print empty document! + if RichView1.ItemCount=0 then + exit; + PrintDialog1.MinPage := 1; + PrintDialog1.MaxPage := RVPrint1.PagesCount; + PrintDialog1.FromPage := 1; + PrintDialog1.ToPage := RVPrint1.PagesCount; + // we can print a whole document or specified pages: + if PrintDialog1.Execute then begin + // it's possible that current printer was changed. + // so we need to reformat document and update preview: + UpdatePreview; + case PrintDialog1.PrintRange of + prAllPages: + RVPrint1.Print( 'Test', PrintDialog1.Copies, PrintDialog1.Collate); + prPageNums: + RVPrint1.PrintPages(PrintDialog1.FromPage, PrintDialog1.ToPage, + 'Test', PrintDialog1.Copies, PrintDialog1.Collate); + end; + end; +end; +{------------------------------------------------------------------------------} +{ Event: displaying formatting progress... } +{------------------------------------------------------------------------------} +procedure TForm1.RVPrint1Formatting(Sender: TCustomRichView; + PageCompleted: Integer; Step: TRVPrintingStep); +begin + case Step of + rvpsStarting: + StatusBar1.SimpleText := 'Repaginating...'; + rvpsProceeding: + StatusBar1.SimpleText := Format('Repaginating (%d)',[PageCompleted]); + rvpsFinished: + StatusBar1.SimpleText := ''; + end; +end; +{------------------------------------------------------------------------------} +{ Event: displaying printing (spooling) progress... } +{------------------------------------------------------------------------------} +procedure TForm1.RVPrint1SendingToPrinter(Sender: TCustomRichView; + PageCompleted: Integer; Step: TRVPrintingStep); +begin + case Step of + rvpsStarting: + StatusBar1.SimpleText := 'Starting...'; + rvpsProceeding: + StatusBar1.SimpleText := Format('Printing (%d)',[PageCompleted]); + rvpsFinished: + StatusBar1.SimpleText := ''; + end; +end; +{------------------------------------------------------------------------------} +{ (NEW) Event: prepaint on page } +{------------------------------------------------------------------------------} +procedure TForm1.RVPrint1PagePrepaint(Sender: TRVPrint; PageNo: Integer; + Canvas: TCanvas; Preview: Boolean; PageRect, PrintAreaRect: TRect); +var w,h: Integer; + s: String; +begin + // This is a temporary solution for drawing page numbers and similalar stuff + + // This example outputs string just above RichView contents + + s := Format ('-- Page %d of %d --', [PageNo, Sender.PagesCount]); + Canvas.Brush.Style := bsClear; + Canvas.Font.Assign(RVStyle1.TextStyles[0]); + w := Canvas.TextWidth(s); + h := Canvas.TextHeight(s); + TextOut(Canvas.Handle, (PrintAreaRect.Right+PrintAreaRect.Left-w) div 2, + PrintAreaRect.Top - h - 10, PChar(s), Length(s)); +end; + +procedure TForm1.Panel3Resize(Sender: TObject); +begin + // In earlier versions of Delphi scrollbars do not have Align property... + // Aligning to the right side of panel + ScrollBar1.SetBounds(Panel3.ClientWidth-ScrollBar1.Width, 0, + ScrollBar1.Width, Panel3.ClientHeight); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/ReportHelper.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/ReportHelper.dpr new file mode 100644 index 0000000..aa2cd38 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/ReportHelper.dpr @@ -0,0 +1,13 @@ +program ReportHelper; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/ReportHelper.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/ReportHelper.dproj new file mode 100644 index 0000000..ea900fd --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/ReportHelper.dproj @@ -0,0 +1,99 @@ + + + {712E156B-9CCC-4618-BD19-F00C851B27A9} + ReportHelper.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + ReportHelper.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + ReportHelper.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/ReportHelper.res b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/ReportHelper.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/ReportHelper.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/Unit1.dfm new file mode 100644 index 0000000..f57c734 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/Unit1.pas new file mode 100644 index 0000000..3d97961 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Printing/ReportHelper/Unit1.pas @@ -0,0 +1,190 @@ +{------------------------------------------------------------------------------- + Demo: printing documents using TRVReportHelper. + This demo loads RVF file in rvh.RichView and prints it. + rvh2 is used to print header: (- page no -). + + Advantages of this method: + - possibility to make custom complex headers and footers, different for + different pages; + - possibility to implement nonstandard layouts, printing several documents + in different areas on the same page,etc + Disadvantages of this method: + - no preview (at least, not with TRVPrintPreview) + - you need to calculate all margins yourself + + ------------------------------------------------------------------------------ + + For example, you can open RVF file created by ActionText (including readme.rvf). + Do not try to load file from the editor demo (Demos\*\Editors\Editor 1) - it does + not contain a collection of styles, so it can be opened only by + applications having that collection of styles. + +-------------------------------------------------------------------------------} + +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Printers, Dialogs, + RVScroll, RichView, PtblRV, RVReport, StdCtrls, RVStyle; + +type + TForm1 = class(TForm) + Button1: TButton; + rvh: TRVReportHelper; + RVStyle1: TRVStyle; + OpenDialog1: TOpenDialog; + Button2: TButton; + rvh2: TRVReportHelper; + RVStyle2: TRVStyle; + Button3: TButton; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.dfm} + +procedure TForm1.FormCreate(Sender: TObject); +begin + with rvh.RichView do begin + RVFOptions := [rvfoSavePicturesBody,rvfoSaveControlsBody,rvfoSaveBinary, + rvfoSaveBack,rvfoLoadBack,rvfoSaveTextStyles,rvfoSaveParaStyles, + rvfoSaveLayout,rvfoLoadLayout]; + Options := Options + [rvoTagsArePChars]; + RVFParaStylesReadMode := rvf_sInsertMerge; + RVFTextStylesReadMode := rvf_sInsertMerge; + Style := RVStyle1; + end; + with rvh2.RichView do begin + Style := RVStyle2; + end; +end; + +procedure TForm1.Button1Click(Sender: TObject); +begin + if OpenDialog1.Execute then begin + rvh.RichView.Clear; + rvh.RichView.LoadRVF(OpenDialog1.FileName); + end; +end; + +// print one column +procedure TForm1.Button2Click(Sender: TObject); +var DocWidth, DocHeight, DocLeft, DocTop, HeaderTop, LineY, + PageNo: Integer; +begin + if rvh.RichView.ItemCount=0 then begin + Application.MessageBox('Document is empty!', 'Empty', 0); + exit; + end; + Printer.Title := 'ReportHelper Test'; + Printer.BeginDoc; + try + PageNo := 1; + DocLeft := Printer.PageWidth div 20; // margins = 5% + DocWidth := Printer.PageWidth - DocLeft*2; + HeaderTop := Printer.PageHeight div 20; // margins = 5% + rvh.Init(Printer.Canvas, DocWidth); + while True do begin + // creating & formatting header + rvh2.RichView.Clear; + rvh2.RichView.AddFmt('- %d -', [PageNo], 0, 1); + rvh2.Init(Printer.Canvas, DocWidth); + rvh2.FormatNextPage(Printer.PageHeight); + DocTop := HeaderTop+rvh2.EndAt+HeaderTop div 2; + // formatting next page of document + DocHeight := Printer.PageHeight-DocTop-HeaderTop; + if not rvh.FormatNextPage(DocHeight) then + break; + // starting new page + if PageNo>1 then + Printer.NewPage; + // drawing line between header and document + with Printer.Canvas do begin + Pen.Style := psInsideFrame; + Pen.Width := 10; + Pen.Color := clBlack; + LineY := HeaderTop+rvh2.EndAt+HeaderTop div 4; + MoveTo(DocLeft*2, LineY); + LineTo(Printer.PageWidth-DocLeft*2, LineY); + end; + // drawing header and document + rvh2.DrawPageAt(DocLeft, HeaderTop, 1, Printer.Canvas, False, rvh2.EndAt); + rvh.DrawPageAt(DocLeft, DocTop, PageNo, Printer.Canvas, False, DocHeight); + inc(PageNo); + end; + finally + Printer.EndDoc; + end; +end; + +// print two columns +procedure TForm1.Button3Click(Sender: TObject); +var ColWidth, DocHeight, DocTop, Col1Left, Col2Left, + HeaderLeft, HeaderTop, HeaderWidth, LineY, + PageNo: Integer; +begin + if rvh.RichView.ItemCount=0 then begin + Application.MessageBox('Document is empty!', 'Empty', 0); + exit; + end; + Printer.Title := 'ReportHelper Test'; + Printer.BeginDoc; + try + PageNo := 1; + HeaderLeft := Printer.PageWidth div 20; // margins = 5% + HeaderWidth := Printer.PageWidth - HeaderLeft*2; + HeaderTop := Printer.PageHeight div 20; // margins = 5% + ColWidth := (HeaderWidth-HeaderLeft) div 2; + Col1Left := HeaderLeft; + Col2Left := Col1Left+ColWidth+HeaderLeft div 2; + rvh.Init(Printer.Canvas, ColWidth); + while True do begin + // creating & formatting header + rvh2.RichView.Clear; + rvh2.RichView.AddFmt('- %d -', [PageNo], 0, 1); + rvh2.Init(Printer.Canvas, HeaderWidth); + rvh2.FormatNextPage(Printer.PageHeight); + DocTop := HeaderTop+rvh2.EndAt+HeaderTop div 2; + // formatting the first column of document + DocHeight := Printer.PageHeight-DocTop-HeaderTop; + if not rvh.FormatNextPage(DocHeight) then + break; + // starting new page + if PageNo>1 then + Printer.NewPage; + // drawing line between header and document + with Printer.Canvas do begin + Pen.Style := psInsideFrame; + Pen.Width := 10; + Pen.Color := clBlack; + LineY := HeaderTop+rvh2.EndAt+HeaderTop div 4; + MoveTo(HeaderLeft*2, LineY); + LineTo(Printer.PageWidth-HeaderLeft*2, LineY); + end; + // drawing header and document + rvh2.DrawPageAt(HeaderLeft, HeaderTop, 1, Printer.Canvas, False, rvh2.EndAt); + rvh.DrawPageAt(Col1Left, DocTop, PageNo*2-1, Printer.Canvas, False, DocHeight); + if rvh.FormatNextPage(DocHeight) then + rvh.DrawPageAt(Col2Left, DocTop, PageNo*2, Printer.Canvas, False, DocHeight); + inc(PageNo); + end; + finally + Printer.EndDoc; + end; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/HTMLSave.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/HTMLSave.dpr new file mode 100644 index 0000000..c34c49f --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/HTMLSave.dpr @@ -0,0 +1,13 @@ +program HTMLSave; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/HTMLSave.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/HTMLSave.dproj new file mode 100644 index 0000000..2e84815 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/HTMLSave.dproj @@ -0,0 +1,99 @@ + + + {664DCAE2-2A75-4776-99FF-3BDAEEBF228F} + HTMLSave.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + HTMLSave.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + HTMLSave.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/HTMLSave.res b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/HTMLSave.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/HTMLSave.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/Unit1.dfm new file mode 100644 index 0000000..c068792 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/Unit1.pas new file mode 100644 index 0000000..dab856f --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Save HTML/Unit1.pas @@ -0,0 +1,327 @@ +unit Unit1; + +interface +{==============================================================================} +{ Demo: } +{ 1. how to load RVF file saved in demo editor. } +{ 2. HTML export with custom saving of images } +{------------------------------------------------------------------------------} +{ Note: Gif images have 256 colors or less. Some pictures may lose quality } +{ when converting to Gifs } +{------------------------------------------------------------------------------} +{ Sergey Tkachenko } +{==============================================================================} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, StdCtrls, ExtCtrls, RVStyle, OleCtnrs, + ImgList, + GifImg, ComCtrls, CRVData, CRVFData, RVTable, RVTypes; + +type + TForm1 = class(TForm) + RichView1: TRichView; + OpenDialog1: TOpenDialog; + Panel1: TPanel; + Button1: TButton; + StatusBar1: TStatusBar; + Button2: TButton; + CheckBox1: TCheckBox; + SaveDialog1: TSaveDialog; + Label1: TLabel; + Edit1: TEdit; + Label2: TLabel; + Edit2: TEdit; + ImageList1: TImageList; + RVStyle1: TRVStyle; + procedure Button1Click(Sender: TObject); + procedure RichView1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + procedure FormCreate(Sender: TObject); + procedure RichView1RVMouseMove(Sender: TObject; id: Integer); + procedure RichView1Jump(Sender: TObject; id: Integer); + procedure RichView1HTMLSaveImage(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; const Path: String; + BackgroundColor: TColor; var Location: String; + var DoDefault: Boolean); + procedure Button2Click(Sender: TObject); + procedure RichView1SaveComponentToFile(Sender: TCustomRichView; Path: string; + SaveMe: TPersistent; SaveFormat: TRVSaveFormat; var OutStr: string); + procedure RichView1SaveHTMLExtra(Sender: TCustomRichView; + Area: TRVHTMLSaveArea; CSSVersion: Boolean; var HTMLCode: String); + procedure RichView1WriteHyperlink(Sender: TCustomRichView; id: Integer; + RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; + var Target, Extras: String); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +{==================== Notes about loading from RVF files:======================= +1. In the simplest cases you can just write: RichView1.LoadRVF(); +2. If file contains inserted Delphi Controls, these controls must be registered + with RegisterClasses functions before loading (see FormCreate below) +3. If file contains images from image lists, you need to process + OnRVFImageListNeeded event (see RichView1RVFImageListNeeded below) + If you have several image lists, you can distinguish them using + ImageListTag parameter of this event. +4. You must have the same (or compatible) TRVStyle object assigned to + RichView1.Style as in editor. + Otherwise, you need to set option "Allow adding styles dynamically" + both in richview which saves and in richview which loads RVF + (right-click RichView in Delphi, choose "Settings" in the context menu) +5. If some items in RVF file have character strings associated as items' tags + (rvoTagsArePChars was in editor's Options), you need also set rvoTagsArePChars + in RichView1.Options. +===============================================================================} +{===================== Notes about HTML export ================================= +1. There are 2 methods for saving HTML files: + a) SaveHTML - saving HTML file, where formatting is made by ,, + tags, etc. + b) SaveHTMLEx - saving HTML file, where formatting is made by Cascading + Style Sheet (CSS). +2. Images are saved in separate files. By default, they are saved as JPEGs. +3. By default, images are saved in the same directory as HTML file, and have + names built as Prefix + Number + .JPG. + You can specify your own prefix as a parameter of SaveHTML[Ex]. + You can include subdirectory in prefix (such as 'images\img'), but this + subdirectory will NOT be created automatically. +4. JPEGs do not support transparency. Transparent color (of metafiles, + icons, imagelist images) is replaced with the current background color + (of RichView or table cell or paragraph background) +5. By default, images from imagelists (bullets and hotspot) are saved like + other images, but the same image saved only one time (next occurrences + point to the same image file, if they have the same background color) +6. You can save images yourself using OnHTMLSaveImage event. + You need to store image to file and return its location in 'Location' + parameter. + This demo shows + a) how to save images in GIF-files + b) how to save bullets in a way allowing to use the same image files for + the whole HTML document generated by your application. +7. By default hypertext is not saved. + You can specify destinations of [some/all] hypertext jumps + using OnWriteHyperlink event. +8. By default inserted controls are not saved. + You can save them using OnSaveComponentToFile event +9. You can save additional information in OnSaveHTMLExtra. +===============================================================================} + +procedure TForm1.FormCreate(Sender: TObject); +begin + RegisterClasses([TButton, TEdit, TOleContainer]); + OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName)+'..\..\Editors\Editor 1\'; +end; + +{============================== RVF loading ===================================} +procedure TForm1.Button1Click(Sender: TObject); +begin + if OpenDialog1.Execute then begin + if not RichView1.LoadRVF(OpenDialog1.FileName) then + Application.MessageBox('Error Loading File', nil, MB_OK); + RichView1.Format; + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.RichView1RVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + il := ImageList1; +end; +{============================ Hypertext testing ===============================} +procedure TForm1.RichView1RVMouseMove(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + if id=-1 then + StatusBar1.SimpleText := '' + else begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + StatusBar1.SimpleText := PChar(RVData.GetItemTag(ItemNo)); + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + StatusBar1.SimpleText := PChar(RVData.GetItemTag(ItemNo)); + Application.MessageBox(PChar(StatusBar1.SimpleText),'Click', 0); +end; +{============================ SAVING TO HTML ==================================} +procedure TForm1.Button2Click(Sender: TObject); +var SaveOptions: TRVSaveOptions; +var r: Boolean; +begin + if SaveDialog1.Execute then begin + Screen.Cursor := crHourglass; + if Checkbox1.Checked then + SaveOptions := [rvsoOverrideImages, rvsoUTF8] + else + SaveOptions := [rvsoUTF8]; + case SaveDialog1.FilterIndex of + 1: + r := RichView1.SaveHTML(SaveDialog1.FileName, + 'Demo File',Edit2.Text, SaveOptions); + 2: + r := RichView1.SaveHTMLEx(SaveDialog1.FileName, + 'Demo File',Edit1.Text, '','','',SaveOptions); + else + r := False; + end; + Screen.Cursor := crDefault; + if not r then + Application.MessageBox('Error during saving', 'Error', 0); + end; +end; +{------------------------------------------------------------------------------} +// Event: overriding default saving of images: saving as Gifs +procedure TForm1.RichView1HTMLSaveImage(Sender: TCustomRichView; + RVData: TCustomRVData; ItemNo: Integer; const Path: String; + BackgroundColor: TColor; var Location: String; var DoDefault: Boolean); +var gif: TGifImage; + wmf: TMetafile; + gr: TGraphic; + s: TRVAnsiString; + AVAlign: TRVVAlign; + ATag: Integer; + ImageList: TCustomImageList; + ImageIndex: Integer; + Canvas: TMetafileCanvas; +begin + // Parameters: + //The item to save is defined by the pair (RVData, ItemNo). + // It is the ItemNo-th item in RVData object. + // RVData may be RichView.RVData, or cell, or RVData of cell inplace editor. + // Path - destination directory of HTML file. + // BackgroundColor - color of background under this item. Not used here + // because GIFs support a true transparency. + // Location - output parameter to specify filename of image file + // DoDefault - set to false if you save this item as image yourself. + if ItemNo<0 then begin + // saving background + gif := TGifImage.Create; + try + gif.ColorReduction := rmQuantize; + if RVData is TRVTableCellData then + gif.Assign(TRVTableCellData(RVData).BackgroundImage) // table cell background + else + gif.Assign(Sender.BackgroundBitmap); // document background + Location := RVData.GetNextFileName(Edit2.Text, Path, '.gif', RichView1.imgSaveNo, Checkbox1.Checked); + gif.SaveToFile(Location); + Location := ExtractRelativePath(Path, Location); + DoDefault := False; + finally + gif.Free; + end; + exit; + end; + gif := nil; + case RVData.GetItemStyle(ItemNo) of + rvsPicture, rvsHotPicture: + begin + // Assigning image to GIF and saving + // (metafiles and icons will be saved with transparency) + gif := TGifImage.Create; + gif.ColorReduction := rmQuantizeWindows; + RVData.GetPictureInfo(ItemNo, s, gr, AVAlign, ATag); + gif.Assign(gr); + Location := RVData.GetNextFileName(Edit2.Text, Path, '.gif', RichView1.imgSaveNo, Checkbox1.Checked); + end; + rvsTable: + begin + // Saving table background image + gif := TGifImage.Create; + gif.ColorReduction := rmQuantizeWindows; + gif.Assign(TRVTableItemInfo(RVData.GetItem(ItemNo)).BackgroundImage); + Location := RVData.GetNextFileName(Edit2.Text, Path, '.gif', RichView1.imgSaveNo, Checkbox1.Checked); + end; + rvsBullet, rvsHotspot: + begin + // This is not efficient way, because the same image will be + // saved many times. In your application you can save bullets + // before saving HTMLs, and here only return file name. + RVData.GetBulletInfo(ItemNo, s, ImageIndex, ImageList, ATag); + wmf := TMetafile.Create; + try + gif := TGifImage.Create; + gif.ColorReduction := rmQuantizeWindows; + // Drawing image from imagelist to metafile + // This method allows to save transparency + wmf.Width := TImageList(ImageList).Width; + wmf.Height := TImageList(ImageList).Height; + Canvas := TMetafileCanvas.Create(wmf, 0); + ImageList.Draw(Canvas,0,0, ImageIndex); + Canvas.Free; + // Assigning metafile to GIF and saving + gif.Assign(wmf); + // Saving to Path + Bullets Prefix + ImageIndex + .gif + Location := Format('%s%s%d.gif', [Path, Edit1.Text, ImageIndex]); + finally + wmf.Free; + end; + end; + // List markers can also have pictures. Not processed in this demo + end; + if gif<>nil then begin + gif.SaveToFile(Location); + Location := ExtractRelativePath(Path, Location); + DoDefault := False; + gif.Free; + end; +end; +{------------------------------------------------------------------------------} +// Event: saving hyperlinks +procedure TForm1.RichView1WriteHyperlink(Sender: TCustomRichView; + id: Integer; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; var Target, Extras: String); +begin + Target := PChar(RVData.GetItemTag(ItemNo)); +end; +{------------------------------------------------------------------------------} +// Event: saving components +procedure TForm1.RichView1SaveComponentToFile(Sender: TCustomRichView; + Path: string; SaveMe: TPersistent; SaveFormat: TRVSaveFormat; + var OutStr: string); +begin + case SaveFormat of + rvsfHTML: + begin + if SaveMe is TButton then begin + OutStr := ''; + exit; + end; + if SaveMe is TEdit then begin + OutStr := ''; + exit; + end; + end; + end; +end; +{------------------------------------------------------------------------------} +// Event: saving additional information +procedure TForm1.RichView1SaveHTMLExtra(Sender: TCustomRichView; + Area: TRVHTMLSaveArea; CSSVersion: Boolean; var HTMLCode: String); +begin + case Area of + rv_thms_Head: + HTMLCode := ''; + rv_thms_BodyAttribute: + HTMLCode := 'alink=#ff0000'; + rv_thms_Body: + HTMLCode := 'This document was generated by '+ + 'RichView
'; + end; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/SearchAndReplace.dpr b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/SearchAndReplace.dpr new file mode 100644 index 0000000..d53ec94 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/SearchAndReplace.dpr @@ -0,0 +1,13 @@ +program SearchAndReplace; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/SearchAndReplace.dproj b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/SearchAndReplace.dproj new file mode 100644 index 0000000..b52375a --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/SearchAndReplace.dproj @@ -0,0 +1,99 @@ + + + {5B95B613-4A65-4DF0-8E9C-2E54A537CF22} + SearchAndReplace.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + SearchAndReplace.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + SearchAndReplace.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/SearchAndReplace.res b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/SearchAndReplace.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/SearchAndReplace.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/Unit1.dfm new file mode 100644 index 0000000..3fbc15f Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/Unit1.pas new file mode 100644 index 0000000..db398c3 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Assorted/Search and Replace/Unit1.pas @@ -0,0 +1,156 @@ +unit Unit1; + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + StdCtrls, ExtCtrls, RVScroll, RichView, RVEdit, RVMisc, RVStyle, + RVTable; + +type + TForm1 = class(TForm) + rve: TRichViewEdit; + Panel1: TPanel; + bnnOpen: TButton; + btnFind: TButton; + btnReplace: TButton; + fd: TFindDialog; + rd: TReplaceDialog; + RVStyle1: TRVStyle; + OpenDialog1: TOpenDialog; + il: TImageList; + procedure btnReplaceClick(Sender: TObject); + procedure rdFind(Sender: TObject); + procedure rdReplace(Sender: TObject); + procedure rveRVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); + procedure btnFindClick(Sender: TObject); + procedure fdFind(Sender: TObject); + procedure bnnOpenClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure ShowInfo(const msg,cpt: String); +begin + Application.MessageBox(PChar(msg),PChar(cpt),MB_OK or MB_ICONINFORMATION); +end; + +{=============================== REPLACE ======================================} +procedure TForm1.btnReplaceClick(Sender: TObject); +var s: String; + p: Integer; +begin + rve.SetFocus; + fd.CloseDialog; + if rve.SelectionExists then begin + s := rve.GetSelText; + p := Pos(#13,s); + if p<>0 then s := Copy(s,1,p-1); + rd.FindText := s; + end; + rd.Execute; +end; +{------------------------------------------------------------------------------} +procedure TForm1.rdFind(Sender: TObject); +begin + if not rve.SearchText(rd.FindText,GetRVESearchOptions(rd.Options)) then + ShowInfo('String not found','Search and Replace'); +end; +{------------------------------------------------------------------------------} +function IsEqualText(s1, s2: String; CaseSensitive: Boolean): Boolean; +begin + if CaseSensitive then + Result := s1=s2 + else + Result := LowerCase(s1)=LowerCase(s2); +end; +{------------------------------------------------------------------------------} +procedure TForm1.rdReplace(Sender: TObject); +var c: Integer; +begin + if frReplace in rd.Options then begin + if IsEqualText(rve.GetSelText, rd.FindText, frMatchCase in rd.Options) then + rve.InsertText(rd.ReplaceText,False); + if not rve.SearchText(rd.FindText,GetRVESearchOptions(rd.Options)) then + ShowInfo('String not found','Search and Replace'); + end + else if frReplaceAll in rd.Options then begin + c := 0; + if IsEqualText(rve.GetSelText, rd.FindText, frMatchCase in rd.Options) then begin + rve.InsertText(rd.ReplaceText,False); + inc(c); + end; + while rve.SearchText(rd.FindText,GetRVESearchOptions(rd.Options)) do begin + rve.InsertText(rd.ReplaceText,False); + inc(c); + end; + ShowInfo(Format('There were %d replacements',[c]),'Replace'); + end; +end; +{================================= FIND =======================================} +procedure TForm1.btnFindClick(Sender: TObject); +var s: String; + p: Integer; +begin + rve.SetFocus; + rd.CloseDialog; + if rve.SelectionExists then begin + s := rve.GetSelText; + p := Pos(#13,s); + if p<>0 then s := Copy(s,1,p-1); + fd.FindText := s; + end; + fd.Execute; +end; +{------------------------------------------------------------------------------} +procedure TForm1.fdFind(Sender: TObject); +begin + if not rve.SearchText(fd.FindText,GetRVESearchOptions(fd.Options)) then + ShowInfo('String not found','Search'); +end; +{==============================================================================} +procedure TForm1.rveRVFImageListNeeded(Sender: TCustomRichView; + ImageListTag: Integer; var il: TCustomImageList); +begin + il := Self.il; +end; +{------------------------------------------------------------------------------} +procedure TForm1.bnnOpenClick(Sender: TObject); +var + r: Boolean; +begin + if OpenDialog1.Execute then begin + rve.Clear; + case OpenDialog1.FilterIndex of + 1: // RVF + r := rve.LoadRVF(OpenDialog1.FileName); + 2: // ANSI text + r := rve.LoadText(OpenDialog1.FileName,0,0,False); + else + r := False; + end; + if not r then + Application.MessageBox('Error during loading', 'Error', 0); + rve.Format; + rve.SetFocus; + end; +end; + +initialization + + RegisterClasses([TEdit,TButton]); + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/DBDemo1.dpr b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/DBDemo1.dpr new file mode 100644 index 0000000..6a174bd --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/DBDemo1.dpr @@ -0,0 +1,13 @@ +program DBDemo1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/DBDemo1.dproj b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/DBDemo1.dproj new file mode 100644 index 0000000..2c934af --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/DBDemo1.dproj @@ -0,0 +1,102 @@ + + + {F9DD9E3F-AE97-4915-8CEC-28656E8EFB4B} + DBDemo1.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + DBDemo1.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + DBDemo1.dpr + + + False + True + False + + + D:\DB Demo\1 DBRichViewEdit\ + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/DBDemo1.res b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/DBDemo1.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/DBDemo1.res differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/SampleTable.MB b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/SampleTable.MB new file mode 100644 index 0000000..9944328 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/SampleTable.MB differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/SampleTable.db b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/SampleTable.db new file mode 100644 index 0000000..f0209e9 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/SampleTable.db differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/Unit1.dfm new file mode 100644 index 0000000..dff26c9 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/Unit1.pas b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/Unit1.pas new file mode 100644 index 0000000..c8ac57c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/1 DBRichViewEdit/Unit1.pas @@ -0,0 +1,104 @@ +{=============================} unit Unit1; {==================================} +{ Main properties were set at design time: } +{ Table1.TableName := 'SampleTable.db'; // Paradox table } +{ Table1.ReadOnly := False; } +{ DataSource1.Dataset := Table1; } +{ DBNavigator1.DataSource := DataSource1; } +{ DBEdit1.DataSource := DataSource1; } +{ DBRichViewEdit1.DataSource := DataSource1; } +{ DBRichViewEdit1.Style := RVStyle1; } +{ DBEdit1.DataField := 'Caption'; // Alphanumeric field } +{ DBRichViewEdit1.DataField := 'RVFField'; // Binary field } +{ nbEdit was removed from DBNavigator1.VisibleButtons (because of autoedit) } +{------------------------------------------------------------------------------} +{ DBRichViewEdit has data-aware features that require no code to use } +{ (just like most of other Delphi db controls). } +{ Some more event handlers are needed for advanced RVF features, such as saving} +{ "bullets" and "hotspots". There is no difference here with saving/loading } +{ RVF files. } +{ The code below opens table, updates label displaying record number, } +{ provides "bold" button functionality. } +{------------------------------------------------------------------------------} +{ Note: changes after last posting are not saved when exiting application. } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, DBCtrls, RVScroll, RichView, RVEdit, DBRV, RVStyle, DB, + DBTables, StdCtrls, Mask, Buttons; + +type + TForm1 = class(TForm) + Table1: TTable; + DataSource1: TDataSource; + RVStyle1: TRVStyle; + DBRichViewEdit1: TDBRichViewEdit; + DBNavigator1: TDBNavigator; + Label1: TLabel; + Label2: TLabel; + DBEdit1: TDBEdit; + Label3: TLabel; + SpeedButton1: TSpeedButton; + procedure FormCreate(Sender: TObject); + procedure DataSource1DataChange(Sender: TObject; Field: TField); + procedure DBRichViewEdit1CurTextStyleChanged(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + private + { Private declarations } + procedure UpdateStatusLabel; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // Opening table... + Table1.DatabaseName := ExtractFilePath(Application.ExeName); + Table1.Open; + // For demonstrating rich text ability of TDBRichViewEdit, + // we added "Bold" button. It will switch the 0-th and the 1-st styles. + // Making 1-st text style a bold copy of 0-th style... + RVStyle1.TextStyles[1] := RVStyle1.TextStyles[0]; + RVStyle1.TextStyles[1].Style := RVStyle1.TextStyles[1].Style+[fsBold]; +end; + +procedure TForm1.UpdateStatusLabel; +begin + // where we are + if Table1.RecordCount=0 then + Label3.Caption := '(empty)' + else if Table1.RecNo<1 then + Label3.Caption := '(new)' + else + Label3.Caption := Format('Record %d of %d', [Table1.RecNo, Table1.RecordCount]); +end; + +procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); +begin + UpdateStatusLabel; +end; + +procedure TForm1.DBRichViewEdit1CurTextStyleChanged(Sender: TObject); +begin + SpeedButton1.Down := DBRichViewEdit1.CurTextStyleNo<>0; +end; + +procedure TForm1.SpeedButton1Click(Sender: TObject); +begin + // switching 1-st and 0-th styles + if SpeedButton1.Down then + DBRichViewEdit1.ApplyTextStyle(1) + else + DBRichViewEdit1.ApplyTextStyle(0); +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/DBDemo2.dpr b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/DBDemo2.dpr new file mode 100644 index 0000000..0907c3c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/DBDemo2.dpr @@ -0,0 +1,15 @@ +program DBDemo2; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + Unit2 in 'Unit2.pas' {Form2}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TForm2, Form2); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/DBDemo2.dproj b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/DBDemo2.dproj new file mode 100644 index 0000000..a20fced --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/DBDemo2.dproj @@ -0,0 +1,105 @@ + + + {E12A8630-AEDE-444A-B1ED-7F9070FFE8BC} + DBDemo2.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + DBDemo2.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ +
Form2
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + DBDemo2.dpr + + + False + True + False + + + D:\DB Demo\2 RichViewEdit\ + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/DBDemo2.res b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/DBDemo2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/DBDemo2.res differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/SampleTable.MB b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/SampleTable.MB new file mode 100644 index 0000000..90d623c Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/SampleTable.MB differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/SampleTable.db b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/SampleTable.db new file mode 100644 index 0000000..4abd60e Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/SampleTable.db differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit1.dfm new file mode 100644 index 0000000..fa5e0ca Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit1.pas b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit1.pas new file mode 100644 index 0000000..f765cab --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit1.pas @@ -0,0 +1,87 @@ +{=============================} unit Unit1; {==================================} +{ Main properties were set at design time: } +{ Table1.TableName := 'SampleTable.db'; // Paradox table } +{ Table1.ReadOnly := False; } +{ DataSource1.Dataset := Table1; } +{ DBNavigator1.DataSource := DataSource1; } +{ DBEdit1.DataSource := DataSource1; } +{ DBRichView1.DataSource := DataSource1; } +{ DBRichView1.Style := RVStyle1; } +{ DBEdit1.DataField := 'Caption'; // Alphanumeric field } +{ DBRichViewEdit1.DataField := 'RVFField'; // Binary field } +{ nbEdit was removed from DBNavigator1.VisibleButtons (because of autoedit) } +{------------------------------------------------------------------------------} +{ Note: changes after last posting are not saved when exiting application. } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, DBCtrls, RVScroll, RichView, RVEdit, DBRV, RVStyle, DB, + DBTables, StdCtrls, Mask, Buttons; + +type + TForm1 = class(TForm) + Table1: TTable; + DataSource1: TDataSource; + RVStyle1: TRVStyle; + DBNavigator1: TDBNavigator; + Label1: TLabel; + Label2: TLabel; + DBEdit1: TDBEdit; + Label3: TLabel; + DBRichView1: TDBRichView; + Button1: TButton; + procedure FormCreate(Sender: TObject); + procedure DataSource1DataChange(Sender: TObject; Field: TField); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + procedure UpdateStatusLabel; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation +uses Unit2; + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // Opening table... + Table1.DatabaseName := ExtractFilePath(Application.ExeName); + Table1.Open; + + RVStyle1.TextStyles[1] := RVStyle1.TextStyles[0]; + RVStyle1.TextStyles[1].Style := RVStyle1.TextStyles[1].Style+[fsBold]; +end; + +procedure TForm1.UpdateStatusLabel; +begin + // where we are? + if Table1.RecordCount=0 then + Label3.Caption := '(empty)' + else if Table1.RecNo<1 then + Label3.Caption := '(new)' + else + Label3.Caption := Format('Record %d of %d', [Table1.RecNo, Table1.RecordCount]); +end; + +procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); +begin + UpdateStatusLabel; +end; + +procedure TForm1.Button1Click(Sender: TObject); +begin + // See Unit2.pas + Form2.SetField('RVFField',Table1); + Form2.ShowModal; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit2.dfm b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit2.dfm new file mode 100644 index 0000000..59f747d Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit2.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit2.pas b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit2.pas new file mode 100644 index 0000000..17c0808 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/2 RichViewEdit/Unit2.pas @@ -0,0 +1,189 @@ +unit Unit2; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + Buttons, ExtCtrls, RVScroll, RichView, RVEdit, DB, DBTables, + Unit1; + +type + TForm2 = class(TForm) + btnBold: TSpeedButton; + btnPost: TSpeedButton; + btnCancel: TSpeedButton; + btnClose: TSpeedButton; + RichViewEdit1: TRichViewEdit; + Panel1: TPanel; + procedure RichViewEdit1Change(Sender: TObject); + procedure btnPostClick(Sender: TObject); + procedure btnCancelClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure btnCloseClick(Sender: TObject); + procedure RichViewEdit1CurTextStyleChanged(Sender: TObject); + procedure btnBoldClick(Sender: TObject); + private + { Private declarations } + FModified: Boolean; + FFieldName: String; + FTable: TTable; + procedure SetModified(Value: Boolean); + procedure Load; + procedure Save; + property Modified: Boolean read FModified write SetModified; + public + { Public declarations } + procedure SetField(const AFieldName: String; ATable: TTable); + end; + +var + Form2: TForm2; + +implementation + +{$R *.DFM} +{==============================================================================} +// Simple, but quite useful functions. +// Earlier version of Delphi do not support TTable.CreateBlobStream... +{ +function SaveRVFToField(rv: TCustomRichView; tbl: TTable; + const FieldName: String): Boolean; +var Stream: TStream; +begin + Stream := tbl.CreateBlobStream(tbl.FieldByName(FieldName), bmWrite); + try + Result := rv.SaveRVFToStream(Stream, False); + finally + Stream.Free; + end; +end; + +function LoadRVFFromField(rv: TCustomRichView; tbl: TTable; + const FieldName: String): Boolean; +var Stream: TStream; +begin + Stream := tbl.CreateBlobStream(tbl.FieldByName(FieldName), bmRead); + try + Result := rv.LoadRVFFromStream(Stream); + finally + Stream.Free; + end; + rv.Format; +end; +} +{==============================================================================} +// So below is alternative solution: +function SaveRVFToField(rv: TCustomRichView; tbl: TTable; + const FieldName: String): Boolean; +var Stream: TStream; +begin + Stream := TMemoryStream.Create; + try + Result := rv.SaveRVFToStream(Stream, False); + Stream.Position := 0; + TBlobField(tbl.FieldByName(FieldName)).LoadFromStream(Stream); + finally + Stream.Free; + end; +end; + +function LoadRVFFromField(rv: TCustomRichView; tbl: TTable; + const FieldName: String): Boolean; +var Stream: TStream; +begin + Stream := TMemoryStream.Create; + try + TBlobField(tbl.FieldByName(FieldName)).SaveToStream(Stream); + Stream.Position := 0; + Result := rv.LoadRVFFromStream(Stream); + finally + Stream.Free; + end; + rv.Format; +end; +{==============================================================================} +procedure TForm2.SetField(const AFieldName: String; ATable: TTable); +begin + FTable := ATable; + FFieldName := AFieldName; + Load; + Caption := FTable.FieldByName('Caption').AsString; +end; + +procedure TForm2.Load; +begin + LoadRVFFromField(RichViewEdit1, FTable, FFieldName); + Modified := False; +end; + +procedure TForm2.Save; +begin + FTable.Edit; + SaveRVFToField(RichViewEdit1, FTable, FFieldName); + FTable.Post; + Modified := False; +end; + +procedure TForm2.RichViewEdit1Change(Sender: TObject); +begin + Modified := True; +end; + +procedure TForm2.SetModified(Value: Boolean); +begin + if FModified<>Value then begin + FModified := Value; + if FModified then + Panel1.Caption := 'Modified' + else + Panel1.Caption := ''; + end; +end; + +procedure TForm2.btnPostClick(Sender: TObject); +begin + Save; +end; + +procedure TForm2.btnCancelClick(Sender: TObject); +begin + Load; +end; + +procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + if Modified then + case Application.MessageBox('Save changes?', 'Text was modified', + MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + begin + Save; + CanClose := True; + end; + IDNO: + CanClose := True; + IDCANCEL: + CanClose := False; + end; +end; + +procedure TForm2.btnCloseClick(Sender: TObject); +begin + Close; +end; + +procedure TForm2.RichViewEdit1CurTextStyleChanged(Sender: TObject); +begin + btnBold.Down := RichViewEdit1.CurTextStyleNo<>0; +end; + +procedure TForm2.btnBoldClick(Sender: TObject); +begin + // switching 1-st and 0-th styles + if btnBold.Down then + RichViewEdit1.ApplyTextStyle(1) + else + RichViewEdit1.ApplyTextStyle(0); +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/DBGridDemo.dpr b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/DBGridDemo.dpr new file mode 100644 index 0000000..d90105c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/DBGridDemo.dpr @@ -0,0 +1,15 @@ +program DBGridDemo; + +uses + Forms, + MainFrm in 'MainFrm.pas' {frmMain}, + EditFrm in 'EditFrm.pas' {frmEdit}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.CreateForm(TfrmEdit, frmEdit); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/DBGridDemo.dproj b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/DBGridDemo.dproj new file mode 100644 index 0000000..454fe20 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/DBGridDemo.dproj @@ -0,0 +1,105 @@ + + + {8473326A-40F7-4DD6-B33D-D593B3C2472A} + DBGridDemo.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + DBGridDemo.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
frmMain
+
+ +
frmEdit
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + DBGridDemo.dpr + + + False + True + False + + + D:\DB Demo\3 DBGrid\ + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/DBGridDemo.res b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/DBGridDemo.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/DBGridDemo.res differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/Database.MB b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/Database.MB new file mode 100644 index 0000000..ddd9eb0 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/Database.MB differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/Database.PX b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/Database.PX new file mode 100644 index 0000000..8d310e2 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/Database.PX differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/Database.db b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/Database.db new file mode 100644 index 0000000..0f0c88f Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/Database.db differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/EditFrm.dfm b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/EditFrm.dfm new file mode 100644 index 0000000..c0a5d28 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/EditFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/EditFrm.pas b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/EditFrm.pas new file mode 100644 index 0000000..9dc2485 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/EditFrm.pas @@ -0,0 +1,31 @@ + + +unit EditFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ExtCtrls, RVScroll, RichView, RVEdit, RVStyle; + +type + TfrmEdit = class(TForm) + RVStyle1: TRVStyle; + RichViewEdit1: TRichViewEdit; + Panel1: TPanel; + Button1: TButton; + Button2: TButton; + private + { Private declarations } + public + { Public declarations } + end; + +var + frmEdit: TfrmEdit; + +implementation + +{$R *.dfm} + +end. diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/MainFrm.dfm b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/MainFrm.dfm new file mode 100644 index 0000000..e60b78e Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/MainFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/MainFrm.pas b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/MainFrm.pas new file mode 100644 index 0000000..ef94fc1 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/DB Demo/3 DBGrid/MainFrm.pas @@ -0,0 +1,186 @@ +{*******************************************************} +{ } +{ RichView } +{ Demo: drawing RVF fields in TDBGrid } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{ + +Tested: +Delphi 2: the code is ok, but will not work on this example database because +RichView does not support loading collections of styles from RVF fields in +Delphi 2 +Delphi 3: ok, but minor glitches with drawing because of row height hack +Delphi 7: ok. + + + +} + +unit MainFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, Grids, DBGrids, DB, DBTables, RVScroll, RichView, PtblRV, RVReport, + RVStyle, StdCtrls, ExtCtrls; + +type + TfrmMain = class(TForm) + Table1: TTable; + DataSource1: TDataSource; + DBGrid1: TDBGrid; + RVReportHelper1: TRVReportHelper; + RVStyle1: TRVStyle; + Panel1: TPanel; + CheckBox1: TCheckBox; + procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; + DataCol: Integer; Column: TColumn; State: TGridDrawState); + procedure FormCreate(Sender: TObject); + procedure DBGrid1EditButtonClick(Sender: TObject); + procedure CheckBox1Click(Sender: TObject); + private + { Private declarations } + DefRowHeight: Integer; + function IsRVFField(Field: TField): Boolean; + procedure SetRowHeight; + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + + +implementation + +uses EditFrm; + +{$R *.dfm} + +procedure TfrmMain.FormCreate(Sender: TObject); +var i: Integer; +begin + // Initializing RVReportHelper's properties + RVReportHelper1.RichView.Style := RVStyle1; + RVReportHelper1.RichView.Options := RVReportHelper1.RichView.Options + [rvoTagsArePChars]; + // Allowing editing RVF fields + for i := 0 to DBGrid1.Columns.Count-1 do + if IsRVFField(DBGrid1.Columns[i].Field) then + DBGrid1.Columns[i].ButtonStyle := cbsEllipsis; + DefRowHeight := TDrawGrid(DBGrid1).DefaultRowHeight; + SetRowHeight; +end; + +procedure TfrmMain.SetRowHeight; +begin + // A hack to change DBGrid row heights. Is it possible without hacks? + TDrawGrid(DBGrid1).DefaultRowHeight := 100; + TDrawGrid(DBGrid1).RowHeights[0] := DefRowHeight; +end; + +procedure MakeSelected(rvh: TRVReportHelper); +var i: Integer; +begin + for i := 0 to rvh.RichView.Style.TextStyles.Count-1 do + rvh.RichView.Style.TextStyles[i].Color := clHighlightText; + rvh.RichView.Color := clHighlight; +end; + +// Drawing RVF field on Canvas at Rect using rvh. +procedure DrawRVFField(field: TBlobField; + Canvas: TCanvas; const Rect: TRect; rvh: TRVReportHelper; + Selected: Boolean); +var Stream: TMemoryStream; + bmp: TBitmap; +begin + try + rvh.RichView.Clear; + rvh.RichView.Color := clWindow; + Stream := TMemoryStream.Create; + try + field.SaveToStream(Stream); + Stream.Position := 0; + rvh.RichView.LoadRVFFromStream(Stream) + finally + Stream.Free; + end; + bmp := TBitmap.Create; + try + bmp.Width := Rect.Right-Rect.Left; + bmp.Height := Rect.Bottom-Rect.Top; + rvh.Init(bmp.Canvas, bmp.Width); + rvh.FormatNextPage(1000); + if Selected then + MakeSelected(rvh); + if rvh.PagesCount>0 then begin + rvh.DrawPage(1, bmp.Canvas, True, bmp.Height); + end; + Canvas.Draw(Rect.Left, Rect.Top, bmp); + finally + bmp.Free; + end; + except + end; +end; + +// Drawing DBGrid RVF cell +procedure TfrmMain.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; + DataCol: Integer; Column: TColumn; State: TGridDrawState); +begin + if IsRVFField(Column.Field) then + DrawRVFField(Column.Field as TBlobField, DBGrid1.Canvas, Rect, + RVReportHelper1, gdSelected in State); +end; + +// Editing +procedure TfrmMain.DBGrid1EditButtonClick(Sender: TObject); +var Stream: TMemoryStream; +begin + if not IsRVFField(DBGrid1.SelectedField) then + exit; + Stream := TMemoryStream.Create; + try + (DBGrid1.SelectedField as TBlobField).SaveToStream(Stream); + Stream.Position := 0; + frmEdit.RichViewEdit1.LoadRVFFromStream(Stream); + frmEdit.RichViewEdit1.Format; + finally + Stream.Free; + end; + frmEdit.ActiveControl := frmEdit.RichViewEdit1; + if frmEdit.ShowModal=mrOk then begin + Table1.Edit; + Stream := TMemoryStream.Create; + try + frmEdit.RichViewEdit1.SaveRVFToStream(Stream, False); + Stream.Position := 0; + (DBGrid1.SelectedField as TBlobField).LoadFromStream(Stream); + finally + Stream.Free; + end; + end; +end; + +// Is this field a RVF field? +function TfrmMain.IsRVFField(Field: TField): Boolean; +begin + Result := Field.FieldName='Data'; +end; + +procedure TfrmMain.CheckBox1Click(Sender: TObject); +begin + if CheckBox1.Checked then + DBGrid1.Options := DBGrid1.Options-[dgEditing] + else + DBGrid1.Options := DBGrid1.Options+[dgEditing]; + SetRowHeight; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Demos.groupproj b/12.0.4/Demos/DelphiUnicode/Demos.groupproj new file mode 100644 index 0000000..7b70446 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Demos.groupproj @@ -0,0 +1,420 @@ + + + {30AC0A42-A03F-44D1-B6F7-F13A7CC13363} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/CPFrm.dfm b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/CPFrm.dfm new file mode 100644 index 0000000..900b2f3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/CPFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/CPFrm.pas b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/CPFrm.pas new file mode 100644 index 0000000..f9bca04 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/CPFrm.pas @@ -0,0 +1,32 @@ +unit CPFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls; + +type + TfrmCP = class(TForm) + txtName: TEdit; + Label1: TLabel; + Label2: TLabel; + txtTag: TEdit; + lblStatus: TLabel; + btnCancel: TButton; + btnOk: TButton; + btnDelete: TButton; + private + { Private declarations } + public + { Public declarations } + end; + +var + frmCP: TfrmCP; + +implementation + +{$R *.DFM} + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/ListFrm.dfm b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/ListFrm.dfm new file mode 100644 index 0000000..ccf31db Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/ListFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/ListFrm.pas b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/ListFrm.pas new file mode 100644 index 0000000..7076330 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/ListFrm.pas @@ -0,0 +1,39 @@ +unit ListFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ExtCtrls; + +type + TfrmList = class(TForm) + lst: TListBox; + Bevel1: TBevel; + Button1: TButton; + procedure lstClick(Sender: TObject); + procedure FormShow(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmList: TfrmList; + +implementation + +{$R *.DFM} + +procedure TfrmList.lstClick(Sender: TObject); +begin + Button1.Enabled := lst.ItemIndex<>-1; +end; + +procedure TfrmList.FormShow(Sender: TObject); +begin + Button1.Enabled := lst.ItemIndex<>-1; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/OptionsFrm.dfm b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/OptionsFrm.dfm new file mode 100644 index 0000000..92e9d5d Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/OptionsFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/OptionsFrm.pas b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/OptionsFrm.pas new file mode 100644 index 0000000..1727593 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/OptionsFrm.pas @@ -0,0 +1,136 @@ +unit OptionsFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ComCtrls, RVStyle; + +type + TfrmOptions = class(TForm) + btnOk: TButton; + btnCancel: TButton; + PageControl1: TPageControl; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + GroupBox1: TGroupBox; + cbRVFSaveBackground: TCheckBox; + cbRVFSaveLayout: TCheckBox; + cbRVFBinary: TCheckBox; + cbRVFSavePictures: TCheckBox; + cbRVFSaveControls: TCheckBox; + GroupBox2: TGroupBox; + cbRVFLoadBackground: TCheckBox; + cbRVFLoadLayout: TCheckBox; + cbRVFIgnoreUnknownPictures: TCheckBox; + cbRVFIgnoreUnknownControls: TCheckBox; + cbRVFInvStyles: TCheckBox; + cbRVFInvImageIndices: TCheckBox; + TabSheet3: TTabSheet; + GroupBox3: TGroupBox; + cbHTMLOverrideImages: TCheckBox; + cbHTMLListAsTest: TCheckBox; + cbHTMLForceNonTextCSS: TCheckBox; + cbHTMLDefault0Style: TCheckBox; + cbHTMLSaveImageSizes: TCheckBox; + cbHTMLNoHypertextImageBorders: TCheckBox; + cbHTMLUseCheckpointsNames: TCheckBox; + txtHTMLTitle: TEdit; + Label1: TLabel; + cbRVFSaveTextStyles: TCheckBox; + cbRVFSaveParaStyles: TCheckBox; + private + { Private declarations } + public + { Public declarations } + procedure SetOptions(RVFOptions: TRVFOptions; HTMLOptions: TRVSaveOptions; + const HTMLTitle: String); + procedure GetOptions(var RVFOptions: TRVFOptions; var HTMLOptions: TRVSaveOptions; + var HTMLTitle: String); + end; + +var + frmOptions: TfrmOptions; + +implementation + +{$R *.dfm} + +{ TfrmOptions } + +procedure TfrmOptions.GetOptions(var RVFOptions: TRVFOptions; + var HTMLOptions: TRVSaveOptions; var HTMLTitle: String); + {..........................................................} + procedure SetRVFOption(Value: Boolean; Option: TRVFOption); + begin + if Value then + RVFOptions := RVFOptions + [Option] + else + RVFOptions := RVFOptions - [Option]; + end; + {..........................................................} + procedure SetHTMLOption(Value: Boolean; Option: TRVSaveOption); + begin + if Value then + HTMLOptions := HTMLOptions + [Option] + else + HTMLOptions := HTMLOptions - [Option]; + end; + {..........................................................} +begin + RVFOptions := []; + HTMLOptions := []; + SetRVFOption(cbRVFSaveBackground.Checked, rvfoSaveBack); + SetRVFOption(cbRVFSaveLayout.Checked, rvfoSaveLayout); + SetRVFOption(cbRVFBinary.Checked, rvfoSaveBinary); + SetRVFOption(cbRVFSavePictures.Checked, rvfoSavePicturesBody); + SetRVFOption(cbRVFSaveControls.Checked, rvfoSaveControlsBody); + SetRVFOption(cbRVFLoadBackground.Checked, rvfoLoadBack); + SetRVFOption(cbRVFLoadLayout.Checked, rvfoLoadLayout); + SetRVFOption(cbRVFIgnoreUnknownPictures.Checked , rvfoIgnoreUnknownPicFmt); + SetRVFOption(cbRVFIgnoreUnknownControls.Checked , rvfoIgnoreUnknownCtrls); + SetRVFOption(cbRVFInvStyles.Checked, rvfoConvUnknownStylesToZero); + SetRVFOption(cbRVFInvImageIndices.Checked, rvfoConvLargeImageIdxToZero); + SetRVFOption(cbRVFSaveTextStyles.Checked, rvfoSaveTextStyles); + SetRVFOption(cbRVFSaveParaStyles.Checked, rvfoSaveParaStyles); + + SetHTMLOption(cbHTMLOverrideImages.Checked, rvsoOverrideImages); + SetHTMLOption(cbHTMLListAsTest.Checked, rvsoMarkersAsText); + SetHTMLOption(cbHTMLForceNonTextCSS.Checked, rvsoForceNonTextCSS); + SetHTMLOption(cbHTMLDefault0Style.Checked, rvsoDefault0Style); + SetHTMLOption(cbHTMLSaveImageSizes.Checked, rvsoImageSizes); + SetHTMLOption(cbHTMLNoHypertextImageBorders.Checked, rvsoNoHypertextImageBorders); + SetHTMLOption(cbHTMLUseCheckpointsNames.Checked, rvsoUseCheckpointsNames); + + HTMLTitle := txtHTMLTitle.Text; +end; +{------------------------------------------------------------------------------} +procedure TfrmOptions.SetOptions(RVFOptions: TRVFOptions; + HTMLOptions: TRVSaveOptions; const HTMLTitle: String); +begin + cbRVFSaveBackground.Checked := rvfoSaveBack in RVFOptions; + cbRVFSaveLayout.Checked := rvfoSaveLayout in RVFOptions; + cbRVFBinary.Checked := rvfoSaveBinary in RVFOptions; + cbRVFSavePictures.Checked := rvfoSavePicturesBody in RVFOptions; + cbRVFSaveControls.Checked := rvfoSaveControlsBody in RVFOptions; + cbRVFLoadBackground.Checked := rvfoLoadBack in RVFOptions; + cbRVFLoadLayout.Checked := rvfoLoadLayout in RVFOptions; + cbRVFIgnoreUnknownPictures.Checked := rvfoIgnoreUnknownPicFmt in RVFOptions; + cbRVFIgnoreUnknownControls.Checked := rvfoIgnoreUnknownCtrls in RVFOptions; + cbRVFInvStyles.Checked := rvfoConvUnknownStylesToZero in RVFOptions; + cbRVFInvImageIndices.Checked := rvfoConvLargeImageIdxToZero in RVFOptions; + cbRVFSaveTextStyles.Checked := rvfoSaveTextStyles in RVFOptions; + cbRVFSaveParaStyles.Checked := rvfoSaveParaStyles in RVFOptions; + + cbHTMLOverrideImages.Checked := rvsoOverrideImages in HTMLOptions; + cbHTMLListAsTest.Checked := rvsoMarkersAsText in HTMLOptions; + cbHTMLForceNonTextCSS.Checked := rvsoForceNonTextCSS in HTMLOptions; + cbHTMLDefault0Style.Checked := rvsoDefault0Style in HTMLOptions; + cbHTMLSaveImageSizes.Checked := rvsoImageSizes in HTMLOptions; + cbHTMLNoHypertextImageBorders.Checked := rvsoNoHypertextImageBorders in HTMLOptions; + cbHTMLUseCheckpointsNames.Checked := rvsoUseCheckpointsNames in HTMLOptions; + + txtHTMLTitle.Text := HTMLTitle; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PreviewFrm.dfm b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PreviewFrm.dfm new file mode 100644 index 0000000..9ede797 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PreviewFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PreviewFrm.pas b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PreviewFrm.pas new file mode 100644 index 0000000..218d885 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PreviewFrm.pas @@ -0,0 +1,106 @@ +unit PreviewFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVScroll, CRVPP, RVPP, ExtCtrls; + +type + TfrmPreview = class(TForm) + Panel1: TPanel; + rvpp: TRVPrintPreview; + cmb: TComboBox; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + Label1: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure cmbExit(Sender: TObject); + procedure cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvppZoomChanged(Sender: TObject); + private + { Private declarations } + procedure UpdateZoom; + public + { Public declarations } + end; + +var + frmPreview: TfrmPreview; + +implementation + +{$R *.DFM} +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button1Click(Sender: TObject); +begin + rvpp.First; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button2Click(Sender: TObject); +begin + rvpp.Prev; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button3Click(Sender: TObject); +begin + rvpp.Next; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button4Click(Sender: TObject); +begin + rvpp.Last; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbExit(Sender: TObject); +begin + UpdateZoom; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_RETURN then begin + UpdateZoom; + Key := 0; + end; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.UpdateZoom; +var s: String; + zoom: Integer; +begin + s := Trim(cmb.Text); + if s='Page width' then begin + rvpp.ZoomMode := rvzmPageWidth; + exit; + end; + if s='Full page' then begin + rvpp.ZoomMode := rvzmFullPage; + exit; + end; + if (s<>'') and (s[Length(s)]='%') then + s := Copy(s,1,Length(s)-1); + zoom := StrToIntDef(s,0); + if (zoom<10) or (zoom>500) then + Application.MessageBox('Please enter number from 10 to 500','Scale',MB_OK or MB_ICONSTOP) + else + rvpp.SetZoom(zoom); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.rvppZoomChanged(Sender: TObject); +begin + cmb.Text := IntToStr(rvpp.ZoomPercent)+'%'; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PropFrm.dfm b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PropFrm.dfm new file mode 100644 index 0000000..1aef5c9 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PropFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PropFrm.pas b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PropFrm.pas new file mode 100644 index 0000000..86f1f0f --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/PropFrm.pas @@ -0,0 +1,67 @@ +unit PropFrm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ComCtrls, StdCtrls, ExtCtrls; +type + TfrmProp = class(TForm) + PageControl1: TPageControl; + tsBullet: TTabSheet; + tsHotSpot: TTabSheet; + btnOk: TButton; + btnCancel: TButton; + Label1: TLabel; + txtTag: TEdit; + rgBullet: TRadioGroup; + tsPicture: TTabSheet; + rgHotSpot: TRadioGroup; + Label3: TLabel; + txtName: TEdit; + Image1: TImage; + btnChangePicture: TButton; + tsText: TTabSheet; + lblText: TLabel; + tsComponent: TTabSheet; + lblComponent: TLabel; + txtWidth: TEdit; + Label2: TLabel; + txtHeight: TEdit; + Label4: TLabel; + rgPicVAlign: TRadioGroup; + rgCtrlVAlign: TRadioGroup; + tsBreak: TTabSheet; + txtBreakWidth: TEdit; + Label5: TLabel; + rgBreakColor: TRadioGroup; + rgBreakStyle: TRadioGroup; + procedure btnChangePictureClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmProp: TfrmProp; + +implementation +uses Unit1; + +{$R *.DFM} + +procedure TfrmProp.btnChangePictureClick(Sender: TObject); +begin + Form1.OpenDialog1.Title := 'Changing Image'; + {$IFDEF RICHVIEWDEF3} + Form1.OpenDialog1.Filter := 'Graphics(*.bmp;*.wmf;*.ico;*.jpg)|*.bmp;*.wmf;*.ico;*.jpg|All(*.*)|*.*'; + {$ELSE} + Form1.OpenDialog1.Filter := 'Graphics(*.bmp;*.wmf;*.ico)|*.bmp;*.wmf;*.ico|All(*.*)|*.*'; + {$ENDIF} + if Form1.OpenDialog1.Execute then + Image1.Picture.LoadFromFile(Form1.OpenDialog1.FileName); +end; + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVEditDemo.dpr b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVEditDemo.dpr new file mode 100644 index 0000000..dd3a4ea --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVEditDemo.dpr @@ -0,0 +1,25 @@ +program RVEditDemo; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + CPFrm in 'CPFrm.pas' {frmCP}, + PropFrm in 'PropFrm.pas' {frmProp}, + ListFrm in 'ListFrm.pas' {frmList}, + PreviewFrm in 'PreviewFrm.pas' {frmPreview}, + RVUndoStr in 'RVUndoStr.pas', + OptionsFrm in 'OptionsFrm.pas' {frmOptions}; + +{$R *.RES} + +begin + Application.Initialize; + Application.Title := 'RichViewEdit Demo'; + Application.CreateForm(TForm1, Form1); + Application.CreateForm(TfrmCP, frmCP); + Application.CreateForm(TfrmProp, frmProp); + Application.CreateForm(TfrmList, frmList); + Application.CreateForm(TfrmPreview, frmPreview); + Application.CreateForm(TfrmOptions, frmOptions); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVEditDemo.dproj b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVEditDemo.dproj new file mode 100644 index 0000000..c252a6e --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVEditDemo.dproj @@ -0,0 +1,117 @@ + + + {0F155AA7-C9AC-43A9-A6AB-137E72B2277B} + RVEditDemo.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + RVEditDemo.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + false + true + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ +
frmCP
+
+ +
frmProp
+
+ +
frmList
+
+ +
frmPreview
+
+ + +
frmOptions
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + RVEditDemo.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVEditDemo.res b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVEditDemo.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVEditDemo.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVUndoStr.pas b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVUndoStr.pas new file mode 100644 index 0000000..2968a90 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/RVUndoStr.pas @@ -0,0 +1,20 @@ +unit RVUndoStr; + +interface +uses RVEdit; + +const RVUndoTypeNamesEn : array [TRVUndoType] of String = + + ( + '', // <- no undo + 'removing', 'inserting', 'paragraph modification', + 'editing', 'page break', 'removing page break', + 'typing', 'tag modification', 'changing text style', + 'inserting checkpoint', 'removing checkpoint', + 'editing checkpoint','modifying', 'bullets', + '' // <- use custom undo name instead + ); + +implementation + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/Readme.rvf b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/Readme.rvf new file mode 100644 index 0000000..0f4e897 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/Readme.rvf differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/Unit1.dfm new file mode 100644 index 0000000..c82aeb3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/Unit1.pas new file mode 100644 index 0000000..fba540f --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/Unit1.pas @@ -0,0 +1,1604 @@ + +{*******************************************************} +{ } +{ RichView } +{ Editor Demo. } +{ RichView components. } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{ + This demo uses a predefined set of styles. + This demo shows how to implement: + - "Edit" menu (Clipboard and Undo); + - "Search" command; + - checkpoints; + - print preview; + - inserting document or image; + - inserting some controls; + - working with TOleContainer; + - working with table; + - changing background properties and other options. + It does not implement: + - commands like "make bold" or "apply font"; + - standard "File" commands (Open, Save, SaveAs. + (see Editor 2 demo for these features) +} + +unit Unit1; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, RVEdit, PtblRV, RVMisc, CtrlImg, RVUndoStr, RVUni, + jpeg, ImgList, + Clipbrd, StdCtrls, ExtCtrls, ComCtrls, Menus, OleCtnrs, + RVTable, Buttons, CRVData, CRVFData, RVERVData, RVItem, RVFuncs, RVTypes; + +type + TForm1 = class(TForm) + RichViewEdit1: TRichViewEdit; + StatusBar1: TStatusBar; + MainMenu1: TMainMenu; + mpdInsert: TMenuItem; + mitPicture: TMenuItem; + mpdComponent: TMenuItem; + mitButtonComp: TMenuItem; + mitEditBoxComp: TMenuItem; + mitBreak: TMenuItem; + OpenDialog1: TOpenDialog; + Panel1: TPanel; + cmbText: TComboBox; + cmbPara: TComboBox; + mpdFile: TMenuItem; + N1: TMenuItem; + mitExit: TMenuItem; + mpdBullet: TMenuItem; + mitHelpIcon: TMenuItem; + mitHelpSearchIcon: TMenuItem; + mitPropertiesIcon: TMenuItem; + mitSave: TMenuItem; + SaveDialog1: TSaveDialog; + N2: TMenuItem; + mitClear: TMenuItem; + mpdEdit: TMenuItem; + mitCopy: TMenuItem; + mitPaste: TMenuItem; + mitCut: TMenuItem; + mitDelete: TMenuItem; + PasteAs1: TMenuItem; + mitPasteAsText: TMenuItem; + mitPasteAsMetafile: TMenuItem; + mitPasteAsBitmap: TMenuItem; + mitPasteAsRVF: TMenuItem; + N3: TMenuItem; + mitEditCheckpoint: TMenuItem; + mitEditProps: TMenuItem; + PopupMenu1: TPopupMenu; + mitEditProp1: TMenuItem; + mitEditCheckpoint1: TMenuItem; + mpdHotspot: TMenuItem; + mitAddImageHS: TMenuItem; + mitAddTextHS: TMenuItem; + mitSelectAll: TMenuItem; + mpdMisc: TMenuItem; + N4: TMenuItem; + mitPrint: TMenuItem; + FindDialog1: TFindDialog; + N6: TMenuItem; + + mitSearch: TMenuItem; + mitPasteAsOle: TMenuItem; + N8: TMenuItem; + mitPreview: TMenuItem; + mitSelectCurrentWord: TMenuItem; + RVPrint1: TRVPrint; + mpdBackground: TMenuItem; + mitBackNoBitmap: TMenuItem; + mitBackStretched: TMenuItem; + mitBackTiled: TMenuItem; + mitBackTiledandScrolled: TMenuItem; + mitBackCentered: TMenuItem; + N5: TMenuItem; + mitCheckpointList: TMenuItem; + N9: TMenuItem; + mitRemovePageBreak: TMenuItem; + mitInsertPageBreak: TMenuItem; + N10: TMenuItem; + mitUndo: TMenuItem; + mitRedo: TMenuItem; + mitInsertFile: TMenuItem; + mitPasteAsUnicodeText: TMenuItem; + mitLoad: TMenuItem; + mpdTable: TMenuItem; + mitInserttable1: TMenuItem; + mitInsertTable2: TMenuItem; + N7: TMenuItem; + mitMergeCells: TMenuItem; + N13: TMenuItem; + mitUmRows: TMenuItem; + mitUmCols: TMenuItem; + mitUmRowsandCols: TMenuItem; + Insert1: TMenuItem; + mitRowsAbove: TMenuItem; + mitRowsBelow: TMenuItem; + N14: TMenuItem; + mitColsLeft: TMenuItem; + mitColsRight: TMenuItem; + Delete1: TMenuItem; + mitDelRows: TMenuItem; + mitDelColumns: TMenuItem; + Unmerge1: TMenuItem; + Split1: TMenuItem; + mitSplitVertically: TMenuItem; + mitSplitHorizontally: TMenuItem; + mitInsertTable3: TMenuItem; + mitInsertTable4: TMenuItem; + psd: TPrinterSetupDialog; + mitPasteAsRTF: TMenuItem; + RVStyle1: TRVStyle; + N11: TMenuItem; + mitReadOnly: TMenuItem; + N12: TMenuItem; + mitOptions: TMenuItem; + mpdLists: TMenuItem; + mitApplyList: TMenuItem; + mitRemoveLists: TMenuItem; + il: TImageList; + mitBackTopLeft: TMenuItem; + mitBackTopRight: TMenuItem; + mitBackBottomLeft: TMenuItem; + mitBackBottomRight: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure mitPictureClick(Sender: TObject); + procedure mitButtonCompClick(Sender: TObject); + procedure mitEditBoxCompClick(Sender: TObject); + procedure RichViewEdit1CurParaStyleChanged(Sender: TObject); + procedure RichViewEdit1CurTextStyleChanged(Sender: TObject); + procedure cmbParaClick(Sender: TObject); + procedure cmbTextClick(Sender: TObject); + procedure mitBreakClick(Sender: TObject); + procedure mitExitClick(Sender: TObject); + procedure mitInsertBulletClick(Sender: TObject); + procedure mitSaveClick(Sender: TObject); + procedure mitClearClick(Sender: TObject); + procedure mpdEditClick(Sender: TObject); + procedure RichViewEdit1Select(Sender: TObject); + procedure mitPasteAsBitmapClick(Sender: TObject); + procedure mitPasteAsMetafileClick(Sender: TObject); + procedure mitPasteAsTextClick(Sender: TObject); + procedure mitPasteClick(Sender: TObject); + procedure mitDeleteClick(Sender: TObject); + procedure mitCutClick(Sender: TObject); + procedure mitCopyClick(Sender: TObject); + procedure mitEditCheckpointClick(Sender: TObject); + procedure mitAddHSClick(Sender: TObject); + procedure mitSelectAllClick(Sender: TObject); + procedure mitEditPropsClick(Sender: TObject); + procedure mitPrintClick(Sender: TObject); + procedure RichViewEdit1RVFPictureNeeded(Sender: TCustomRichView; Name: String; Tag: Integer; + var gr: TGraphic); + procedure RichViewEdit1RVFControlNeeded(Sender: TCustomRichView; Name: String; Tag: Integer; + var ctrl: TControl); + procedure RichViewEdit1RVFImageListNeeded(Sender: TCustomRichView; ImageListTag: Integer; + var il: TCustomImageList); + procedure mitSearchClick(Sender: TObject); + procedure FindDialog1Find(Sender: TObject); + procedure mitCheckPointListClick(Sender: TObject); + procedure mitPasteAsRVFClick(Sender: TObject); + procedure mitPasteAsOleClick(Sender: TObject); + procedure PopupMenu1Popup(Sender: TObject); + procedure mitPreviewClick(Sender: TObject); + procedure mitBackClick(Sender: TObject); + procedure RichViewEdit1SaveComponentToFile(Sender: TCustomRichView; + Path: String; SaveMe: TPersistent; SaveFormat: TRVSaveFormat; + var OutStr: String); + procedure mitSelectCurrentWordClick(Sender: TObject); + procedure RichViewEdit1Jump(Sender: TObject; id: Integer); + procedure RichViewEdit1Change(Sender: TObject); + procedure mpdBackgroundClick(Sender: TObject); + procedure mitInsertPageBreakClick(Sender: TObject); + procedure mitRemovePageBreakClick(Sender: TObject); + procedure mitUndoClick(Sender: TObject); + procedure mitRedoClick(Sender: TObject); + procedure mitInsertFileClick(Sender: TObject); + procedure mitPasteAsUnicodeTextClick(Sender: TObject); + procedure mitLoadClick(Sender: TObject); + procedure mitInserttable1Click(Sender: TObject); + procedure mitInsertTable2Click(Sender: TObject); + procedure mitCellsOperationClick(Sender: TObject); + procedure mpdTableClick(Sender: TObject); + procedure mitInsertTable3Click(Sender: TObject); + procedure mitInsertTable4Click(Sender: TObject); + procedure RichViewEdit1RVMouseMove(Sender: TObject; id: Integer); + procedure mitPasteAsRTFClick(Sender: TObject); + procedure mitReadOnlyClick(Sender: TObject); + procedure mitOptionsClick(Sender: TObject); + procedure mitApplyListClick(Sender: TObject); + procedure mitRemoveListsClick(Sender: TObject); + procedure RichViewEdit1Click(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure RichViewEdit1ControlAction(Sender: TCustomRichView; + ControlAction: TRVControlAction; ItemNo: Integer; + var ctrl: TControl); + procedure RichViewEdit1WriteHyperlink(Sender: TCustomRichView; + id: Integer; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; var Target, Extras: string); + private + { Private declarations } + ActiveOleContainer: TOleContainer; + HTMLSaveOptions: TRVSaveOptions; + HTMLTitle: String; + procedure OnOleResize(Sender: TObject); + procedure OnOleActivate(Sender: TObject); + procedure OnOleDeactivate(Sender: TObject); + procedure OnControlClick(Sender: TObject); + procedure WMDisplayChange(var Message: TMessage{TWMDisplayChange}); message WM_DISPLAYCHANGE; + procedure UpdateUndoMenu; + procedure DisplayUnicodeWarning; + function GetUnicodeFontName: String; + function GetRVFErrors: String; + procedure FillStyleCombo(Styles: TCustomRVInfos; cmb: TComboBox); + procedure CloseOleContainer; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +uses CPFrm, PropFrm, ListFrm, PreviewFrm, OptionsFrm; + +{$R *.DFM} + +{ This demo uses conditional defines from RV_Defs.inc (see include + directive at the beginnning of this file) + RICHVIEWDEF3 is defined, if there is Delphi3 or later or C++Builder 3 or later + RICHVIEWDEF4 is defined, if there is Delphi4 or later +} + +procedure TForm1.FormCreate(Sender: TObject); +begin + Randomize; + + HTMLSaveOptions := [rvsoImageSizes,rvsoUseCheckpointsNames]; + HTMLTitle := 'Demo File'; + + RVStyle1.TextStyles[11].FontName := GetUnicodeFontName; + + RVStyle1.ListStyles[0].Levels[0].Font.Charset := SYMBOL_CHARSET; + + // Item can have associated "tags" - integers or strings. + // Comment the next line to use integer tags + RichViewEdit1.Options := RichViewEdit1.Options+[rvoTagsArePChars]; + + // Loading the initial file. + RichViewEdit1.LoadRVF(ExtractFilePath(Application.ExeName)+'Readme.rvf'); + FillStyleCombo(RVStyle1.ParaStyles, cmbPara); + FillStyleCombo(RVStyle1.TextStyles, cmbText); + RichViewEdit1.Format; + cmbPara.ItemIndex := RichViewEdit1.CurParaStyleNo; + cmbText.ItemIndex := RichViewEdit1.CurTextStyleNo; + UpdateUndoMenu; +end; +{ Returning available Unicode-enabled font ---------------------------} +function TForm1.GetUnicodeFontName: String; +begin + if Screen.Fonts.IndexOf('Arial Unicode MS')>=0 then + Result := 'Arial Unicode MS' + else if Screen.Fonts.IndexOf('Lucida Sans Unicode')>=0 then + Result := 'Lucida Sans Unicode' + else + Result := 'Arial'; +end; +{ Filling combobox with standard styles ------------------------------} +procedure TForm1.FillStyleCombo(Styles: TCustomRVInfos; cmb: TComboBox); +var i: Integer; +begin + { The simplest way to fill the combo box with style names is: + cmb.Items.Assign(Styles); + But this code will fill the combo box with all styles - + both standard styles (i.e. real styles) and non-standard styles will be + added in it. + So we'll fill in the combo box manually. + For simplification, we'll add only the first standard styles } + cmb.Items.BeginUpdate; + cmb.Items.Clear; + for i := 0 to Styles.Count-1 do begin + if not TCustomRVInfo(Styles.Items[i]).Standard then + break; + cmb.Items.Add(TCustomRVInfo(Styles.Items[i]).StyleName); + end; + cmb.Items.EndUpdate; +end; +{---------------------------------------------------------------------} +procedure TForm1.UpdateUndoMenu; +var UndoType : TRVUndoType; +begin + UndoType := RichViewEdit1.UndoAction; + mitUndo.Enabled := UndoType<>rvutNone; + if UndoType=rvutCustom then + mitUndo.Caption := 'Undo '+RichViewEdit1.UndoName + else + mitUndo.Caption := 'Undo '+RVUndoTypeNamesEn[UndoType]; + + UndoType := RichViewEdit1.RedoAction; + mitRedo.Enabled := UndoType<>rvutNone; + if UndoType=rvutCustom then + mitRedo.Caption := 'Redo '+RichViewEdit1.RedoName + else + mitRedo.Caption := 'Redo '+RVUndoTypeNamesEn[UndoType]; +end; +{---------------------------------------------------------------------} +procedure TForm1.DisplayUnicodeWarning; +var wasclear: Boolean; +begin + wasclear := RichViewEdit1.ItemCount=0; + // This method is called before loading Unicode + // (when inserting Unicode, editor automatically switches to Unicode style, + // according to RVStyle1.DefUnicodeStyle, if necessary) + if not RVStyle1.TextStyles[RichViewEdit1.CurTextStyleNo].Unicode then + Application.MessageBox('Loading/Inserting Unicode data using non-Unicode text style.'#13+ + 'Text will be converted.'#13+ + 'Choose "Unicode" style in combo to use Unicode text style', + 'Warning', MB_OK or MB_ICONEXCLAMATION); + if wasclear then + RichViewEdit1.Clear; +end; +{======================================================================} +{ Font and paragraph combos } +{======================================================================} +procedure TForm1.RichViewEdit1CurParaStyleChanged(Sender: TObject); +begin + if RichViewEdit1.CurParaStyleNo'' then + Result := #13'('+Result+')'; +end; +{ File|Save... --------------------------------------------------------} +procedure TForm1.mitSaveClick(Sender: TObject); + var r: Boolean; +begin + SaveDialog1.Title := 'Save & Export'; + SaveDialog1.Filter := 'RichView Format files(*.rvf)|*.rvf|'+ + 'RTF Files (*.rtf)|*.rtf|'+ + 'Text (*.txt)|*.txt|'+ + 'Unicode Text (*.txt)|*.txt|'+ + 'HTML - with CSS (*.htm;*.html)|*.htm;*.html|'+ + 'HTML - Simplified (*.htm;*.html)|*.htm;*.html'; + SaveDialog1.DefaultExt := 'rvf'; + if SaveDialog1.Execute then begin + Screen.Cursor := crHourglass; + case SaveDialog1.FilterIndex of + 1: // RVF + r := RichViewEdit1.SaveRVF(SaveDialog1.FileName, False); + 2: // RTF + r := RichViewEdit1.SaveRTF(SaveDialog1.FileName, False); + 3: // ANSI Text (byte per character) + r := RichViewEdit1.SaveText(SaveDialog1.FileName, 80); + 4: // Unicode Text (2 bytes per character) + r := RichViewEdit1.SaveTextW(SaveDialog1.FileName, 80); + 5: // HTML with CSS + r := RichViewEdit1.SaveHTMLEx(SaveDialog1.FileName, HTMLTitle,'img', '', + '', '', HTMLSaveOptions); + 6: // HTML + r := RichViewEdit1.SaveHTML(SaveDialog1.FileName, HTMLTitle,'img', + HTMLSaveOptions); + else + r := False; + end; + Screen.Cursor := crDefault; + if not r then + Application.MessageBox('Error during saving', 'Error', 0); + end; +end; +{ File|Options... --------------------------------------------------------} +procedure TForm1.mitOptionsClick(Sender: TObject); +var RVFOptions : TRVFOptions; +begin + frmOptions.SetOptions(RichViewEdit1.RVFOptions, HTMLSaveOptions, HTMLTitle); + if frmOptions.ShowModal=mrOk then begin + frmOptions.GetOptions(RVFOptions, HTMLSaveOptions, HTMLTitle); + RichViewEdit1.RVFOptions := RVFOptions; + end; +end; +{ Event: saving controls in HTML --------------------------------------} +// Note: not all browsers support tags outside
tags +procedure TForm1.RichViewEdit1SaveComponentToFile(Sender: TCustomRichView; + Path: String; SaveMe: TPersistent; SaveFormat: TRVSaveFormat; + var OutStr: String); +begin + case SaveFormat of + rvsfText: + begin + OutStr := '('+SaveMe.ClassName+')'; + end; + rvsfHTML: + begin + if SaveMe is TButton then begin + OutStr := ''; + exit; + end; + if SaveMe is TEdit then begin + OutStr := ''; + exit; + end; + end; + rvsfRTF: + begin + OutStr := '{\plain\b ('+SaveMe.ClassName+')}'; + end; + end; +end; +{ Event: saving URLs in HTML and RTF ---------------------------------} +procedure TForm1.RichViewEdit1WriteHyperlink(Sender: TCustomRichView; + id: Integer; RVData: TCustomRVData; ItemNo: Integer; + SaveFormat: TRVSaveFormat; var Target, Extras: string); +begin + if not (rvoTagsArePChars in Sender.Options) then + exit; + Target := PChar(RVData.GetItemTag(ItemNo)); +end; +{ File|Clear ----------------------------------------------------------} +procedure TForm1.mitClearClick(Sender: TObject); +begin + CloseOleContainer; + RichViewEdit1.Clear; + RichViewEdit1.Format; + cmbPara.ItemIndex := RichViewEdit1.CurParaStyleNo; + cmbText.ItemIndex := RichViewEdit1.CurTextStyleNo; + UpdateUndoMenu; +end; +{ File|Print Preview --------------------------------------------------} +procedure TForm1.mitPreviewClick(Sender: TObject); +begin + RVPrint1.AssignSource(RichViewEdit1); + RVPrint1.FormatPages(rvdoALL); + if RVPrint1.PagesCount>0 then begin + frmPreview.rvpp.RVPrint := RVPrint1; + frmPreview.Button1Click(nil); // Show First Page + frmPreview.ShowModal; + end; +end; +{ File|Print on Default Printer ---------------------------------------} +procedure TForm1.mitPrintClick(Sender: TObject); +var PrintIt: Boolean; +begin + {$IFDEF RICHVIEWDEF3} + PrintIt := psd.Execute; + {$ELSE} + PrintIt := True; + {$ENDIF} + if PrintIt then begin + RVPrint1.AssignSource(RichViewEdit1); + RVPrint1.FormatPages(rvdoALL); + if RVPrint1.PagesCount>0 then + RVPrint1.Print('RichView Edit Demo',1,False); + end; +end; +{ File|Exit -----------------------------------------------------------} +procedure TForm1.mitExitClick(Sender: TObject); +begin + Close; +end; +{======================================================================} +{ Main menu: "Insert" } +{======================================================================} +{ Insert|File... ------------------------------------------------------} +procedure TForm1.mitInsertFileClick(Sender: TObject); +var r: Boolean; +begin + OpenDialog1.Title := 'Inserting File'; + OpenDialog1.Filter := 'RichView Format Files(*.rvf)|*.rvf|'+ + 'RTF Files(*.rtf)|*.rtf|'+ + 'Text Files - autodetect (*.txt)|*.txt|'+ + 'ANSI Text Files (*.txt)|*.txt|'+ + 'Unicode Text Files (*.txt)|*.txt|'+ + 'OEM Text Files (*.txt)|*.txt'; + if OpenDialog1.Execute then begin + Screen.Cursor := crHourglass; + case OpenDialog1.FilterIndex of + 1: // RVF + r := RichViewEdit1.InsertRVFFromFileEd(OpenDialog1.FileName); + 2: // RTF + r := RichViewEdit1.InsertRTFFromFileEd(OpenDialog1.FileName); + 3: // Text + begin + if RV_TestFileUnicode(OpenDialog1.FileName)=rvutYes then + r := RichViewEdit1.InsertTextFromFileW(OpenDialog1.FileName) + else + r := RichViewEdit1.InsertTextFromFile(OpenDialog1.FileName); + end; + 4: // ANSI Text + r := RichViewEdit1.InsertTextFromFile(OpenDialog1.FileName); + 5: // Unicode Text + r := RichViewEdit1.InsertTextFromFileW(OpenDialog1.FileName); + 6: // OEM Text + r := RichViewEdit1.InsertOEMTextFromFile(OpenDialog1.FileName); + else + r := False; + end; + Screen.Cursor := crDefault; + if not r then + Application.MessageBox('Error reading file', 'Error', + MB_OK or MB_ICONSTOP); + end; +end; +{ Insert|Picture... ---------------------------------------------------} +procedure TForm1.mitPictureClick(Sender: TObject); +var gr: TGraphic; + pic: TPicture; +begin + OpenDialog1.Title := 'Inserting Image'; + {$IFDEF RICHVIEWDEF3} + OpenDialog1.Filter := 'Graphics(*.bmp;*.wmf;*.emf;*.ico;*.jpg)|*.bmp;*.wmf;*.emf;*.ico;*.jpg|All(*.*)|*.*'; + {$ELSE} + OpenDialog1.Filter := 'Graphics(*.bmp;*.wmf;*.emf;*.ico)|*.bmp;*.wmf;*.emf;*.ico|All(*.*)|*.*'; + {$ENDIF} + if OpenDialog1.Execute then + try + pic := TPicture.Create; + try + pic.LoadFromFile(OpenDialog1.FileName); + gr := RV_CreateGraphics(TGraphicClass(pic.Graphic.ClassType)); + gr.Assign(pic.Graphic); + finally + pic.Free; + end; + if gr<>nil then + RichViewEdit1.InsertPicture('',gr,rvvaBaseLine); + except + Application.MessageBox(PChar('Cannot read picture from file '+OpenDialog1.FileName), 'Error', + MB_OK or MB_ICONSTOP); + end; +end; +{ Event: clicking inserted control ------------------------------------} +procedure TForm1.OnControlClick(Sender: TObject); +begin + RichViewEdit1.SelectControl(TControl(Sender)); +end; +{ Insert|Component|Button ---------------------------------------------} +procedure TForm1.mitButtonCompClick(Sender: TObject); +var btn: TButton; +const Captions: array[0..9] of String = + ( + 'Help','Exit','Cancel','Ok','Close','Run','Options...','Minimize', + 'Hide','Show' + ); +begin + btn := TButton.Create(Self); + btn.Caption := Captions[Random(10)]; + btn.OnClick := OnControlClick; + RichViewEdit1.InsertControl('',btn,rvvaBaseline); + if RichViewEdit1.CurItemStyle=rvsComponent then + RichViewEdit1.SetCurrentItemExtraIntProperty(rvepResizable, 1, True); +end; +{ Insert|Component|Edit Box -------------------------------------------} +procedure TForm1.mitEditBoxCompClick(Sender: TObject); +var edt: TEdit; +const Captions: array[0..9] of String = + ( + '0','Hello','1','$0','2x2=4','enter text here','xnil then begin + ActiveOleContainer.Close; + ActiveOleContainer := nil; + end; +end; +{-----------------------------------------------------------------------} +procedure TForm1.OnOleResize(Sender: TObject); +begin + RichViewEdit1.AdjustControlPlacement2(TControl(Sender)); +end; +{-----------------------------------------------------------------------} +procedure TForm1.OnOleActivate(Sender: TObject); +begin + if ActiveOleContainer<>Sender then + CloseOleContainer; + ActiveOleContainer := TOleContainer(Sender); + RichViewEdit1.AdjustControlPlacement2(TControl(Sender)); +end; +{-----------------------------------------------------------------------} +procedure TForm1.OnOleDeactivate(Sender: TObject); +begin + RichViewEdit1.AdjustControlPlacement2(TControl(Sender)); +end; +{-----------------------------------------------------------------------} +procedure TForm1.RichViewEdit1Click(Sender: TObject); +begin + CloseOleContainer; +end; +{-----------------------------------------------------------------------} +procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); +begin + CloseOleContainer; +end; +{-----------------------------------------------------------------------} +procedure TForm1.RichViewEdit1ControlAction(Sender: TCustomRichView; + ControlAction: TRVControlAction; ItemNo: Integer; var ctrl: TControl); +begin + if ControlAction=rvcaAfterRVFLoad then begin + if ctrl is TOleContainer then begin + TOleContainer(ctrl).OnResize := OnOleResize; + TOleContainer(ctrl).OnActivate := OnOleActivate; + TOleContainer(ctrl).OnDeactivate := OnOleDeactivate; + end + else if ctrl is TButton then + TButton(ctrl).OnClick := OnControlClick + else if ctrl is TEdit then + TEdit(ctrl).OnClick := OnControlClick + end; + if ctrl<>ActiveOleContainer then + exit; + if ControlAction in [rvcaMoveToUndoList, rvcaDestroy, rvcaBeforeRVFSave] then + CloseOleContainer; +end; +{ Edit|Delete ---------------------------------------------------------} +procedure TForm1.mitDeleteClick(Sender: TObject); +begin + // Shortcut to this item is Ctrl+Del + // If you make it Del, you will be unable to use del key in editor + RichViewEdit1.DeleteSelection; +end; +{ Edit|Select All -----------------------------------------------------} +procedure TForm1.mitSelectAllClick(Sender: TObject); +begin + { warning: SelectAll moves caret to the end of the text } + RichViewEdit1.SelectAll; + RichViewEdit1.SetFocus; + RichViewEdit1.Invalidate; +end; +{ Another clipboard-related action ------------------------------------} +procedure TForm1.RichViewEdit1Select(Sender: TObject); +begin + mitCopy.Enabled := RichViewEdit1.SelectionExists; + mitCut.Enabled := mitCopy.Enabled; + mitDelete.Enabled := mitCopy.Enabled; +end; +{ Edit| Insert Page Break----------------------------------------------} +procedure TForm1.mitInsertPageBreakClick(Sender: TObject); +begin + RichViewEdit1.InsertPageBreak; +end; +{ Edit| Remove Page Break----------------------------------------------} +procedure TForm1.mitRemovePageBreakClick(Sender: TObject); +begin + RichViewEdit1.RemoveCurrentPageBreak; +end; +{----------------------------------------------------------------------} +{ This demo understands both tag modes: + 1. rvoTagsArePChars is in Options (tags are strings) + 2. rvoTagsArePChars is not in Options (tags are integers). + So this demo uses two simple universal functions below for convering + tag to String and String to tag. +} +function GetTagStr(Tag: Integer): String; +begin + if (rvoTagsArePChars in Form1.RichViewEdit1.Options) then + if Tag = 0 then + Result := '' + else + Result := PChar(Tag) + else + Result := IntToStr(Tag); +end; + +function MakeTag(TagStr: String): Integer; +begin + if (TagStr<>'') and (rvoTagsArePChars in Form1.RichViewEdit1.Options) then + Result := Integer(StrNew(PChar(TagStr))) + else + Result := StrToIntDef(TagStr,0); +end; +{ Edit|Checkpoint... --------------------------------------------------} +procedure TForm1.mitEditCheckpointClick(Sender: TObject); +var CpNo, Tag: Integer; + Name: String; + CheckPointData: TCheckPointData; + RaiseEvent: Boolean; +begin + CheckPointData := RichViewEdit1.GetCurrentCheckpoint; + if CheckPointData<>nil then begin + RichViewEdit1.GetCheckpointInfo(CheckPointData,Tag,Name,RaiseEvent); + CpNo := RichViewEdit1.GetCheckpointNo(CheckPointData); + frmCp.lblStatus.Caption := 'Editing checkpoint #'+IntToStr(CpNo); + frmCp.txtName.Text := Name; + frmCp.txtTag.Text := GetTagStr(Tag); + frmCp.btnOk.Caption := 'OK'; + frmCp.btnDelete.Enabled := True; + end + else begin + frmCp.lblStatus.Caption := 'Checkpoint does not exist'; + frmCp.txtName.Text := ''; + frmCp.txtTag.Text := GetTagStr(0); + frmCp.btnOk.Caption := 'Add'; + frmCp.btnDelete.Enabled := False; + end; + case frmCP.ShowModal of + mrOk: { add new checkpoint or modify existed one } + RichViewEdit1.SetCurrentCheckpointInfo(MakeTag(frmCp.txtTag.Text), + frmCp.txtName.Text,False); + mrYes: { delete checkpoint } + RichViewEdit1.RemoveCurrentCheckpoint; + end; +end; +{ Edit|Search... -------------------------------------} +procedure TForm1.mitSearchClick(Sender: TObject); +begin + FindDialog1.Execute; +end; +{-----------------------------------------------------------------------} +procedure TForm1.FindDialog1Find(Sender: TObject); +begin + if not RichViewEdit1.SearchText(FindDialog1.FindText, + GetRVESearchOptions(FindDialog1.Options)) then + Application.MessageBox('Can''t find', 'Search complete', MB_OK or MB_ICONEXCLAMATION); +end; +{ Edit|Select Current Word -------------------------------------} +procedure TForm1.mitSelectCurrentWordClick(Sender: TObject); +begin + RichViewEdit1.SelectCurrentWord; + // now you can do something with current word: + // translate or spell check, for example... +end; +{ Edit|Current Item Properties... -------------------------------------} +procedure TForm1.mitEditPropsClick(Sender: TObject); +var s: TRVAnsiString; + Tag, Index: Integer; + VAlign: TRVVAlign; + ImageList: TCustomImageList; + gr: TGraphic; + ctrl: TControl; + BreakColor: TColor; + BreakStyle: TRVBreakStyle; + BreakWidth: Byte; +begin + frmProp.PageControl1.Visible := True; + frmProp.tsBullet.TabVisible := False; + frmProp.tsHotSpot.TabVisible := False; + frmProp.tsPicture.TabVisible := False; + frmProp.tsText.TabVisible := False; + frmProp.tsComponent.TabVisible := False; + frmProp.tsBreak.TabVisible := False; + frmProp.txtName.Enabled := True; + case RichViewEdit1.CurItemStyle of + rvsBullet: + begin + RichViewEdit1.GetCurrentBulletInfo(s, Index, ImageList, Tag); + frmProp.tsBullet.TabVisible := True; + frmProp.rgBullet.ItemIndex := Index; + frmProp.txtName.Text := String(s); + frmProp.txtTag.Text := GetTagStr(Tag); + end; + rvsHotspot: + begin + // you can use GetCurrentBulletInfo or GetCurrentHotspotInfo + // to receive info about hotspot in caret position. + // in this demo we do not need HotImageIndex, because here + // HotImageIndex = ImageIndex+2 + // and so we can use GetCurrentBulletInfo + RichViewEdit1.GetCurrentBulletInfo(s, Index, ImageList, Tag); + frmProp.tsHotspot.TabVisible := True; + frmProp.rgHotspot.ItemIndex := Index-3; + frmProp.txtName.Text := String(s); + frmProp.txtTag.Text := GetTagStr(Tag); + end; + rvsPicture, rvsHotPicture: + begin + RichViewEdit1.GetCurrentPictureInfo(s, gr, VAlign, Tag); + frmProp.tsPicture.TabVisible := True; + frmProp.Image1.Picture.Graphic := gr; + frmProp.txtName.Text := String(s); + frmProp.txtTag.Text := GetTagStr(Tag); + frmProp.rgPicVAlign.ItemIndex := Integer(VAlign); + end; + rvsComponent: + begin + RichViewEdit1.GetCurrentControlInfo(s, ctrl, VAlign, Tag); + frmProp.tsComponent.TabVisible := True; + frmProp.txtWidth.Text := IntToStr(ctrl.Width); + frmProp.txtHeight.Text := IntToStr(ctrl.Height); + frmProp.txtName.Text := String(s); + frmProp.lblComponent.Caption := ctrl.ClassName; + frmProp.txtTag.Text := GetTagStr(Tag); + frmProp.rgCtrlVAlign.ItemIndex := Integer(VAlign); + end; + rvsBreak: + begin + frmProp.tsBreak.TabVisible := True; + RichViewEdit1.GetCurrentBreakInfo(BreakWidth, BreakStyle, BreakColor, Tag); + frmProp.txtBreakWidth.Text := IntToStr(BreakWidth); + case BreakColor of + clNone: + frmProp.rgBreakColor.ItemIndex := 0; + clRed: + frmProp.rgBreakColor.ItemIndex := 1; + clGreen: + frmProp.rgBreakColor.ItemIndex := 2; + clBlue: + frmProp.rgBreakColor.ItemIndex := 3; + end; + frmProp.rgBreakStyle.ItemIndex := ord(BreakStyle); + frmProp.txtName.Text := '(not available for breaks)'; + frmProp.txtName.Enabled := False; + frmProp.txtTag.Text := GetTagStr(Tag); + end; + rvsTable: + begin + frmProp.txtName.Text := RichViewEdit1.GetCurrentItemText; + frmProp.txtTag.Text := GetTagStr(RichViewEdit1.GetCurrentTag); + frmProp.PageControl1.Visible := False; + end; + else + begin + frmProp.lblText.Caption := RichViewEdit1.GetCurrentItemText; + frmProp.txtTag.Text := GetTagStr(RichViewEdit1.GetCurrentTag); + frmProp.tsText.TabVisible := True; + frmProp.txtName.Text := '(not available for text)'; + frmProp.txtName.Enabled := False; + end; + end; + if frmProp.ShowModal=mrOk then + case RichViewEdit1.CurItemStyle of + rvsBullet: + begin + RichViewEdit1.SetCurrentBulletInfo( + TRVAnsiString(frmProp.txtName.Text), + frmProp.rgBullet.ItemIndex, + nil, + MakeTag(frmProp.txtTag.Text)); + end; + rvsHotspot: + begin + RichViewEdit1.SetCurrentHotspotInfo( + TRVAnsiString(frmProp.txtName.Text), + frmProp.rgHotspot.ItemIndex+3, + frmProp.rgHotspot.ItemIndex+3+2, + nil, + MakeTag(frmProp.txtTag.Text)); + end; + rvsPicture, rvsHotPicture: + begin + { first we need to create a copy of image ...} + gr := TGraphic(frmProp.Image1.Picture.Graphic.ClassType.Create); + gr.Assign(frmProp.Image1.Picture.Graphic); + RichViewEdit1.SetCurrentPictureInfo( + TRVAnsiString(frmProp.txtName.Text), + gr, + TRVVAlign(frmProp.rgPicVAlign.ItemIndex), + MakeTag(frmProp.txtTag.Text)); + end; + rvsComponent: + begin + // we want these setting to be undone as one action, + // so we use BeginUndoGroup, SetUndoGroupMode(True), settings, SetUndoGroupMode(False) + RichViewEdit1.BeginUndoGroup(rvutModifyItem); + // you can use BeginUndoCustomGroup instead of BeginUndoGroup + // example: + // RichViewEdit1.BeginUndoCustomGroup('modifying control'); + // In this case undo type will be rvutCustom + // (look at TForm1.UpdateUndoMenu in this file) + RichViewEdit1.SetUndoGroupMode(True); + RichViewEdit1.SetCurrentControlInfo( + TRVAnsiString(frmProp.txtName.Text), + TRVVAlign(frmProp.rgCtrlVAlign.ItemIndex), + MakeTag(frmProp.txtTag.Text)); + RichViewEdit1.ResizeCurrentControl( + StrToIntDef(frmProp.txtWidth.Text, ctrl.Width), + StrToIntDef(frmProp.txtHeight.Text, ctrl.Height)); + RichViewEdit1.SetUndoGroupMode(False); + end; + rvsBreak: + begin + case frmProp.rgBreakColor.ItemIndex of + -1,0: + BreakColor := clNone; + 1: + BreakColor := clRed; + 2: + BreakColor := clGreen; + 3: + BreakColor := clBlue; + end; + BreakWidth := StrToIntDef(frmProp.txtBreakWidth.Text,1); + BreakStyle := TRVBreakStyle(frmProp.rgBreakStyle.ItemIndex); + RichViewEdit1.SetCurrentBreakInfo(BreakWidth,BreakStyle,BreakColor, + MakeTag(frmProp.txtTag.Text)); + end; + rvsTable: + begin + RichViewEdit1.BeginUndoGroup(rvutModifyItem); + RichViewEdit1.SetUndoGroupMode(True); + RichViewEdit1.SetCurrentItemText(frmProp.txtName.Text); + RichViewEdit1.SetCurrentTag(MakeTag(frmProp.txtTag.Text)); + RichViewEdit1.SetUndoGroupMode(False); + end; + else + begin + RichViewEdit1.SetCurrentTag(MakeTag(frmProp.txtTag.Text)); + end; + end; +end; +{======================================================================} +{ Main menu : "Misc" } +{======================================================================} +{ Misc | Go to checkpoint ... -----------------------------------------} +procedure TForm1.mitCheckPointListClick(Sender: TObject); +var X,Y,Tag: Integer; + Name: String; + CheckpointData: TCheckpointData; + RaiseEvent: Boolean; + s: String; +begin + { Does not work for checkpoints in table cells } + frmList.lst.Items.Clear; + CheckpointData := RichViewEdit1.GetFirstCheckPoint; + while CheckpointData<>nil do begin + RichViewEdit1.GetCheckpointInfo(CheckpointData,Tag,Name,RaiseEvent); + RichViewEdit1.GetCheckpointXY(CheckpointData,X,Y); + s := Format('(X:%d,Y:%d) Name:"%s" Tag:"%s"', [X,Y,Name,GetTagStr(Tag)]); + frmList.lst.Items.Add(s); + CheckpointData := RichViewEdit1.GetNextCheckpoint(CheckpointData); + end; + if frmList.ShowModal=mrOk then + with RichViewEdit1 do + ScrollTo(GetCheckPointY(frmList.lst.ItemIndex)); +end; +{ Misc | Read-Only -----------------------------------------------------} +procedure TForm1.mitReadOnlyClick(Sender: TObject); +begin + RichViewEdit1.ReadOnly := not RichViewEdit1.ReadOnly; + mitReadOnly.Checked := RichViewEdit1.ReadOnly; +end; +{ Misc | Background submenu popups ------------------------------------} +procedure TForm1.mpdBackgroundClick(Sender: TObject); +begin + // Displaying RichViewEdit1.BackgroundStyle as checkmark in submenu... + mitBackNoBitmap.Checked := RichViewEdit1.BackgroundStyle=bsNoBitmap; + mitBackStretched.Checked := RichViewEdit1.BackgroundStyle=bsStretched; + mitBackTiledAndScrolled.Checked := RichViewEdit1.BackgroundStyle=bsTiledAndScrolled; + mitBackTiled.Checked := RichViewEdit1.BackgroundStyle=bsTiled; + mitBackCentered.Checked := RichViewEdit1.BackgroundStyle=bsCentered; + mitBackTopLeft.Checked := RichViewEdit1.BackgroundStyle=bsTopLeft; + mitBackTopRight.Checked := RichViewEdit1.BackgroundStyle=bsTopRight; + mitBackBottomLeft.Checked := RichViewEdit1.BackgroundStyle=bsBottomLeft; + mitBackBottomRight.Checked := RichViewEdit1.BackgroundStyle=bsBottomRight; +end; +{ Misc | Background options -------------------------------------------} +procedure TForm1.mitBackClick(Sender: TObject); +begin + RichViewEdit1.BackgroundStyle := TBackgroundStyle(TMenuItem(Sender).Tag); +end; +{======================================================================} +{ On Popup -------------------------------------------------------------} +procedure TForm1.PopupMenu1Popup(Sender: TObject); +begin + mitEditProp1.Enabled := not RichViewEdit1.SelectionExists; +end; +{-----------------------------------------------------------------------} +{OnChange event handler. +{-----------------------------------------------------------------------} +procedure TForm1.RichViewEdit1Change(Sender: TObject); +begin + UpdateUndoMenu; +end; +{-----------------------------------------------------------------------} +// You should manually update palette info when user changes color mode +// without restarting Windows +procedure TForm1.WMDisplayChange(var Message: TMessage{TWMDisplayChange}); +begin + RichViewEdit1.UpdatePaletteInfo; + RVPrint1.UpdatePaletteInfo; +end; +{-----------------------------------------------------------------------} +{ Event: OnJump (when user clicks hypertext item with pressed Ctrl key } +procedure TForm1.RichViewEdit1Jump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; + s: String; +begin + // NOTE: OnJump is called after the caret is repositioned to clicked item + // But warning: a clicked event is not necessarily an active item + // (when clicking on left part of picture or left part of first character in text item, + // caret moves before item and previous item becomes active!) + RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo); + s := GetTagStr(RVData.GetItemTag(ItemNo)); + Application.MessageBox(PChar(Format('Tag of clicked hyperlink is "%s"', [s])), + 'Hyperlink', MB_OK or MB_ICONINFORMATION); + +end; +{------------------------------------------------------------------------------} +{ Event: OnRVMouseMove (when user moves mouse above hypertext item with pressed Ctrl key } +procedure TForm1.RichViewEdit1RVMouseMove(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; + s: String; +begin + if id=-1 then begin + StatusBar1.SimpleText := ''; + end + else begin + RichViewEdit1.GetJumpPointLocation(id, RVData, ItemNo); + s := GetTagStr(RVData.GetItemTag(ItemNo)); + StatusBar1.SimpleText := Format('Tag of hyperlink is "%s"', [s]); + end; +end; +{======================================================================} +{ Main menu : "Lists" } +{======================================================================} +{ Lists | Apply -------------------------------------------------------} +procedure TForm1.mitApplyListClick(Sender: TObject); +begin + // See more demos about list styles in Demos\Delphi\Assorted\ListStyles\ + if (RVStyle1.ListStyles.Count=0) or (RVStyle1.ListStyles[0].Levels.Count=0) then begin + Application.MessageBox('Default list style is not defined', '', 0); + exit; + end; + RichViewEdit1.ApplyListStyle(0, 0, 1, False, False); +end; +{ Lists | Remove ------------------------------------------------------} +procedure TForm1.mitRemoveListsClick(Sender: TObject); +begin + RichViewEdit1.RemoveLists(False); +end; +{======================================================================} +{ Main menu : "Table" } +{======================================================================} +{ Table | Insert Table Example 1 --------------------------------------} +procedure TForm1.mitInserttable1Click(Sender: TObject); +var table: TRVTableItemInfo; + r,c: Integer; +begin + table := TRVTableItemInfo.CreateEx(4,3, RichViewEdit1.RVData); + + table.BorderStyle := rvtbRaisedColor; + table.CellBorderStyle := rvtbLoweredColor; + table.BorderLightColor := $00FAF1C9; + table.BorderColor := $00A98E10; + table.CellBorderLightColor := $00FAF1C9; + table.CellBorderColor := $00A98E10; + table.Color := $00EAC724; + table.BorderWidth := 5; + table.CellBorderWidth := 2; + table.CellPadding := 5; + table.CellVSpacing := 1; + table.CellHSpacing := 1; + table.BorderVSpacing := 1; + table.BorderHSpacing := 1; + + for r := 0 to table.Rows.Count-1 do + for c := 0 to table.Rows[r].Count-1 do + table.Cells[r,c].BestWidth := 100; + + table.MergeCells(0,0,3,1, False); + table.MergeCells(1,0,1,3, False); + with table.Cells[0,0] do begin + Color := clInfoBk; + Clear; + AddBulletEx( '',0,il,2); + AddNL(' Example 1 ',1,-1); + AddBulletEx( '',0,il,-1); + AddNL('All cells have 100 pixels width, width of table itself is calculated basing on width of cells.', + 0,0); + end; + + if RichViewEdit1.InsertItem('', table) then begin + end; +end; +{ Table | Insert Table Example 2 --------------------------------------} +procedure TForm1.mitInsertTable2Click(Sender: TObject); +var table: TRVTableItemInfo; + btn: TButton; +begin + table := TRVTableItemInfo.CreateEx(10,6, RichViewEdit1.RVData); + table.Color := clWhite; + + table.BorderStyle := rvtbRaisedColor; + table.CellBorderStyle := rvtbLoweredColor; + table.BorderLightColor := clWhite; + table.BorderColor := clBlack; + table.CellBorderLightColor := clWhite; + table.CellBorderColor := clBlack; + + table.BorderWidth := 2; + table.BorderVSpacing := 0; + table.BorderHSpacing := 0; + table.CellBorderWidth := 2; + table.CellPadding := 3; + table.CellVSpacing := 0; + table.CellHSpacing := 0; + table.Cells[0,0].BestWidth := -16; + table.Cells[0,1].BestWidth := -16; + table.Cells[0,2].BestWidth := -16; + table.Cells[0,3].BestWidth := -16; + table.Cells[0,4].BestWidth := -16; + table.Cells[0,5].BestWidth := -16; +// table.Rows.MergeCells(1,0,6,1); + table.MergeCells(2,0,2,8, False); + with table.Cells[2,0] do begin + Clear; + AddNL('Another example.',0,0); + btn := TButton.Create(nil); + btn.Caption := 'With button inside'; + btn.Width := 150; + btn.OnClick := OnControlClick; + AddControlEx('',btn,2,rvvaBaseline); + SetItemExtraIntProperty(ItemCount-1, rvepResizable, 1); + AddNL('Width of table = 90% of document width. Widths of cells = 16%',0,0); + end; + table.BestWidth := -90; + if RichViewEdit1.InsertItem('', table) then begin + end; +end; +{ Table | Insert Table Example 3 --------------------------------------} +procedure TForm1.mitInsertTable3Click(Sender: TObject); +var table: TRVTableItemInfo; + r,c: Integer; +begin + table := TRVTableItemInfo.CreateEx(5,6, RichViewEdit1.RVData); + + table.Color := $00A5CCE7; + table.BorderStyle := rvtbColor; + table.CellBorderStyle := rvtbColor; + table.BorderColor := $002E1234; + table.CellBorderColor := $002E1234; + + table.BorderWidth := 2; + table.BorderVSpacing := 2; + table.BorderHSpacing := 2; + table.CellBorderWidth := 1; + table.CellPadding := 3; + table.CellVSpacing := 0; + table.CellHSpacing := 0; + table.Options := table.Options + [rvtoHideGridLines]; + + for c := 0 to table.Rows[0].Count-1 do + table.Cells[0,c].Color := $00A5E1F8; + + for r := 1 to table.Rows.Count-1 do + table.Cells[r,0].Color := $00A5E1F8; + + for r := 1 to table.Rows.Count-1 do + for c := 1 to table.Rows[r].Count-1 do begin + table.Cells[r,c].Color := $007AB4DA; + if c>1 then + table.Cells[r,c].VisibleBorders.Left := False; + if cnil)); + mitSplitVertically.Enabled := SelectionRectangular; + mitSplitHorizontally.Enabled := SelectionRectangular; + mitUmRows.Enabled := SelectionRectangular; + mitUmCols.Enabled := SelectionRectangular; + mitUmRowsAndCols.Enabled := SelectionRectangular; +end; +{ Table | All other commands --------------------------------------} +procedure TForm1.mitCellsOperationClick(Sender: TObject); +var item: TCustomRVItemInfo; + table: TRVTableItemInfo; + Data: Integer; + r,c,cs,rs: Integer; + s: String; + rve: TCustomRichViewEdit; + ItemNo: Integer; +begin + if not RichViewEdit1.CanChange or + not RichViewEdit1.GetCurrentItemEx(TRVTableItemInfo, rve, item) then + exit; + table := TRVTableItemInfo(item); + ItemNo := rve.GetItemNo(table); + rve.BeginItemModify(ItemNo, Data); + case TMenuItem(Sender).Tag of + 1: + table.InsertRowsAbove(1); + 2: + table.InsertRowsBelow(1); + 3: + table.InsertColsLeft(1); + 4: + table.InsertColsRight(1); + 5: + begin + table.GetNormalizedSelectionBounds(True,r,c,cs,rs); + if rs=table.Rows.Count then begin + // deleting the whole table + rve.SetSelectionBounds(ItemNo,0,ItemNo,1); + rve.DeleteSelection; + exit; + end; + rve.BeginUndoGroup(rvutModifyItem); + rve.SetUndoGroupMode(True); + table.DeleteSelectedRows; + // it's possible all-nil rows/cols appear after deleting + table.DeleteEmptyRows; + table.DeleteEmptyCols; + rve.SetUndoGroupMode(False); + end; + 6: + begin + table.GetNormalizedSelectionBounds(True,r,c,cs,rs); + if cs=table.Rows[0].Count then begin + // deleting the whole table + rve.SetSelectionBounds(ItemNo,0,ItemNo,1); + rve.DeleteSelection; + exit; + end; + rve.BeginUndoGroup(rvutModifyItem); + rve.SetUndoGroupMode(True); + table.DeleteSelectedCols; + // it's possible all-nil rows/cols appear after deleting + table.DeleteEmptyRows; + table.DeleteEmptyCols; + rve.SetUndoGroupMode(False); + end; + 7: + begin + // 3 methods: MergeSelectedCells, DeleteEmptyRows, DeleteEmptyCols + // must be undone as one action. + // So using BeginUndoGroup - SetUndoGroupMode(True) - ... - SetUndoGroupMode(False) + rve.BeginUndoGroup(rvutModifyItem); + rve.SetUndoGroupMode(True); + table.MergeSelectedCells(True); + table.DeleteEmptyRows; + table.DeleteEmptyCols; + rve.SetUndoGroupMode(False); + // table.MergeSelectedCells(False) will not allow to create empty columns + // or rows + end; + 8: + table.UnmergeSelectedCells(True, False); + 9: + table.UnmergeSelectedCells(False, True); + 10: + table.UnmergeSelectedCells(True, True); + 11: + begin + s := '2'; + if InputQuery('Split Vertically','Columns (in each selected cell):',s) then begin + table.SplitSelectedCellsVertically(StrToIntDef(s,0)); + end; + end; + 12: + begin + s := '2'; + if InputQuery('Split Horizontally','Rows (in each selected cell):',s) then begin + table.SplitSelectedCellsHorizontally(StrToIntDef(s,0)); + end; + end; + end; + rve.EndItemModify(ItemNo, Data); + rve.Change; +end; + +initialization + // We need to register classes in order to load them from rvf files + RegisterClasses([TButton, TEdit, TOleContainer]); +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/default.bmp b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/default.bmp new file mode 100644 index 0000000..1de297d Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 1/default.bmp differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/REditor.dpr b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/REditor.dpr new file mode 100644 index 0000000..6dd838c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/REditor.dpr @@ -0,0 +1,13 @@ +program REditor; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/REditor.dproj b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/REditor.dproj new file mode 100644 index 0000000..3b23dda --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/REditor.dproj @@ -0,0 +1,99 @@ + + + {BECC6CDC-1AC9-49A2-868F-12E745ED7898} + REditor.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + REditor.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + REditor.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/REditor.res b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/REditor.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/REditor.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/Unit1.dfm new file mode 100644 index 0000000..2266465 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/Unit1.pas new file mode 100644 index 0000000..5e654f2 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Editor 2/Unit1.pas @@ -0,0 +1,550 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, Buttons, ComCtrls, ExtCtrls, Menus, + RVStyle, RVScroll, RichView, RVEdit; + +{==============================================================================} +{ RichEditor Demo + Menu items disabling/enabling is not implemented here. + + The main idea: new styles are created and added to rvs.TextStyles when needed. + The right place for this - rve.OnStyleConversion and rve.OnParaStyleConversion + + IMPORTANT: If you right click the editor in design time, choose "Settings" + in the context menu, you'll see that radiogroup is in state + "Allow adding styles dynamically" +{==============================================================================} + +type + TForm1 = class(TForm) + Panel1: TPanel; + StatusBar1: TStatusBar; + rve: TRichViewEdit; + rvs: TRVStyle; + cmbFont: TComboBox; + btnBold: TSpeedButton; + btnItalic: TSpeedButton; + btnUnderline: TSpeedButton; + btnFont: TSpeedButton; + btnLeft: TSpeedButton; + btnCenter: TSpeedButton; + btnRight: TSpeedButton; + btnJustify: TSpeedButton; + btnOpen: TSpeedButton; + btnSave: TSpeedButton; + btnSaveAs: TSpeedButton; + btnNew: TSpeedButton; + cmbFontSize: TComboBox; + Label2: TLabel; + Label3: TLabel; + MainMenu1: TMainMenu; + File1: TMenuItem; + mitOpen: TMenuItem; + mitSave: TMenuItem; + mitNew: TMenuItem; + mitSaveAs: TMenuItem; + N1: TMenuItem; + mitExit: TMenuItem; + Edit1: TMenuItem; + mitUndo: TMenuItem; + mitRedo: TMenuItem; + N2: TMenuItem; + mitCut: TMenuItem; + mitCopy: TMenuItem; + mitPaste: TMenuItem; + mitDelete: TMenuItem; + od: TOpenDialog; + sd: TSaveDialog; + fd: TFontDialog; + btnIdentInc: TSpeedButton; + btnIdentDec: TSpeedButton; + btnFontColor: TSpeedButton; + btnFontBackColor: TSpeedButton; + SpeedButton1: TSpeedButton; + cd: TColorDialog; + procedure mitNewClick(Sender: TObject); + procedure mitOpenClick(Sender: TObject); + procedure mitSaveClick(Sender: TObject); + procedure mitSaveAsClick(Sender: TObject); + procedure mitExitClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure rveChange(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure rveCurTextStyleChanged(Sender: TObject); + procedure rveCurParaStyleChanged(Sender: TObject); + procedure cmbFontClick(Sender: TObject); + procedure rveStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); + procedure mitUndoClick(Sender: TObject); + procedure mitRedoClick(Sender: TObject); + procedure mitCutClick(Sender: TObject); + procedure mitCopyClick(Sender: TObject); + procedure mitPasteClick(Sender: TObject); + procedure mitDeleteClick(Sender: TObject); + procedure mitFontClick(Sender: TObject); + procedure btnApplyParaClick(Sender: TObject); + procedure cmbFontSizeClick(Sender: TObject); + procedure cmbFontSizeKeyPress(Sender: TObject; var Key: Char); + procedure cmbFontSizeExit(Sender: TObject); + procedure FontStyleButtonClick(Sender: TObject); + procedure rveParaStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); + procedure btnIdentDecClick(Sender: TObject); + procedure btnIdentIncClick(Sender: TObject); + procedure btnFontColorClick(Sender: TObject); + procedure btnFontBackColorClick(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + private + { Private declarations } + FileName, FontName: String; + IgnoreChanges: Boolean; + FontSize: Integer; + function SaveIfNeeded: Boolean; + function Save: Boolean; + function SaveAs: Boolean; + procedure Open; + procedure New; + function GetAlignmentFromUI: TRVAlignment; + procedure SetAlignmentToUI(Alignment: TRVAlignment); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +// Parameters for ApplyStyleConversion +const + TEXT_BOLD = 1; + TEXT_ITALIC = 2; + TEXT_UNDERLINE = 3; + TEXT_APPLYFONTNAME = 4; + TEXT_APPLYFONT = 5; + TEXT_APPLYFONTSIZE = 6; + TEXT_COLOR = 7; + TEXT_BACKCOLOR = 8; +// Parameters for ApplyParaStyleConversion + PARA_ALIGNMENT = 1; + PARA_INDENTINC = 2; + PARA_INDENTDEC = 3; + PARA_COLOR = 4; + +{$R *.DFM} +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +begin + // Filling font names combobox + cmbFont.Items.Assign(Screen.Fonts); + New; +end; +{------------------------------------------------------------------------------} +// data in editor were changed +procedure TForm1.rveChange(Sender: TObject); +begin + StatusBar1.Panels[0].Text := 'Modified'; +end; +{------------------------------------------------------------------------------} +// current text style was changed +procedure TForm1.rveCurTextStyleChanged(Sender: TObject); +var fi: TFontInfo; +begin + IgnoreChanges := True; + StatusBar1.Panels[1].Text := 'Style : '+IntToStr(rve.CurTextStyleNo); + // Changing selection in comboboxes with font names and sizes: + fi := rvs.TextStyles[rve.CurTextStyleNo]; + cmbFont.ItemIndex := cmbFont.Items.IndexOf(fi.FontName); + cmbFontSize.Text := IntToStr(fi.Size); + // Checking font buttons + btnBold.Down := fsBold in fi.Style; + btnItalic.Down := fsItalic in fi.Style; + btnUnderline.Down := fsUnderline in fi.Style; + IgnoreChanges := False; +end; +{------------------------------------------------------------------------------} +// current paragraph style was changed +procedure TForm1.rveCurParaStyleChanged(Sender: TObject); +begin + SetAlignmentToUI(rvs.ParaStyles[rve.CurParaStyleNo].Alignment); +end; +{------------------------------------------------------------------------------} +function TForm1.GetAlignmentFromUI: TRVAlignment; +begin + if btnLeft.Down then + Result := rvaLeft + else if btnRight.Down then + Result := rvaRight + else if btnCenter.Down then + Result := rvaCenter + else + Result := rvaJustify; +end; +{------------------------------------------------------------------------------} +procedure TForm1.SetAlignmentToUI(Alignment: TRVAlignment); +begin + case Alignment of + rvaLeft: + btnLeft.Down := True; + rvaCenter: + btnCenter.Down := True; + rvaRight: + btnRight.Down := True; + rvaJustify: + btnJustify.Down := True; + end; +end; +{------------------------------------------------------------------------------} +// applying font name +procedure TForm1.cmbFontClick(Sender: TObject); +begin + if (cmbFont.ItemIndex<>-1) then begin + if not IgnoreChanges then begin + FontName := cmbFont.Items[cmbFont.ItemIndex]; + rve.ApplyStyleConversion(TEXT_APPLYFONTNAME); + end; + end; + if Visible then + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +// applying font size +procedure TForm1.cmbFontSizeClick(Sender: TObject); +begin + if (cmbFontSize.Text<>'') and not IgnoreChanges then begin + FontSize := StrToIntDef(cmbFontSize.Text, 10); + rve.ApplyStyleConversion(TEXT_APPLYFONTSIZE); + end; + if Visible then + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +// bold, italic, underline +procedure TForm1.FontStyleButtonClick(Sender: TObject); +var Button: TSpeedButton; +begin + Button := Sender as TSpeedButton; + // constants TEXT_BOLD, TEXT_ITALIC and TEXT_UNDERLINE are + // assigned to the tags of corresponding buttons + rve.ApplyStyleConversion(Button.Tag); +end; +{------------------------------------------------------------------------------} +// applying font +procedure TForm1.mitFontClick(Sender: TObject); +begin + fd.Font.Assign(rvs.TextStyles[rve.CurTextStyleNo]); + if fd.Execute then begin + rve.ApplyStyleConversion(TEXT_APPLYFONT); + end; +end; +{------------------------------------------------------------------------------} +// applying text color +procedure TForm1.btnFontColorClick(Sender: TObject); +begin + cd.Color := rvs.TextStyles[rve.CurTextStyleNo].Color; + if cd.Execute then + rve.ApplyStyleConversion(TEXT_COLOR); +end; +{------------------------------------------------------------------------------} +// applying text background color +procedure TForm1.btnFontBackColorClick(Sender: TObject); +begin + case Application.MessageBox('Make the selected text background transparent?'#13+ + '(YES - make transparent; NO - choose color)', + 'Text Background', MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + cd.Color := clNone; + IDNO: + begin + cd.Color := rvs.TextStyles[rve.CurTextStyleNo].BackColor; + if cd.Color=clNone then + cd.Color := clWhite; + if not cd.Execute then + exit; + end; + IDCANCEL: + exit; + end; + rve.ApplyStyleConversion(TEXT_BACKCOLOR); +end; +{------------------------------------------------------------------------------} +// applying paragraph background color +procedure TForm1.SpeedButton1Click(Sender: TObject); +begin + case Application.MessageBox('Make the selected paragraph background transparent?'#13+ + '(YES - make transparent; NO - choose color)', + 'Text Background', MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + cd.Color := clNone; + IDNO: + begin + cd.Color := rvs.ParaStyles[rve.CurParaStyleNo].Background.Color; + if cd.Color=clNone then + cd.Color := clWhite; + if not cd.Execute then + exit; + end; + IDCANCEL: + exit; + end; + rve.ApplyParaStyleConversion(PARA_COLOR); +end; +{------------------------------------------------------------------------------} +// The heart of this demo: rve.OnStyleConversion +procedure TForm1.rveStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); +var FontInfo: TFontInfo; +begin + FontInfo := TFontInfo.Create(nil); + try + FontInfo.Assign(rvs.TextStyles[StyleNo]); + case UserData of + TEXT_BOLD: + if btnBold.Down then + FontInfo.Style := FontInfo.Style+[fsBold] + else + FontInfo.Style := FontInfo.Style-[fsBold]; + TEXT_ITALIC: + if btnItalic.Down then + FontInfo.Style := FontInfo.Style+[fsItalic] + else + FontInfo.Style := FontInfo.Style-[fsItalic]; + TEXT_UNDERLINE: + if btnUnderline.Down then + FontInfo.Style := FontInfo.Style+[fsUnderline] + else + FontInfo.Style := FontInfo.Style-[fsUnderline]; + TEXT_APPLYFONTNAME: + FontInfo.FontName := FontName; + TEXT_APPLYFONTSIZE: + FontInfo.Size := FontSize; + TEXT_APPLYFONT: + FontInfo.Assign(fd.Font); + TEXT_COLOR: + FontInfo.Color := cd.Color; + TEXT_BACKCOLOR: + FontInfo.BackColor := cd.Color; + // add your code here.... + end; + NewStyleNo := rvs.TextStyles.FindSuchStyle(StyleNo,FontInfo,RVAllFontInfoProperties); + if NewStyleNo=-1 then begin + rvs.TextStyles.Add; + NewStyleNo := rvs.TextStyles.Count-1; + rvs.TextStyles[NewStyleNo].Assign(FontInfo); + rvs.TextStyles[NewStyleNo].Standard := False; + end; + finally + FontInfo.Free; + end; +end; +{------------------------------------------------------------------------------} +// The same for paragraph styles +procedure TForm1.rveParaStyleConversion(Sender: TCustomRichViewEdit; + StyleNo, UserData: Integer; AppliedToText: Boolean; + var NewStyleNo: Integer); +var ParaInfo: TParaInfo; +begin + ParaInfo := TParaInfo.Create(nil); + try + ParaInfo.Assign(rvs.ParaStyles[StyleNo]); + case UserData of + PARA_ALIGNMENT: + ParaInfo.Alignment := GetAlignmentFromUI; + PARA_INDENTINC: + begin + ParaInfo.LeftIndent := ParaInfo.LeftIndent+20; + if ParaInfo.LeftIndent>200 then + ParaInfo.LeftIndent := 200; + end; + PARA_INDENTDEC: + begin + ParaInfo.LeftIndent := ParaInfo.LeftIndent-20; + if ParaInfo.LeftIndent<0 then + ParaInfo.LeftIndent := 0; + end; + PARA_COLOR: + ParaInfo.Background.Color := cd.Color; + // add your code here.... + end; + NewStyleNo := rvs.ParaStyles.FindSuchStyle(StyleNo,ParaInfo,RVAllParaInfoProperties); + if NewStyleNo=-1 then begin + rvs.ParaStyles.Add; + NewStyleNo := rvs.ParaStyles.Count-1; + rvs.ParaStyles[NewStyleNo].Assign(ParaInfo); + rvs.ParaStyles[NewStyleNo].Standard := False; + end; + finally + ParaInfo.Free; + end; +end; +{------------------------------------------------------------------------------} +// applying paragraph alignment +procedure TForm1.btnApplyParaClick(Sender: TObject); +begin + rve.ApplyParaStyleConversion(PARA_ALIGNMENT); +end; +{------------------------------------------------------------------------------} +// changing left indents +procedure TForm1.btnIdentDecClick(Sender: TObject); +begin + rve.ApplyParaStyleConversion(PARA_INDENTDEC); +end; + +procedure TForm1.btnIdentIncClick(Sender: TObject); +begin + rve.ApplyParaStyleConversion(PARA_INDENTINC); +end; +{------------------------------------------------------------------------------} +procedure TForm1.cmbFontSizeKeyPress(Sender: TObject; var Key: Char); +begin + if ord(Key)=VK_RETURN then begin + Key := #0; + cmbFontSizeClick(nil); + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.cmbFontSizeExit(Sender: TObject); +begin + cmbFontSizeClick(nil); +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitUndoClick(Sender: TObject); +begin + rve.Undo; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitRedoClick(Sender: TObject); +begin + rve.Redo; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitCutClick(Sender: TObject); +begin + rve.CutDef; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitCopyClick(Sender: TObject); +begin + rve.CopyDef; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitPasteClick(Sender: TObject); +begin + rve.Paste; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitDeleteClick(Sender: TObject); +begin + rve.DeleteSelection; +end; +{------------------------------------------------------------------------------} +function TForm1.SaveIfNeeded: Boolean; +begin + Result := True; + if rve.Modified then + case Application.MessageBox('Save file now?','File was modified', + MB_ICONQUESTION or MB_YESNOCANCEL) of + IDYES: + Result := Save; + IDNO: + Result := True; + IDCANCEL: + Result := False; + end; +end; +{------------------------------------------------------------------------------} +function TForm1.Save: Boolean; +begin + if FileName='' then + Result := SaveAs + else begin + rve.SaveRVF(FileName, False); + rve.Modified := False; + StatusBar1.Panels[0].Text := ''; + Result := True; + end; +end; +{------------------------------------------------------------------------------} +function TForm1.SaveAs: Boolean; +begin + if sd.Execute then begin + FileName := sd.FileName; + Result := Save; + if Result then + Caption := ExtractFileName(FileName) + '- RDemo'; + end + else + Result := False; +end; +{------------------------------------------------------------------------------} +procedure TForm1.Open; +begin + if not SaveIfNeeded then exit; + rve.Modified := False; + New; + if od.Execute then begin + FileName := od.FileName; + rve.LoadRVF(FileName); + rve.Format; + rveCurTextStyleChanged(nil); + rveCurParaStyleChanged(nil); + StatusBar1.Panels[0].Text := ''; + Caption := ExtractFileName(FileName) + '- RDemo'; + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.New; +begin + if not SaveIfNeeded then exit; + FileName := ''; + StatusBar1.Panels[0].Text := ''; + Caption := 'Unnamed - RDemo'; + rve.LeftMargin := 5; + rve.RightMargin := 5; + rve.TopMargin := 5; + rve.BottomMargin := 5; + rve.BackgroundBitmap := nil; + rve.BackgroundStyle := bsNoBitmap; + rve.Clear; + rve.DeleteUnusedStyles(True, True, True); + rve.Format; + // you can delete non default styles here... + rveCurTextStyleChanged(nil); + rveCurParaStyleChanged(nil); +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitNewClick(Sender: TObject); +begin + New; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitOpenClick(Sender: TObject); +begin + Open; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitSaveClick(Sender: TObject); +begin + Save; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitSaveAsClick(Sender: TObject); +begin + SaveAs; +end; +{------------------------------------------------------------------------------} +procedure TForm1.mitExitClick(Sender: TObject); +begin + Close; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + CanClose := SaveIfNeeded; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Notes/Notes.dpr b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Notes.dpr new file mode 100644 index 0000000..67a8a24 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Notes.dpr @@ -0,0 +1,14 @@ +program Notes; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}, + PreviewFrm in 'PreviewFrm.pas' {frmPreview}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Notes/Notes.dproj b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Notes.dproj new file mode 100644 index 0000000..3622428 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Notes.dproj @@ -0,0 +1,106 @@ + + + {965a20c8-7196-4a66-bad3-4eb62e740ddd} + Notes.dpr + Debug + AnyCPU + DCC32 + Notes.exe + 12.0 + Debug + + + true + + + true + Base + true + + + true + Base + true + + + Notes.exe + + + 7.0 + False + False + 0 + RELEASE;$(DCC_Define) + + + 7.0 + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ +
frmPreview
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + Notes.dpr + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Notes/Notes.res b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Notes.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Notes.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Notes/PreviewFrm.dfm b/12.0.4/Demos/DelphiUnicode/Editors/Notes/PreviewFrm.dfm new file mode 100644 index 0000000..680e646 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Notes/PreviewFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Notes/PreviewFrm.pas b/12.0.4/Demos/DelphiUnicode/Editors/Notes/PreviewFrm.pas new file mode 100644 index 0000000..e8ce6b7 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Notes/PreviewFrm.pas @@ -0,0 +1,103 @@ +unit PreviewFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVScroll, CRVPP, RVPP, ExtCtrls; + +type + TfrmPreview = class(TForm) + Panel1: TPanel; + rvpp: TRVPrintPreview; + cmb: TComboBox; + Button1: TButton; + Button2: TButton; + Button3: TButton; + Button4: TButton; + Label1: TLabel; + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + procedure cmbExit(Sender: TObject); + procedure cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvppZoomChanged(Sender: TObject); + private + { Private declarations } + procedure UpdateZoom; + public + { Public declarations } + end; + +implementation + +{$R *.DFM} +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button1Click(Sender: TObject); +begin + rvpp.First; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button2Click(Sender: TObject); +begin + rvpp.Prev; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button3Click(Sender: TObject); +begin + rvpp.Next; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.Button4Click(Sender: TObject); +begin + rvpp.Last; + Label1.Caption :=Format('%d of %d', [rvpp.PageNo, rvpp.RVPrint.PagesCount]); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbExit(Sender: TObject); +begin + UpdateZoom; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.cmbKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_RETURN then begin + UpdateZoom; + Key := 0; + end; +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.UpdateZoom; +var s: String; + zoom: Integer; +begin + s := Trim(cmb.Text); + if s='Page width' then begin + rvpp.ZoomMode := rvzmPageWidth; + exit; + end; + if s='Full page' then begin + rvpp.ZoomMode := rvzmFullPage; + exit; + end; + if (s<>'') and (s[Length(s)]='%') then + s := Copy(s,1,Length(s)-1); + zoom := StrToIntDef(s,0); + if (zoom<10) or (zoom>500) then + Application.MessageBox('Please enter number from 10 to 500','Scale',MB_OK or MB_ICONSTOP) + else + rvpp.SetZoom(zoom); +end; +{-----------------------------------------------------------------------} +procedure TfrmPreview.rvppZoomChanged(Sender: TObject); +begin + cmb.Text := IntToStr(rvpp.ZoomPercent)+'%'; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Notes/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Unit1.dfm new file mode 100644 index 0000000..3bc4193 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Editors/Notes/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Unit1.pas new file mode 100644 index 0000000..d730610 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Editors/Notes/Unit1.pas @@ -0,0 +1,815 @@ +unit Unit1; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, Buttons, ComCtrls, ExtCtrls, Menus, + RVStyle, RVScroll, RichView, RVEdit, RVFuncs, RVNote, PtblRV, RVItem, RVTable; + +{==============================================================================} +{ RichEditor Demo with footnotes, endnotes and print preview. + See "Notes" main menu. +{==============================================================================} + +type + TDemoFileFormat = (dffRVF, dffRTF); + + + TForm1 = class(TForm) + Panel1: TPanel; + StatusBar1: TStatusBar; + rvs: TRVStyle; + cmbFont: TComboBox; + btnBold: TSpeedButton; + btnItalic: TSpeedButton; + btnUnderline: TSpeedButton; + btnFont: TSpeedButton; + btnLeft: TSpeedButton; + btnCenter: TSpeedButton; + btnRight: TSpeedButton; + btnJustify: TSpeedButton; + btnOpen: TSpeedButton; + btnSave: TSpeedButton; + btnSaveAs: TSpeedButton; + btnNew: TSpeedButton; + cmbFontSize: TComboBox; + Label2: TLabel; + Label3: TLabel; + MainMenu1: TMainMenu; + File1: TMenuItem; + mitOpen: TMenuItem; + mitSave: TMenuItem; + mitNew: TMenuItem; + mitSaveAs: TMenuItem; + N1: TMenuItem; + mitExit: TMenuItem; + Edit1: TMenuItem; + mitUndo: TMenuItem; + mitRedo: TMenuItem; + N2: TMenuItem; + mitCut: TMenuItem; + mitCopy: TMenuItem; + mitPaste: TMenuItem; + mitDelete: TMenuItem; + od: TOpenDialog; + sd: TSaveDialog; + fd: TFontDialog; + btnIdentInc: TSpeedButton; + btnIdentDec: TSpeedButton; + btnFontColor: TSpeedButton; + btnFontBackColor: TSpeedButton; + SpeedButton1: TSpeedButton; + cd: TColorDialog; + Panel2: TPanel; + rveMain: TRichViewEdit; + Splitter1: TSplitter; + rveNote: TRichViewEdit; + Endnotes1: TMenuItem; + mitInsertEndnote: TMenuItem; + N3: TMenuItem; + mitInsertNoteReference: TMenuItem; + RVPrint1: TRVPrint; + N4: TMenuItem; + mitPreview: TMenuItem; + mitInsertFootnote: TMenuItem; + procedure mitNewClick(Sender: TObject); + procedure mitOpenClick(Sender: TObject); + procedure mitSaveClick(Sender: TObject); + procedure mitSaveAsClick(Sender: TObject); + procedure mitExitClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure rveChange(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure rveCurTextStyleChanged(Sender: TObject); + procedure rveCurParaStyleChanged(Sender: TObject); + procedure cmbFontClick(Sender: TObject); + procedure rveStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); + procedure mitUndoClick(Sender: TObject); + procedure mitRedoClick(Sender: TObject); + procedure mitCutClick(Sender: TObject); + procedure mitCopyClick(Sender: TObject); + procedure mitPasteClick(Sender: TObject); + procedure mitDeleteClick(Sender: TObject); + procedure mitFontClick(Sender: TObject); + procedure btnApplyParaClick(Sender: TObject); + procedure cmbFontSizeClick(Sender: TObject); + procedure cmbFontSizeKeyPress(Sender: TObject; var Key: Char); + procedure cmbFontSizeExit(Sender: TObject); + procedure FontStyleButtonClick(Sender: TObject); + procedure rveParaStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); + procedure btnIdentDecClick(Sender: TObject); + procedure btnIdentIncClick(Sender: TObject); + procedure btnFontColorClick(Sender: TObject); + procedure btnFontBackColorClick(Sender: TObject); + procedure SpeedButton1Click(Sender: TObject); + procedure rveNoteEnter(Sender: TObject); + procedure mitInsertEndnoteClick(Sender: TObject); + procedure rveMainCaretMove(Sender: TObject); + procedure rveMainEnter(Sender: TObject); + procedure rveNoteExit(Sender: TObject); + procedure mitInsertNoteReferenceClick(Sender: TObject); + procedure mitPreviewClick(Sender: TObject); + procedure mitInsertFootnoteClick(Sender: TObject); + private + { Private declarations } + FileName, FontName: String; + FileFormat: TDemoFileFormat; + IgnoreChanges: Boolean; + FontSize: Integer; + ActiveEditor: TCustomRichViewEdit; + FActiveNoteItem: TCustomRVNoteItemInfo; + function SaveIfNeeded: Boolean; + function Save: Boolean; + function SaveAs: Boolean; + procedure Open; + procedure New; + function GetAlignmentFromUI: TRVAlignment; + procedure SetAlignmentToUI(Alignment: TRVAlignment); + procedure DisableNote(Init: Boolean=False); + procedure EditNote(NoteItem: TCustomRVNoteItemInfo); + procedure UpdateNote; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +uses PreviewFrm; + +// Parameters for ApplyStyleConversion +const + TEXT_BOLD = 1; + TEXT_ITALIC = 2; + TEXT_UNDERLINE = 3; + TEXT_APPLYFONTNAME = 4; + TEXT_APPLYFONT = 5; + TEXT_APPLYFONTSIZE = 6; + TEXT_COLOR = 7; + TEXT_BACKCOLOR = 8; +// Parameters for ApplyParaStyleConversion + PARA_ALIGNMENT = 1; + PARA_INDENTINC = 2; + PARA_INDENTDEC = 3; + PARA_COLOR = 4; + +{$R *.DFM} +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +begin + // Filling font names combobox + cmbFont.Items.Assign(Screen.Fonts); + ActiveEditor := rveMain; + New; +end; +{------------------------------------------------------------------------------} +{ Document in rveMain or rveNote was changed } +procedure TForm1.rveChange(Sender: TObject); +begin + StatusBar1.SimpleText := 'Modified'; +end; +{------------------------------------------------------------------------------} +{ Current text style in rveMain or rveNote was changed } +procedure TForm1.rveCurTextStyleChanged(Sender: TObject); +var fi: TFontInfo; + rve: TCustomRichViewEdit; +begin + rve := TCustomRichViewEdit(Sender).GetRootEditor; + if rve<>ActiveEditor then + exit; + IgnoreChanges := True; + // Changing selection in comboboxes with font names and sizes: + fi := rvs.TextStyles[rve.CurTextStyleNo]; + cmbFont.ItemIndex := cmbFont.Items.IndexOf(fi.FontName); + cmbFontSize.Text := IntToStr(fi.Size); + // Checking font buttons + btnBold.Down := fsBold in fi.Style; + btnItalic.Down := fsItalic in fi.Style; + btnUnderline.Down := fsUnderline in fi.Style; + IgnoreChanges := False; +end; +{------------------------------------------------------------------------------} +{ Current paragraph style in rveMain or rveNote was changed } +procedure TForm1.rveCurParaStyleChanged(Sender: TObject); +var rve: TCustomRichViewEdit; +begin + rve := TCustomRichViewEdit(Sender).GetRootEditor; + if rve<>ActiveEditor then + exit; + SetAlignmentToUI(rvs.ParaStyles[rve.CurParaStyleNo].Alignment); +end; +{------------------------------------------------------------------------------} +{ Returns paragraph alignment selected in the toolbar } +function TForm1.GetAlignmentFromUI: TRVAlignment; +begin + if btnLeft.Down then + Result := rvaLeft + else if btnRight.Down then + Result := rvaRight + else if btnCenter.Down then + Result := rvaCenter + else + Result := rvaJustify; +end; +{------------------------------------------------------------------------------} +{ Sets Alignment to the toolbar } +procedure TForm1.SetAlignmentToUI(Alignment: TRVAlignment); +begin + case Alignment of + rvaLeft: + btnLeft.Down := True; + rvaCenter: + btnCenter.Down := True; + rvaRight: + btnRight.Down := True; + rvaJustify: + btnJustify.Down := True; + end; +end; +{------------------------------------------------------------------------------} +{ Applying font name to ActiveEditor } +procedure TForm1.cmbFontClick(Sender: TObject); +begin + + if (cmbFont.ItemIndex<>-1) then begin + if not IgnoreChanges then begin + FontName := cmbFont.Items[cmbFont.ItemIndex]; + ActiveEditor.ApplyStyleConversion(TEXT_APPLYFONTNAME); + end; + end; + if Visible then + ActiveEditor.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Applying font size to ActiveEditor } +procedure TForm1.cmbFontSizeClick(Sender: TObject); +begin + if (cmbFontSize.Text<>'') and not IgnoreChanges then begin + FontSize := StrToIntDef(cmbFontSize.Text, 10); + ActiveEditor.ApplyStyleConversion(TEXT_APPLYFONTSIZE); + end; + if Visible then + ActiveEditor.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Applying bold/italic/underline to ActiveEditor } +procedure TForm1.FontStyleButtonClick(Sender: TObject); +var Button: TSpeedButton; +begin + Button := Sender as TSpeedButton; + // constants TEXT_BOLD, TEXT_ITALIC and TEXT_UNDERLINE are + // assigned to the tags of corresponding buttons + ActiveEditor.ApplyStyleConversion(Button.Tag); +end; +{------------------------------------------------------------------------------} +{ Applying font to ActiveEditor } +procedure TForm1.mitFontClick(Sender: TObject); +begin + fd.Font.Assign(rvs.TextStyles[ActiveEditor.CurTextStyleNo]); + if fd.Execute then begin + ActiveEditor.ApplyStyleConversion(TEXT_APPLYFONT); + end; +end; +{------------------------------------------------------------------------------} +{ Applying text color to ActiveEditor } +procedure TForm1.btnFontColorClick(Sender: TObject); +begin + cd.Color := rvs.TextStyles[ActiveEditor.CurTextStyleNo].Color; + if cd.Execute then + ActiveEditor.ApplyStyleConversion(TEXT_COLOR); +end; +{------------------------------------------------------------------------------} +{ Applying text background color to ActiveEditor } +procedure TForm1.btnFontBackColorClick(Sender: TObject); +begin + case Application.MessageBox('Make the selected text background transparent?'#13+ + '(YES - make transparent; NO - choose color)', + 'Text Background', MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + cd.Color := clNone; + IDNO: + begin + cd.Color := rvs.TextStyles[ActiveEditor.CurTextStyleNo].BackColor; + if cd.Color=clNone then + cd.Color := clWhite; + if not cd.Execute then + exit; + end; + IDCANCEL: + exit; + end; + ActiveEditor.ApplyStyleConversion(TEXT_BACKCOLOR); +end; +{------------------------------------------------------------------------------} +{ Applying paragraph background color to ActiveEditor } +procedure TForm1.SpeedButton1Click(Sender: TObject); +begin + case Application.MessageBox('Make the selected paragraph background transparent?'#13+ + '(YES - make transparent; NO - choose color)', + 'Text Background', MB_YESNOCANCEL or MB_ICONQUESTION) of + IDYES: + cd.Color := clNone; + IDNO: + begin + cd.Color := rvs.ParaStyles[ActiveEditor.CurParaStyleNo].Background.Color; + if cd.Color=clNone then + cd.Color := clWhite; + if not cd.Execute then + exit; + end; + IDCANCEL: + exit; + end; + ActiveEditor.ApplyParaStyleConversion(PARA_COLOR); +end; +{------------------------------------------------------------------------------} +{ Applying paragraph alignment to ActiveEditor } +procedure TForm1.btnApplyParaClick(Sender: TObject); +begin + ActiveEditor.ApplyParaStyleConversion(PARA_ALIGNMENT); +end; +{------------------------------------------------------------------------------} +{ changing left indents in ActiveEditor } +procedure TForm1.btnIdentDecClick(Sender: TObject); +begin + ActiveEditor.ApplyParaStyleConversion(PARA_INDENTDEC); +end; + +procedure TForm1.btnIdentIncClick(Sender: TObject); +begin + ActiveEditor.ApplyParaStyleConversion(PARA_INDENTINC); +end; +{------------------------------------------------------------------------------} +{ rveMain's & rveNote's OnStyleConversion } +procedure TForm1.rveStyleConversion(Sender: TCustomRichViewEdit; StyleNo, + UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer); +var FontInfo: TFontInfo; +begin + FontInfo := TFontInfo.Create(nil); + try + FontInfo.Assign(rvs.TextStyles[StyleNo]); + case UserData of + TEXT_BOLD: + if btnBold.Down then + FontInfo.Style := FontInfo.Style+[fsBold] + else + FontInfo.Style := FontInfo.Style-[fsBold]; + TEXT_ITALIC: + if btnItalic.Down then + FontInfo.Style := FontInfo.Style+[fsItalic] + else + FontInfo.Style := FontInfo.Style-[fsItalic]; + TEXT_UNDERLINE: + if btnUnderline.Down then + FontInfo.Style := FontInfo.Style+[fsUnderline] + else + FontInfo.Style := FontInfo.Style-[fsUnderline]; + TEXT_APPLYFONTNAME: + FontInfo.FontName := FontName; + TEXT_APPLYFONTSIZE: + FontInfo.Size := FontSize; + TEXT_APPLYFONT: + FontInfo.Assign(fd.Font); + TEXT_COLOR: + FontInfo.Color := cd.Color; + TEXT_BACKCOLOR: + FontInfo.BackColor := cd.Color; + // add your code here.... + end; + NewStyleNo := rvs.TextStyles.FindSuchStyle(StyleNo,FontInfo,RVAllFontInfoProperties); + if NewStyleNo=-1 then begin + rvs.TextStyles.Add; + NewStyleNo := rvs.TextStyles.Count-1; + rvs.TextStyles[NewStyleNo].Assign(FontInfo); + rvs.TextStyles[NewStyleNo].Standard := False; + end; + finally + FontInfo.Free; + end; +end; +{------------------------------------------------------------------------------} +{ rveMain's & rveNote's OnParaStyleConversion } +procedure TForm1.rveParaStyleConversion(Sender: TCustomRichViewEdit; + StyleNo, UserData: Integer; AppliedToText: Boolean; + var NewStyleNo: Integer); +var ParaInfo: TParaInfo; +begin + ParaInfo := TParaInfo.Create(nil); + try + ParaInfo.Assign(rvs.ParaStyles[StyleNo]); + case UserData of + PARA_ALIGNMENT: + ParaInfo.Alignment := GetAlignmentFromUI; + PARA_INDENTINC: + begin + ParaInfo.LeftIndent := ParaInfo.LeftIndent+20; + if ParaInfo.LeftIndent>200 then + ParaInfo.LeftIndent := 200; + end; + PARA_INDENTDEC: + begin + ParaInfo.LeftIndent := ParaInfo.LeftIndent-20; + if ParaInfo.LeftIndent<0 then + ParaInfo.LeftIndent := 0; + end; + PARA_COLOR: + ParaInfo.Background.Color := cd.Color; + // add your code here.... + end; + NewStyleNo := rvs.ParaStyles.FindSuchStyle(StyleNo,ParaInfo,RVAllParaInfoProperties); + if NewStyleNo=-1 then begin + rvs.ParaStyles.Add; + NewStyleNo := rvs.ParaStyles.Count-1; + rvs.ParaStyles[NewStyleNo].Assign(ParaInfo); + rvs.ParaStyles[NewStyleNo].Standard := False; + end; + finally + ParaInfo.Free; + end; +end; +{------------------------------------------------------------------------------} +{ cmbFontSize combobox: Enter key triggers OnClick } +procedure TForm1.cmbFontSizeKeyPress(Sender: TObject; var Key: Char); +begin + if ord(Key)=VK_RETURN then begin + Key := #0; + cmbFontSizeClick(nil); + end; +end; +{------------------------------------------------------------------------------} +{ cmbFontSize combobox: moving focus from it triggers OnClick } +procedure TForm1.cmbFontSizeExit(Sender: TObject); +begin + cmbFontSizeClick(nil); +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Undo } +procedure TForm1.mitUndoClick(Sender: TObject); +begin + ActiveEditor.Undo; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Redo } +procedure TForm1.mitRedoClick(Sender: TObject); +begin + ActiveEditor.Redo; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Cut } +procedure TForm1.mitCutClick(Sender: TObject); +begin + ActiveEditor.CutDef; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Copy } +procedure TForm1.mitCopyClick(Sender: TObject); +begin + ActiveEditor.CopyDef; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Paste } +procedure TForm1.mitPasteClick(Sender: TObject); +begin + ActiveEditor.Paste; +end; +{------------------------------------------------------------------------------} +{ Menu Edit | Delete } +procedure TForm1.mitDeleteClick(Sender: TObject); +begin + ActiveEditor.DeleteSelection; +end; +{------------------------------------------------------------------------------} +{ Saves note text (if it was edited) in the main document, then asks user + to save the document. + Returns True if: + - the user answers "No", or + - the user answers "Yes" and the document was saved. + Returns False if: + - the user answers "Cancel", or + - the user answers "Yes" and the document was not saved. } +function TForm1.SaveIfNeeded: Boolean; +begin + Result := True; + UpdateNote; + if rveMain.Modified then + case Application.MessageBox('Save file now?','File was modified', + MB_ICONQUESTION or MB_YESNOCANCEL) of + IDYES: + Result := Save; + IDNO: + Result := True; + IDCANCEL: + Result := False; + end; +end; +{------------------------------------------------------------------------------} +{ Saves the document. If this is a new document, calls SaveAs. + Returns True on successful saving } +function TForm1.Save: Boolean; +begin + if FileName='' then + Result := SaveAs + else begin + UpdateNote; + Result := False; + case FileFormat of + dffRVF: + Result := rveMain.SaveRVF(FileName, False); + dffRTF: + Result := rveMain.SaveRTF(FileName, False); + end; + if Result then begin + rveMain.Modified := False; + StatusBar1.SimpleText := ''; + end + else begin + Application.MessageBox('Cannot save file','Error', MB_OK or MB_ICONSTOP); + Result := SaveAs; + end; + end; +end; +{------------------------------------------------------------------------------} +{ Displays save dialog and calls Save to save document. + Returns True on successful saving } +function TForm1.SaveAs: Boolean; +begin + sd.FileName := FileName; + sd.FilterIndex := ord(FileFormat)+1; + if sd.Execute then begin + FileName := sd.FileName; + FileFormat := TDemoFileFormat(sd.FilterIndex-1); + Result := Save; + if Result then + Caption := ExtractFileName(FileName) + '- RDemo'; + end + else + Result := False; +end; +{------------------------------------------------------------------------------} +{ Asks to save the existing document. + Opens document from file } +procedure TForm1.Open; +var r: Boolean; +begin + if not SaveIfNeeded then exit; + rveMain.Modified := False; + New; + if od.Execute then begin + r := False; + DisableNote; + rveMain.Clear; + rveMain.DeleteUnusedStyles(True, True, True); + FileName := od.FileName; + case od.FilterIndex of + 1: + begin + r := rveMain.LoadRVF(FileName); + FileFormat := dffRVF; + end; + 2: + begin + r := rveMain.LoadRTF(FileName); + FileFormat := dffRTF; + end; + end; + rveMain.Format; + rveCurTextStyleChanged(ActiveEditor); + rveCurParaStyleChanged(ActiveEditor); + DisableNote(True); + StatusBar1.SimpleText := ''; + Caption := ExtractFileName(FileName) + '- RDemo'; + if not r then + Application.MessageBox('Error while opening or reading file','Error', + MB_OK or MB_ICONSTOP); + end; +end; +{------------------------------------------------------------------------------} +{ Asks to save the existing document. Creates a new document } +procedure TForm1.New; +begin + if not SaveIfNeeded then exit; + FileName := ''; + FileFormat := dffRVF; + StatusBar1.SimpleText := ''; + Caption := 'Unnamed - RDemo'; + DisableNote(True); + rveMain.LeftMargin := 5; + rveMain.RightMargin := 5; + rveMain.TopMargin := 5; + rveMain.BottomMargin := 5; + rveMain.BackgroundBitmap := nil; + rveMain.BackgroundStyle := bsNoBitmap; + rveMain.Clear; + rveMain.DeleteUnusedStyles(True, True, True); + rveMain.Format; + rveCurTextStyleChanged(ActiveEditor); + rveCurParaStyleChanged(ActiveEditor); +end; +{------------------------------------------------------------------------------} +{ Menu File | New } +procedure TForm1.mitNewClick(Sender: TObject); +begin + New; +end; +{------------------------------------------------------------------------------} +{ Menu File | Open } +procedure TForm1.mitOpenClick(Sender: TObject); +begin + Open; +end; +{------------------------------------------------------------------------------} +{ Menu File | Save } +procedure TForm1.mitSaveClick(Sender: TObject); +begin + Save; +end; +{------------------------------------------------------------------------------} +{ Menu File | Save As } +procedure TForm1.mitSaveAsClick(Sender: TObject); +begin + SaveAs; +end; +{------------------------------------------------------------------------------} +{ Menu File | Print Preview } +procedure TForm1.mitPreviewClick(Sender: TObject); +var frm: TfrmPreview; +begin + UpdateNote; + RVPrint1.AssignSource(rveMain); + RVPrint1.FormatPages(rvdoALL); + frm := TfrmPreview.Create(Application); + try + frm.rvpp.RVPrint := RVPrint1; + frm.Button1Click(nil); + frm.ShowModal; + finally + frm.Free; + end; + RVPrint1.Clear; +end; +{------------------------------------------------------------------------------} +{ Menu File | Exit } +procedure TForm1.mitExitClick(Sender: TObject); +begin + Close; +end; +{------------------------------------------------------------------------------} +{ Form1.OnCloseQuery } +procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + CanClose := SaveIfNeeded; +end; +{------------------------------------------------------------------------------} +{ Occurs when input focus is set to rveMain } +procedure TForm1.rveMainEnter(Sender: TObject); +begin + ActiveEditor := rveMain; + rveCurTextStyleChanged(ActiveEditor); + rveCurParaStyleChanged(ActiveEditor); + mitInsertFootnote.Enabled := True; + mitInsertEndnote.Enabled := True; + mitInsertNoteReference.Enabled := False; +end; +{------------------------------------------------------------------------------} +{ Occurs when input focus is set to rveNote } +procedure TForm1.rveNoteEnter(Sender: TObject); +begin + ActiveEditor := rveNote; + rveCurTextStyleChanged(ActiveEditor); + rveCurParaStyleChanged(ActiveEditor); + mitInsertFootnote.Enabled := False; + mitInsertEndnote.Enabled := False; + mitInsertNoteReference.Enabled := True; +end; +{------------------------------------------------------------------------------} +{ Disables rveNote } +procedure TForm1.DisableNote(Init: Boolean); +begin + if Init or (FActiveNoteItem<>nil) then begin + FActiveNoteItem := nil; + rveNote.Enabled := False; + rveNote.Color := clBtnFace; + rveNote.Clear; + rveNote.AddNL('(footnote or endnote is not selected)', 0, 0); + rveNote.Format; + end; +end; +{------------------------------------------------------------------------------} +{ Starts editing NoteItem's Document in rveNote } +procedure TForm1.EditNote(NoteItem: TCustomRVNoteItemInfo); +var Stream: TMemoryStream; +begin + if FActiveNoteItem = NoteItem then + exit; + FActiveNoteItem := NoteItem; + rveNote.NoteText := NoteItem.Text; // this text is displayed in + // TRVNoteReferenceItemInfo items + + rveNote.Enabled := True; + rveNote.Color := clWindow; + rveNote.Clear; + Stream := TMemoryStream.Create; + try + NoteItem.Document.SaveRVFToStream(Stream); + Stream.Position := 0; + rveNote.LoadRVFFromStream(Stream); + finally + Stream.Free; + end; + with rveNote do begin + Format; + SetSelectionBounds(ItemCount-1, GetOffsAfterItem(ItemCount-1), + ItemCount-1, GetOffsAfterItem(ItemCount-1)); + end; +end; +{------------------------------------------------------------------------------} +{ Saves changes made in rveNote to FActiveNoteItem.Document. This operation + can be undone and redone by the user } +procedure TForm1.UpdateNote; +var Stream: TMemoryStream; +begin + if not rveNote.Modified then + exit; + Stream := TMemoryStream.Create; + try + rveNote.SaveRVFToStream(Stream, False); + FActiveNoteItem.ReplaceDocumentEd(Stream); // this is an editing operation + // in rveMain, can be undone by user + finally + Stream.Free; + end; + rveNote.Modified := False; +end; +{------------------------------------------------------------------------------} +{ Menu Notes | Insert Endnote. + This command is enabled only if ActiveEditor = rveMain. + This command inserts a new endnote in rveMain. In the endnote document, it + adds the note reference (TRVNoteReferenceItemInfo, displays endnote number) + and one space character. Because of rveMain.CaretMove, this endnote will be + immediately opened in rveNote. + Moving input focus to rveNote } +procedure TForm1.mitInsertEndnoteClick(Sender: TObject); +var EndNote: TRVEndnoteItemInfo; + NoteRef: TRVNoteReferenceItemInfo; +begin + EndNote := TRVEndnoteItemInfo.CreateEx(rveMain.RVData, + RVGetNoteTextStyleNo(rvs, rveMain.CurTextStyleNo), 1, False); + NoteRef := TRVNoteReferenceItemInfo.CreateEx(EndNote.Document, RVGetNoteTextStyleNo(rvs,0)); + EndNote.Document.AddItem('', NoteRef); + EndNote.Document.AddNL(' ', 0, -1); + if rveMain.InsertItem('', EndNote) then + rveNote.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Menu Notes | Insert Footnote. } +procedure TForm1.mitInsertFootnoteClick(Sender: TObject); +var FootNote: TRVFootnoteItemInfo; + NoteRef: TRVNoteReferenceItemInfo; +begin + FootNote := TRVFootnoteItemInfo.CreateEx(rveMain.RVData, + RVGetNoteTextStyleNo(rvs, rveMain.CurTextStyleNo), 1, False); + NoteRef := TRVNoteReferenceItemInfo.CreateEx(FootNote.Document, RVGetNoteTextStyleNo(rvs,0)); + FootNote.Document.AddItem('', NoteRef); + FootNote.Document.AddNL(' ', 0, -1); + if rveMain.InsertItem('', FootNote) then + rveNote.SetFocus; +end; +{------------------------------------------------------------------------------} +{ Menu Notes | Insert Footnote/Endnote Number. + This command is enabled only if ActiveEditor = rveNote. + Inserts note reference (TRVNoteReferenceItemInfo, displays endnote number) in + rveNote. + This command is not really necessary, but may be useful if the user acidentally + deleted the initial reference } +procedure TForm1.mitInsertNoteReferenceClick(Sender: TObject); +var NoteRef: TRVNoteReferenceItemInfo; +begin + NoteRef := TRVNoteReferenceItemInfo.CreateEx(rveNote.RVData, + RVGetNoteTextStyleNo(rvs,rveNote.CurTextStyleNo)); + rveNote.InsertItem('', NoteRef); +end; +{------------------------------------------------------------------------------} +{ rveMain.OnCaretMove. Updates rveNote } +procedure TForm1.rveMainCaretMove(Sender: TObject); +begin + if rveMain.GetCurrentItem is TCustomRVNoteItemInfo then + EditNote(rveMain.GetCurrentItem as TCustomRVNoteItemInfo) + else begin + UpdateNote; + DisableNote; + end; +end; +{------------------------------------------------------------------------------} +{ When moving input focus from rveNote, we update note document (if it was edited) } +procedure TForm1.rveNoteExit(Sender: TObject); +begin + UpdateNote; +end; +{------------------------------------------------------------------------------} + +end. diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo1Frm.dfm b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo1Frm.dfm new file mode 100644 index 0000000..0dfcb7d Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo1Frm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo1Frm.pas b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo1Frm.pas new file mode 100644 index 0000000..efe74d8 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo1Frm.pas @@ -0,0 +1,94 @@ +unit Demo1Frm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, StdCtrls, Menus; + +type + TfrmDemo1 = class(TForm) + lst: TListBox; + rv: TRichView; + pm: TPopupMenu; + mitShowCP: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure rvCheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); + procedure lstDblClick(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure pmPopup(Sender: TObject); + procedure mitShowCPClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + + +implementation +uses MainFrm; +{$R *.DFM} +{-----------------------------------------------------------} +procedure TfrmDemo1.FormCreate(Sender: TObject); +var SearchRec: TSearchRec; +begin + lst.Items.BeginUpdate; + rv.AddNL('When you scroll this document to some file, the corresponding item'+ + ' in the list box is highlighted.',sncomHeading,0); + rv.AddNL('Double-click on the left listbox to scroll to the file.', sncomHeading,0); + rv.AddNL('Right-click to show/hide "checkpoints".', sncomHeading,0); + if FindFirst(ExtractFilePath(Application.ExeName)+'*.pas', 0,SearchRec) = 0 then + repeat + lst.Items.Add(SearchRec.Name); + // Marking next added item with checkpoint + rv.AddNamedCheckpointEx(SearchRec.Name, True); + // Adding name of file + rv.AddNL(SearchRec.Name,sncomKeyword,3); + // Adding text from file. + // Last parameter = True, so all text will be loaded as one + // paragraph, and displayed in the single frame + rv.LoadText(ExtractFilePath(Application.ExeName)+SearchRec.Name, sncomNormal, 2, True); + until FindNext(SearchRec)<>0; + FindClose(SearchRec); + lst.Items.EndUpdate; + rv.Format; +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.rvCheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); +begin + if CheckpointData=nil then + lst.ItemIndex := -1 + else + lst.ItemIndex := rv.GetCheckpointNo(CheckpointData); +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.lstDblClick(Sender: TObject); +begin + if lst.ItemIndex=-1 then exit; + rv.ScrollTo(rv.GetCheckpointY(lst.ItemIndex)); +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.pmPopup(Sender: TObject); +begin + mitShowCP.Checked := rvoShowCheckpoints in rv.Options; +end; +{-----------------------------------------------------------} +procedure TfrmDemo1.mitShowCPClick(Sender: TObject); +begin + if rvoShowCheckpoints in rv.Options then + rv.Options := rv.Options - [rvoShowCheckpoints] + else + rv.Options := rv.Options + [rvoShowCheckpoints]; + rv.Invalidate; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo2Frm.dfm b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo2Frm.dfm new file mode 100644 index 0000000..466fc29 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo2Frm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo2Frm.pas b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo2Frm.pas new file mode 100644 index 0000000..94629d6 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo2Frm.pas @@ -0,0 +1,181 @@ +unit Demo2Frm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, + ImgList, Menus; + +type + TfrmDemo2 = class(TForm) + rv: TRichView; + rvs: TRVStyle; + fdlg: TFontDialog; + cdlg: TColorDialog; + pm: TPopupMenu; + mitBack: TMenuItem; + mitBreak: TMenuItem; + mitText: TMenuItem; + mitHighlight: TMenuItem; + il: TImageList; + procedure FormCreate(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvRVMouseDown(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure mitBackClick(Sender: TObject); + procedure mitBreakClick(Sender: TObject); + procedure mitTextClick(Sender: TObject); + procedure rvRVMouseUp(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure mitHighlightClick(Sender: TObject); + private + { Private declarations } + procedure ChangeBackgroundColor; + procedure ChangeTextStyle(StyleNo: Integer); + procedure ChangeBreakColor(ItemNo: Integer); + procedure ChangeHighlightColor(StyleNo: Integer); + public + { Public declarations } + end; + +implementation + +{$R *.DFM} +{-----------------------------------------------------------} +procedure TfrmDemo2.ChangeBackgroundColor; +begin + cdlg.Color := rvs.Color; + if cdlg.Execute then begin + rvs.Color := cdlg.Color; + rv.Invalidate; + end; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.ChangeBreakColor(ItemNo: Integer); +var BreakWidth,BreakWidth2: Byte; + BreakTag, i: Integer; + BreakColor: TColor; + BreakStyle: TRVBreakStyle; +begin + rv.GetBreakInfo(ItemNo, BreakWidth, BreakStyle, BreakColor, BreakTag); + cdlg.Color := BreakColor; + // RichView has no styles of "breaks", each "break" is individual + // So for changing color of all "breaks" with the specified width we need + // to check the whole document + if cdlg.Execute then begin + for i := 0 to rv.ItemCount-1 do + if rv.GetItemStyle(i)=rvsBreak then begin + rv.GetBreakInfo(i, BreakWidth2, BreakStyle, BreakColor, BreakTag); + if BreakWidth2=BreakWidth then + rv.SetBreakInfo(i, BreakWidth2, BreakStyle, cdlg.Color, BreakTag); + end; + rv.Invalidate; + end; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.ChangeHighlightColor(StyleNo: Integer); +begin + cdlg.Color := rvs.TextStyles[StyleNo].HoverColor; + if cdlg.Execute then + rvs.TextStyles[StyleNo].HoverColor := cdlg.Color; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.ChangeTextStyle(StyleNo: Integer); +begin + fdlg.Font.Assign(rvs.TextStyles[StyleNo]); + if fdlg.Execute then begin + rvs.TextStyles[StyleNo].Assign(fdlg.Font); + rv.Format; + end; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.FormCreate(Sender: TObject); +begin + rv.AddNL('Click on text, line or background to customize',1,1); + rv.AddNL('Right click for menu',1,1); + rv.AddBreakEx(1,rvbsLine,clGreen); + rv.AddBulletEx('', 0, il, 0); + rv.Add(' - thin line', 0); + rv.AddBulletEx('', 1, il, 0); + rv.Add(' - thick line', 0); + rv.AddBreakEx(2,rvbsLine,clSilver); + rv.AddNL('', 0,0); + rv.AddNL('This is a normal text with ', 0,0); + rv.Add('hypertext link',2); + rv.Add('.',0); + rv.AddNL('', 0,0); + rv.AddNL('This is a bottom text ', 3,0); + rv.AddBreakEx(1,rvbsLine,clGreen); + rv.AddNL('ESC closes window',1,1); + rv.Format; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.rvRVMouseDown(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); +var StyleNo: Integer; +begin + if Button<>mbLeft then exit; + if ItemNo=-1 then begin + ChangeBackgroundColor; + exit; + end; + StyleNo := rv.GetItemStyle(ItemNo); + case StyleNo of + rvsBullet: + Application.MessageBox('This is just a pointer to "break"', 'Bullet', + MB_OK or MB_ICONINFORMATION); + rvsBreak: + ChangeBreakColor(ItemNo); + else + ChangeTextStyle(StyleNo); + end; +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.rvRVMouseUp(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); +var StyleNo: Integer; + p: TPoint; +begin + if Button<>mbRight then exit; + pm.Tag := ItemNo; + StyleNo := 0;// avoiding warning + if ItemNo<>-1 then + StyleNo := rv.GetItemStyle(ItemNo); + + mitBack.Visible := ItemNo=-1; + mitBreak.Visible := (ItemNo>=0) and (StyleNo=rvsBreak); + mitText.Visible := (ItemNo>=0) and (StyleNo>=0); + mitHighlight.Visible := mitText.Visible and rvs.TextStyles[StyleNo].Jump; + p := rv.ClientToScreen(Point(X,Y)); + pm.Popup(p.X,p.Y); +end; +{-----------------------------------------------------------} +procedure TfrmDemo2.mitBackClick(Sender: TObject); +begin + ChangeBackgroundColor; +end; + +procedure TfrmDemo2.mitBreakClick(Sender: TObject); +begin + ChangeBreakColor(pm.Tag); +end; + +procedure TfrmDemo2.mitTextClick(Sender: TObject); +begin + ChangeTextStyle(rv.GetItemStyle(pm.Tag)); +end; + +procedure TfrmDemo2.mitHighlightClick(Sender: TObject); +begin + ChangeHighlightColor(rv.GetItemStyle(pm.Tag)); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo3Frm.dfm b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo3Frm.dfm new file mode 100644 index 0000000..4935dec Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo3Frm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo3Frm.pas b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo3Frm.pas new file mode 100644 index 0000000..597fa4c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo3Frm.pas @@ -0,0 +1,115 @@ +unit Demo3Frm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, ComCtrls, RVStyle, RVScroll, RichView, + ImgList, ExtCtrls; + +type + TfrmDemo3 = class(TForm) + PageControl1: TPageControl; + rv: TRichView; + TabSheet1: TTabSheet; + TabSheet2: TTabSheet; + TabSheet3: TTabSheet; + Page4: TTabSheet; + Label1: TLabel; + Label2: TLabel; + Edit1: TEdit; + Label3: TLabel; + Edit2: TEdit; + RadioGroup1: TRadioGroup; + CheckBox1: TCheckBox; + CheckBox2: TCheckBox; + CheckBox3: TCheckBox; + Memo1: TMemo; + Label4: TLabel; + il: TImageList; + procedure Change(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure rvClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + procedure BuildSummary; + end; + + +implementation +uses MainFrm; +{$R *.DFM} + +procedure TfrmDemo3.BuildSummary; +const OffOn: array [Boolean] of String = ('Off', 'On'); + Checks: array [Boolean] of Integer = (1, 2); +begin + rv.Clear; + rv.AddNL('Query', sncomHeading,1); + + rv.AddBulletEx('', 0, il, 0); + rv.Add('Edit1: ', sncomKeyword); + rv.Add(Edit1.Text, sncomNormal); + + rv.AddBulletEx('', 0, il, 0); + rv.Add('Edit2: ', sncomKeyword); + rv.Add(Edit2.Text, sncomNormal); + + rv.AddBreakEx(1, rvbsLine, clRed); + + if RadioGroup1.ItemIndex<>-1 then begin + rv.AddBulletEx('', 3, il, 0); + rv.Add('Menu: ', sncomKeyword); + rv.Add(RadioGroup1.Items[RadioGroup1.ItemIndex], sncomNormal); + end; + + rv.AddBreakEx(1, rvbsLine, clRed); + + rv.AddNL('Check1: ', sncomKeyword, 0); + rv.AddBulletEx('', Checks[Checkbox1.Checked], il, -1); + rv.Add(OffOn[Checkbox1.Checked], sncomNormal); + + rv.AddNL('Check2: ', sncomKeyword, 0); + rv.AddBulletEx('', Checks[Checkbox2.Checked], il, -1); + rv.Add(OffOn[Checkbox2.Checked], sncomNormal); + + rv.AddNL('Check3: ', sncomKeyword, 0); + rv.AddBulletEx('', Checks[Checkbox3.Checked], il, -1); + rv.Add(OffOn[Checkbox3.Checked], sncomNormal); + + rv.AddBreakEx(1, rvbsLine, clRed); + + rv.AddBulletEx('', 0, il, 0); + rv.Add('Memo1: ',sncomKeyword); + rv.AddTextNL(Memo1.Lines.Text, sncomNormal, -1, 0); + rv.Format; +end; + +procedure TfrmDemo3.Change(Sender: TObject); +begin + BuildSummary; +end; + +procedure TfrmDemo3.FormCreate(Sender: TObject); +begin + BuildSummary; +end; + +procedure TfrmDemo3.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; + +procedure TfrmDemo3.rvClick(Sender: TObject); +begin + if not rv.SelectionExists then + Application.MessageBox('This RichView only for view, do not click it', 'Info', + MB_OK or MB_ICONEXCLAMATION); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo4Frm.dfm b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo4Frm.dfm new file mode 100644 index 0000000..b366d92 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo4Frm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo4Frm.pas b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo4Frm.pas new file mode 100644 index 0000000..e06fac3 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo4Frm.pas @@ -0,0 +1,118 @@ +unit Demo4Frm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, + ImgList, Menus; + +type + TfrmDemo4 = class(TForm) + rv: TRichView; + rvs: TRVStyle; + pm: TPopupMenu; + Watch1: TMenuItem; + Phone1: TMenuItem; + Keyboard1: TMenuItem; + NoSmokeSign1: TMenuItem; + Socket1: TMenuItem; + Pot1: TMenuItem; + Books1: TMenuItem; + Bridge1: TMenuItem; + ilGoods: TImageList; + il: TImageList; + procedure FormCreate(Sender: TObject); + procedure rvJump(Sender: TObject; id: Integer); + procedure pmItemClick(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + private + { Private declarations } + Goods: array[0..9] of Integer; + GoodsCount: Integer; + public + { Public declarations } + procedure BuildDoc; + end; + +implementation + +const Descriptions: array [0..7] of String = +( + 'Exact time twice a day!', + 'Unique 9-button model', + 'Additional keys available on request', + 'Must have for any airline!', + 'Second hand', + 'Universal thing', + '2 kg', + 'Brooklyn Bridge, available only today, 10% discount for the first 10 buyers!' +); + + +{$R *.DFM} + +{ TfrmDemo4 } + +procedure TfrmDemo4.BuildDoc; +var i, VPos: Integer; +begin + VPos := rv.VScrollPos; + rv.Clear; + rv.AddNL('Welcome to our shop!',1,1); + rv.AddNL('Today we have:',2,1); + for i := 0 to GoodsCount-1 do begin + rv.AddBulletEx('', Goods[i], ilGoods, 0); + rv.Add(pm.Items[Goods[i]].Caption,3); + rv.Add(' ('+Descriptions[Goods[i]]+') ',0); + rv.AddHotspotEx('', 2,3, il, -1); + rv.AddBreak; + end; + if GoodsCount<>10 then + rv.AddHotspotEx('', 0,1, il, 0); + rv.Format; + rv.VScrollPos := VPos; +end; + +procedure TfrmDemo4.FormCreate(Sender: TObject); +begin + {$IFDEF RICHVIEWDEF5} + pm.AutoHotkeys := maManual; + {$ENDIF} + BuildDoc; +end; + +procedure TfrmDemo4.rvJump(Sender: TObject; id: Integer); +var p: TPoint; + i: Integer; +begin + if id=GoodsCount then begin + // adding + GetCursorPos(p); + pm.Popup(p.x, p.y); + end + else begin + // deleting + for i := id to GoodsCount-2 do + Goods[i] := Goods[i+1]; + dec(GoodsCount); + BuildDoc; + end; +end; + +procedure TfrmDemo4.pmItemClick(Sender: TObject); +begin + Goods[GoodsCount] := TMenuItem(Sender).MenuIndex; + inc(GoodsCount); + BuildDoc; + rv.VScrollPos := rv.VScrollMax; +end; + +procedure TfrmDemo4.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo5Frm.dfm b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo5Frm.dfm new file mode 100644 index 0000000..3ce58e0 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo5Frm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo5Frm.pas b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo5Frm.pas new file mode 100644 index 0000000..881d869 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo5Frm.pas @@ -0,0 +1,143 @@ +unit Demo5Frm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, StdCtrls, ExtCtrls, Menus, RVFuncs, ShellApi; + +type + TfrmDemo5 = class(TForm) + pan: TPanel; + edit: TEdit; + rv: TRichView; + rvs: TRVStyle; + pm: TPopupMenu; + mitFreezescrolling: TMenuItem; + procedure FormCreate(Sender: TObject); + procedure FormResize(Sender: TObject); + procedure editKeyPress(Sender: TObject; var Key: Char); + procedure rvSelect(Sender: TObject); + procedure pmPopup(Sender: TObject); + procedure mitFreezescrollingClick(Sender: TObject); + procedure rvJump(Sender: TObject; id: Integer); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmDemo5: TfrmDemo5; + +implementation + +{$R *.DFM} +{--------------------------------------------------------------} +procedure AddWithURLs(s: String; rv: TRichView; DefStyle, UrlStyle: Integer); +var Before, CurrentWord, Space: String; + p: Integer; + ParaNo: Integer; +begin + ParaNo := 0; + Before := ''; + if s = '' then begin + rv.AddNL('', DefStyle, ParaNo); + exit; + end; + while s<>'' do begin + p := Pos(' ', s); + if p=0 then p := Length(s)+1; + CurrentWord := Copy(s, 1, p-1); + Space := Copy(s, p, 1); + s := Copy(s, p+1, Length(s)); + if RVIsURL(CurrentWord) or RVIsEmail(CurrentWord) then begin + if Before<>'' then begin + rv.AddNL(Before, DefStyle, ParaNo); + ParaNo := -1; + Before := ''; + end; + rv.AddNL(CurrentWord, UrlStyle, ParaNo); + ParaNo := -1; + if Space<>'' then rv.Add(Space, DefStyle); + end + else + Before := Before + CurrentWord+Space; + end; + if Before<>'' then + rv.AddNL(Before, DefStyle, ParaNo); +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.FormCreate(Sender: TObject); +begin + pan.ClientHeight := edit.Height; + edit.SetBounds(0,0,pan.ClientWidth,pan.ClientHeight); + rv.AddNL('Use right-click menu to freeze scrolling when appending text', + 2, 0); + rv.AddNL('Try quick-copy: selection is copied automatically when done', + 2, 0); + AddWithURLs('You can use URLs and e-mail ( like www.trichview.com )', + rv, 2, 1); + rv.Format; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.FormResize(Sender: TObject); +begin + edit.Width := pan.ClientWidth; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.editKeyPress(Sender: TObject; var Key: Char); +begin + if Key=#13 then begin + AddWithURLS(edit.Text,rv,0,1); + rv.FormatTail; + Key := #0; + edit.Text := ''; + end; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.rvSelect(Sender: TObject); +begin + // Quick-copy + if rv.SelectionExists then begin + rv.CopyDef; + rv.Deselect; + rv.Invalidate; + end; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.pmPopup(Sender: TObject); +begin + mitFreezeScrolling.Checked := not (rvoScrollToEnd in rv.Options); +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.mitFreezescrollingClick(Sender: TObject); +begin + if (rvoScrollToEnd in rv.Options) then + rv.Options := rv.Options-[rvoScrollToEnd] + else + rv.Options := rv.Options+[rvoScrollToEnd]; +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.rvJump(Sender: TObject; id: Integer); +var ItemNo: Integer; + s: String; +begin + ItemNo := rv.GetJumpPointItemNo(id); + s := rv.GetItemText(ItemNo); + if not RVIsURL(s) and RVIsEmail(s) then + s := 'mailto:'+s; + ShellExecute(Application.Handle, 'open', PChar(s), nil, nil, SW_NORMAL); +end; +{--------------------------------------------------------------} +procedure TfrmDemo5.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; + + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo6Frm.dfm b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo6Frm.dfm new file mode 100644 index 0000000..d20c2ac Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo6Frm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo6Frm.pas b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo6Frm.pas new file mode 100644 index 0000000..5ab4903 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo6Frm.pas @@ -0,0 +1,86 @@ +unit Demo6Frm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVScroll, RichView, ExtCtrls, + ImgList, RVStyle; + +type + TfrmDemo6 = class(TForm) + Close: TButton; + rvs: TRVStyle; + tmr: TTimer; + rv: TRichView; + il: TImageList; + procedure FormCreate(Sender: TObject); + procedure tmrTimer(Sender: TObject); + private + { Private declarations } + Red: Byte; + DRed: Shortint; + ImageIndex: Integer; + public + { Public declarations } + end; + +var + frmDemo6: TfrmDemo6; + +implementation + +{$R *.DFM} + +procedure TfrmDemo6.FormCreate(Sender: TObject); +const crlf:String = chr(13)+chr(10); +begin + ImageIndex := 0; + Red := 150; + DRed := 5; + rvs.TextStyles[rvsHeading].Color := RGB(Red,0,0); + rv.TopMargin := rv.Height; + rv.BottomMargin := rv.Height; + + rv.AddBulletEx('',0,il,1); + rv.Add('Credits Demo', 1); + rv.AddTextNL( + 'Roberto Nelson'+crlf+ + 'Bruce Young'+crlf+ + 'Kim Lambert'+crlf+ + 'Leslie Johnson'+crlf+ + 'Phil Forest'+crlf+ + 'K.J. Weston'+crlf+ + 'Lee Terry'+crlf+ + 'Stewart Hall'+crlf+ + 'Katherine Young'+crlf+ + 'Chris Papadopulos'+crlf+ + 'Pete Fisher'+crlf+ + 'Ann Bennet'+crlf+ + 'Roger De Sousa'+crlf+ + 'Janet Boldwin'+crlf+ + 'Roger Reeves'+crlf+ + 'Willie Stansbury'+crlf+ + 'Leslie Phong'+crlf+ + 'Ashok Ramanathan',0,0,0); + rv.AddNL('and other people from Employee.db',2,0); + rv.VSmallStep := 1; + rv.Format; +end; + +procedure TfrmDemo6.tmrTimer(Sender: TObject); +begin + if rv.VScrollPos<>rv.VScrollMax then + rv.VScrollPos := rv.VScrollPos+1 + else + rv.VScrollPos := 0; + inc(Red, DRed); + rvs.TextStyles[rvsHeading].Color := RGB(Red,0,0); + if (Red=255) or (Red=100) then DRed := -DRed; + inc(ImageIndex); + if ImageIndex=il.Count then + ImageIndex := 0; + rv.SetBulletInfo(0,'',ImageIndex,nil,0); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo7Frm.dfm b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo7Frm.dfm new file mode 100644 index 0000000..5b511b0 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo7Frm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo7Frm.pas b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo7Frm.pas new file mode 100644 index 0000000..f7c7e3c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/Demo7Frm.pas @@ -0,0 +1,67 @@ +unit Demo7Frm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVEdit, ExtCtrls, StdCtrls; + +type + TfrmDemo7 = class(TForm) + Panel1: TPanel; + rve: TRichViewEdit; + txt: TEdit; + btnMark: TButton; + btnUnmark: TButton; + procedure FormCreate(Sender: TObject); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure btnMarkClick(Sender: TObject); + procedure btnUnmarkClick(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + + +implementation +uses MainFrm; + +{$R *.DFM} + +{ + See advanced versions of this demo on the forum: + http://www.trichview.com/forums/viewtopic.php?t=57 +} + +procedure TfrmDemo7.FormCreate(Sender: TObject); +begin + rve.Clear; + rve.LoadText(ExtractFilePath(Application.ExeName)+'MainFrm.pas',0,0, False); + rve.Format; +end; + +procedure TfrmDemo7.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + if Key=VK_ESCAPE then Close; +end; + +procedure TfrmDemo7.btnMarkClick(Sender: TObject); +begin + rve.SetSelectionBounds(0,rve.GetOffsBeforeItem(0),0,rve.GetOffsBeforeItem(0)); + while rve.SearchText(txt.Text, [rvseoDown]) do + rve.ApplyTextStyle(sncomMarked); +// Note: every call of ApplyTextStyle reformats affected paragraphs +end; + +procedure TfrmDemo7.btnUnmarkClick(Sender: TObject); +begin + rve.SelectAll; + rve.ApplyTextStyle(sncomNormal); + rve.Deselect; + rve.Refresh; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/MainFrm.dfm b/12.0.4/Demos/DelphiUnicode/MultiDemo/MainFrm.dfm new file mode 100644 index 0000000..b15479c Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/MainFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/MainFrm.pas b/12.0.4/Demos/DelphiUnicode/MultiDemo/MainFrm.pas new file mode 100644 index 0000000..efe2277 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/MainFrm.pas @@ -0,0 +1,125 @@ +unit MainFrm; + +interface +{$I RV_Defs.inc} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, + ImgList, MMSystem; + +type + TfrmMain = class(TForm) + rv: TRichView; + rvs: TRVStyle; + rvTop: TRichView; + rvsForDemos: TRVStyle; + il: TImageList; + procedure FormCreate(Sender: TObject); + procedure rvJump(Sender: TObject; id: Integer); + procedure rvRVMouseMove(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + + +{ Constants for text styles, rvsForDemos.TextStyles } +const sncomNormal = 0; + sncomHeading = 1; + sncomKeyword = 2; + sncomMarked = 3; + +{ Constants for text styles, rvs.TextStyles } +const snNormal = 0; + snHeading = 1; + snExit = 3; + snJump = 4; + +implementation + +uses PopupFrm, + Demo1Frm, Demo2Frm, Demo3Frm, + Demo4Frm, Demo5Frm, Demo6Frm, + Demo7Frm; +{$R *.DFM} +{-----------------------------------------------------} +procedure TfrmMain.FormCreate(Sender: TObject); +begin + + rvTop.BackgroundBitmap := rv.BackgroundBitmap; + rvTop.AddNL(' ', snNormal, 1); + rvTop.AddNL('RichView Demos', snHeading, 1); + rvTop.AddNL(' ', snNormal, 1); + rvTop.Format; + rvTop.Height := rvTop.DocumentHeight; + + rv.AddNL('Click links for demos, click balls for hints', snNormal, 1); + rv.AddHotspotExTag('', 0,1,il, 1, 1); + rv.Add('1. ', snNormal); + rv.AddNLTag('"Checkpoints"', snJump, -1, 1); + rv.AddHotspotExTag('', 0,1,il, 1, 2); + rv.Add('2. ', snNormal); + rv.AddNLTag('Customizing Styles', snJump, -1, 2); + rv.AddHotspotExTag('', 0,1,il, 1, 3); + rv.Add('3. ', snNormal); + rv.AddNLTag('Query Summary', snJump, -1, 3); + rv.AddHotspotExTag('', 0,1,il, 1, 4); + rv.Add('4. ', snNormal); + rv.AddNLTag('Interactive document', snJump, -1, 4); + rv.AddHotspotExTag('', 0,1,il, 1, 5); + rv.Add('5. ', snNormal); + rv.AddNLTag('Chat Simulation', snJump, -1, 5); + rv.AddHotspotExTag('', 0,1,il, 1, 6); + rv.Add('6. ', snNormal); + rv.AddNLTag('Credits Demo', snJump, -1, 6); + rv.AddHotspotExTag('', 0,1,il, 1, 7); + rv.Add('7. ', snNormal); + rv.AddNLTag('Search and mark', snJump, -1, 7); + rv.AddBreakEx(2, rvbsLine, clGreen); + rv.AddNL('Exit', snExit, 1); + rv.Format; +end; +{-----------------------------------------------------} +procedure TfrmMain.rvJump(Sender: TObject; id: Integer); +var ItemNo, StyleNo, ItemTag: Integer; + frm: TFrmPopup; + frmDemo: TForm; +begin + ItemNo := rv.GetJumpPointItemNo(id); + StyleNo := rv.GetItemStyle(ItemNo); + ItemTag := rv.GetItemTag(ItemNo); + if StyleNo=rvsHotspot then begin + frm := TFrmPopup.Create(Self); + frm.ShowTopic(ItemTag); + end + else begin + frmDemo := nil; + case ItemTag of + 1: frmDemo := TfrmDemo1.Create(Application); + 2: frmDemo := TfrmDemo2.Create(Application); + 3: frmDemo := TfrmDemo3.Create(Application); + 4: frmDemo := TfrmDemo4.Create(Application); + 5: frmDemo := TfrmDemo5.Create(Application); + 6: frmDemo := TfrmDemo6.Create(Application); + 7: frmDemo := TfrmDemo7.Create(Application); + 0: Close; + end; + if frmDemo<>nil then begin + frmDemo.ShowModal; + frmDemo.Free; + end; + end; +end; +{-----------------------------------------------------} +procedure TfrmMain.rvRVMouseMove(Sender: TObject; id: Integer); +begin + if id<>-1 then + PlaySound(PChar(ExtractFilePath(Application.ExeName)+'UCS.wav'), + 0,SND_ASYNC or SND_FILENAME); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/PopupFrm.dfm b/12.0.4/Demos/DelphiUnicode/MultiDemo/PopupFrm.dfm new file mode 100644 index 0000000..4b8a3bf Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/PopupFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/PopupFrm.pas b/12.0.4/Demos/DelphiUnicode/MultiDemo/PopupFrm.pas new file mode 100644 index 0000000..4716a99 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/PopupFrm.pas @@ -0,0 +1,124 @@ +unit PopupFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVStyle, RVScroll, RichView, ExtCtrls; + +type + TfrmPopup = class(TForm) + Panel1: TPanel; + rv: TRichView; + rvs: TRVStyle; + procedure rvKeyPress(Sender: TObject; var Key: Char); + procedure rvClick(Sender: TObject); + procedure FormDeactivate(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + private + { Private declarations } + procedure Build(DemoNo: Integer); + procedure MoveToMouse; + public + { Public declarations } + procedure ShowTopic(DemoNo: Integer); + end; + +implementation + +{$R *.DFM} +uses MainFrm; + +procedure TfrmPopup.rvKeyPress(Sender: TObject; var Key: Char); +begin + Key:=#0; + Close; +end; + +procedure TfrmPopup.rvClick(Sender: TObject); +begin + Close; +end; + +procedure TfrmPopup.FormDeactivate(Sender: TObject); +begin + Close; +end; + +procedure TfrmPopup.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TfrmPopup.Build(DemoNo: Integer); +begin + case DemoNo of + 1: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('"Checkpoints"', 1); + rv.AddNL('Synchronizing document scrolling with list of contents', 0,0); + rv.AddNL('(This demo loads *.pas files from application directory)', 0,0); + end; + 2: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Customizing Styles', 1); + rv.AddNL('Interactive customization of document', 0,0); + end; + 3: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Query Summary', 1); + rv.AddNL('Complex query at one look', 0,0); + end; + 4: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Interactive document', 1); + rv.AddNL('Document is a control itself', 0,0); + end; + 5: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Chat Simulation', 1); + rv.AddNL('Autoscroll, URL detection', 0,0); + end; + 6: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Credits Demo:', 1); + rv.AddNL('Scrolling text and images on timer', 0,0); + end; + 7: + begin + rv.AddBulletEx('',1,frmMain.il,1); + rv.Add('Search and mark:', 1); + rv.AddNL('Search and mark words in editor', 0,0); + rv.AddNL('(This demo loads MainFrm.pas from the application directory)', 0,0); + end; + end; + rv.Format; + Height := rv.DocumentHeight+20; +end; + +procedure TfrmPopup.MoveToMouse; +var p: TPoint; +begin + GetCursorPos(p); + if p.x+Width>Screen.Width then + p.x := Screen.Width-Width; + if p.y+Height>Screen.Height then + p.y := Screen.Height-Height; + Left := p.x; + Top := p.y; +end; + +procedure TfrmPopup.ShowTopic(DemoNo: Integer); +begin + Build(DemoNo); + MoveToMouse; + Show; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/RVDemo.dpr b/12.0.4/Demos/DelphiUnicode/MultiDemo/RVDemo.dpr new file mode 100644 index 0000000..d9a9173 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/RVDemo.dpr @@ -0,0 +1,21 @@ +program RVDemo; + +uses + Forms, + MainFrm in 'MainFrm.pas' {frmMain}, + PopupFrm in 'PopupFrm.pas' {frmPopup}, + Demo3Frm in 'Demo3Frm.pas' {frmDemo3}, + Demo1Frm in 'Demo1Frm.pas' {frmDemo1}, + Demo2Frm in 'Demo2Frm.pas' {frmDemo2}, + Demo4Frm in 'Demo4Frm.pas' {frmDemo4}, + Demo5Frm in 'Demo5Frm.pas' {frmDemo5}, + Demo6Frm in 'Demo6Frm.pas' {frmDemo6}, + Demo7Frm in 'Demo7Frm.pas' {frmDemo7}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/RVDemo.dproj b/12.0.4/Demos/DelphiUnicode/MultiDemo/RVDemo.dproj new file mode 100644 index 0000000..ccdf487 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/MultiDemo/RVDemo.dproj @@ -0,0 +1,123 @@ + + + {AF5CD1E6-9ED5-476E-8B49-4F3A9090F17E} + RVDemo.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + RVDemo.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
frmMain
+
+ +
frmPopup
+
+ +
frmDemo3
+
+ +
frmDemo1
+
+ +
frmDemo2
+
+ +
frmDemo4
+
+ +
frmDemo5
+
+ +
frmDemo6
+
+ +
frmDemo7
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + RVDemo.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/RVDemo.res b/12.0.4/Demos/DelphiUnicode/MultiDemo/RVDemo.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/RVDemo.res differ diff --git a/12.0.4/Demos/DelphiUnicode/MultiDemo/UCS.wav b/12.0.4/Demos/DelphiUnicode/MultiDemo/UCS.wav new file mode 100644 index 0000000..1b2f7bf Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/MultiDemo/UCS.wav differ diff --git a/12.0.4/Demos/DelphiUnicode/OfficeConverters/MainFrm.dfm b/12.0.4/Demos/DelphiUnicode/OfficeConverters/MainFrm.dfm new file mode 100644 index 0000000..fc3a4fe Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/OfficeConverters/MainFrm.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/OfficeConverters/MainFrm.pas b/12.0.4/Demos/DelphiUnicode/OfficeConverters/MainFrm.pas new file mode 100644 index 0000000..b8325ec --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/OfficeConverters/MainFrm.pas @@ -0,0 +1,144 @@ +unit MainFrm; + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ShellApi, + Dialogs, StdCtrls, ComCtrls, RVStyle, RVScroll, + RichView, RVFuncs, ExtCtrls, RVEdit, CRVData, CRVFData, RVOfficeCnv, RVTypes, + GifImg, PngImage; + +type + TfrmMain = class(TForm) + od: TOpenDialog; + rvs: TRVStyle; + rve: TRichViewEdit; + Panel1: TPanel; + btnOpen: TButton; + rvc: TRVOfficeConverter; + btnSave: TButton; + sd: TSaveDialog; + pb: TProgressBar; + procedure btnOpenClick(Sender: TObject); + procedure rvcConverting(Sender: TObject; Percent: Integer); + procedure btnSaveClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure rveJump(Sender: TObject; id: Integer); + procedure rveWriteHyperlink(Sender: TCustomRichView; id: Integer; + RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; + var Target, Extras: string); + procedure rveReadHyperlink(Sender: TCustomRichView; const Target, + Extras: string; DocFormat: TRVLoadFormat; var StyleNo, ItemTag: Integer; + var ItemName: TRVRawByteString); + private + { Private declarations } + public + { Public declarations } + end; + +var + frmMain: TfrmMain; + +implementation + +{$R *.dfm} + +{====================== Import and export =====================================} +procedure TfrmMain.FormCreate(Sender: TObject); +begin + od.Filter := 'RTF (Built-In RichView Import)|*.rtf|'+rvc.GetImportFilter; + od.InitialDir := ExtractFilePath(Application.ExeName)+'test\'; + sd.Filter := 'RTF (Built-In RichView Export)|*.rtf|'+rvc.GetExportFilter; + + rve.Clear; + rve.AddNL('This demo shows how to use Microsoft® Office text converters.',0,0); + rve.AddNL( + 'First items in filters (file masks) of the file-selection dialogs are RTF import/export '+ + 'by the component itself. Others use converters.',0,0); + rve.AddNL('For HTML import testing, look at test/test.htm.',0,0); + rve.AddNL('After loading, Ctrl+click any hypertext link to view its target.',0,0); + rve.AddNL( + 'You''ll see option for HTML export via converters. You can use it, but native RichView HTML'+ + ' export gives much better results.',0,0); + rve.Format; +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.btnOpenClick(Sender: TObject); +var r: Boolean; +begin + if not od.Execute then + exit; + rve.Clear; + rve.Format; + rve.Update; + + rve.Clear; + if od.FilterIndex=1 then + r := rve.LoadRTF(od.FileName) + else begin + pb.Visible := True; + r:= rvc.ImportRV(od.FileName, rve, od.FilterIndex-2); + end; + if not r then + Application.MessageBox('Error','Error',0); + pb.Visible := False; + rve.Format; + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.btnSaveClick(Sender: TObject); +var r: Boolean; +begin + if not sd.Execute then + exit; + pb.Visible := True; + if sd.FilterIndex=1 then + r := rve.SaveRTF(sd.FileName,False) + else begin + pb.Visible := True; + r:= rvc.ExportRV(sd.FileName, rve, sd.FilterIndex-2); + end; + if not r then + Application.MessageBox('Error','Error',0); + pb.Visible := False; + rve.SetFocus; +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.rvcConverting(Sender: TObject; Percent: Integer); +begin + pb.Position := Percent; +end; +{============================ Hypertext =======================================} +// We store URLs in tags +procedure TfrmMain.rveReadHyperlink(Sender: TCustomRichView; const Target, + Extras: string; DocFormat: TRVLoadFormat; var StyleNo, ItemTag: Integer; + var ItemName: TRVRawByteString); +begin + ItemTag := Integer(StrNew(PChar(Target))); +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.rveWriteHyperlink(Sender: TCustomRichView; id: Integer; + RVData: TCustomRVData; ItemNo: Integer; SaveFormat: TRVSaveFormat; var Target, + Extras: string); +begin + Target := PChar(RVData.GetItemTag(ItemNo)); +end; +{------------------------------------------------------------------------------} +procedure TfrmMain.rveJump(Sender: TObject; id: Integer); +var ItemNo: Integer; + RVData: TCustomRVFormattedData; + s: String; +begin + rve.GetJumpPointLocation(id, RVData, ItemNo); + s := PChar(RVData.GetItemTag(ItemNo)); + ShellExecute(0, 'open', PChar(s), nil, nil, SW_SHOW); +end; + +{==============================================================================} + +initialization + RegisterClass(TGifImage); + RegisterClass(TPngImage); + + +end. diff --git a/12.0.4/Demos/DelphiUnicode/OfficeConverters/OfficeConverters.dpr b/12.0.4/Demos/DelphiUnicode/OfficeConverters/OfficeConverters.dpr new file mode 100644 index 0000000..0c33d8c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/OfficeConverters/OfficeConverters.dpr @@ -0,0 +1,13 @@ +program OfficeConverters; + +uses + Forms, + MainFrm in 'MainFrm.pas' {frmMain}; + +{$R *.res} + +begin + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/OfficeConverters/OfficeConverters.dproj b/12.0.4/Demos/DelphiUnicode/OfficeConverters/OfficeConverters.dproj new file mode 100644 index 0000000..8756469 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/OfficeConverters/OfficeConverters.dproj @@ -0,0 +1,99 @@ + + + {9EABF2C2-64A8-45E6-B8CA-FB40C2FDD840} + OfficeConverters.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + OfficeConverters.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
frmMain
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + OfficeConverters.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/OfficeConverters/OfficeConverters.res b/12.0.4/Demos/DelphiUnicode/OfficeConverters/OfficeConverters.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/OfficeConverters/OfficeConverters.res differ diff --git a/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/bt/bt.gif b/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/bt/bt.gif new file mode 100644 index 0000000..39abe6d Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/bt/bt.gif differ diff --git a/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/bt/mail.gif b/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/bt/mail.gif new file mode 100644 index 0000000..1e9edc3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/bt/mail.gif differ diff --git a/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/test.htm b/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/test.htm new file mode 100644 index 0000000..1b7dee0 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/test.htm @@ -0,0 +1,35 @@ + + +HTML Import Test + + +
+ +

HTML Import Test

+ + + + + + + + + + +
 < Below are the links to the main pages of this site
+ +    Main Page
+    Features
+    Downloads
+    Order On-line
+    Additional Resources
+    Applications with RichView 
+    Support Forums 
+    Contacts +
+
www.trichview.com
+ +
+ + + diff --git a/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/title.gif b/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/title.gif new file mode 100644 index 0000000..e21f50d Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/OfficeConverters/Test/title.gif differ diff --git a/12.0.4/Demos/DelphiUnicode/ReadMe.txt b/12.0.4/Demos/DelphiUnicode/ReadMe.txt new file mode 100644 index 0000000..2d73397 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/ReadMe.txt @@ -0,0 +1,118 @@ +================================================================ +========================= Demo projects ======================== + For Delphi 2009 +================================================================ + +See also Tutorial.txt + + +Editor\Editor 1\ + TRichViewEdit-based editors. Demonstrates editor with fixed + set of styles, saving and loading, inserting items of different + types, tables, list styles. +Editor\Editor 2\ + How to implement RichEdit-style editing operations + (make bold, apply font, etc.) +Editors\Notes\ + "Editor 2" demo with footnotes and endnotes +MultiDemo\ + Several demos in one application +DB Demo\ + 3 demo projects + - using TDBRichViewEdit + - using TDBRichView and TRichViewEdit + - using DBGrid +OfficeConverters\ + Demo for TRVOfficeConverter. + Sample HTML file is included. + +================================================================ +============== Demos in ASSORTED subdirectory ================== +================================================================ + +Load RVF\ + How to load file created in editor demo (Editor\Editor 1\) +Save HTML\ + Loading RVF files (created in editor demo) and saving + them in HTML using advanced features. +Search and Replace\ + Using search and replace dialogs with TRichViewEdit +PlanetQuiz\ + Using tables, OnMouseMove and GetItemAt +AutoComplete\ + Shows menu to modify the current word. + +========= Printing ========= + +Printing\Printing\ + How to print document. OnPagePrepaint event is used + to draw page numbers +Printing\Headers\ + Printing documents with headers and footers. Loading + RTF files with headers and footers. +Printing\ReportHelper\ + Printing using TRVReportHelper. Printing with one and + two columns. + +========= IMAGES ========= +Graphics\ToImage + Draws RichView document onto metafile canvas +Graphics\Emoticons + Replaces :) :( :| with images +Graphics\DragImg + Inserts dropped image in editor +Graphics\SharedImages + Storing graphics outside of RVF files. + +========= CUSTOM DRAWING ========= +Custom Draw\CustomDraw\ + Custom drawing in RichView. + (Delphi3+ is required, since + TBitmap.ScanLines property was used) +Custom Draw\Mathematics\ + One more example of custom drawing (math-style) + +========= HYPERTEXT FEATURES ========= +Hypertext\URLs\ + Scans for URLs in text and makes them hypertext links. + Detects URLs in the whole document, in the pasted text, on typing. +Hypertext\CreateHyperlink\ + Converts selected text to hyperlinks +Hypertext\PhoneBook\ + Simple phonebook example: listbox-like selection using + hypertext. + +========= INTERNATIONAL FEATURES ========= +International\RTL + Using BiDiMode - displaying Hebrew and Arabic text (D3+) +International\Accents + Shows processing of combined Unicode characters + (D3+, best viewed on WinNT/2000/XP) + +========= DEMONSTRATION OF FIELDS ========= +Fields\LiveLink\ + Changes in RichViewEdit are reflected in edit box and vice versa +Fields\FillInGaps + Allows to type text only in special fields in the document +Fields\MailMerge\ + Two projects. The first one allows editing template with fields, + the second projects fills this template with values +Fields\MailMerge2\ + Advanced version. Instead of changing text of text items + representing fields, this demo replaces fields with + arbitrary RVF content. +Fields\MailMerge-LabelItems\ + Mail-merge demo using TRVLabelItemInfo as fields. + Shows how to work with TRVSeqItemInfo and "smart popups" +Fields\Spreadsheet\ + Field values are calculated automatically + +========= BULLETS AND NUMBERING ========= +ListStyles\Bullets\ + How to apply paragraph bullets and numbering +ListStyles\ImageListBullets\ + Shows bullets with image list. + +======== NEW FOR DELPHI 2009 ============= +Custom Hints\ + Shows how to use balloon hints and OnItemHint event \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.dpr new file mode 100644 index 0000000..6343068 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.dproj new file mode 100644 index 0000000..5879976 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.dproj @@ -0,0 +1,99 @@ + + + {913DAF02-CD14-46F5-82D5-0DF141E2799C} + Tutorial_1_1.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_1_1.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_1_1.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.res b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Tutorial_1_1.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Unit1.dfm new file mode 100644 index 0000000..18071a6 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Unit1.pas new file mode 100644 index 0000000..5c666bd --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/1 Hello World/Unit1.pas @@ -0,0 +1,56 @@ +unit Unit1; +{==============================================================================} +{ The simplest application with RichView Package - "Hello World!" } +{ There are two components on the form: } +{ RichView1: TRichView; - component for displaying text } +{ RVStyle1: TRVStyle; - component for customizing appearance of RichView; } +{ RichView1.Style is set to RVStyle1; } +{ See more comments in TForm1.FormCreate } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // This line adds one line of text in RichView. + RichView1.AddNL('Hello World!', 0, 0); + // But text will not be displayed yet. You need to call Format method after adding + // all contents to RichView: + RichView1.Format; + + // More about AddNL method: + // The first parameter of the method ('Hello World!') is a text to display + // The second parameter defines text attributes of added text; + // It is an index in collection of text styles (RVStyle1.TextStyles) + // You can customize collection of styles using Object Inspector + // The third parameter defines paragraph attributes of added text; + // It is an index in collection of paragraph styles (RVStyle1.ParaStyles) + // AddNL is one of methods for adding content to RichView (Add*** methods) + // See "Building RichView Document" topic of help file. + // These methods append items to RichView. But component is not prepared for + // displaying data until Format method is called. +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.dpr new file mode 100644 index 0000000..600c4f4 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_2; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.dproj new file mode 100644 index 0000000..dc13cda --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.dproj @@ -0,0 +1,99 @@ + + + {3D293AD8-72F5-48B6-86A1-0AF5868DA86D} + Tutorial_1_2.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_1_2.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_1_2.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.res b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Tutorial_1_2.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Unit1.dfm new file mode 100644 index 0000000..18071a6 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Unit1.pas new file mode 100644 index 0000000..02e3c82 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/2 Text/Unit1.pas @@ -0,0 +1,62 @@ +unit Unit1; +{==============================================================================} +{ This demo shows how to add text in RichView at run-time. } +{ See comments in TForm1.FormCreate } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // Clear deletes all items of RichView. + // There are no items at the beginning, so this call of Clear is + // just for demonstration. + RichView1.Clear; + + // Adding the first paragraph. + // This paragraph has the 1-th style (centered by default; you can view/modify + // it in RVStyle1.ParaStyles property). + // This paragraph consists of one item of the 1-th text style + RichView1.AddNL('Adding Text', 1, 1); + + // Adding the second paragraph. + // This paragraph has the 0-th style (style is defined by the first item in paragraph). + RichView1.AddNL('This demo shows how to add text in ', 0, 0); + // Continuing the second paragraph. + // Note: -1 is passed as an index of paragraph style. + // This means that this item will be added to the last paragraph. + RichView1.AddNL('RichView', 3, -1); + // Continuing the second paragraph... + RichView1.AddNL('. There are two paragraphs in this document - '+ + 'the first one with centered alignment, and the second one - '+ + 'with left alignment. The first paragraph consists of one text item, '+ + 'and the second paragraph consists of three items. '+ + 'Each item is added with one call of AddNL method.', 0, -1); + // But text will not be displayed yet. You need to call Format method after adding + // all contents to RichView: + RichView1.Format; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Bars.bmp b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Bars.bmp new file mode 100644 index 0000000..337ebcc Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Bars.bmp differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.dpr new file mode 100644 index 0000000..5ad74db --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_3; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.dproj new file mode 100644 index 0000000..0038354 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.dproj @@ -0,0 +1,99 @@ + + + {7915B679-960A-4E3F-BEB7-E42A0099CA58} + Tutorial_1_3.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_1_3.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_1_3.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.res b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Tutorial_1_3.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Unit1.dfm new file mode 100644 index 0000000..cdcae28 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Unit1.pas new file mode 100644 index 0000000..3468be3 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/3 Images/Unit1.pas @@ -0,0 +1,77 @@ +unit Unit1; +{==============================================================================} +{ This demo shows how to add pictures and horizontal lines into RichView. } +{ } +{ This demo also shows how to use background image. } +{ RichView1.BackgroundBitmap is assigned to some image, and } +{ RichView1.BackgroundStyle is set to bsTiled } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, ExtCtrls, StdCtrls; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + Image1: TImage; + Label1: TLabel; + Label2: TLabel; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; + bmp: TBitmap; +begin + + RichView1.Clear; + RichView1.AddNL('Example of adding images', 1, 1); + + // Adding "break" - horizontal line + RichView1.AddBreak; + + RichView1.AddNL('Adding icon:', 0, 0); + // RichView frees inserted graphics when needed. + // So RichView1.AddPictureEx('', Image1.Picture.Graphic, -1, rvvaBaseline) + // will cause error. So we need to create copy of graphics. + + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddPictureEx('', ico, -1, rvvaBaseline); + + RichView1.AddNL('Adding bitmap:', 0, 0); + + // Adding bitmap from file: + bmp := TBitmap.Create; + bmp.LoadFromFile(ExtractFilePath(Application.ExeName)+'bars.bmp'); + RichView1.AddPictureEx('', bmp, -1, rvvaMiddle); + + RichView1.AddBreak; + + RichView1.Format; + + // About AddPictureEx: + // 1st parameter: name of picture. Allows to store additional text information + // together with image. There is no predefined meaning of this + // parameter. May be in future this string will be shown as a hint. + // 2nd parameter: image. TBitmap, TIcon, TMetafile, etc. + // 3rd parameter: index of paragraph style (-1 to continue paragraph) + // 4th parameter: vertical align of image. +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.dpr new file mode 100644 index 0000000..a28de01 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_4; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.dproj new file mode 100644 index 0000000..287be0a --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.dproj @@ -0,0 +1,121 @@ + + + {1AC6E029-A6B6-4245-8E00-5C352BA0C020} + Tutorial_1_4.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + Tutorial_1_4.exe + 00400000 + x86 + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Tutorial_1_4.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + TRichView for C++Builder 2009 + TRichView DB for C++Builder 2009 + TRichView: ScaleRichView for C++Builder 2009 + TRichView: RichViewActions for C++Builder 2009 + TRichView: ScaleRichView DB for C++Builder 2009 + TRichView: RvHTMLImporter for C++Builder 2009 + TRichView: RVXML for C++Builder 2009 + TRichView wrapper for ReportBuilder 11 for Delphi 2009 + TRichView: RVXML for Delphi 2009 + TRichView: RichViewActions for Delphi 2009 + TRichView DB for Delphi 2009 + TRichView: ScaleRichView for Delphi 2009 + TRichView: ScaleRichView DB for Delphi 2009 + TRichView: RvHTMLImporter for Delphi 2009 + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + ReportBuilder Data Access for Interbase Express + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.res b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Tutorial_1_4.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Unit1.dfm new file mode 100644 index 0000000..a962b4a Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Unit1.pas new file mode 100644 index 0000000..bb02d56 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/4 Controls/Unit1.pas @@ -0,0 +1,96 @@ +unit Unit1; +{==============================================================================} +{ This demo shows how to add controls to RichView } +{==============================================================================} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + RVScroll, RichView, RVStyle, ExtCtrls, StdCtrls; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + Label1: TLabel; + Label2: TLabel; + ComboBox1: TComboBox; + Label3: TLabel; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + procedure DoOnScrollbarChange(Sender: TObject); + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +// This event handler will be assigned to scrollbar's OnChange +procedure TForm1.DoOnScrollbarChange(Sender: TObject); +begin + Label3.Caption := IntToStr(TScrollbar(Sender).Position); +end; + +procedure TForm1.FormCreate(Sender: TObject); +var sb: TScrollbar; + pan : TPanel; +begin + RichView1.Clear; + RichView1.AddNL('Example of adding controls', 1, 1); + + // Adding "break" - horizontal line + RichView1.AddBreakEx(3, rvbsLine, clRed); + // 1st parameter - line width (AddBreak method adds break with width=1) + // 2nd parameter - reserved, must be set to rvbsLine + // 3rd parameter - color; if set to clNone, "break" will have color of the + // 0th text style (AddBreak method adds break with color=clNone) + + //-------------------------------------------// + // Example 1: adding controls from form: // + //-------------------------------------------// + // Adding combobox + RichView1.AddNL('Combobox:', 0, 0); + // AddControlEx removes control from its current parent and insert into RichView + // Just one line of code: + RichView1.AddControlEx('', Combobox1, 1, rvvaBaseline); + + //-------------------------------------------// + // Example 1: adding controls created at // + // run-time: // + //-------------------------------------------// + RichView1.AddNL('Panel with scrollbar:', 0, 1); + // Adding panel with scrollbar + pan := TPanel.Create(nil); // we can set NIL to Owner because this panel will be freed by RichView + pan.Caption := ''; + pan.Width := 100; + pan.Height := 60; + sb := TScrollbar.Create(pan); // panel will free scrollbar + sb.Parent := pan; + sb.Min := -10; + sb.Max := 10; + sb.SetBounds(10,20,80,20); + sb.OnChange := DoOnScrollbarChange; + RichView1.AddControlEx('', pan, -1, rvvaMiddle); + + RichView1.AddBreakEx(3, rvbsLine, clRed); + + RichView1.Format; + + // About AddControlEx: + // Parameters of this method are similar with parameters of AddPictureEx: + // 1st parameter: name of control. Allows to hold additional text information + // together with control. There is no predefined meaning of this + // parameter. + // 2nd parameter: control + // 3rd parameter: index of paragraph style (-1 to continue paragraph) + // 4th parameter: vertical align of control. +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.dpr new file mode 100644 index 0000000..b1cc896 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.dpr @@ -0,0 +1,13 @@ +program Tutorial_1_5; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.dproj new file mode 100644 index 0000000..4472af9 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.dproj @@ -0,0 +1,121 @@ + + + {259EFDA9-5941-4277-AA4D-517FDBEB5AC6} + Tutorial_1_5.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + Tutorial_1_5.exe + 00400000 + x86 + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + VCLApplication + + + + Tutorial_1_5.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + TRichView for C++Builder 2009 + TRichView DB for C++Builder 2009 + TRichView: ScaleRichView for C++Builder 2009 + TRichView: RichViewActions for C++Builder 2009 + TRichView: ScaleRichView DB for C++Builder 2009 + TRichView: RvHTMLImporter for C++Builder 2009 + TRichView: RVXML for C++Builder 2009 + TRichView wrapper for ReportBuilder 11 for Delphi 2009 + TRichView: RVXML for Delphi 2009 + TRichView: RichViewActions for Delphi 2009 + TRichView DB for Delphi 2009 + TRichView: ScaleRichView for Delphi 2009 + TRichView: ScaleRichView DB for Delphi 2009 + TRichView: RvHTMLImporter for Delphi 2009 + CodeGear C++Builder Office 2000 Servers Package + CodeGear C++Builder Office XP Servers Package + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + ReportBuilder Data Access for Interbase Express + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.res b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Tutorial_1_5.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Unit1.dfm new file mode 100644 index 0000000..dfd5e31 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Unit1.pas new file mode 100644 index 0000000..553366b --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/1 Building a Document/5 Bullets/Unit1.pas @@ -0,0 +1,72 @@ +unit Unit1; +{==============================================================================} +{ This demo shows how to add images from ImageLists to RichView } +{==============================================================================} + +{$I RV_Defs.inc} + +interface + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVScroll, RichView, RVStyle, ExtCtrls, StdCtrls; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + ImageList1: TImageList; + ImageList2: TImageList; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var i: Integer; +const crlf = #13#10; +begin + RichView1.Clear; + RichView1.AddNL('Example of adding bullets', 1, 1); + + // AddTextNL methods can add several paragraphs of text. + // Paragraphs can be separated with #13#10, #13 or #10 characters. + RichView1.AddTextNL('"Bullets" are the images from ImageLists. '+crlf+ + '"Bullets" provide an efficient way to store graphics in RichView, '+ + 'because only link to ImageList and index of image are stored '+ + 'per "bullet" in memory.'+crlf+ + '"Bullets" are useful when you need to add large number of the '+ + 'same picture in RichView: ', 0, 0, 0); + for i := 0 to 9 do + RichView1.AddBulletEx('', 0, ImageList1, -1); + RichView1.AddNL('You can use as many ImageList, as you wish:',0,0); + RichView1.AddBulletEx('', 0, ImageList1, -1); + RichView1.AddBulletEx('', 0, ImageList2, -1); + RichView1.AddBulletEx('', 1, ImageList1, -1); + RichView1.AddBulletEx('', 1, ImageList2, -1); + RichView1.Format; + + // About AddBulletEx: + // Parameters of this method are similar to parameters of + // AddPictureEx and AddControlEx: + // 1st parameter: name of bullet. Allows to store additional text information + // together with bullet. There is no predefined meaning of this + // parameter. May be it will be used to display hints in future. + // 2nd parameter: index of image + // 3rd parameter: ImageList; RichView holds only link to this image list, not + // a copy of it; + // 4th parameter: index of paragraph style (-1 to continue paragraph) + +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.dpr new file mode 100644 index 0000000..a882d2b --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_1; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.dproj new file mode 100644 index 0000000..7d1f2d7 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.dproj @@ -0,0 +1,101 @@ + + + {E394C47D-BAFE-4FE7-BD69-CDEBB6490836} + Tutorial_2_1.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_2_1.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + false + true + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_2_1.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.res b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Tutorial_2_1.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.dfm new file mode 100644 index 0000000..c9e4e8d Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.pas new file mode 100644 index 0000000..523c837 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/1 Info about Items/Unit1.pas @@ -0,0 +1,217 @@ +unit Unit1; + +{==============================================================================} +{ This demo shows how to read information about items in RichView } +{ Key methods and properties: } +{ - ItemCount, } +{ - GetItemStyle, } +{ - GetItemText, GetItemTag, GetBreakInfo, GetPictureInfo, GetControlInfo, } +{ GetBulletInfo, GetHotspotInfo } +{ This demo also shows "hotspots" } +{==============================================================================} + +interface + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + StdCtrls, RVScroll, RichView, RVStyle, RVTypes; + +type + TForm1 = class(TForm) + RVStyle1: TRVStyle; + RichView1: TRichView; + RichView2: TRichView; + Label1: TLabel; + Label2: TLabel; + ImageList1: TImageList; + procedure FormCreate(Sender: TObject); + private + { Private declarations } + procedure FillLeftRichView; + procedure FillRightRichView; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} +{------------------------------------------------------------------------------} +procedure TForm1.FillLeftRichView; +var bmp: TBitmap; + btn: TButton; +begin + with RichView1 do begin + AddNL('Reading information about items',1,1); + + AddBreakEx(2, rvbsLine, clRed); + + AddNL('Image: ',0,0); + bmp := TBitmap.Create; + bmp.Width := 60; + bmp.Height := 40; + bmp.Canvas.Pen.Color := clRed; + bmp.Canvas.Brush.Color := clYellow; + bmp.Canvas.Rectangle(0,0,60,40); + AddPictureEx('Yellow box', bmp, -1, rvvaMiddle); + + AddBreak; + + AddNL('Bullet: ',0,0); + AddBulletEx('Printer image',0, ImageList1, -1); + + AddBreak; + + AddNL('Hotspot: ',0,0); + AddHotspotEx('Active printer image',1, 0, ImageList1, -1); + AddNL('(move mouse to hotspot and you see picture changes;'+ + ' more information about hotspots will be in hypertext description)', + 0,-1); + + AddBreak; + + AddNL('Button: ',0,0); + btn := TButton.Create(nil); + btn.Width := 100; + btn.Caption := 'Out of order'; + AddControlEx('Button example', btn, -1, rvvaBaseline); + + Format; + end; +end; +{------------------------------------------------------------------------------} +function GetVAlignString(VAlign: TRVVAlign): String; +begin + case VAlign of + rvvaBaseline: + Result := 'text base line'; + rvvaMiddle: + Result := 'text middle'; + rvvaAbsTop: + Result := 'line top'; + rvvaAbsBottom: + Result := 'line bottom'; + rvvaAbsMiddle: + Result := 'line middle'; + else + Result := '?'; + end; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FillRightRichView; +var + i, ItemStyle: Integer; + s: String; + Tag: Integer; + {.................................................................} + procedure GetBreakInfo(ItemNo: Integer); + var Width: Byte; + Color: TColor; + Style: TRVBreakStyle; + Tag: Integer; + ColorString: String; + begin + RichView1.GetBreakInfo(ItemNo, Width, Style, Color, Tag); + if Color = clNone then + ColorString := 'line has color of the 0-th text style' + else + ColorString := ColorToString(Color); + RichView2.AddFmt('Item #%d: break. Color=%s; Width=%d', + [ItemNo, ColorString, Integer(Width)], 0, 0); + // Style is always rvbsLine in current version + end; + {.................................................................} + procedure GetPictureInfo(ItemNo: Integer); + var gr: TGraphic; + VAlign: TRVValign; + Name: TRVAnsiString; + Tag: Integer; + begin + RichView1.GetPictureInfo(ItemNo, Name, gr, VAlign, Tag); + RichView2.AddFmt('Item #%d: image (%s, %dx%d); Vertical alignment: %s; Name="%s"', + [ItemNo, gr.ClassName, gr.Width, gr.Height, GetVAlignString(VAlign), Name], + 0, 0); + end; + {.................................................................} + procedure GetControlInfo(ItemNo: Integer); + var ctrl: TControl; + VAlign: TRVValign; + Name: TRVAnsiString; + Tag: Integer; + begin + RichView1.GetControlInfo(ItemNo, Name, ctrl, VAlign, Tag); + RichView2.AddFmt('Item #%d: control (%s, %dx%d); Vertical alignment: %s; Name="%s"', + [ItemNo, ctrl.ClassName, ctrl.Width, ctrl.Height, GetVAlignString(VAlign), Name], + 0, 0); + end; + {.................................................................} + procedure GetBulletInfo(ItemNo: Integer); + var ImageList: TCustomImageList; + Name: TRVAnsiString; + ImageIndex, Tag: Integer; + begin + RichView1.GetBulletInfo(ItemNo, Name, ImageIndex, ImageList, Tag); + RichView2.AddFmt('Item #%d: bullet; ImageList="%s"; Image index=%d; Name="%s"', + [ItemNo, ImageList.Name, ImageIndex, Name], 0, 0); + end; + {.................................................................} + procedure GetHotspotInfo(ItemNo: Integer); + var ImageList: TCustomImageList; + Name: TRVAnsiString; + ImageIndex, HotImageIndex, Tag: Integer; + begin + RichView1.GetHotspotInfo(ItemNo, Name, ImageIndex, HotImageIndex, ImageList, Tag); + RichView2.AddFmt('Item #%d: bullet; ImageList="%s"; Image index=%d, Hot image index=%d; Name="%s"', + [ItemNo, ImageList.Name, ImageIndex, HotImageIndex, Name], + 0, 0); + end; + {.................................................................} +begin + + // Reading information about items + for i := 0 to RichView1.ItemCount-1 do begin + ItemStyle := RichView1.GetItemStyle(i); + if ItemStyle>=0 then begin + // Parameter of GetItemStyle - index of item (0..ItemCount). + // If GetItemStyle returns zero or positive value, + // this item is a text, and returned value is an index in + // collection of styles (RVStyle.TextStyles) + s := RichView1.GetItemText(i); + Tag := RichView1.GetItemTag(i); + RichView2.AddFmt('Item #%d: text. Value="%s". Style of text is "%s"', + [i, s, RVStyle1.TextStyles[ItemStyle].StyleName],0,0); + end + else + // If GetItemStyle returns negative value, this item is a non-text item + case ItemStyle of + rvsBreak: + GetBreakInfo(i); + rvsPicture: + GetPictureInfo(i); + rvsComponent: + GetControlInfo(i); + rvsBullet: + GetBulletInfo(i); + rvsHotspot: + GetHotspotInfo(i); + else + RichView2.AddNL('Unknown item type', 0, 0); + end; + RichView2.AddBreak; + end; + RichView2.Format; +end; +{------------------------------------------------------------------------------} +procedure TForm1.FormCreate(Sender: TObject); +begin + FillLeftRichView; + FillRightRichView; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.dpr new file mode 100644 index 0000000..96a583e --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_2; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.dproj new file mode 100644 index 0000000..6bedd25 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.dproj @@ -0,0 +1,99 @@ + + + {F547F523-86F2-496A-86BD-7B56413FA06F} + Tutorial_2_2.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_2_2.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_2_2.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.res b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Tutorial_2_2.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.dfm new file mode 100644 index 0000000..e27c6ce Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.pas new file mode 100644 index 0000000..76ade04 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/2 Checkpoints/Unit1.pas @@ -0,0 +1,124 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how to scroll to specified position of document using } +{ special invisible labels - "checkpoints" } +{ Key methods and properties: } +{ - AddNamedCheckpoint; } +{ - GetCheckpointByNo, FindCheckpointByName; } +{ - GetCheckpointY, GetCheckpointYEx; } +{ - ScrollTo } +{ - Options (rvoShowCheckpoints) } +{==============================================================================} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVStyle, RVScroll, RichView; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + Button1: TButton; + Button2: TButton; + Button3: TButton; + CheckBox1: TCheckBox; + Button4: TButton; + procedure FormCreate(Sender: TObject); + procedure CheckBox1Click(Sender: TObject); + procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); + procedure Button3Click(Sender: TObject); + procedure Button4Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var i, j: Integer; +begin + for i := 1 to 3 do begin + RichView1.AddNamedCheckpoint('C'+IntToStr(i)); + RichView1.AddFmt('Chapter %d', [i], 1,1); + for j := 0 to 30 do + RichView1.AddNL('Bla - bla - bla - bla - bla - bla - bla - bla'+ + '- bla - bla - bla - bla - bla - bla - bla - bla',0,0); + end; + RichView1.AddNamedCheckpoint('END'); + RichView1.Format; + { + Comments: + + Checkpoints are not items. They are special additional information, + associated with any item. + (in older, freeware versions, checkpoints were items) + But checkpoint can be added like any other item using Add*** methods: + AddNamedCheckpoint, AddCheckpoint, AddNamedCheckpointEx, and some other. + + AddNamedCheckpoint('') == AddCheckpoint + + Checkpoint added with any of these methods will be associated with next + added item (if no items added after it, checkpoints becomes special + end-of-text checkpoint which is not associated with any item) + + Do not try to add checkpoints one after another without items between them + (it's impossible, and causes the exception) + } +end; + +procedure TForm1.CheckBox1Click(Sender: TObject); +begin + // toggles checkpoints visibility + if Checkbox1.Checked then + RichView1.Options := RichView1.Options+[rvoShowCheckpoints] + else + RichView1.Options := RichView1.Options-[rvoShowCheckpoints]; + RichView1.Invalidate; +end; + +procedure TForm1.Button1Click(Sender: TObject); +var CheckpointData: TCheckpointData; + Y: Integer; +begin + // GetCheckpointByNo(checkpoint index) - returns value of type TCheckpointData, + // identifying checkpoint + CheckpointData := RichView1.GetCheckpointByNo(0); + // GetCheckpointYEx returns Y coordinate of checkpoint + Y := RichView1.GetCheckpointYEx(CheckpointData); + // ScrollTo - scrolls to specified Y coordinate + RichView1.ScrollTo(Y); +end; + +procedure TForm1.Button2Click(Sender: TObject); +begin + // The same actions, more compact + with RichView1 do + ScrollTo(GetCheckpointYEx(GetCheckpointByNo(1))); +end; + +procedure TForm1.Button3Click(Sender: TObject); +begin + // Even more compact + with RichView1 do + ScrollTo(GetCheckpointY(2)); +end; + +procedure TForm1.Button4Click(Sender: TObject); +begin + // We can use checkpoint name to find it + with RichView1 do + ScrollTo(GetCheckpointYEx(FindCheckpointByName('END'))); +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.dpr new file mode 100644 index 0000000..f390fb6 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_3; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.dproj new file mode 100644 index 0000000..0a8bca4 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.dproj @@ -0,0 +1,99 @@ + + + {4EF1DFD3-648C-415A-9626-327183610443} + Tutorial_2_3.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_2_3.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_2_3.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.res b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Tutorial_2_3.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.dfm new file mode 100644 index 0000000..9e24724 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.pas new file mode 100644 index 0000000..46d8ae3 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/3 List of Checkpoints/Unit1.pas @@ -0,0 +1,74 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how to obtain list of checkpoints in document. } +{ Key methods: } +{ - GetFirstCheckpoint, GetNextCheckpoint; } +{ - GetCheckpointInfo. } +{==============================================================================} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVStyle, RVScroll, RichView; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + ListBox1: TListBox; + Button1: TButton; + procedure FormCreate(Sender: TObject); + procedure Button1Click(Sender: TObject); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var i, j: Integer; + CheckpointData : TCheckpointData; + Name: String; + RaiseEvent: Boolean; + Tag: Integer; +begin + // 1. Filling in RichView + for i := 1 to 3 do begin + RichView1.AddNamedCheckpoint('C'+IntToStr(i)); + RichView1.AddFmt('Chapter %d', [i], 1,1); + for j := 0 to 30 do + RichView1.AddNL('Bla - bla - bla - bla - bla - bla - bla - bla'+ + '- bla - bla - bla - bla - bla - bla - bla - bla',0,0); + end; + RichView1.AddNamedCheckpoint('END'); + RichView1.Format; + // 2. Filling in list of checkpoints + CheckpointData := RichView1.GetFirstCheckpoint; + if CheckpointData<>nil then begin + repeat + RichView1.GetCheckpointInfo(CheckpointData, Tag, Name, RaiseEvent); + // Tag and RaiseEvent will be discussed in next demos + ListBox1.Items.Add(Name); + CheckpointData := RichView1.GetNextCheckpoint(CheckpointData); + until CheckpointData=nil; + ListBox1.ItemIndex := 0; + end; +end; + +procedure TForm1.Button1Click(Sender: TObject); +var CheckpointIndex: Integer; +begin + CheckpointIndex := ListBox1.ItemIndex; + if CheckpointIndex=-1 then exit; + RichView1.ScrollTo(RichView1.GetCheckpointY(CheckpointIndex)); +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.dpr new file mode 100644 index 0000000..f11389b --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_4; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.dproj new file mode 100644 index 0000000..cac36ea --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.dproj @@ -0,0 +1,99 @@ + + + {2503E346-90A8-46DA-B754-DF0E4F700A06} + Tutorial_2_4.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_2_4.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_2_4.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.res b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Tutorial_2_4.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.dfm new file mode 100644 index 0000000..27ee174 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.pas new file mode 100644 index 0000000..fd8e4ef --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/4 When Checkpoint Visible/Unit1.pas @@ -0,0 +1,119 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how checkpoints can generate events when they become visible } +{------------------------------------------------------------------------------} +{ Properties set: } +{ RichView1.CPEventKind = cpeAsSectionStart } +{ RichView2.CPEventKind = cpeWhenVisible } +{ rvoShowCheckpoints included in Options of both RichViews } +{------------------------------------------------------------------------------} +{ Key properties, events and methods: } +{ - CPEventKind } +{ - OnCheckpointVisible } +{ - AddNamedCheckpointEx } +{==============================================================================} +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + StdCtrls, RVStyle, RVScroll, RichView, ExtCtrls; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + Label1: TLabel; + lblChapter: TLabel; + Label2: TLabel; + RichView2: TRichView; + Label3: TLabel; + Label4: TLabel; + lblFigure: TLabel; + Image1: TImage; + Label5: TLabel; + procedure FormCreate(Sender: TObject); + procedure RichView1CheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); + procedure RichView2CheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var i, j: Integer; + ico: TIcon; +begin + // 1. Filling in left RichView + for i := 1 to 3 do begin + RichView1.AddNamedCheckpointEx('Chapter '+IntToStr(i),True); + RichView1.AddFmt('Chapter %d', [i], 1,1); + for j := 0 to 30 do + RichView1.AddNL('Bla - bla - bla - bla - bla - bla.',0,0); + end; + RichView1.Format; + // 2. Filling in right RichView + for i := 1 to 3 do begin + RichView2.AddNamedCheckpointEx('Figure '+IntToStr(i),True); + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView2.AddPictureEx('', ico, 1, rvvaBaseline); + RichView2.AddFmt('Figure %d', [i], 3,1); + for j := 0 to 30 do + RichView2.AddNL('Bla - bla - bla - bla - bla - bla.',0,0); + end; + RichView2.Format; + { + Comments: + + 1. + In this demo we use AddNamedCheckpointEx method. + It has second parameter - RaiseEvent: Boolean. + If set to True, RichView will generate event when this checkpoint + becomes visible + + 2. + Checkpoints with RaiseEvent=True can be displayed with different color + than other checkpoints. + Color of "normal" checkpoints: RVStyle.CheckpointColor; + Color of "RaiseEvent" checkpoints: RVStyle.CheckpointEvColor + } +end; + +procedure TForm1.RichView1CheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); +var Name: String; + Tag: Integer; + RE: Boolean; +begin + if CheckpointData<>nil then begin + RichView1.GetCheckpointInfo(CheckpointData, Tag, Name, RE); + lblChapter.Caption := Name; + end; +end; + +procedure TForm1.RichView2CheckpointVisible(Sender: TCustomRichView; + CheckpointData: TCheckpointData); +var Name: String; + Tag: Integer; + RE: Boolean; +begin + if CheckpointData<>nil then begin + RichView2.GetCheckpointInfo(CheckpointData, Tag, Name, RE); + lblFigure.Caption := Name; + end + else + lblFigure.Caption := '(none)'; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.dpr new file mode 100644 index 0000000..eeba5fc --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_5; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.dproj new file mode 100644 index 0000000..c6f45f8 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.dproj @@ -0,0 +1,99 @@ + + + {344143B9-F901-4065-8403-9D124092844C} + Tutorial_2_5.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_2_5.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_2_5.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.res b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Tutorial_2_5.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.dfm new file mode 100644 index 0000000..87eea11 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.pas new file mode 100644 index 0000000..63f8b93 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/5 Hypertext ID/Unit1.pas @@ -0,0 +1,86 @@ +unit Unit1; + +interface + +{==============================================================================} +{ Demo of basic using of hypertext } +{ In this demo were modified styles: RVStyle1.TextStyles[4] and } +{ RVStyle.TextStyles[5] } +{ Setting RVStyle.TextStyles[i].Jump to True turns this text style into } +{ a hypertext style. } +{ Properties of text styles affecting hypertext appearance: } +{ - HoverColor (color of hypertext under mouse (clNone for not changing) } +{ - HoverBackColor (color of hypertext background under mouse (clNone for } +{ transparent) } +{ - JumpCursor } +{------------------------------------------------------------------------------} +{ Key events and properties: } +{ - OnJump, OnRVMouseMove } +{ - FirstJumpNo } +{------------------------------------------------------------------------------} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, StdCtrls, RVStyle, RVScroll, RichView; + +type + TForm1 = class(TForm) + RichView1: TRichView; + RVStyle1: TRVStyle; + Label1: TLabel; + Panel1: TPanel; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + procedure RichView1RVMouseMove(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +begin + // RVStyle1.TextStyles[4].Jump = RVStyle1.TextStyles[5].Jump = True + // This causes these styles to represent hypertext + RichView1.AddNL('Hypertext',1,1); + RichView1.AddNL('Some text styles can be chosen as hypertext styles. ',0,0); + RichView1.Add('Like this one.',4); + RichView1.AddNL('You can have as many hypertext styles as you want. ',0,0); + RichView1.Add('Here is one more.',5); + RichView1.Format; + + { + The basic method to use hypertext is "hypertext IDs". + All hypertext links are numbered sequentially (0,1,...) from the top of + document to the bottom. These numbers are called "hypertext IDs". + Hypertext id is passed in OnJump and OnRVMouseMove events. + } + { + More correct, jumps are numbered as FirstJumpNo, FirstJumpNo+1, + FirstJumpNo+2,... + FirstJumpNo is a property of RichView, 0 by default + } +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +begin + Panel1.Caption := 'Clicked: '+IntToStr(id); +end; + +procedure TForm1.RichView1RVMouseMove(Sender: TObject; id: Integer); +begin + // id=-1 when mouse leaves hypertext jump area + if id<>-1 then + Label1.Caption := IntToStr(id) + else + Label1.Caption := '---'; +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.dpr new file mode 100644 index 0000000..07dffc1 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_6; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.dproj new file mode 100644 index 0000000..0be195a --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.dproj @@ -0,0 +1,99 @@ + + + {EF6340E6-D4A5-42D8-88D3-901A25B71DE5} + Tutorial_2_6.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_2_6.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_2_6.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.res b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Tutorial_2_6.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.dfm new file mode 100644 index 0000000..932cc58 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.pas new file mode 100644 index 0000000..525d66c --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/6 Advanced Hypertext/Unit1.pas @@ -0,0 +1,71 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo show how to use information about hypertext item. } +{------------------------------------------------------------------------------} +{ Key methods: } +{ - GetJumpPointLocation; } +{ - methods for obtaining information about items (see first demo in this } +{ group. } +{ Useful if text is self-describing (for example, for WWW addresses). } +{==============================================================================} + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVStyle, ExtCtrls, RVScroll, RichView, StdCtrls, CRVFData; + +type + TForm1 = class(TForm) + RichView1: TRichView; + Panel1: TPanel; + RVStyle1: TRVStyle; + ImageList1: TImageList; + Image1: TImage; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; +begin + RichView1.AddNL('Hypertext',1,1); + RichView1.AddNL('Some text styles can be chosen as hypertext styles. ',0,0); + RichView1.Add('Like this one.',4); + RichView1.Add(' You can have as many hypertext styles as you want. ',0); + RichView1.Add('Here is one more.',5); + RichView1.AddNL('Images from Image Lists also can be hypertext: ',0,0); + RichView1.AddHotspotEx('Pen Image', 0,1, ImageList1, -1); + RichView1.Add(' Such images are called "hotspots".',0); + RichView1.AddNL('Normal images also can be hypertext: ',0,0); + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddHotPicture('Bobo', ico, -1, rvvaBaseLine); + + RichView1.Format; +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var RVData: TCustomRVFormattedData; + ItemNo: Integer; +begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + Panel1.Caption := 'Clicked: '+RVData.GetItemText(ItemNo); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.dpr new file mode 100644 index 0000000..b41fff9 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_7; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.dproj new file mode 100644 index 0000000..6c07416 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.dproj @@ -0,0 +1,99 @@ + + + {986172E5-3A63-4D0E-AEDA-7E2B297A1370} + Tutorial_2_7.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_2_7.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_2_7.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.res b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Tutorial_2_7.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.dfm new file mode 100644 index 0000000..7d5fb4d Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.pas new file mode 100644 index 0000000..d78b2b2 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/7 Tags (Integer)/Unit1.pas @@ -0,0 +1,72 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how to use Tags of items. } +{ Each item has associated integer value - Tag. Tags are used to store } +{ additional information, which RichView does not display and does not use. } +{------------------------------------------------------------------------------} +{ All Add*** methods (except from the obsolete ones) have Add***Tag versions. } +{ Add***(...) == Add***Tag(...,0) (Tags=0 by default) } +{ For example, look AddNLTag and AddHotpotExTag in this demo. } +{ Tag of item can be obtained with GetItemTag method (or Get***Info methods) } +{ and modified with SetItemTag (or Set***Info methods). } +{==============================================================================} + +{I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVStyle, ExtCtrls, RVScroll, RichView, CRVFData; + +type + TForm1 = class(TForm) + RichView1: TRichView; + Panel1: TPanel; + RVStyle1: TRVStyle; + ImageList1: TImageList; + Image1: TImage; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; +begin + RichView1.AddNL('Some text styles can be chosen as hypertext styles. ',0,0); + RichView1.AddNLTag('Like this one.',4,-1, {!}100{!}); + RichView1.Add(' You can have as many hypertext styles as you want. ',0); + RichView1.AddNLTag('Here is one more.',5,-1, {!}200{!}); + RichView1.AddNL('Images from Image Lists also can be hypertext: ',0,0); + RichView1.AddHotspotExTag('Pen Image', 0,1, ImageList1, -1, {!}300{!}); + RichView1.Add(' Such images are called "hotspots".',0); + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddHotPictureTag('Bobo', ico, -1, rvvaBaseLine, {!}400{!}); + RichView1.Format; +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var ItemNo: Integer; + RVData: TCustomRVFormattedData; + Tag: Integer; +begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + Tag := RVData.GetItemTag(ItemNo); + Panel1.Caption := 'Clicked: Item with Tag='+IntToStr(Tag); +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.dpr new file mode 100644 index 0000000..ec6a661 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_8; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.dproj new file mode 100644 index 0000000..9daba57 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.dproj @@ -0,0 +1,102 @@ + + + {8F2EEDA0-A45D-424D-A758-99F06BD2504E} + Tutorial_2_8.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_2_8.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + false + DEBUG;$(DCC_Define) + true + true + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_2_8.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.res b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Tutorial_2_8.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.dfm new file mode 100644 index 0000000..55ef6e0 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.pas new file mode 100644 index 0000000..61253ad --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/8 Tags (PChar)/Unit1.pas @@ -0,0 +1,77 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows how to use Tags of items in mode when Tags are considered as } +{ pointers to dynamically allocated strings (PChar). } +{ In this demo, rvoTagsArePChars was added in Options (IMPORTANT!) } +{ In this mode, you need to allocate memory for tag strings with StrNew. } +{ RichView will free this memory itself when needed. } +{------------------------------------------------------------------------------} +{ The key methods are the same as in the previous demo. } +{ You still can use Add***, which set Tags to 0 (i.e. nil - empty string). } +{------------------------------------------------------------------------------} +{ This is the most powerful method for organizing hypertext, because you can } +{ encode any information that you need in string. } +{------------------------------------------------------------------------------} +{ IMPORTANT: Do not use #0 in Tag strings (except from the character closing } +{ the string) } +{==============================================================================} + +{$I RV_Defs.inc} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ImgList, + RVStyle, ExtCtrls, RVScroll, RichView, CRVFData; + +type + TForm1 = class(TForm) + RichView1: TRichView; + Panel1: TPanel; + RVStyle1: TRVStyle; + ImageList1: TImageList; + Image1: TImage; + procedure FormCreate(Sender: TObject); + procedure RichView1Jump(Sender: TObject; id: Integer); + private + { Private declarations } + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; +begin + RichView1.AddNL('Some text styles can be chosen as hypertext styles. ',0,0); + RichView1.AddNLTag('Like this one.',4,-1, {!}Integer(StrNew('First jump')){!}); + RichView1.Add(' You can have as many hypertext styles as you want. ',0); + RichView1.AddNLTag('Here is one more.',5,-1, {!}Integer(StrNew('Second jump')){!}); + RichView1.AddNL('Images from Image Lists also can be hypertext: ',0,0); + RichView1.AddHotspotExTag('Pen Image', 0,1, ImageList1, -1, {!}Integer(StrNew('Third jump')){!}); + RichView1.Add(' Such images are called "hotspots".',0); + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddHotPictureTag('Bobo', ico, -1, rvvaBaseLine, {!}Integer(StrNew('Fourth jump')){!}); + RichView1.Format; +end; + +procedure TForm1.RichView1Jump(Sender: TObject; id: Integer); +var ItemNo: Integer; + RVData: TCustomRVFormattedData; + Tag: PChar; +begin + RichView1.GetJumpPointLocation(id, RVData, ItemNo); + Tag := PChar(RVData.GetItemTag(ItemNo)); + Panel1.Caption := 'Clicked: Item with Tag='+Tag; +end; + +end. \ No newline at end of file diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.dpr b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.dpr new file mode 100644 index 0000000..de2c558 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.dpr @@ -0,0 +1,13 @@ +program Tutorial_2_9; + +uses + Forms, + Unit1 in 'Unit1.pas' {Form1}; + +{$R *.RES} + +begin + Application.Initialize; + Application.CreateForm(TForm1, Form1); + Application.Run; +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.dproj b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.dproj new file mode 100644 index 0000000..b82e842 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.dproj @@ -0,0 +1,99 @@ + + + {13832115-9CFA-4D7F-BEEC-F0A9A789A329} + Tutorial_2_9.dpr + Debug + DCC32 + 12.0 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + 1 + Tutorial_2_9.exe + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + +
Form1
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + + + + + Tutorial_2_9.dpr + + + False + True + False + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + 1.0.0.0 + 1.0.0.0 + + + + 12 + +
diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.res b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.res new file mode 100644 index 0000000..b3ff0b3 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Tutorial_2_9.res differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.dfm b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.dfm new file mode 100644 index 0000000..9a37829 Binary files /dev/null and b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.dfm differ diff --git a/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.pas b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.pas new file mode 100644 index 0000000..55e4022 --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorial/2 Items-Checkpoints-Tags-Hypertext/9 More mouse events/Unit1.pas @@ -0,0 +1,130 @@ +unit Unit1; + +interface + +{==============================================================================} +{ This demo shows mouse events, not connected with hypertext IDs } +{ - OnRVMouseDown, OnRVMouseUp, OnRVDblClick, OnRVRightClick; } +{------------------------------------------------------------------------------} + +uses + Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, + ExtCtrls, RVScroll, RichView, RVStyle, StdCtrls, + CRVFData, RVUni, RVTypes; + +type + TForm1 = class(TForm) + RichView1: TRichView; + panMouseDown: TPanel; + panMouseUp: TPanel; + panRightClick: TPanel; + panDblClick: TPanel; + RVStyle1: TRVStyle; + Image1: TImage; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + procedure FormCreate(Sender: TObject); + procedure RichView1RVMouseDown(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure RichView1RVMouseUp(Sender: TCustomRichView; Button: TMouseButton; + Shift: TShiftState; ItemNo, X, Y: Integer); + procedure RichView1RVDblClick(Sender: TCustomRichView; ClickedWord: TRVRawByteString; + Style: Integer); + procedure RichView1RVRightClick(Sender: TCustomRichView; ClickedWord: TRVRawByteString; + Style, X, Y: Integer); + private + { Private declarations } + function MouseInfo(Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer):String; + public + { Public declarations } + end; + +var + Form1: TForm1; + +implementation + +{$R *.DFM} + +procedure TForm1.FormCreate(Sender: TObject); +var ico: TIcon; +begin + RichView1.AddNL('More mouse events',1,1); + RichView1.AddTextNL('There are some more mouse events in RichView'#13+ + 'Left/Right/Double - click in this Window.', 0,0,0); + + ico := TIcon.Create; + ico.Assign(Image1.Picture.Graphic); + RichView1.AddPictureEx('Notebook image',ico,1, rvvaMiddle); + RichView1.Add(' - example of image',0); + + RichView1.Format; +end; + +function TForm1.MouseInfo(Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer): String; +var ButtonStr, Word: String; +begin + ButtonStr := ''; + case Button of + mbLeft: + ButtonStr := 'Left button'; + mbRight: + ButtonStr := 'Right button'; + mbMiddle: + ButtonStr := 'Middle button'; + end; + + if ItemNo<>-1 then begin + Word := RichView1.GetWordAt(X,Y); + Result := Format('%s at (%d,%d), at item #%d, at word "%s"', + [ButtonStr, X,Y, ItemNo, Word]); + end + else + Result := Format('%s at (%d,%d) - no item at this position', + [ButtonStr, X,Y]); +end; + +procedure TForm1.RichView1RVMouseDown(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); + +begin + panMouseDown.Caption := 'MouseDown: '+MouseInfo(Button, Shift, ItemNo, X, Y); +end; + +procedure TForm1.RichView1RVMouseUp(Sender: TCustomRichView; + Button: TMouseButton; Shift: TShiftState; ItemNo, X, Y: Integer); +begin + panMouseUp.Caption := 'MouseUp: '+MouseInfo(Button, Shift, ItemNo, X, Y); +end; + +procedure TForm1.RichView1RVDblClick(Sender: TCustomRichView; + ClickedWord: TRVRawByteString; Style: Integer); +var s: String; +begin + if (Style>=0) and RVStyle1.TextStyles[Style].Unicode then + s := RVU_RawUnicodeToWideString(ClickedWord) + else + s := RVU_RawUnicodeToWideString( + RVU_AnsiToUnicode(RVStyle1.DefCodePage, ClickedWord)); + panDblClick.Caption := + Format('DoubleClick: at word="%s", at item having style=%d', + [s, Style]); +end; + +// This event is obsolete. Use OnRVMouseUp instead +procedure TForm1.RichView1RVRightClick(Sender: TCustomRichView; + ClickedWord: TRVRawByteString; Style, X, Y: Integer); +var s: String; +begin + if (Style>=0) and RVStyle1.TextStyles[Style].Unicode then + s := RVU_RawUnicodeToWideString(ClickedWord) + else + s := RVU_RawUnicodeToWideString( + RVU_AnsiToUnicode(RVStyle1.DefCodePage, ClickedWord)); + panRightClick.Caption := + Format('RightClick: at (%d,%d), at word="%s", at item having style=%d', + [X,Y, s, Style]); +end; + +end. diff --git a/12.0.4/Demos/DelphiUnicode/Tutorials.groupproj b/12.0.4/Demos/DelphiUnicode/Tutorials.groupproj new file mode 100644 index 0000000..d00407b --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/Tutorials.groupproj @@ -0,0 +1,192 @@ + + + {9B2A2496-21F8-40AB-A336-8201FF25A141} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default.Personality.12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/12.0.4/Demos/DelphiUnicode/tutorial.txt b/12.0.4/Demos/DelphiUnicode/tutorial.txt new file mode 100644 index 0000000..7b214cf --- /dev/null +++ b/12.0.4/Demos/DelphiUnicode/tutorial.txt @@ -0,0 +1,11 @@ +========================= Tutorial projects ==================== + For Delphi 2009-2010 +================================================================ +1. Building a Document: + Set of projects: + First project with RichView ("Hello World!"), + types of RichView items, + building RichView document at run-time from code. +2. Items-Checkpoints-Tags-Hypertexts + Set of projects: + exploring and interacting with RichView document. \ No newline at end of file diff --git a/12.0.4/Help/RichView.chm b/12.0.4/Help/RichView.chm new file mode 100644 index 0000000..84d2952 Binary files /dev/null and b/12.0.4/Help/RichView.chm differ diff --git a/12.0.4/Help/RichView.cnt b/12.0.4/Help/RichView.cnt new file mode 100644 index 0000000..3cc2129 --- /dev/null +++ b/12.0.4/Help/RichView.cnt @@ -0,0 +1,1207 @@ +:TITLE RichView Components +:BASE RichView.hlp +1 TRichView Reference +2 TRichView Reference=Components_of_RichView_Family_Overview@RichView.hlp>Main +2 Overview +3 Overview=TRichView_Overview@RichView.hlp>Main +3 RichView Item Types=RichView_Item_Types@RichView.hlp>Main +3 "Checkpoints"=Checkpoints_overview@RichView.hlp>Main +3 Items' "Tags"=RichView_Items_Tags_Overview@RichView.hlp>Main +3 Hypertext Overview=RichView_Hypertext_Overview@RichView.hlp>Main +3 Paragraphs=RichView_Paragraphs@RichView.hlp>Main +3 Borders and Background of Paragraphs=Borders_and_Background_of_Paragraphs@RichView.hlp>Main +3 Building a Document=Building_RichView_Document@RichView.hlp>Main +3 Scrolling=Scrolling_in_RichView@RichView.hlp>Main +3 Selecting=Selecting_Part_of_RichView_Document@RichView.hlp>Main +3 Clipboard=RichView_Clipboard_Functions_Overview@RichView.hlp>Main +3 Searching and Replacing=Searching_and_Replacing_in_RichView_and_RichViewEdit@RichView.hlp>Main +3 Obtaining Items=Obtaining_Items_of_RichView@RichView.hlp>Main +3 Modifying Items=Modifying_RichView_Items@RichView.hlp>Main +3 RichViewEdit: Inserting Items in Position of Caret=RichViewEdit_Inserting_items_in_position_of_caret@RichView.hlp>Main +3 Undo and Redo=Undo_in_RichViewEdit@RichView.hlp>Main +3 Drag and Drop=DragDrop@RichView.hlp>Main +3 Animated Images=Animated_Images@RichView.hlp>Main +3 Saving and Loading=RichView_Methods_for_Saving_and_Loading@RichView.hlp>Main +3 RVF (RichView Format)=RichView_Format__RVF__Overview@RichView.hlp>Main +3 Export to HTML=Export_of_RichView_Contents_to_HTML@RichView.hlp>Main +3 Unicode in RichView=Unicode_in_RichView@RichView.hlp>Main +3 Bidirectional text=Bi_directional_text@RichView.hlp>Main +3 Live spelling check=Live_spelling_check@RichView.hlp>Main +3 Viewer vs Editor=Viewer_vs_Editor@RichView.hlp>Main +3 Controls - Documents - Items=Controls__Documents__Items@RichView.hlp>Main +3 Valid Documents=Valid_Documents@RichView.hlp>Main +3 Custom drawing=Custom_drawing@RichView.hlp>Main +3 Cursors=RichView_Cursors@RichView.hlp>Main +3 RVF Specification=RVF_Specification@RichView.hlp>Main +2 Overview of Item Types +3 Overview of Item Types=Item_Types_Overview@RichView.hlp>Main +3 Overview=IDIO_RichView_Item_Types_Overview@RichView.hlp>Main +3 Text Items=IDIO_Text_Items@RichView.hlp>Main +3 Tabulators=IDOI_Tabs@RichView.hlp>Main +3 Pictures=IDIO_Pictures@RichView.hlp>Main +3 Hot-Pictures=IDIO_Hot_Pictures@RichView.hlp>Main +3 Breaks=IDIO_Breaks@RichView.hlp>Main +3 Controls=IDIO_Controls@RichView.hlp>Main +3 Bullets=IDIO_Bullets@RichView.hlp>Main +3 Hotspots=IDIO_Hotspots@RichView.hlp>Main +3 Tables=IDIO_Tables@RichView.hlp>Main +3 List Markers=IDIO_List_Markers@RichView.hlp>Main +3 Labels=IDIO_Labels@RichView.hlp>Main +3 Numbered Sequences=IDIO_Numbered_Sequences@RichView.hlp>Main +3 Endnotes=IDIO_Endnotes@RichView.hlp>Main +3 Footnotes=IDIO_Footnotes@RichView.hlp>Main +3 References to Endnotes and Footnotes=IDIO_NoteRef@RichView.hlp>Main +3 Custom Item Types=IDIO_Custom_Item_Types@RichView.hlp>Main +2 Overview of Tables +3 Overview of Tables=Overview_of_Tables@RichView.hlp>Main +3 Tables in RichView=IDTO_Tables_in_RichView@RichView.hlp>Main +3 Addressing Items in Table Cells=IDTO_Tables_and_compatibility@RichView.hlp>Main +3 Table Cells=IDTO_Table_Cells@RichView.hlp>Main +3 Colors and Layout of Tables=IDTO_Colors_and_Layout_of_Tables@RichView.hlp>Main +3 Selection in Table=IDTO_Selection_in_Table@RichView.hlp>Main +3 Editing Cells=IDTO_Editing_the_cells@RichView.hlp>Main +3 Cell Merging=IDTO_Cell_Merging@RichView.hlp>Main +3 Table Operations=IDTO_Table_Operations@RichView.hlp>Main +3 Undo/redo in Tables=IDTO_Undo_redo_in_Tables@RichView.hlp>Main +3 Export of Tables=IDTO_Export_of_Tables@RichView.hlp>Main +3 Table Resizing=IDTO_Table_Resizing@RichView.hlp>Main +3 Example: table to text=IDTO_Table2Text@RichView.hlp>Main +3 Example: dividing table=IDTO_SplitTable@RichView.hlp>Main +2 Components +3 Components=Components@RichView.hlp>Main +3 Visual Components +4 TRichView +5 TRichView=IDH_Class_TRichView@RichView.hlp>Main +5 TRichView: Component editor=IDH_TRichView__Component_editor_@RichView.hlp>Main +5 Properties +6 TRichView.AllowSelection=IDH_TRichView_AllowSelection@RichView.hlp>Main +6 TRichView.AnimationMode=IDH_TRichView_AnimationMode@RichView.hlp>Main +6 TRichView.BackgroundBitmap=IDH_TRichView_BackgroundBitmap@RichView.hlp>Main +6 TRichView.BackgroundStyle=IDH_TRichView_BackgroundStyle@RichView.hlp>Main +6 TRichView.BiDiMode=IDH_TRichView_BiDiMode@RichView.hlp>Main +6 TRichView.BottomMargin=IDH_TRichView_BottomMargin@RichView.hlp>Main +6 TRichView.ClearLeft=IDH_TRichView_ClearLeft@RichView.hlp>Main +6 TRichView.ClearRight=IDH_TRichView_ClearRight@RichView.hlp>Main +6 TRichView.Color=IDH_TRichView_Color@RichView.hlp>Main +6 TRichView.CPEventKind=IDH_TRichView_CPEventKind@RichView.hlp>Main +6 TRichView.Cursor=IDH_TRichView_Cursor@RichView.hlp>Main +6 TRichView.Delimiters=IDH_TRichView_Delimiters@RichView.hlp>Main +6 TRichView.DocParameters=IDH_TRichView_DocParameters@RichView.hlp>Main +6 TRichView.DocProperties=IDH_TRichView_DocProperties@RichView.hlp>Main +6 TRichView.DocumentHeight=IDH_TRichView_DocumentHeight@RichView.hlp>Main +6 TRichView.DoInPaletteMode=IDH_TRichView_DoInPaletteMode@RichView.hlp>Main +6 TRichView.FirstItemVisible=IDH_TRichView_FirstItemVisible@RichView.hlp>Main +6 TRichView.FirstJumpNo=IDH_TRichView_FirstJumpNo@RichView.hlp>Main +6 TRichView.ItemCount=IDH_TRichView_ItemCount@RichView.hlp>Main +6 TRichView.LastItemVisible=IDH_TRichView_LastItemVisible@RichView.hlp>Main +6 TRichView.LeftMargin=IDH_TRichView_LeftMargin@RichView.hlp>Main +6 TRichView.LineCount=IDH_TRichView_LineCount@RichView.hlp>Main +6 TRichView.MaxLength=IDH_TRichView_MaxLength@RichView.hlp>Main +6 TRichView.MaxTextWidth=IDH_TRichView_MaxTextWidth@RichView.hlp>Main +6 TRichView.MinTextWidth=IDH_TRichView_MinTextWidth@RichView.hlp>Main +6 TRichView.NoteText=IDH_TRichView_NoteText@RichView.hlp>Main +6 TRichView.Options=IDH_TRichView_Options@RichView.hlp>Main +6 TRichView.PageBreaksBeforeItems=IDH_TRichView_PageBreaksBeforeItems@RichView.hlp>Main +6 TRichView.RightMargin=IDH_TRichView_RightMargin@RichView.hlp>Main +6 TRichView.RTFOptions=IDH_TRichView_RTFOptions@RichView.hlp>Main +6 TRichView.RTFReadProperties=IDH_TRichView_RTFReadProperties_@RichView.hlp>Main +6 TRichView.RVData=IDH_TRichView_RVData@RichView.hlp>Main +6 TRichView.RVFOptions=IDH_TRichView_RVFOptions@RichView.hlp>Main +6 TRichView.RVFParaStylesReadMode=IDH_TRichView_RVFParaStylesReadMode@RichView.hlp>Main +6 TRichView.RVFTextStylesReadMode=IDH_TRichView_RVFTextStylesReadMode@RichView.hlp>Main +6 TRichView.RVFWarnings=IDH_TRichView_RVFWarnings@RichView.hlp>Main +6 TRichView.SingleClick=IDH_TRichView_SingleClick@RichView.hlp>Main +6 TRichView.Style=IDH_TRichView_Style@RichView.hlp>Main +6 TRichView.TabNavigation=IDH_TRichView_TabNavigation@RichView.hlp>Main +6 TRichView.TopMargin=IDH_TRichView_TopMargin@RichView.hlp>Main +6 TRichView.VAlign=IDH_TRichView_VAlign@RichView.hlp>Main +6 TRichView.VSmallStep=IDH_TRichView_VSmallStep@RichView.hlp>Main +6 TRichView.WordWrap=IDH_TRichView_WordWrap@RichView.hlp>Main +5 Methods +6 TRichView.AddBreakExTag and Others=IDH_TRichView_AddBreak@RichView.hlp>Main +6 TRichView.AddBulletExTag and Others=IDH_TRichView_AddBullet@RichView.hlp>Main +6 TRichView.AddCenterLine, AddFromNewLine=IDH_TRichView_Add_Deprecated@RichView.hlp>Main +6 TRichView.AddControlExTag and Others=IDH_TRichView_AddControl@RichView.hlp>Main +6 TRichView.AddFmt=IDH_TRichView_AddFmt@RichView.hlp>Main +6 TRichView.AddHotPicture and AddHotPictureTag=IDH_TRichView_AddHotPicture@RichView.hlp>Main +6 TRichView.AddHotspotExTag and Others=IDH_TRichView_AddHotspot@RichView.hlp>Main +6 TRichView.AddItem=IDH_TRichView_AddItem@RichView.hlp>Main +6 TRichView.AddNamedCheckpointExTag and Others=IDH_TRichView_AddCheckpoint@RichView.hlp>Main +6 TRichView.AddNLTag -A- -W-=IDH_TRichView_AddNLATag@RichView.hlp>Main +6 TRichView.AddPictureExTag and Others=IDH_TRichView_AddPicture@RichView.hlp>Main +6 TRichView.AddTab=IDH_TRichView_AddTab@RichView.hlp>Main +6 TRichView.AddText, AddTextFromNewLine (deprecated)=IDH_TRichView_AddText@RichView.hlp>Main +6 TRichView.AddTextNL -A -W=IDH_TRichView_AddTextNL@RichView.hlp>Main +6 TRichView.AppendFrom=IDH_TRichView_AppendFrom@RichView.hlp>Main +6 TRichView.AppendRVFFromStream=IDH_TRichView_AppendRVFFromStream@RichView.hlp>Main +6 TRichView.AssignSoftPageBreaks=IDH_TRichView_AssignSoftPageBreaks@RichView.hlp>Main +6 TRichView.BeginOleDrag=IDH_TRichView_BeginOleDrag@RichView.hlp>Main +6 TRichView.Clear=IDH_TRichView_Clear@RichView.hlp>Main +6 TRichView.ClearLiveSpellingResults=IDH_TRichView_ClearLiveSpellingResults@RichView.hlp>Main +6 TRichView.ClearSoftPageBreaks=IDH_TRichView_ClearSoftPageBreaks@RichView.hlp>Main +6 TRichView.ClientToDocument=IDH_TRichView_ClientToDocument@RichView.hlp>Main +6 TRichView.Copy=IDH_TRichView_Copy@RichView.hlp>Main +6 TRichView.CopyDef=IDH_TRichView_CopyDef@RichView.hlp>Main +6 TRichView.CopyImage=IDH_TRichView_CopyImage@RichView.hlp>Main +6 TRichView.CopyRTF=IDH_TRichView_CopyRTF@RichView.hlp>Main +6 TRichView.CopyRVF=IDH_TRichView_CopyRVF@RichView.hlp>Main +6 TRichView.CopyText -W=IDH_TRichView_CopyText@RichView.hlp>Main +6 TRichView.Create=IDH_TRichView_Create@RichView.hlp>Main +6 TRichView.DeleteItems=IDH_TRichView_DeleteItems@RichView.hlp>Main +6 TRichView.DeleteMarkedStyles=IDH_TRichView_DeleteMarkedStyles@RichView.hlp>Main +6 TRichView.DeleteParas=IDH_TRichView_DeleteParas@RichView.hlp>Main +6 TRichView.DeleteSection=IDH_TRichView_DeleteSection@RichView.hlp>Main +6 TRichView.DeleteUnusedStyles=IDH_TRichView_DeleteUnusedStyles@RichView.hlp>Main +6 TRichView.Deselect=IDH_TRichView_Deselect@RichView.hlp>Main +6 TRichView.Destroy=IDH_TRichView_Destroy@RichView.hlp>Main +6 TRichView.FindCheckpointByName=IDH_TRichView_FindCheckpointByName@RichView.hlp>Main +6 TRichView.FindCheckpointByTag=IDH_TRichView_FindCheckpointByTag@RichView.hlp>Main +6 TRichView.FindControlItemNo=IDH_TRichView_FindControlItemNo_@RichView.hlp>Main +6 TRichView.Format=IDH_TRichView_Format@RichView.hlp>Main +6 TRichView.FormatTail=IDH_TRichView_FormatTail@RichView.hlp>Main +6 TRichView.GetBreakInfo=IDH_TRichView_GetBreakInfo@RichView.hlp>Main +6 TRichView.GetBulletInfo=IDH_TRichView_GetBulletInfo@RichView.hlp>Main +6 TRichView.GetCheckpointByNo=IDH_TRichView_GetCheckpointByNo_@RichView.hlp>Main +6 TRichView.GetCheckpointInfo=IDH_TRichView_GetCheckpointInfo_@RichView.hlp>Main +6 TRichView.GetCheckpointItemNo=IDH_TRichView_GetCheckpointItemNo@RichView.hlp>Main +6 TRichView.GetCheckpointNo=IDH_TRichView_GetCheckpointNo@RichView.hlp>Main +6 TRichView.GetCheckpointXY=IDH_TRichView_GetCheckpointXY@RichView.hlp>Main +6 TRichView.GetCheckpointY=IDH_TRichView_GetCheckpointY@RichView.hlp>Main +6 TRichView.GetCheckpointYEx=IDH_TRichView_GetCheckpointYEx@RichView.hlp>Main +6 TRichView.GetControlInfo=IDH_TRichView_GetControlInfo@RichView.hlp>Main +6 TRichView.GetFirstCheckpoint=IDH_TRichView_GetFirstCheckpoint@RichView.hlp>Main +6 TRichView.GetFocusedItem=IDH_TRichView_GetFocusedItem@RichView.hlp>Main +6 TRichView.GetHotspotInfo=IDH_TRichView_GetHotspotInfo@RichView.hlp>Main +6 TRichView.GetItem=IDH_TRichView_GetItem@RichView.hlp>Main +6 TRichView.GetItemAt=IDH_TRichView_GetItemAt@RichView.hlp>Main +6 TRichView.GetItemCheckpoint=IDH_TRichView_GetItemCheckpoint_@RichView.hlp>Main +6 TRichView.GetItemClientCoords=IDH_TRichView_GetItemClientCoords@RichView.hlp>Main +6 TRichView.GetItemCoords=IDH_TRichView_GetItemCoords@RichView.hlp>Main +6 TRichView.GetItemExtraIntProperty=IDH_TRichView_GetItemExtraIntProperty@RichView.hlp>Main +6 TRichView.GetItemExtraStrProperty=IDH_TRichView_GetItemExtraStrProperty@RichView.hlp>Main +6 TRichView.GetItemNo=IDH_TRichView_GetItemNo@RichView.hlp>Main +6 TRichView.GetItemPara=IDH_TRichView_GetItemPara@RichView.hlp>Main +6 TRichView.GetItemStyle=IDH_TRichView_GetItemStyle@RichView.hlp>Main +6 TRichView.GetItemTag=IDH_TRichView_GetItemTag@RichView.hlp>Main +6 TRichView.GetItemText -A -W=IDH_TRichView_GetItemText@RichView.hlp>Main +6 TRichView.GetItemVAlign=IDH_TRichView_GetItemVAlign@RichView.hlp>Main +6 TRichView.GetJumpPointItemNo=IDH_TRichView_GetJumpPointItemNo@RichView.hlp>Main +6 TRichView.GetJumpPointLocation=IDH_TRichView_GetJumpPointLocation@RichView.hlp>Main +6 TRichView.GetJumpPointY=IDH_TRichView_GetJumpPointY@RichView.hlp>Main +6 TRichView.GetLastCheckpoint=IDH_TRichView_GetLastCheckpoint_@RichView.hlp>Main +6 TRichView.GetLineNo=IDH_TRichView_GetLineNo@RichView.hlp>Main +6 TRichView.GetListMarkerInfo=IDH_TRichView_GetListMarkerInfo_@RichView.hlp>Main +6 TRichView.GetNextCheckpoint=IDH_TRichView_GetNextCheckpoint_@RichView.hlp>Main +6 TRichView.GetOffsAfterItem=IDH_TRichView_GetOffsAfterItem@RichView.hlp>Main +6 TRichView.GetOffsBeforeItem=IDH_TRichView_GetOffsBeforeItem_@RichView.hlp>Main +6 TRichView.GetPictureInfo=IDH_TRichView_GetPictureInfo@RichView.hlp>Main +6 TRichView.GetPrevCheckpoint=IDH_TRichView_GetPrevCheckpoint_@RichView.hlp>Main +6 TRichView.GetSelectedImage=IDH_TRichView_GetSelectedImage@RichView.hlp>Main +6 TRichView.GetSelectionBounds=IDH_TRichView_GetSelectionBounds@RichView.hlp>Main +6 TRichView.GetSelText=IDH_TRichView_GetSelText@RichView.hlp>Main +6 TRichView.GetTextInfo=IDH_TRichView_GetTextInfo@RichView.hlp>Main +6 TRichView.GetWordAt -A -W=IDH_TRichView_GetWordAt@RichView.hlp>Main +6 TRichView.InsertRVFFromStream=IDH_TRichView_InsertRVFFromStream@RichView.hlp>Main +6 TRichView.IsFromNewLine=IDH_TRichView_IsFromNewLine@RichView.hlp>Main +6 TRichView.IsParaStart=IDH_TRichView_IsParaStart@RichView.hlp>Main +6 TRichView.LiveSpellingValidateWord=IDH_TRichView_LiveSpellingValidateWord@RichView.hlp>Main +6 TRichView.LoadFromStream=IDH_TRichView_LoadFromStream@RichView.hlp>Main +6 TRichView.LoadRTF=IDH_TRichView_LoadRTF@RichView.hlp>Main +6 TRichView.LoadRTFFromStream=IDH_TRichView_LoadRTFFromStream_@RichView.hlp>Main +6 TRichView.LoadRVF=IDH_TRichView_LoadRVF@RichView.hlp>Main +6 TRichView.LoadRVFFromStream=IDH_TRichView_LoadRVFFromStream_@RichView.hlp>Main +6 TRichView.LoadText -W=IDH_TRichView_LoadText@RichView.hlp>Main +6 TRichView.LoadTextFromStream -W=IDH_TRichView_LoadTextFromStream@RichView.hlp>Main +6 TRichView.MarkStylesInUse=IDH_TRichView_MarkStylesInUse@RichView.hlp>Main +6 TRichView.Reformat=IDH_TRichView_Reformat@RichView.hlp>Main +6 TRichView.RefreshListMarkers=IDH_TRichView_RefreshListMarkers@RichView.hlp>Main +6 TRichView.RemoveCheckpoint=IDH_TRichView_RemoveCheckpoint@RichView.hlp>Main +6 TRichView.ResetAnimation=IDH_TRichView_ResetAnimation@RichView.hlp>Main +6 TRichView.SaveHTML=IDH_TRichView_SaveHTML@RichView.hlp>Main +6 TRichView.SaveHTMLEx=IDH_TRichView_SaveHTMLEx@RichView.hlp>Main +6 TRichView.SaveHTMLToStream=TRichView_SaveHTMLToStream@RichView.hlp>Main +6 TRichView.SaveHTMLToStreamEx=TRichView_SaveHTMLToStreamEx@RichView.hlp>Main +6 TRichView.SavePicture=IDH_TRichView_SavePicture@RichView.hlp>Main +6 TRichView.SaveRTF=IDH_TRichView_SaveRTF@RichView.hlp>Main +6 TRichView.SaveRTFToStream=IDH_TRichView_SaveRTFToStream@RichView.hlp>Main +6 TRichView.SaveRVF=IDH_TRichView_SaveRVF@RichView.hlp>Main +6 TRichView.SaveRVFToStream=IDH_TRichView_SaveRVFToStream@RichView.hlp>Main +6 TRichView.SaveText -W=IDH_TRichView_SaveText@RichView.hlp>Main +6 TRichView.SaveTextToStream -W=IDH_TRichView_SaveTextToStream@RichView.hlp>Main +6 TRichView.SearchText -A -W=IDH_TRichView_SearchText@RichView.hlp>Main +6 TRichView.SelectAll=IDH_TRichView_SelectAll@RichView.hlp>Main +6 TRichView.SelectControl=IDH_TRichView_SelectControl@RichView.hlp>Main +6 TRichView.SelectionExists=IDH_TRichView_SelectionExists@RichView.hlp>Main +6 TRichView.SelectWordAt=IDH_TRichView_SelectWordAt@RichView.hlp>Main +6 TRichView.SetAddParagraphMode=IDH_TRichView_SetAddParagraphMode@RichView.hlp>Main +6 TRichView.SetBreakInfo=IDH_TRichView_SetBreakInfo@RichView.hlp>Main +6 TRichView.SetBulletInfo=IDH_TRichView_SetBulletInfo@RichView.hlp>Main +6 TRichView.SetCheckpointInfo=IDH_TRichView_SetCheckpointInfo_@RichView.hlp>Main +6 TRichView.SetControlInfo=IDH_TRichView_SetControlInfo@RichView.hlp>Main +6 TRichView.SetHotspotInfo=IDH_TRichView_SetHotspotInfo@RichView.hlp>Main +6 TRichView.SetItemExtraIntProperty=IDH_TRichView_SetItemExtraIntProperty@RichView.hlp>Main +6 TRichView.SetItemExtraStrProperty=IDH_TRichView_SetItemExtraStrProperty@RichView.hlp>Main +6 TRichView.SetItemTag=IDH_TRichView_SetItemTag@RichView.hlp>Main +6 TRichView.SetItemText -A -W=IDH_TRichView_SetItemText@RichView.hlp>Main +6 TRichView.SetItemVAlign=IDH_TRichView_SetItemVAlign@RichView.hlp>Main +6 TRichView.SetListMarkerInfo=IDH_TRichView_SetListMarkerInfo_@RichView.hlp>Main +6 TRichView.SetPictureInfo=IDH_TRichView_SetPictureInfo@RichView.hlp>Main +6 TRichView.SetSelectionBounds=IDH_TRichView_SetSelectionBounds@RichView.hlp>Main +6 TRichView.StartAnimation=IDH_TRichView_StartAnimation@RichView.hlp>Main +6 TRichView.StartLiveSpelling=IDH_TRichView_StartLiveSpelling_@RichView.hlp>Main +6 TRichView.StopAnimation=IDH_TRichView_StopAnimation@RichView.hlp>Main +6 TRichView.UpdatePaletteInfo=IDH_TRichView_UpdatePaletteInfo_@RichView.hlp>Main +5 Events +6 TRichView.OnAddStyle=IDH_TRichView_OnAddStyle@RichView.hlp>Main +6 TRichView.OnCheckpointVisible=IDH_TRichView_OnCheckpointVisible@RichView.hlp>Main +6 TRichView.OnControlAction=IDH_TRichView_OnControlAction@RichView.hlp>Main +6 TRichView.OnCopy=IDH_TRichView_OnCopy@RichView.hlp>Main +6 TRichView.OnGetItemCursor=IDH_TRichView_OnGetItemCursor@RichView.hlp>Main +6 TRichView.OnHTMLSaveImage=IDH_TRichView_OnHTMLSaveImage@RichView.hlp>Main +6 TRichView.OnImportPicture=IDH_TRichView_OnImportPicture@RichView.hlp>Main +6 TRichView.OnItemAction=IDH_TRichView_OnItemAction@RichView.hlp>Main +6 TRichView.OnItemHint=IDH_TRichView_OnItemHint@RichView.hlp>Main +6 TRichView.OnJump=IDH_TRichView_OnJump@RichView.hlp>Main +6 TRichView.OnPaint=IDH_TRichView_OnPaint@RichView.hlp>Main +6 TRichView.OnProgress=IDH_TRichView_OnProgress@RichView.hlp>Main +6 TRichView.OnReadHyperlink=IDH_TRichView_OnReadHyperlink@RichView.hlp>Main +6 TRichView.OnRVDblClick=IDH_TRichView_OnRVDblClick@RichView.hlp>Main +6 TRichView.OnRVFControlNeeded=IDH_TRichView_OnRVFControlNeeded@RichView.hlp>Main +6 TRichView.OnRVFImageListNeeded=IDH_TRichView_OnRVFImageListNeeded@RichView.hlp>Main +6 TRichView.OnRVFPictureNeeded=IDH_TRichView_OnRVFPictureNeeded@RichView.hlp>Main +6 TRichView.OnRVMouseDown=IDH_TRichView_OnRVMouseDown@RichView.hlp>Main +6 TRichView.OnRVMouseMove=IDH_TRichView_OnRVMouseMove@RichView.hlp>Main +6 TRichView.OnRVMouseUp=IDH_TRichView_OnRVMouseUp@RichView.hlp>Main +6 TRichView.OnRVRightClick=IDH_TRichView_OnRVRightClick@RichView.hlp>Main +6 TRichView.OnSaveComponentToFile=IDH_TRichView_OnSaveComponentToFile@RichView.hlp>Main +6 TRichView.OnSaveHTMLExtra=IDH_TRichView_OnSaveHTMLExtra@RichView.hlp>Main +6 TRichView.OnSaveImage2=IDH_TRichView_OnSaveImage2@RichView.hlp>Main +6 TRichView.OnSaveItemToFile=IDH_TRichView_OnSaveItemToFile@RichView.hlp>Main +6 TRichView.OnSaveParaToHTML=IDH_TRichView_OnSaveParaToHTML@RichView.hlp>Main +6 TRichView.OnSaveRTFExtra=IDH_TRichView_OnSaveRTFExtra@RichView.hlp>Main +6 TRichView.OnSelect=IDH_TRichView_OnSelect@RichView.hlp>Main +6 TRichView.OnSpellingCheck=IDH_TRichView_OnSpellingCheck@RichView.hlp>Main +6 TRichView.OnURLNeeded=IDH_TRichView_OnURLNeeded@RichView.hlp>Main +6 TRichView.OnWriteHyperlink=IDH_TRichView_OnWriteHyperlink@RichView.hlp>Main +5 Classes of Properties +6 TRVRTFReaderProperties +7 TRVRTFReaderProperties=IDH_Class_TRVRTFReaderProperties@RichView.hlp>Main +7 Properties +8 TRVRTFReaderProperties.AutoHideTableGridLines=IDH_TRVRTFReaderProperties_AutoHideTableGridLines@RichView.hlp>Main +8 TRVRTFReaderProperties.BasePathLinks=IDH_TRVRTFReaderProperties_BasePathLinks@RichView.hlp>Main +8 TRVRTFReaderProperties.CharsetForUnicode=IDH_TRVRTFReaderProperties_CharsetForUnicode@RichView.hlp>Main +8 TRVRTFReaderProperties.ConvertHighlight=IDH_TRVRTFReaderProperties_ConvertHighlight@RichView.hlp>Main +8 TRVRTFReaderProperties.ErrorCode=IDH_TRVRTFReaderProperties_ErrorCode@RichView.hlp>Main +8 TRVRTFReaderProperties.ExtractMetafileBitmaps=IDH_TRVRTFReaderProperties_ExtractMetafileBitmaps@RichView.hlp>Main +8 TRVRTFReaderProperties.FooterYMM=IDH_TRVRTFReaderProperties_FooterYMM@RichView.hlp>Main +8 TRVRTFReaderProperties.HeaderYMM=IDH_TRVRTFReaderProperties_HeaderYMM@RichView.hlp>Main +8 TRVRTFReaderProperties.IgnoreBookmarks=IDH_TRVRTFReaderProperties_IgnoreBookmarks@RichView.hlp>Main +8 TRVRTFReaderProperties.IgnoreNotes=IDH_TRVRTFReaderProperties_IgnoreNotes@RichView.hlp>Main +8 TRVRTFReaderProperties.IgnorePictures=IDH_TRVRTFReaderProperties_IgnorePictures@RichView.hlp>Main +8 TRVRTFReaderProperties.IgnoreSequences=IDH_TRVRTFReaderProperties_IgnoreSequences@RichView.hlp>Main +8 TRVRTFReaderProperties.IgnoreTables=IDH_TRVRTFReaderProperties_IgnoreTables@RichView.hlp>Main +8 TRVRTFReaderProperties.LineBreaksAsParagraphs=IDH_TRVRTFReaderProperties_LineBreaksAsParagraphs@RichView.hlp>Main +8 TRVRTFReaderProperties.ParaStyleMode=IDH_TRVRTFReaderProperties_ParaStyleMode@RichView.hlp>Main +8 TRVRTFReaderProperties.ParaStyleNo=IDH_TRVRTFReaderProperties_ParaStyleNo@RichView.hlp>Main +8 TRVRTFReaderProperties.ReadDocParameters=IDH_TRVRTFReaderProperties_ReadDocParameters@RichView.hlp>Main +8 TRVRTFReaderProperties.SkipHiddenText=IDH_TRVRTFReaderProperties_SkipHiddenText@RichView.hlp>Main +8 TRVRTFReaderProperties.StoreImagesFileNames=IDH_TRVRTFReaderProperties_StoreImagesFileNames@RichView.hlp>Main +8 TRVRTFReaderProperties.TextStyleMode=IDH_TRVRTFReaderProperties_TextStyleMode@RichView.hlp>Main +8 TRVRTFReaderProperties.TextStyleNo=IDH_TRVRTFReaderProperties_TextStyleNo@RichView.hlp>Main +8 TRVRTFReaderProperties.UnicodeMode=IDH_TRVRTFReaderProperties_UnicodeMode@RichView.hlp>Main +8 TRVRTFReaderProperties.UseCharsetForUnicode=IDH_TRVRTFReaderProperties_UseCharsetForUnicode@RichView.hlp>Main +8 TRVRTFReaderProperties.UseHypertextStyles=IDH_TRVRTFReaderProperties_UseHypertextStyles@RichView.hlp>Main +8 TRVRTFReaderProperties.UseSingleCellPadding=IDH_TRVRTFReaderProperties_UseSingleCellPadding@RichView.hlp>Main +7 Methods +8 TRVRTFReaderProperties.SetFooter=IDH_TRVRTFReaderProperties_SetFooter@RichView.hlp>Main +8 TRVRTFReaderProperties.SetHeader=IDH_TRVRTFReaderProperties_SetHeader@RichView.hlp>Main +6 TRVDocParameters +7 TRVDocParameters=IDH_Class_TRVDocParameters@RichView.hlp>Main +7 Properties +8 TRVDocParameters.BottomMargin=IDH_TRVDocParameters_BottomMargin@RichView.hlp>Main +8 TRVDocParameters.FooterY=IDH_TRVDocParameters_FooterY@RichView.hlp>Main +8 TRVDocParameters.HeaderY=IDH_TRVDocParameters_HeaderY@RichView.hlp>Main +8 TRVDocParameters.LeftMargin=IDH_TRVDocParameters_LeftMargin@RichView.hlp>Main +8 TRVDocParameters.MirrorMargins=IDH_TRVDocParameters_MirrorMargins@RichView.hlp>Main +8 TRVDocParameters.Orientation=IDH_TRVDocParameters_Orientation@RichView.hlp>Main +8 TRVDocParameters.PageHeight=IDH_TRVDocParameters_PageHeight@RichView.hlp>Main +8 TRVDocParameters.PageWidth=IDH_TRVDocParameters_PageWidth@RichView.hlp>Main +8 TRVDocParameters.RightMargin=IDH_TRVDocParameters_RightMargin@RichView.hlp>Main +8 TRVDocParameters.TopMargin=IDH_TRVDocParameters_TopMargin@RichView.hlp>Main +8 TRVDocParameters.Units=IDH_TRVDocParameters_Units@RichView.hlp>Main +8 TRVDocParameters.ZoomMode=IDH_TRVDocParameters_ZoomMode@RichView.hlp>Main +8 TRVDocParameters.ZoomPercent=IDH_TRVDocParameters_ZoomPercent@RichView.hlp>Main +7 Methods +8 TRVDocParameters.ConvertToUnits=IDH_TRVDocParameters_ConvertToUnits@RichView.hlp>Main +8 TRVDocParameters.Reset=IDH_TRVDocParameters_Reset@RichView.hlp>Main +8 TRVDocParameters.ResetLayout=IDH_TRVDocParameters_ResetLayout@RichView.hlp>Main +8 TRVDocParameters.UnitsPerInch=IDH_TRVDocParameters_UnitsPerInch@RichView.hlp>Main +5 Examples +6 Loading UTF-8 files=IDH_Example_LoadUTF8@RichView.hlp>Main +4 TRichViewEdit +5 TRichViewEdit=IDH_Class_TRichViewEdit@RichView.hlp>Main +5 Properties +6 TRichViewEdit.AcceptDragDropFormats=IDH_TRichViewEdit_AcceptDragDropFormats@RichView.hlp>Main +6 TRichViewEdit.ActualCurTextStyleNo=IDH_TRichViewEdit_ActualCurTextStyleNo@RichView.hlp>Main +6 TRichViewEdit.CurItemNo=IDH_TRichViewEdit_CurItemNo@RichView.hlp>Main +6 TRichViewEdit.CurItemStyle=IDH_TRichViewEdit_CurItemStyle@RichView.hlp>Main +6 TRichViewEdit.CurParaStyleNo=IDH_TRichViewEdit_CurParaStyleNo@RichView.hlp>Main +6 TRichViewEdit.CurTextStyleNo=IDH_TRichViewEdit_CurTextStyleNo@RichView.hlp>Main +6 TRichViewEdit.CustomCaretInterval=IDH_TRichViewEdit_CustomCaretInterval@RichView.hlp>Main +6 TRichViewEdit.EditorOptions=IDH_TRichViewEdit_EditorOptions_@RichView.hlp>Main +6 TRichViewEdit.LiveSpellingMode=IDH_TRichViewEdit_LiveSpellingMode@RichView.hlp>Main +6 TRichViewEdit.Modified=IDH_TRichViewEdit_Modified@RichView.hlp>Main +6 TRichViewEdit.OffsetInCurItem=IDH_TRichViewEdit_OffsetInCurItem@RichView.hlp>Main +6 TRichViewEdit.ReadOnly=IDH_TRichViewEdit_ReadOnly@RichView.hlp>Main +6 TRichViewEdit.SmartPopupProperties=IDH_TRichViewEdit_SmartPopupProperties@RichView.hlp>Main +6 TRichViewEdit.SmartPopupVisible=IDH_TRichViewEdit_SmartPopupVisible@RichView.hlp>Main +6 TRichViewEdit.TopLevelEditor=IDH_TRichViewEdit_TopLevelEditor@RichView.hlp>Main +6 TRichViewEdit.UndoLimit=IDH_TRichViewEdit_UndoLimit@RichView.hlp>Main +5 Methods +6 TRichViewEdit.AdjustControlPlacement=IDH_TRichViewEdit_AdjustControlPlacement@RichView.hlp>Main +6 TRichViewEdit.AdjustControlPlacement2=IDH_TRichViewEdit_AdjustControlPlacement2@RichView.hlp>Main +6 TRichViewEdit.ApplyListStyle=IDH_TRichViewEdit_ApplyListStyle@RichView.hlp>Main +6 TRichViewEdit.ApplyParaStyle=IDH_TRichViewEdit_ApplyParaStyle@RichView.hlp>Main +6 TRichViewEdit.ApplyParaStyleConversion=IDH_TRichViewEdit_ApplyParaStyleConversion@RichView.hlp>Main +6 TRichViewEdit.ApplyStyleConversion=IDH_TRichViewEdit_ApplyStyleConversion@RichView.hlp>Main +6 TRichViewEdit.ApplyTextStyle=IDH_TRichViewEdit_ApplyTextStyle@RichView.hlp>Main +6 TRichViewEdit.BeginItemModify=IDH_TRichViewEdit_BeginItemModify@RichView.hlp>Main +6 TRichViewEdit.BeginUndoCustomGroup=IDH_TRichViewEdit_BeginUndoCustomGroup@RichView.hlp>Main +6 TRichViewEdit.BeginUndoGroup=IDH_TRichViewEdit_BeginUndoGroup@RichView.hlp>Main +6 TRichViewEdit.BeginUpdate=IDH_TRichViewEdit_BeginUpdate@RichView.hlp>Main +6 TRichViewEdit.CanChange=IDH_TRichViewEdit_CanChange@RichView.hlp>Main +6 TRichViewEdit.CanPaste=IDH_TRichViewEdit_CanPaste@RichView.hlp>Main +6 TRichViewEdit.CanPasteRTF=IDH_TRichViewEdit_CanPasteRTF@RichView.hlp>Main +6 TRichViewEdit.CanPasteRVF=IDH_TRichViewEdit_CanPasteRVF@RichView.hlp>Main +6 TRichViewEdit.Change=IDH_TRichViewEdit_Change@RichView.hlp>Main +6 TRichViewEdit.ChangeListLevels=IDH_TRichViewEdit_ChangeListLevels@RichView.hlp>Main +6 TRichViewEdit.Clear=IDH_TRichViewEdit_Clear@RichView.hlp>Main +6 TRichViewEdit.ClearTextFlow=IDH_TRichViewEdit_ClearTextFlow@RichView.hlp>Main +6 TRichViewEdit.ClearUndo=IDH_TRichViewEdit_ClearUndo@RichView.hlp>Main +6 TRichViewEdit.ConvertToHotPicture=IDH_TRichViewEdit_ConvertToHotPicture@RichView.hlp>Main +6 TRichViewEdit.ConvertToPicture=IDH_TRichViewEdit_ConvertToPicture@RichView.hlp>Main +6 TRichViewEdit.Create=IDH_TRichViewEdit_Create@RichView.hlp>Main +6 TRichViewEdit.CutDef=IDH_TRichViewEdit_CutDef@RichView.hlp>Main +6 TRichViewEdit.DeleteSelection=IDH_TRichViewEdit_DeleteSelection@RichView.hlp>Main +6 TRichViewEdit.Destroy=IDH_TRichViewEdit_Destroy@RichView.hlp>Main +6 TRichViewEdit.EndItemModify=IDH_TRichViewEdit_EndItemModify_@RichView.hlp>Main +6 TRichViewEdit.EndUpdate=IDH_TRichViewEdit_EndUpdate@RichView.hlp>Main +6 TRichViewEdit.GetCheckpointAtCaret=IDH_TRichViewEdit_GetCheckpointAtCaret@RichView.hlp>Main +6 TRichViewEdit.GetCurrentBreakInfo=IDH_TRichViewEdit_GetCurrentBreakInfo@RichView.hlp>Main +6 TRichViewEdit.GetCurrentBulletInfo=IDH_TRichViewEdit_GetCurrentBulletInfo@RichView.hlp>Main +6 TRichViewEdit.GetCurrentCheckpoint=IDH_TRichViewEdit_GetCurrentCheckpoint@RichView.hlp>Main +6 TRichViewEdit.GetCurrentControlInfo=IDH_TRichViewEdit_GetCurrentControlInfo@RichView.hlp>Main +6 TRichViewEdit.GetCurrentHotspotInfo=IDH_TRichViewEdit_GetCurrentHotspotInfo@RichView.hlp>Main +6 TRichViewEdit.GetCurrentItem=IDH_TRichViewEdit_GetCurrentItem@RichView.hlp>Main +6 TRichViewEdit.GetCurrentItemEx=IDH_TRichViewEdit_GetCurrentItemEx@RichView.hlp>Main +6 TRichViewEdit.GetCurrentItemExtraIntProperty=IDH_TRichViewEdit_GetCurrentItemExtraIntProperty@RichView.hlp>Main +6 TRichViewEdit.GetCurrentItemExtraStrProperty=IDH_TRichViewEdit_GetCurrentItemExtraStrProperty@RichView.hlp>Main +6 TRichViewEdit.GetCurrentItemText -A -W=IDH_TRichViewEdit_GetCurrentItemText@RichView.hlp>Main +6 TRichViewEdit.GetCurrentItemVAlign=IDH_TRichViewEdit_GetCurrentItemVAlign@RichView.hlp>Main +6 TRichViewEdit.GetCurrentLineCol=IDH_TRichViewEdit_GetCurrentLineCol@RichView.hlp>Main +6 TRichViewEdit.GetCurrentMisspelling=IDH_TRichViewEdit_GetCurrentMisspelling@RichView.hlp>Main +6 TRichViewEdit.GetCurrentPictureInfo=IDH_TRichViewEdit_GetCurrentPictureInfo@RichView.hlp>Main +6 TRichViewEdit.GetCurrentTag=IDH_TRichViewEdit_GetCurrentTag_@RichView.hlp>Main +6 TRichViewEdit.GetCurrentTextInfo=IDH_TRichViewEdit_GetCurrentTextInfo@RichView.hlp>Main +6 TRichViewEdit.InsertBreak=IDH_TRichViewEdit_InsertBreak@RichView.hlp>Main +6 TRichViewEdit.InsertBullet=IDH_TRichViewEdit_InsertBullet@RichView.hlp>Main +6 TRichViewEdit.InsertCheckpoint=IDH_TRichViewEdit_InsertCheckpoint@RichView.hlp>Main +6 TRichViewEdit.InsertControl=IDH_TRichViewEdit_InsertControl_@RichView.hlp>Main +6 TRichViewEdit.InsertHotPicture=IDH_TRichViewEdit_InsertHotPicture@RichView.hlp>Main +6 TRichViewEdit.InsertHotspot=IDH_TRichViewEdit_InsertHotspot_@RichView.hlp>Main +6 TRichViewEdit.InsertItem=IDH_TRichViewEdit_InsertItem@RichView.hlp>Main +6 TRichViewEdit.InsertOEMTextFromFile=IDH_TRichViewEdit_InsertOEMTextFromFile@RichView.hlp>Main +6 TRichViewEdit.InsertPageBreak=IDH_TRichViewEdit_InsertPageBreak@RichView.hlp>Main +6 TRichViewEdit.InsertPicture=IDH_TRichViewEdit_InsertPicture_@RichView.hlp>Main +6 TRichViewEdit.InsertRTFFromFileEd=IDH_TRichViewEdit_InsertRTFFromFileEd@RichView.hlp>Main +6 TRichViewEdit.InsertRTFFromStreamEd=IDH_TRichViewEdit_InsertRTFFromStreamEd@RichView.hlp>Main +6 TRichViewEdit.InsertRVFFromFileEd=IDH_TRichViewEdit_InsertRVFFromFileEd@RichView.hlp>Main +6 TRichViewEdit.InsertRVFFromStreamEd=IDH_TRichViewEdit_InsertRVFFromStreamEd@RichView.hlp>Main +6 TRichViewEdit.InsertStringTag -A -W=IDH_TRichViewEdit_InsertStringTag@RichView.hlp>Main +6 TRichViewEdit.InsertTab=IDH_TRichViewEdit_InsertTab@RichView.hlp>Main +6 TRichViewEdit.InsertText -A -W=IDH_TRichViewEdit_InsertText@RichView.hlp>Main +6 TRichViewEdit.InsertTextFromFile -W=IDH_TRichViewEdit_InsertTextFromFile@RichView.hlp>Main +6 TRichViewEdit.Paste=IDH_TRichViewEdit_Paste@RichView.hlp>Main +6 TRichViewEdit.PasteBitmap=IDH_TRichViewEdit_PasteBitmap@RichView.hlp>Main +6 TRichViewEdit.PasteGraphicFiles=IDH_TRichViewEdit_PasteGraphicFile@RichView.hlp>Main +6 TRichViewEdit.PasteMetafile=IDH_TRichViewEdit_PasteMetafile_@RichView.hlp>Main +6 TRichViewEdit.PasteRTF=IDH_TRichViewEdit_PasteRTF@RichView.hlp>Main +6 TRichViewEdit.PasteRVF=IDH_TRichViewEdit_PasteRVF@RichView.hlp>Main +6 TRichViewEdit.PasteText -A -W=IDH_TRichViewEdit_PasteText@RichView.hlp>Main +6 TRichViewEdit.Redo=IDH_TRichViewEdit_Redo@RichView.hlp>Main +6 TRichViewEdit.RedoAction=IDH_TRichViewEdit_RedoAction@RichView.hlp>Main +6 TRichViewEdit.RedoName=IDH_TRichViewEdit_RedoName@RichView.hlp>Main +6 TRichViewEdit.RemoveCheckpointAtCaret=IDH_TRichViewEdit_RemoveCheckpointAtCaret@RichView.hlp>Main +6 TRichViewEdit.RemoveCheckpointEd=IDH_TRichViewEdit_RemoveCheckpointEd@RichView.hlp>Main +6 TRichViewEdit.RemoveCurrentCheckpoint=IDH_TRichViewEdit_RemoveCurrentCheckpoint@RichView.hlp>Main +6 TRichViewEdit.RemoveCurrentPageBreak=IDH_TRichViewEdit_RemoveCurrentPageBreak@RichView.hlp>Main +6 TRichViewEdit.RemoveLists=IDH_TRichViewEdit_RemoveLists@RichView.hlp>Main +6 TRichViewEdit.ResizeControl=IDH_TRichViewEdit_ResizeControl_@RichView.hlp>Main +6 TRichViewEdit.ResizeCurrentControl=IDH_TRichViewEdit_ResizeCurrentControl@RichView.hlp>Main +6 TRichViewEdit.SearchText -W=IDH_TRichViewEdit_SearchText@RichView.hlp>Main +6 TRichViewEdit.SelectCurrentLine=IDH_TRichViewEdit_SelectCurrentLine@RichView.hlp>Main +6 TRichViewEdit.SelectCurrentWord=IDH_TRichViewEdit_SelectCurrentWord@RichView.hlp>Main +6 TRichViewEdit.SetBreakInfoEd=IDH_TRichViewEdit_SetBreakInfoEd@RichView.hlp>Main +6 TRichViewEdit.SetBulletInfoEd=IDH_TRichViewEdit_SetBulletInfoEd@RichView.hlp>Main +6 TRichViewEdit.SetCheckpointInfoEd=IDH_TRichViewEdit_SetCheckpointInfoEd@RichView.hlp>Main +6 TRichViewEdit.SetControlInfoEd=IDH_TRichViewEdit_SetControlInfoEd@RichView.hlp>Main +6 TRichViewEdit.SetCurrentBreakInfo=IDH_TRichViewEdit_SetCurrentBreakInfo@RichView.hlp>Main +6 TRichViewEdit.SetCurrentBulletInfo=IDH_TRichViewEdit_SetCurrentBulletInfo@RichView.hlp>Main +6 TRichViewEdit.SetCurrentCheckpointInfo=IDH_TRichViewEdit_SetCurrentCheckpointInfo@RichView.hlp>Main +6 TRichViewEdit.SetCurrentControlInfo=IDH_TRichViewEdit_SetCurrentControlInfo@RichView.hlp>Main +6 TRichViewEdit.SetCurrentHotspotInfo=IDH_TRichViewEdit_SetCurrentHotspotInfo@RichView.hlp>Main +6 TRichViewEdit.SetCurrentItemExtraIntProperty=IDH_TRichViewEdit_SetCurrentItemExtraIntProperty@RichView.hlp>Main +6 TRichViewEdit.SetCurrentItemExtraStrProperty=IDH_TRichViewEdit_SetCurrentItemExtraStrProperty@RichView.hlp>Main +6 TRichViewEdit.SetCurrentItemText -A -W=IDH_TRichViewEdit_SetCurrentItemText@RichView.hlp>Main +6 TRichViewEdit.SetCurrentItemVAlign=IDH_TRichViewEdit_SetCurrentItemVAlign@RichView.hlp>Main +6 TRichViewEdit.SetCurrentPictureInfo=IDH_TRichViewEdit_SetCurrentPictureInfo@RichView.hlp>Main +6 TRichViewEdit.SetCurrentTag=IDH_TRichViewEdit_SetCurrentTag_@RichView.hlp>Main +6 TRichViewEdit.SetHotspotInfoEd=IDH_TRichViewEdit_SetHotspotInfoEd@RichView.hlp>Main +6 TRichViewEdit.SetItemExtraIntPropertyEd=IDH_TRichViewEdit_SetItemExtraIntPropertyEd@RichView.hlp>Main +6 TRichViewEdit.SetItemExtraStrPropertyEd=IDH_TRichViewEdit_SetItemExtraStrPropertyEd@RichView.hlp>Main +6 TRichViewEdit.SetItemTagEd=IDH_TRichViewEdit_SetItemTagEd@RichView.hlp>Main +6 TRichViewEdit.SetItemTextEd -A -W=IDH_TRichViewEdit_SetItemTextEd_@RichView.hlp>Main +6 TRichViewEdit.SetItemVAlignEd=IDH_TRichViewEdit_SetItemVAlignEd@RichView.hlp>Main +6 TRichViewEdit.SetPictureInfoEd=IDH_TRichViewEdit_SetPictureInfoEd@RichView.hlp>Main +6 TRichViewEdit.SetUndoGroupMode=IDH_TRichViewEdit_SetUndoGroupMode@RichView.hlp>Main +6 TRichViewEdit.Undo=IDH_TRichViewEdit_Undo@RichView.hlp>Main +6 TRichViewEdit.UndoAction=IDH_TRichViewEdit_UndoAction@RichView.hlp>Main +6 TRichViewEdit.UndoName=IDH_TRichViewEdit_UndoName@RichView.hlp>Main +5 Events +6 TRichViewEdit.OnCaretGetOut=IDH_TRichViewEdit_OnCaretGetOut_@RichView.hlp>Main +6 TRichViewEdit.OnCaretMove=IDH_TRichViewEdit_OnCaretMove@RichView.hlp>Main +6 TRichViewEdit.OnChange=IDH_TRichViewEdit_OnChange@RichView.hlp>Main +6 TRichViewEdit.OnChanging=IDH_TRichViewEdit_OnChanging@RichView.hlp>Main +6 TRichViewEdit.OnCurParaStyleChanged=IDH_TRichViewEdit_OnCurParaStyleChanged@RichView.hlp>Main +6 TRichViewEdit.OnCurTextStyleChanged=IDH_TRichViewEdit_OnCurTextStyleChanged@RichView.hlp>Main +6 TRichViewEdit.OnDrawCustomCaret=IDH_TRichViewEdit_OnDrawCustomCaret@RichView.hlp>Main +6 TRichViewEdit.OnDropFiles=IDH_TRichViewEdit_OnDropFiles@RichView.hlp>Main +6 TRichViewEdit.OnItemResize=IDH_TRichViewEdit_OnItemResize@RichView.hlp>Main +6 TRichViewEdit.OnItemTextEdit=IDH_TRichViewEdit_OnItemTextEdit@RichView.hlp>Main +6 TRichViewEdit.OnMeasureCustomCaret=IDH_TRichViewEdit_OnMeasureCustomCaret@RichView.hlp>Main +6 TRichViewEdit.OnOleDragEnter=IDH_TRichViewEdit_OnOleDragEnter@RichView.hlp>Main +6 TRichViewEdit.OnOleDragLeave=IDH_TRichViewEdit_OnOleDragLeave@RichView.hlp>Main +6 TRichViewEdit.OnOleDragOver=IDH_TRichViewEdit_OnOleDragOver@RichView.hlp>Main +6 TRichViewEdit.OnOleDrop=IDH_TRichViewEdit_OnOleDrop@RichView.hlp>Main +6 TRichViewEdit.OnParaStyleConversion=IDH_TRichViewEdit_OnParaStyleConversion@RichView.hlp>Main +6 TRichViewEdit.OnPaste=IDH_TRichViewEdit_OnPaste@RichView.hlp>Main +6 TRichViewEdit.OnSmartPopupClick=IDH_TRichViewEdit_OnSmartPopupClick@RichView.hlp>Main +6 TRichViewEdit.OnStyleConversion=IDH_TRichViewEdit_OnStyleConversion@RichView.hlp>Main +5 Classes of Properties +6 TRVSmartPopupProperties +7 TRVSmartPopupProperties=IDH_Class_TRVSmartPopupProperties@RichView.hlp>Main +7 Properties +8 TRVSmartPopupProperties.ButtonType=IDH_TRVSmartPopupProperties_ButtonType@RichView.hlp>Main +8 TRVSmartPopupProperties.Color=IDH_TRVSmartPopupProperties_Color@RichView.hlp>Main +8 TRVSmartPopupProperties.Hint=IDH_TRVSmartPopupProperties_Hint@RichView.hlp>Main +8 TRVSmartPopupProperties.HoverColor=IDH_TRVSmartPopupProperties_HoverColor@RichView.hlp>Main +8 TRVSmartPopupProperties.HoverLineColor=IDH_TRVSmartPopupProperties_HoverLineColor@RichView.hlp>Main +8 TRVSmartPopupProperties.ImageIndex=IDH_TRVSmartPopupProperties_ImageIndex@RichView.hlp>Main +8 TRVSmartPopupProperties.ImageList=IDH_TRVSmartPopupProperties_ImageList@RichView.hlp>Main +8 TRVSmartPopupProperties.LineColor=IDH_TRVSmartPopupProperties_LineColor@RichView.hlp>Main +8 TRVSmartPopupProperties.Menu=IDH_TRVSmartPopupProperties_Menu@RichView.hlp>Main +8 TRVSmartPopupProperties.Position=IDH_TRVSmartPopupProperties_Position@RichView.hlp>Main +8 TRVSmartPopupProperties.ShortCut=IDH_TRVSmartPopupProperties_ShortCut@RichView.hlp>Main +7 Methods +8 TRVSmartPopupProperties.SetButtonState=IDH_TRVSmartPopupProperties_SetButtonState@RichView.hlp>Main +5 Examples +6 Moving caret to the beginning of paragraph=IDH_Example_GoToParagraph@RichView.hlp>Main +6 OnDropFile Example=IDH_Example_OnDropFiles@RichView.hlp>Main +4 TDBRichView +5 TDBRichView=IDH_Class_TDBRichView@RichView.hlp>Main +5 Properties +6 TDBRichView.AutoDisplay=IDH_TDBRichView_AutoDisplay@RichView.hlp>Main +6 TDBRichView.DataField=IDH_TDBRichView_DataField@RichView.hlp>Main +6 TDBRichView.DataSource=IDH_TDBRichView_DataSource@RichView.hlp>Main +6 TDBRichView.Field=IDH_TDBRichView_Field@RichView.hlp>Main +5 Methods +6 TDBRichView.Create=IDH_TDBRichView_Create@RichView.hlp>Main +6 TDBRichView.Destroy=IDH_TDBRichView_Destroy@RichView.hlp>Main +6 TDBRichView.LoadField=IDH_TDBRichView_LoadField@RichView.hlp>Main +5 Events +6 TDBRichView.OnLoadCustomFormat=IDH_TDBRichView_OnLoadCustomFormat@RichView.hlp>Main +6 TDBRichView.OnLoadDocument=IDH_TDBRichView_OnLoadDocument@RichView.hlp>Main +6 TDBRichView.OnNewDocument=IDH_TDBRichView_OnNewDocument@RichView.hlp>Main +4 TDBRichViewEdit +5 TDBRichViewEdit=IDH_Class_TDBRichViewEdit@RichView.hlp>Main +5 Properties +6 TDBRichViewEdit.AutoDeleteUnusedStyles=IDH_TDBRichViewEdit_AutoDeleteUnusedStyles@RichView.hlp>Main +6 TDBRichViewEdit.AutoDisplay=IDH_TDBRichViewEdit_AutoDisplay_@RichView.hlp>Main +6 TDBRichViewEdit.DataField=IDH_TDBRichViewEdit_DataField@RichView.hlp>Main +6 TDBRichViewEdit.DataSource=IDH_TDBRichViewEdit_DataSource@RichView.hlp>Main +6 TDBRichViewEdit.Field=IDH_TDBRichViewEdit_Field@RichView.hlp>Main +6 TDBRichViewEdit.FieldFormat=IDH_TDBRichViewEdit_FieldFormat_@RichView.hlp>Main +6 TDBRichViewEdit.IgnoreEscape=IDH_TDBRichViewEdit_IgnoreEscape@RichView.hlp>Main +6 TDBRichViewEdit.ReadOnly=IDH_TDBRichViewEdit_ReadOnly@RichView.hlp>Main +5 Methods +6 TDBRichViewEdit.Change=IDH_TDBRichViewEdit_Change@RichView.hlp>Main +6 TDBRichViewEdit.Create=IDH_TDBRichViewEdit_Create@RichView.hlp>Main +6 TDBRichViewEdit.Destroy=IDH_TDBRichViewEdit_Destroy@RichView.hlp>Main +6 TDBRichViewEdit.LoadField=IDH_TDBRichViewEdit_LoadField@RichView.hlp>Main +5 Events +6 TDBRichViewEdit.OnLoadCustomFormat=IDH_TDBRichViewEdit_OnLoadCustomFormat@RichView.hlp>Main +6 TDBRichViewEdit.OnLoadDocument=IDH_TDBRichViewEdit_OnLoadDocument@RichView.hlp>Main +6 TDBRichViewEdit.OnNewDocument=IDH_TDBRichViewEdit_OnNewDocument@RichView.hlp>Main +6 TDBRichViewEdit.OnSaveCustomFormat=IDH_TDBRichViewEdit_OnSaveCustomFormat@RichView.hlp>Main +5 Examples +6 Using viewer-style methods in DBRichViewEdit=IDH_Example_DBRichViewEdit1@RichView.hlp>Main +6 Inserting controls what can modify themselves in DBRichViewEdit=IDH_Example_DBRichViewEdit2@RichView.hlp>Main +4 TRVPrintPreview +5 TRVPrintPreview=IDH_Class_TRVPrintPreview@RichView.hlp>Main +5 Properties +6 TRVPrintPreview.RVPrint=IDH_TRVPrintPreview_RVPrint@RichView.hlp>Main +3 Additional Components +4 TRVStyle +5 TRVStyle=IDH_Class_TRVStyle@RichView.hlp>Main +5 Properties +6 TRVStyle.CheckpointColor=IDH_TRVStyle_CheckpointColor@RichView.hlp>Main +6 TRVStyle.CheckpointEvColor=IDH_TRVStyle_CheckpointEvColor@RichView.hlp>Main +6 TRVStyle.Color=IDH_TRVStyle_Color@RichView.hlp>Main +6 TRVStyle.CurrentItemColor=IDH_TRVStyle_CurrentItemColor@RichView.hlp>Main +6 TRVStyle.DefCodePage=IDH_TRVStyle_DefCodePage@RichView.hlp>Main +6 TRVStyle.DefTabWidth=IDH_TRVStyle_DefTabWidth@RichView.hlp>Main +6 TRVStyle.DefUnicodeStyle=IDH_TRVStyle_DefUnicodeStyle@RichView.hlp>Main +6 TRVStyle.EndnoteNumbering=IDH_TRVStyle_EndnoteNumbering@RichView.hlp>Main +6 TRVStyle.FieldHighlightColor=IDH_TRVStyle_FieldHighlightColor@RichView.hlp>Main +6 TRVStyle.FieldHighlightType=IDH_TRVStyle_FieldHighlightType@RichView.hlp>Main +6 TRVStyle.FloatingLineColor=IDH_TRVStyle_FloatingLineColor@RichView.hlp>Main +6 TRVStyle.FootnoteNumbering=IDH_TRVStyle_FootnoteNumbering@RichView.hlp>Main +6 TRVStyle.FootnotePageReset=IDH_TRVStyle_FootnotePageReset@RichView.hlp>Main +6 TRVStyle.FullRedraw=IDH_TRVStyle_FullRedraw@RichView.hlp>Main +6 TRVStyle.HoverColor=IDH_TRVStyle_HoverColor@RichView.hlp>Main +6 TRVStyle.InactiveSelColor=IDH_TRVStyle_InactiveSelColor@RichView.hlp>Main +6 TRVStyle.InactiveSelTextColor=IDH_TRVStyle_InactiveSelTextColor@RichView.hlp>Main +6 TRVStyle.InvalidPicture=IDH_TRVStyle_InvalidPicture@RichView.hlp>Main +6 TRVStyle.JumpCursor=IDH_TRVStyle_JumpCursor@RichView.hlp>Main +6 TRVStyle.LineSelectCursor=IDH_TRVStyle_LineSelectCursor@RichView.hlp>Main +6 TRVStyle.ListStyles=IDH_TRVStyle_ListStyles@RichView.hlp>Main +6 TRVStyle.LiveSpellingColor=IDH_TRVStyle_LiveSpellingColor@RichView.hlp>Main +6 TRVStyle.PageBreakColor=IDH_TRVStyle_PageBreakColor@RichView.hlp>Main +6 TRVStyle.ParaStyles=IDH_TRVStyle_ParaStyles@RichView.hlp>Main +6 TRVStyle.SelColor=IDH_TRVStyle_SelColor@RichView.hlp>Main +6 TRVStyle.SelectionMode=IDH_TRVStyle_SelectionMode@RichView.hlp>Main +6 TRVStyle.SelectionStyle=IDH_TRVStyle_SelectionStyle@RichView.hlp>Main +6 TRVStyle.SelTextColor=IDH_TRVStyle_SelTextColor@RichView.hlp>Main +6 TRVStyle.SpecialCharactersColor=IDH_TRVStyle_SpecialCharactersColor@RichView.hlp>Main +6 TRVStyle.SoftPageBreakColor=IDH_TRVStyle_SoftPageBreakColor_@RichView.hlp>Main +6 TRVStyle.SpacesInTab=IDH_TRVStyle_SpacesInTab@RichView.hlp>Main +6 TRVStyle.TextStyles=IDH_TRVStyle_TextStyles@RichView.hlp>Main +6 TRVStyle.UseSound=IDH_TRVStyle_UseSound@RichView.hlp>Main +5 Methods +6 TRVStyle.AddTextStyle=IDH_TRVStyle_AddTextStyle@RichView.hlp>Main +6 TRVStyle.Create=IDH_TRVStyle_Create@RichView.hlp>Main +6 TRVStyle.DeleteTextStyle=IDH_TRVStyle_DeleteTextStyle@RichView.hlp>Main +6 TRVStyle.Destroy=IDH_TRVStyle_Destroy@RichView.hlp>Main +6 TRVStyle.GetListStyleClass=IDH_TRVStyle_GetListStyleClass@RichView.hlp>Main +6 TRVStyle.GetParaStyleClass=IDH_TRVStyle_GetParaStyleClass@RichView.hlp>Main +6 TRVStyle.GetTextStyleClass=IDH_TRVStyle_GetTextStyleClass@RichView.hlp>Main +6 TRVStyle.LoadINI=IDH_TRVStyle_LoadINI@RichView.hlp>Main +6 TRVStyle.LoadReg=IDH_TRVStyle_LoadReg@RichView.hlp>Main +6 TRVStyle.SaveCSS=IDH_TRVStyle_SaveCSS@RichView.hlp>Main +6 TRVStyle.SaveCSSToStream=IDH_TRVStyle_SaveCSSToStream@RichView.hlp>Main +6 TRVStyle.SaveINI=IDH_TRVStyle_SaveINI@RichView.hlp>Main +6 TRVStyle.SaveReg=IDH_TRVStyle_SaveReg@RichView.hlp>Main +5 Events +6 TRVStyle.OnAfterApplyStyle=IDH_TRVStyle_OnAfterApplyStyle@RichView.hlp>Main +6 TRVStyle.OnApplyStyle=IDH_TRVStyle_OnApplyStyle@RichView.hlp>Main +6 TRVStyle.OnApplyStyleColor=IDH_TRVStyle_OnApplyStyleColor@RichView.hlp>Main +6 TRVStyle.OnDrawCheckpoint=IDH_TRVStyle_OnDrawCheckpoint@RichView.hlp>Main +6 TRVStyle.OnDrawPageBreak=IDH_TRVStyle_OnDrawPageBreak@RichView.hlp>Main +6 TRVStyle.OnDrawParaBack=IDH_TRVStyle_OnDrawParaBack@RichView.hlp>Main +6 TRVStyle.OnDrawStyleText=IDH_TRVStyle_OnDrawStyleText@RichView.hlp>Main +6 TRVStyle.OnDrawTextBack=IDH_TRVStyle_OnDrawTextBack@RichView.hlp>Main +6 TRVStyle.OnStyleHoverSensitive=IDH_TRVStyle_OnStyleHoverSensitive@RichView.hlp>Main +5 Classes of Properties - Style Collections +6 TFontInfos +7 TFontInfos=IDH_Class_TFontInfos@RichView.hlp>Main +7 Properties +8 TFontInfos.InvalidItem=IDH_TFontInfos_InvalidItem@RichView.hlp>Main +8 TFontInfos.Items=IDH_TFontInfos_Items@RichView.hlp>Main +8 TFontInfos.PixelsPerInch=IDH_TFontInfos_PixelsPerInch@RichView.hlp>Main +7 Methods +8 TFontInfos.Add=IDH_TFontInfos_Add@RichView.hlp>Main +8 TFontInfos.AddFont=IDH_TFontInfos_AddFont@RichView.hlp>Main +8 TFontInfos.AddFontEx=IDH_TFontInfos_AddFontEx@RichView.hlp>Main +8 TFontInfos.AssignTo=IDH_TFontInfos_AssignTo@RichView.hlp>Main +8 TFontInfos.Create=IDH_TFontInfos_Create@RichView.hlp>Main +8 TFontInfos.FindStyleWithCharset=IDH_TFontInfos_FindStyleWithCharset@RichView.hlp>Main +8 TFontInfos.FindStyleWithColor=IDH_TFontInfos_FindStyleWithColor@RichView.hlp>Main +8 TFontInfos.FindStyleWithFont=IDH_TFontInfos_FindStyleWithFont@RichView.hlp>Main +8 TFontInfos.FindStyleWithFontName=IDH_TFontInfos_FindStyleWithFontName@RichView.hlp>Main +8 TFontInfos.FindStyleWithFontSize=IDH_TFontInfos_FindStyleWithFontSize@RichView.hlp>Main +8 TFontInfos.FindStyleWithFontStyle=IDH_TFontInfos_FindStyleWithFontStyle@RichView.hlp>Main +8 TFontInfos.FindSuchStyle=IDH_TFontInfos_FindSuchStyle@RichView.hlp>Main +6 TParaInfos +7 TParaInfos=IDH_Class_TParaInfos@RichView.hlp>Main +7 Properties +8 TParaInfos.InvalidItem=IDH_TParaInfos_InvalidItem@RichView.hlp>Main +8 TParaInfos.Items=IDH_TParaInfos_Items@RichView.hlp>Main +7 Methods +8 TParaInfos.Add=IDH_TParaInfos_Add@RichView.hlp>Main +8 TParaInfos.AssignTo=IDH_TParaInfos_AssignTo@RichView.hlp>Main +8 TParaInfos.Create=IDH_TParaInfos_Create@RichView.hlp>Main +8 TParaInfos.FindStyleWithAlignment=IDH_TParaInfos_FindStyleWithAlignment@RichView.hlp>Main +8 TParaInfos.FindSuchStyle=IDH_TParaInfos_FindSuchStyle@RichView.hlp>Main +6 TRVListInfos +7 TRVListInfos=IDH_Class_TRVListInfos@RichView.hlp>Main +7 Properties +8 TRVListInfos.Items=IDH_TRVListInfos_Items@RichView.hlp>Main +7 Methods +8 TRVListInfos.Add=IDH_TRVListInfos_Add@RichView.hlp>Main +8 TRVListInfos.AssignTo=IDH_TRVListInfos_AssignTo@RichView.hlp>Main +8 TRVListInfos.FindStyleWithLevels=IDH_TRVListInfos_FindStyleWithLevels@RichView.hlp>Main +8 TRVListInfos.FindSuchStyle=IDH_TRVListInfos_FindSuchStyle@RichView.hlp>Main +5 Classes of Properties - Styles +6 TCustomRVInfo +7 TCustomRVInfo=IDH_Class_TCustomRVInfo@RichView.hlp>Main +7 Properties +8 TCustomRVInfo.Standard=IDH_TCustomRVInfo_Standard@RichView.hlp>Main +8 TCustomRVInfo.StyleName=IDH_TCustomRVInfo_StyleName@RichView.hlp>Main +6 TCustomRVFontInfo +7 TCustomRVFontInfo=IDH_Class_TCustomRVFontInfo@RichView.hlp>Main +7 Properties +8 TCustomRVFontInfo.BackColor=IDH_TCustomRVFontInfo_BackColor@RichView.hlp>Main +8 TCustomRVFontInfo.BiDiMode=IDH_TCustomRVFontInfo_BiDiMode@RichView.hlp>Main +8 TCustomRVFontInfo.CharScale=IDH_TCustomRVFontInfo_CharScale@RichView.hlp>Main +8 TCustomRVFontInfo.Charset=IDH_TCustomRVFontInfo_Charset@RichView.hlp>Main +8 TCustomRVFontInfo.CharSpacing=IDH_TCustomRVFontInfo_CharSpacing@RichView.hlp>Main +8 TCustomRVFontInfo.Color=IDH_TCustomRVFontInfo_Color@RichView.hlp>Main +8 TCustomRVFontInfo.FontName=IDH_TCustomRVFontInfo_FontName@RichView.hlp>Main +8 TCustomRVFontInfo.HoverBackColor=IDH_TCustomRVFontInfo_HoverBackColor@RichView.hlp>Main +8 TCustomRVFontInfo.HoverColor=IDH_TCustomRVFontInfo_HoverColor@RichView.hlp>Main +8 TCustomRVFontInfo.HoverEffects=IDH_TCustomRVFontInfo_HoverEffects@RichView.hlp>Main +8 TCustomRVFontInfo.HoverUnderlineColor=IDH_TCustomRVFontInfo_HoverUnderlineColor@RichView.hlp>Main +8 TCustomRVFontInfo.Jump=IDH_TCustomRVFontInfo_Jump@RichView.hlp>Main +8 TCustomRVFontInfo.JumpCursor=IDH_TCustomRVFontInfo_JumpCursor@RichView.hlp>Main +8 TCustomRVFontInfo.Options=IDH_TCustomRVFontInfo_Options@RichView.hlp>Main +8 TCustomRVFontInfo.Protection=IDH_TCustomRVFontInfo_Protection@RichView.hlp>Main +8 TCustomRVFontInfo.Size=IDH_TCustomRVFontInfo_Size@RichView.hlp>Main +8 TCustomRVFontInfo.Style=IDH_TCustomRVFontInfo_Style@RichView.hlp>Main +8 TCustomRVFontInfo.StyleEx=IDH_TCustomRVFontInfo_StyleEx@RichView.hlp>Main +8 TCustomRVFontInfo.SubSuperScriptType=IDH_TCustomRVFontInfo_SubSuperScriptType@RichView.hlp>Main +8 TCustomRVFontInfo.UnderlineColor=IDH_TCustomRVFontInfo_UnderlineColor@RichView.hlp>Main +8 TCustomRVFontInfo.UnderlineType=IDH_TCustomRVFontInfo_UnderlineType@RichView.hlp>Main +8 TCustomRVFontInfo.VShift=IDH_TCustomRVFontInfo_VShift@RichView.hlp>Main +7 Methods +8 TCustomRVFontInfo.Assign=IDH_TCustomRVFontInfo_Assign@RichView.hlp>Main +8 TCustomRVFontInfo.AssignTo=IDH_TCustomRVFontInfo_AssignTo@RichView.hlp>Main +8 TCustomRVFontInfo.Create=IDH_TCustomRVFontInfo_Create@RichView.hlp>Main +8 TCustomRVFontInfo.IsEqual=IDH_TCustomRVFontInfo_IsEqual@RichView.hlp>Main +6 TFontInfo +7 TFontInfo=IDH_Class_TFontInfo@RichView.hlp>Main +7 Properties +8 TFontInfo.Unicode=IDH_TFontInfo_Unicode@RichView.hlp>Main +8 TFontInfo.NextStyleNo=IDH_TFontInfo_NextStyleNo@RichView.hlp>Main +7 Methods +8 TFontInfo.Assign=IDH_TFontInfo_Assign@RichView.hlp>Main +8 TFontInfo.Create=IDH_TFontInfo_Create@RichView.hlp>Main +8 TFontInfo.IsEqual=IDH_TFontInfo_IsEqual@RichView.hlp>Main +6 TCustomRVParaInfo +7 TCustomRVParaInfo=IDH_Class_TCustomRVParaInfo@RichView.hlp>Main +7 Properties +8 TCustomRVParaInfo.Alignment=IDH_TCustomRVParaInfo_Alignment@RichView.hlp>Main +8 TCustomRVParaInfo.Background=IDH_TCustomRVParaInfo_Background@RichView.hlp>Main +8 TCustomRVParaInfo.BiDiMode=IDH_TCustomRVParaInfo_BiDiMode@RichView.hlp>Main +8 TCustomRVParaInfo.Border=IDH_TCustomRVParaInfo_Border@RichView.hlp>Main +8 TCustomRVParaInfo.FirstIndent=IDH_TCustomRVParaInfo_FirstIndent@RichView.hlp>Main +8 TCustomRVParaInfo.LeftIndent=IDH_TCustomRVParaInfo_LeftIndent@RichView.hlp>Main +8 TCustomRVParaInfo.LineSpacing=IDH_TCustomRVParaInfo_LineSpacing@RichView.hlp>Main +8 TCustomRVParaInfo.LineSpacingType=IDH_TCustomRVParaInfo_LineSpacingType@RichView.hlp>Main +8 TCustomRVParaInfo.Options=IDH_TCustomRVParaInfo_Options@RichView.hlp>Main +8 TCustomRVParaInfo.OutlineLevel=IDH_TCustomRVParaInfo_OutlineLevel@RichView.hlp>Main +8 TCustomRVParaInfo.RightIndent=IDH_TCustomRVParaInfo_RightIndent@RichView.hlp>Main +8 TCustomRVParaInfo.SpaceAfter=IDH_TCustomRVParaInfo_SpaceAfter@RichView.hlp>Main +8 TCustomRVParaInfo.SpaceBefore=IDH_TCustomRVParaInfo_SpaceBefore@RichView.hlp>Main +8 TCustomRVParaInfo.Tabs=IDH_TCustomRVParaInfo_Tabs@RichView.hlp>Main +7 Methods +8 TCustomRVParaInfo.Assign=IDH_TCustomRVParaInfo_Assign@RichView.hlp>Main +8 TCustomRVParaInfo.Create=IDH_TCustomRVParaInfo_Create@RichView.hlp>Main +8 TCustomRVParaInfo.IsEqual=IDH_TCustomRVParaInfo_IsEqual@RichView.hlp>Main +6 TParaInfo +7 TParaInfo=IDH_Class_TParaInfo@RichView.hlp>Main +7 Properties +8 TParaInfo.DefStyleNo=IDH_TParaInfo_DefStyleNo@RichView.hlp>Main +8 TParaInfo.NextParaNo=IDH_TParaInfo_NextParaNo@RichView.hlp>Main +7 Methods +8 TParaInfo.Assign=IDH_TParaInfo_Assign@RichView.hlp>Main +8 TParaInfo.Create=IDH_TParaInfo_Create@RichView.hlp>Main +8 TParaInfo.IsEqual=IDH_TParaInfo_IsEqual@RichView.hlp>Main +6 TRVListInfo +7 TRVListInfo=IDH_Class_TRVListInfo@RichView.hlp>Main +7 Properties +8 TRVListInfo.Levels=IDH_TRVListInfo_Levels@RichView.hlp>Main +8 TRVListInfo.OneLevelPreview=IDH_TRVListInfo_OneLevelPreview_@RichView.hlp>Main +7 Methods +8 TRVListInfo.AllNumbered=IDH_TRVListInfo_AllNumbered@RichView.hlp>Main +8 TRVListInfo.HasNumbering=IDH_TRVListInfo_HasNumbering@RichView.hlp>Main +5 Classes of Properties of Paragraph Style +6 TRVBackgroundRect +7 TRVBackgroundRect=IDH_Class_TRVBackgroundRect@RichView.hlp>Main +7 Properties +8 TRVBackgroundRect.BorderOffsets=IDH_TRVBackgroundRect_BorderOffsets@RichView.hlp>Main +8 TRVBackgroundRect.Color=IDH_TRVBackgroundRect_Color@RichView.hlp>Main +6 TRVBorder +7 TRVBorder=IDH_Class_TRVBorder@RichView.hlp>Main +7 Properties +8 TRVBorder.BorderOffsets=IDH_TRVBorder_BorderOffsets@RichView.hlp>Main +8 TRVBorder.Color=IDH_TRVBorder_Color@RichView.hlp>Main +8 TRVBorder.InternalWidth=IDH_TRVBorder_InternalWidth@RichView.hlp>Main +8 TRVBorder.Style=IDH_TRVBorder_Style@RichView.hlp>Main +8 TRVBorder.VisibleBorders=IDH_TRVBorder_VisibleBorders@RichView.hlp>Main +8 TRVBorder.Width=IDH_TRVBorder_Width@RichView.hlp>Main +6 TRVTabInfos +7 TRVTabInfos=IDH_Class_TRVTabInfos@RichView.hlp>Main +7 Properties +8 TRVTabInfos.Items=IDH_TRVTabInfos_Items@RichView.hlp>Main +7 Methods +8 TRVTabInfos.AddFrom=IDH_TRVTabInfos_AddFrom@RichView.hlp>Main +8 TRVTabInfos.DeleteList=IDH_TRVTabInfos_DeleteList@RichView.hlp>Main +8 TRVTabInfos.Find=IDH_TRVTabInfos_Find@RichView.hlp>Main +8 TRVTabInfos.Intersect=IDH_TRVTabInfos_Intersect@RichView.hlp>Main +6 TRVTabInfo +7 TRVTabInfo=IDH_Class_TRVTabInfo@RichView.hlp>Main +7 Properties +8 TRVTabInfo.Align=IDH_TRVTabInfo_Align@RichView.hlp>Main +8 TRVTabInfo.Leader=IDH_TRVTabInfo_Leader@RichView.hlp>Main +8 TRVTabInfo.Position=IDH_TRVTabInfo_Position@RichView.hlp>Main +5 Classes of Properties of List Style +6 TRVListLevelCollection +7 TRVListLevelCollection=IDH_Class_TRVListLevelCollection@RichView.hlp>Main +7 Properties +8 TRVListLevelCollection.Items=IDH_TRVListLevelCollection_Items@RichView.hlp>Main +7 Methods +8 TRVListLevelCollection.Add=IDH_TRVListLevelCollection_Add@RichView.hlp>Main +6 TRVListLevel +7 TRVListLevel=IDH_Class_TRVListLevel@RichView.hlp>Main +7 Properties +8 TRVListLevel.FirstIndent=IDH_TRVListLevel_FirstIndent@RichView.hlp>Main +8 TRVListLevel.Font=IDH_TRVListLevel_Font@RichView.hlp>Main +8 TRVListLevel.FormatString=IDH_TRVListLevel_FormatString@RichView.hlp>Main +8 TRVListLevel.FormatStringW=IDH_TRVListLevel_FormatStringW@RichView.hlp>Main +8 TRVListLevel.ImageIndex=IDH_TRVListLevel_ImageIndex@RichView.hlp>Main +8 TRVListLevel.ImageList=IDH_TRVListLevel_ImageList@RichView.hlp>Main +8 TRVListLevel.LeftIndent=IDH_TRVListLevel_LeftIndent@RichView.hlp>Main +8 TRVListLevel.ListType=IDH_TRVListLevel_ListType@RichView.hlp>Main +8 TRVListLevel.MarkerAlignment=IDH_TRVListLevel_MarkerAlignment@RichView.hlp>Main +8 TRVListLevel.MarkerIndent=IDH_TRVListLevel_MarkerIndent@RichView.hlp>Main +8 TRVListLevel.Options=IDH_TRVListLevel_Options@RichView.hlp>Main +8 TRVListLevel.Picture=IDH_TRVListLevel_Picture@RichView.hlp>Main +8 TRVListLevel.StartFrom=IDH_TRVListLevel_StartFrom@RichView.hlp>Main +7 Methods +8 TRVListLevel.HasNumbering=IDH_TRVListLevel_HasNumbering@RichView.hlp>Main +4 TRVPrint +5 TRVPrint=IDH_Class_TRVPrint@RichView.hlp>Main +5 Properties +6 TRVPrint.BottomMarginMM=IDH_TRVPrint_BottomMarginMM@RichView.hlp>Main +6 TRVPrint.ClipMargins=IDH_TRVPrint_ClipMargins@RichView.hlp>Main +6 TRVPrint.FixMarginsMode=IDH_TRVPrint_FixMarginsMode@RichView.hlp>Main +6 TRVPrint.FooterYMM=IDH_TRVPrint_FooterYMM@RichView.hlp>Main +6 TRVPrint.HeaderYMM=IDH_TRVPrint_HeaderYMM@RichView.hlp>Main +6 TRVPrint.LeftMarginMM=IDH_TRVPrint_LeftMarginMM@RichView.hlp>Main +6 TRVPrint.MirrorMargins=IDH_TRVPrint_MirrorMargins@RichView.hlp>Main +6 TRVPrint.Preview100PercentHeight=IDH_TRVPrint_Preview100PercentHeight@RichView.hlp>Main +6 TRVPrint.Preview100PercentWidth=IDH_TRVPrint_Preview100PercentWidth@RichView.hlp>Main +6 TRVPrint.RightMarginMM=IDH_TRVPrint_RightMarginMM@RichView.hlp>Main +6 TRVPrint.TopMarginMM=IDH_TRVPrint_TopMarginMM@RichView.hlp>Main +5 Methods +6 TRVPrint.AssignDocParameters=IDH_TRVPrint_AssignDocParameters@RichView.hlp>Main +6 TRVPrint.AssignSource=IDH_TRVPrint_AssignSource@RichView.hlp>Main +6 TRVPrint.Create=IDH_TRVPrint_Create@RichView.hlp>Main +6 TRVPrint.DrawPreview=IDH_TRVPrint_DrawPreview@RichView.hlp>Main +6 TRVPrint.FormatPages=IDH_TRVPrint_FormatPages@RichView.hlp>Main +6 TRVPrint.GetFooterRect=IDH_TRVPrint_GetFooterRect@RichView.hlp>Main +6 TRVPrint.GetHeaderRect=IDH_TRVPrint_GetHeaderRect@RichView.hlp>Main +6 TRVPrint.MakePreview=IDH_TRVPrint_MakePreview@RichView.hlp>Main +6 TRVPrint.MakeScaledPreview=IDH_TRVPrint_MakeScaledPreview@RichView.hlp>Main +6 TRVPrint.Print=IDH_TRVPrint_Print@RichView.hlp>Main +6 TRVPrint.ContinuousPrint=IDH_TRVPrint_ContinuousPrint@RichView.hlp>Main +6 TRVPrint.PrintPages=IDH_TRVPrint_PrintPages@RichView.hlp>Main +6 TRVPrint.SetFooter=IDH_TRVPrint_SetFooter@RichView.hlp>Main +6 TRVPrint.SetHeader=IDH_TRVPrint_SetHeader@RichView.hlp>Main +5 Events +6 TRVPrint.OnFormatting=IDH_TRVPrint_OnFormatting@RichView.hlp>Main +6 TRVPrint.OnPagePostpaint=IDH_TRVPrint_OnPagePostpaint@RichView.hlp>Main +6 TRVPrint.OnPagePrepaint=IDH_TRVPrint_OnPagePrepaint@RichView.hlp>Main +6 TRVPrint.OnSendingToPrinter=IDH_TRVPrint_OnSendingToPrinter_@RichView.hlp>Main +4 TRVOfficeConverter +5 TRVOfficeConverter=IDH_Class_TRVOfficeConverter@RichView.hlp>Main +5 Properties +6 TRVOfficeConverter.ErrorCode=IDH_TRVOfficeConverter_ErrorCode@RichView.hlp>Main +6 TRVOfficeConverter.ExcludeHTML-Converter=IDH_TRVOfficeConverter_ExcludeHTMLConverter@RichView.hlp>Main +6 TRVOfficeConverter.ExportConverters=IDH_TRVOfficeConverter_ExportConverters@RichView.hlp>Main +6 TRVOfficeConverter.ExtensionsInFilter=IDH_TRVOfficeConverter_ExtensionsInFilter@RichView.hlp>Main +6 TRVOfficeConverter.ImportConverters=IDH_TRVOfficeConverter_ImportConverters@RichView.hlp>Main +6 TRVOfficeConverter.PreviewMode=IDH_TRVOfficeConverter_PreviewMode@RichView.hlp>Main +6 TRVOfficeConverter.Stream=IDH_TRVOfficeConverter_Stream@RichView.hlp>Main +5 Methods +6 TRVOfficeConverter.Create=IDH_TRVOfficeConverter_Create@RichView.hlp>Main +6 TRVOfficeConverter.Destroy=IDH_TRVOfficeConverter_Destroy@RichView.hlp>Main +6 TRVOfficeConverter.ExportRTF=IDH_TRVOfficeConverter_ExportRTF@RichView.hlp>Main +6 TRVOfficeConverter.ExportRV=IDH_TRVOfficeConverter_ExportRV_@RichView.hlp>Main +6 TRVOfficeConverter.GetExportFilter=IDH_TRVOfficeConverter_GetExportFilter@RichView.hlp>Main +6 TRVOfficeConverter.GetImportFilter=IDH_TRVOfficeConverter_GetImportFilter@RichView.hlp>Main +6 TRVOfficeConverter.ImportRTF=IDH_TRVOfficeConverter_ImportRTF@RichView.hlp>Main +6 TRVOfficeConverter.ImportRV=IDH_TRVOfficeConverter_ImportRV_@RichView.hlp>Main +6 TRVOfficeConverter.IsValidImporter=IDH_TRVOfficeConverter_IsValidImporter@RichView.hlp>Main +5 Events +6 TRVOfficeConverter.OnConverting=IDH_TRVOfficeConverter_OnConverting@RichView.hlp>Main +5 Classes of Properties +6 TRVOfficeCnvList=TRVOfficeCnvList@RichView.hlp>Main +6 TRVOfficeConverterInfo=TRVOfficeConverterInfo@RichView.hlp>Main +4 TRVReportHelper +5 TRVReportHelper=IDH_Class_TRVReportHelper@RichView.hlp>Main +5 Properties +6 TRVReportHelper.RichView=IDH_TRVReportHelper_RichView@RichView.hlp>Main +5 Methods +6 TRVReportHelper.DrawPage=IDH_TRVReportHelper_DrawPage@RichView.hlp>Main +6 TRVReportHelper.DrawPageAt=IDH_TRVReportHelper_DrawPageAt@RichView.hlp>Main +6 TRVReportHelper.Finished=IDH_TRVReportHelper_Finished@RichView.hlp>Main +6 TRVReportHelper.FormatNextPage=IDH_TRVReportHelper_FormatNextPage@RichView.hlp>Main +6 TRVReportHelper.GetLastPageHeight=IDH_TRVReportHelper_GetLastPageHeight@RichView.hlp>Main +6 TRVReportHelper.Init=IDH_TRVReportHelper_Init@RichView.hlp>Main +5 Events +6 TRVReportHelper.OnDrawCheckpoint=IDH_TRVReportHelper_OnDrawCheckpoint@RichView.hlp>Main +6 TRVReportHelper.OnDrawHyperlink=IDH_TRVReportHelper_OnDrawHyperlink@RichView.hlp>Main +3 Components Ancestor Classes +4 TRVScroller +5 TRVScroller=IDH_Class_TRVScroller@RichView.hlp>Main +5 Properties +6 TRVScroller.BorderStyle=IDH_TRVScroller_BorderStyle@RichView.hlp>Main +6 TRVScroller.HScrollMax=IDH_TRVScroller_HScrollMax@RichView.hlp>Main +6 TRVScroller.HScrollPos=IDH_TRVScroller_HScrollPos@RichView.hlp>Main +6 TRVScroller.HScrollVisible=IDH_TRVScroller_HScrollVisible@RichView.hlp>Main +6 TRVScroller.InplaceEditor=IDH_TRVScroller_InplaceEditor@RichView.hlp>Main +6 TRVScroller.NoVScroll=IDH_TRVScroller_NoVScroll@RichView.hlp>Main +6 TRVScroller.Tracking=IDH_TRVScroller_Tracking@RichView.hlp>Main +6 TRVScroller.UseXPThemes=IDH_TRVScroller_UseXPThemes@RichView.hlp>Main +6 TRVScroller.VScrollMax=IDH_TRVScroller_VScrollMax@RichView.hlp>Main +6 TRVScroller.VScrollPos=IDH_TRVScroller_VScrollPos@RichView.hlp>Main +6 TRVScroller.VScrollVisible=IDH_TRVScroller_VScrollVisible@RichView.hlp>Main +6 TRVScroller.WheelStep=IDH_TRVScroller_WheelStep@RichView.hlp>Main +5 Methods +6 TRVScroller.Create=IDH_TRVScroller_Create@RichView.hlp>Main +6 TRVScroller.ScrollTo=IDH_TRVScroller_ScrollTo@RichView.hlp>Main +5 Events +6 TRVScroller.OnHScrolled=IDH_TRVScroller_OnHScrolled@RichView.hlp>Main +6 TRVScroller.OnVScrolled=IDH_TRVScroller_OnVScrolled@RichView.hlp>Main +4 TCustomRVPrint +5 TCustomRVPrint=IDH_Class_TCustomRVPrint@RichView.hlp>Main +5 Properties +6 TCustomRVPrint.ColorMode=IDH_TCustomRVPrint_ColorMode@RichView.hlp>Main +6 TCustomRVPrint.EndAt=IDH_TCustomRVPrint_EndAt@RichView.hlp>Main +6 TCustomRVPrint.PagesCount=IDH_TCustomRVPrint_PagesCount@RichView.hlp>Main +6 TCustomRVPrint.PreviewCorrection=IDH_TCustomRVPrint_PreviewCorrection@RichView.hlp>Main +6 TCustomRVPrint.StartAt=IDH_TCustomRVPrint_StartAt@RichView.hlp>Main +6 TCustomRVPrint.TransparentBackground=IDH_TCustomRVPrint_TransparentBackground@RichView.hlp>Main +5 Methods +6 TCustomRVPrint.Clear=IDH_TCustomRVPrint_Clear@RichView.hlp>Main +6 TCustomRVPrint.GetFirstItemOnPage=IDH_TCustomRVPrint_GetFirstItemOnPage@RichView.hlp>Main +6 TCustomRVPrint.UpdatePaletteInfo=IDH_TCustomRVPrint_UpdatePaletteInfo@RichView.hlp>Main +5 Events +6 TCustomRVPrint.OnPrintComponent=IDH_TCustomRVPrint_OnPrintComponent@RichView.hlp>Main +4 TCustomRVPrintPreview +5 TCustomRVPrintPreview=IDH_Class_TCustomRVPrintPreview_@RichView.hlp>Main +5 Properties +6 TCustomRVPrintPreview.ClickMode=IDH_TCustomRVPrintPreview_ClickMode@RichView.hlp>Main +6 TCustomRVPrintPreview.Color=IDH_TCustomRVPrintPreview_Color_@RichView.hlp>Main +6 TCustomRVPrintPreview.MarginsPen=IDH_TCustomRVPrintPreview_MarginsPen@RichView.hlp>Main +6 TCustomRVPrintPreview.PageBorderColor=IDH_TCustomRVPrintPreview_PageBorderColor@RichView.hlp>Main +6 TCustomRVPrintPreview.PageBorderWidth=IDH_TCustomRVPrintPreview_PageBorderWidth@RichView.hlp>Main +6 TCustomRVPrintPreview.PageNo=IDH_TCustomRVPrintPreview_PageNo@RichView.hlp>Main +6 TCustomRVPrintPreview.PrintableAreaPen=IDH_TCustomRVPrintPreview_PrintableAreaPen@RichView.hlp>Main +6 TCustomRVPrintPreview.ShadowColor=IDH_TCustomRVPrintPreview_ShadowColor@RichView.hlp>Main +6 TCustomRVPrintPreview.ShadowWidth=IDH_TCustomRVPrintPreview_ShadowWidth@RichView.hlp>Main +6 TCustomRVPrintPreview.ZoomInCursor=IDH_TCustomRVPrintPreview_ZoomInCursor@RichView.hlp>Main +6 TCustomRVPrintPreview.ZoomMode=IDH_TCustomRVPrintPreview_ZoomMode@RichView.hlp>Main +6 TCustomRVPrintPreview.ZoomOutCursor=IDH_TCustomRVPrintPreview_ZoomOutCursor@RichView.hlp>Main +6 TCustomRVPrintPreview.ZoomPercent=IDH_TCustomRVPrintPreview_ZoomPercent@RichView.hlp>Main +5 Methods +6 TCustomRVPrintPreview.Create=IDH_TCustomRVPrintPreview_Create@RichView.hlp>Main +6 TCustomRVPrintPreview.First=IDH_TCustomRVPrintPreview_First_@RichView.hlp>Main +6 TCustomRVPrintPreview.Last=IDH_TCustomRVPrintPreview_Last@RichView.hlp>Main +6 TCustomRVPrintPreview.Next=IDH_TCustomRVPrintPreview_Next@RichView.hlp>Main +6 TCustomRVPrintPreview.Prev=IDH_TCustomRVPrintPreview_Prev@RichView.hlp>Main +6 TCustomRVPrintPreview.SetZoom=IDH_TCustomRVPrintPreview_SetZoom@RichView.hlp>Main +5 Events +6 TCustomRVPrintPreview.OnZoomChanged=IDH_TCustomRVPrintPreview_OnZoomChanged@RichView.hlp>Main +2 Item Types +3 Item Types=IDH_Class_TCustomRVItemInfo@RichView.hlp>Main +3 Table - TRVTableItemInfo +4 Table - TRVTableItemInfo=IDH_Class_TRVTableItemInfo@RichView.hlp>Main +4 Properties +5 TRVTableItemInfo.BackgroundImage=IDH_TRVTableItemInfo_BackgroundImage@RichView.hlp>Main +5 TRVTableItemInfo.BackgroundImageFileName=IDH_TRVTableItemInfo_BackgroundImageFileName@RichView.hlp>Main +5 TRVTableItemInfo.BackgroundStyle=IDH_TRVTableItemInfo_BackgroundStyle@RichView.hlp>Main +5 TRVTableItemInfo.BestWidth=IDH_TRVTableItemInfo_BestWidth@RichView.hlp>Main +5 TRVTableItemInfo.BorderColor=IDH_TRVTableItemInfo_BorderColor@RichView.hlp>Main +5 TRVTableItemInfo.BorderHSpacing=IDH_TRVTableItemInfo_BorderHSpacing@RichView.hlp>Main +5 TRVTableItemInfo.BorderLightColor=IDH_TRVTableItemInfo_BorderLightColor@RichView.hlp>Main +5 TRVTableItemInfo.BorderStyle=IDH_TRVTableItemInfo_BorderStyle@RichView.hlp>Main +5 TRVTableItemInfo.BorderVSpacing=IDH_TRVTableItemInfo_BorderVSpacing@RichView.hlp>Main +5 TRVTableItemInfo.BorderWidth=IDH_TRVTableItemInfo_BorderWidth@RichView.hlp>Main +5 TRVTableItemInfo.CellBorderColor=IDH_TRVTableItemInfo_CellBorderColor@RichView.hlp>Main +5 TRVTableItemInfo.CellBorderLightColor=IDH_TRVTableItemInfo_CellBorderLightColor@RichView.hlp>Main +5 TRVTableItemInfo.CellBorderStyle=IDH_TRVTableItemInfo_CellBorderStyle@RichView.hlp>Main +5 TRVTableItemInfo.CellBorderWidth=IDH_TRVTableItemInfo_CellBorderWidth@RichView.hlp>Main +5 TRVTableItemInfo.CellHPadding=IDH_TRVTableItemInfo_CellHPadding@RichView.hlp>Main +5 TRVTableItemInfo.CellHSpacing=IDH_TRVTableItemInfo_CellHSpacing@RichView.hlp>Main +5 TRVTableItemInfo.CellPadding=IDH_TRVTableItemInfo_CellPadding@RichView.hlp>Main +5 TRVTableItemInfo.Cells=IDH_TRVTableItemInfo_Cells@RichView.hlp>Main +5 TRVTableItemInfo.CellVPadding=IDH_TRVTableItemInfo_CellVPadding@RichView.hlp>Main +5 TRVTableItemInfo.CellVSpacing=IDH_TRVTableItemInfo_CellVSpacing@RichView.hlp>Main +5 TRVTableItemInfo.ColCount=IDH_TRVTableItemInfo_ColCount@RichView.hlp>Main +5 TRVTableItemInfo.Color=IDH_TRVTableItemInfo_Color@RichView.hlp>Main +5 TRVTableItemInfo.HeadingRowCount=IDH_TRVTableItemInfo_HeadingRowCount@RichView.hlp>Main +5 TRVTableItemInfo.HOutermostRule=IDH_TRVTableItemInfo_HOutermostRule@RichView.hlp>Main +5 TRVTableItemInfo.HRuleColor=IDH_TRVTableItemInfo_HRuleColor_@RichView.hlp>Main +5 TRVTableItemInfo.HRuleWidth=IDH_TRVTableItemInfo_HRuleWidth_@RichView.hlp>Main +5 TRVTableItemInfo.Options=IDH_TRVTableItemInfo_Options@RichView.hlp>Main +5 TRVTableItemInfo.PrintOptions=IDH_TRVTableItemInfo_PrintOptions@RichView.hlp>Main +5 TRVTableItemInfo.RowCount=IDH_TRVTableItemInfo_RowCount@RichView.hlp>Main +5 TRVTableItemInfo.Rows=IDH_TRVTableItemInfo_Rows@RichView.hlp>Main +5 TRVTableItemInfo.TextColSeparator=IDH_TRVTableItemInfo_TextColSeparator@RichView.hlp>Main +5 TRVTableItemInfo.TextRowSeparator=IDH_TRVTableItemInfo_TextRowSeparator@RichView.hlp>Main +5 TRVTableItemInfo.VisibleBorders=IDH_TRVTableItemInfo_VisibleBorders@RichView.hlp>Main +5 TRVTableItemInfo.VOutermostRule=IDH_TRVTableItemInfo_VOutermostRule@RichView.hlp>Main +5 TRVTableItemInfo.VRuleColor=IDH_TRVTableItemInfo_VRuleColor_@RichView.hlp>Main +5 TRVTableItemInfo.VRuleWidth=IDH_TRVTableItemInfo_VRuleWidth_@RichView.hlp>Main +4 Methods +5 TRVTableItemInfo.AssignProperties=IDH_TRVTableItemInfo_AssignProperties@RichView.hlp>Main +5 TRVTableItemInfo.CanMergeCells=IDH_TRVTableItemInfo_CanMergeCells@RichView.hlp>Main +5 TRVTableItemInfo.CanMergeSelectedCells=IDH_TRVTableItemInfo_CanMergeSelectedCells@RichView.hlp>Main +5 TRVTableItemInfo.Changed=IDH_TRVTableItemInfo_Changed@RichView.hlp>Main +5 TRVTableItemInfo.Create=IDH_TRVTableItemInfo_Create@RichView.hlp>Main +5 TRVTableItemInfo.CreateEx=IDH_TRVTableItemInfo_CreateEx@RichView.hlp>Main +5 TRVTableItemInfo.DeleteCols=IDH_TRVTableItemInfo_DeleteCols_@RichView.hlp>Main +5 TRVTableItemInfo.DeleteEmptyCols=IDH_TRVTableItemInfo_DeleteEmptyCols@RichView.hlp>Main +5 TRVTableItemInfo.DeleteEmptyRows=IDH_TRVTableItemInfo_DeleteEmptyRows@RichView.hlp>Main +5 TRVTableItemInfo.DeleteRows=IDH_TRVTableItemInfo_DeleteRows_@RichView.hlp>Main +5 TRVTableItemInfo.DeleteSelectedCols=IDH_TRVTableItemInfo_DeleteSelectedCols@RichView.hlp>Main +5 TRVTableItemInfo.DeleteSelectedRows=IDH_TRVTableItemInfo_DeleteSelectedRows@RichView.hlp>Main +5 TRVTableItemInfo.Deselect=IDH_TRVTableItemInfo_Deselect@RichView.hlp>Main +5 TRVTableItemInfo.Destroy=IDH_TRVTableItemInfo_Destroy@RichView.hlp>Main +5 TRVTableItemInfo.EditCell=IDH_TRVTableItemInfo_EditCell@RichView.hlp>Main +5 TRVTableItemInfo.GetCellAt=IDH_TRVTableItemInfo_GetCellAt@RichView.hlp>Main +5 TRVTableItemInfo.GetEditedCell=IDH_TRVTableItemInfo_GetEditedCell@RichView.hlp>Main +5 TRVTableItemInfo.GetNormalizedSelectionBounds=IDH_TRVTableItemInfo_GetNormalizedSelectionBounds@RichView.hlp>Main +5 TRVTableItemInfo.GetSelectionBounds=IDH_TRVTableItemInfo_GetSelectionBounds@RichView.hlp>Main +5 TRVTableItemInfo.InsertCols=IDH_TRVTableItemInfo_InsertCols_@RichView.hlp>Main +5 TRVTableItemInfo.InsertColsLeft=IDH_TRVTableItemInfo_InsertColsLeft@RichView.hlp>Main +5 TRVTableItemInfo.InsertColsRight=IDH_TRVTableItemInfo_InsertColsRight@RichView.hlp>Main +5 TRVTableItemInfo.InsertRows=IDH_TRVTableItemInfo_InsertRows_@RichView.hlp>Main +5 TRVTableItemInfo.InsertRowsAbove=IDH_TRVTableItemInfo_InsertRowsAbove@RichView.hlp>Main +5 TRVTableItemInfo.InsertRowsBelow=IDH_TRVTableItemInfo_InsertRowsBelow@RichView.hlp>Main +5 TRVTableItemInfo.IsCellSelected=IDH_TRVTableItemInfo_IsCellSelected@RichView.hlp>Main +5 TRVTableItemInfo.LoadFromStream=IDH_TRVTableItemInfo_LoadFromStream@RichView.hlp>Main +5 TRVTableItemInfo.MergeCells=IDH_TRVTableItemInfo_MergeCells_@RichView.hlp>Main +5 TRVTableItemInfo.MergeSelectedCells=IDH_TRVTableItemInfo_MergeSelectedCells@RichView.hlp>Main +5 TRVTableItemInfo.SaveRowsToStream=IDH_TRVTableItemInfo_SaveRowsToStream@RichView.hlp>Main +5 TRVTableItemInfo.SaveToStream=IDH_TRVTableItemInfo_SaveToStream@RichView.hlp>Main +5 TRVTableItemInfo.Select=IDH_TRVTableItemInfo_Select@RichView.hlp>Main +5 TRVTableItemInfo.SelectCols=IDH_TRVTableItemInfo_SelectCols_@RichView.hlp>Main +5 TRVTableItemInfo.SelectRows=IDH_TRVTableItemInfo_SelectRows_@RichView.hlp>Main +5 TRVTableItemInfo.SetCellBackgroundImage=IDH_TRVTableItemInfo_SetCellBackgroundImage@RichView.hlp>Main +5 TRVTableItemInfo.SetCellBackgroundImageFileName=IDH_TRVTableItemInfo_SetCellBackgroundImageFileName@RichView.hlp>Main +5 TRVTableItemInfo.SetCellBackgroundStyle=IDH_TRVTableItemInfo_SetCellBackgroundStyle@RichView.hlp>Main +5 TRVTableItemInfo.SetCellBestHeight=IDH_TRVTableItemInfo_SetCellBestHeight@RichView.hlp>Main +5 TRVTableItemInfo.SetCellBestWidth=IDH_TRVTableItemInfo_SetCellBestWidth@RichView.hlp>Main +5 TRVTableItemInfo.SetCellBorderColor=IDH_TRVTableItemInfo_SetCellBorderColor@RichView.hlp>Main +5 TRVTableItemInfo.SetCellBorderLightColor=IDH_TRVTableItemInfo_SetCellBorderLightColor@RichView.hlp>Main +5 TRVTableItemInfo.SetCellColor=IDH_TRVTableItemInfo_SetCellColor@RichView.hlp>Main +5 TRVTableItemInfo.SetCellHint=IDH_TRVTableItemInfo_SetCellHint@RichView.hlp>Main +5 TRVTableItemInfo.SetCellVAlign=IDH_TRVTableItemInfo_SetCellVAlign@RichView.hlp>Main +5 TRVTableItemInfo.SetCellVisibleBorders=IDH_TRVTableItemInfo_SetCellVisibleBorders@RichView.hlp>Main +5 TRVTableItemInfo.SetRowVAlign=IDH_TRVTableItemInfo_SetRowVAlign@RichView.hlp>Main +5 TRVTableItemInfo.SetTableVisibleBorders=IDH_TRVTableItemInfo_SetTableVisibleBorders@RichView.hlp>Main +5 TRVTableItemInfo.SplitSelectedCellsHorizontally=IDH_TRVTableItemInfo_SplitSelectedCellsHorizontally@RichView.hlp>Main +5 TRVTableItemInfo.SplitSelectedCellsVertically=IDH_TRVTableItemInfo_SplitSelectedCellsVertically@RichView.hlp>Main +5 TRVTableItemInfo.UnmergeCells=IDH_TRVTableItemInfo_UnmergeCells@RichView.hlp>Main +5 TRVTableItemInfo.UnmergeSelectedCells=IDH_TRVTableItemInfo_UnmergeSelectedCells@RichView.hlp>Main +4 Events +5 TRVTableItemInfo.OnCellEditing=IDH_TRVTableItemInfo_OnCellEditing@RichView.hlp>Main +5 TRVTableItemInfo.OnDrawBorder=IDH_TRVTableItemInfo_OnDrawBorder@RichView.hlp>Main +4 Classes of Properties +5 TRVTableCellData +6 TRVTableCellData=IDH_Class_TRVTableCellData@RichView.hlp>Main +6 Properties +7 TRVTableCellData.BackgroundImage=IDH_TRVTableCellData_BackgroundImage@RichView.hlp>Main +7 TRVTableCellData.BackgroundImageFileName=IDH_TRVTableCellData_BackgroundImageFileName@RichView.hlp>Main +7 TRVTableCellData.BackgroundStyle=IDH_TRVTableCellData_BackgroundStyle@RichView.hlp>Main +7 TRVTableCellData.BestHeight=IDH_TRVTableCellData_BestHeight_@RichView.hlp>Main +7 TRVTableCellData.BestWidth=IDH_TRVTableCellData_BestWidth@RichView.hlp>Main +7 TRVTableCellData.BorderColor=IDH_TRVTableCellData_BorderColor@RichView.hlp>Main +7 TRVTableCellData.BorderLightColor=IDH_TRVTableCellData_BorderLightColor@RichView.hlp>Main +7 TRVTableCellData.Color=IDH_TRVTableCellData_Color@RichView.hlp>Main +7 TRVTableCellData.ColSpan=IDH_TRVTableCellData_ColSpan@RichView.hlp>Main +7 TRVTableCellData.Hint=IDH_TRVTableCellData_Hint@RichView.hlp>Main +7 TRVTableCellData.RowSpan=IDH_TRVTableCellData_RowSpan@RichView.hlp>Main +7 TRVTableCellData.VAlign=IDH_TRVTableCellData_VAlign@RichView.hlp>Main +7 TRVTableCellData.VisibleBorders=IDH_TRVTableCellData_VisibleBorders@RichView.hlp>Main +6 Methods +7 TRVTableCellData.GetRVData=IDH_TRVTableCellData_GetRVData@RichView.hlp>Main +5 Additional properties of TRVTableCellData=IDH_Additional_properties_of_TRVTableCellData@RichView.hlp>Main +5 TRVTableRow +6 TRVTableRow=IDH_Class_TRVTableRow@RichView.hlp>Main +6 Properties +7 TRVTableRow.Items=IDH_TRVTableRow_Items@RichView.hlp>Main +7 TRVTableRow.PageBreakBefore=IDH_TRVTableRow_PageBreakBefore@RichView.hlp>Main +7 TRVTableRow.VAlign=IDH_TRVTableRow_VAlign@RichView.hlp>Main +5 TRVTableRows +6 TRVTableRows=IDH_Class_TRVTableRows@RichView.hlp>Main +6 Properties +7 TRVTableRows.Items=IDH_TRVTableRows_Items@RichView.hlp>Main +6 Methods +7 TRVTableRows.GetMainCell=IDH_TRVTableRows_GetMainCell@RichView.hlp>Main +3 Label - TRVLabelItemInfo +4 Label - TRVLabelItemInfo=IDH_Class_TRVLabelItemInfo@RichView.hlp>Main +4 Properties +5 TRVLabelItemInfo.Alignment=IDH_TRVLabelItemInfo_Alignment@RichView.hlp>Main +5 TRVLabelItemInfo.Cursor=IDH_TRVLabelItemInfo_Cursor@RichView.hlp>Main +5 TRVLabelItemInfo.MinWidth=IDH_TRVLabelItemInfo_MinWidth@RichView.hlp>Main +5 TRVLabelItemInfo.ProtectTextStyleNo=IDH_TRVLabelItemInfo_ProtectTextStyleNo@RichView.hlp>Main +5 TRVLabelItemInfo.RemoveInternalLeading=IDH_TRVLabelItemInfo_RemoveInternalLeading@RichView.hlp>Main +5 TRVLabelItemInfo.Text=IDH_TRVLabelItemInfo_Text@RichView.hlp>Main +5 TRVLabelItemInfo.TextStyleNo=IDH_TRVLabelItemInfo_TextStyleNo@RichView.hlp>Main +4 Methods +5 TRVLabelItemInfo.Create=IDH_TRVLabelItemInfo_Create@RichView.hlp>Main +5 TRVLabelItemInfo.CreateEx=IDH_TRVLabelItemInfo_CreateEx@RichView.hlp>Main +3 Numbered Sequence - TRVSeqItemInfo +4 Numbered Sequence - TRVSeqItemInfo=IDH_Class_TRVSeqItemInfo@RichView.hlp>Main +4 Properties +5 TRVSeqItemInfo.FormatString=IDH_TRVSeqItemInfo_FormatString@RichView.hlp>Main +5 TRVSeqItemInfo.NumberType=IDH_TRVSeqItemInfo_NumberType@RichView.hlp>Main +5 TRVSeqItemInfo.Reset=IDH_TRVSeqItemInfo_Reset@RichView.hlp>Main +5 TRVSeqItemInfo.SeqName=IDH_TRVSeqItemInfo_SeqName@RichView.hlp>Main +5 TRVSeqItemInfo.StartFrom=IDH_TRVSeqItemInfo_StartFrom@RichView.hlp>Main +4 Methods +5 TRVSeqItemInfo.Create=IDH_TRVSeqItemInfo_Create@RichView.hlp>Main +5 TRVSeqItemInfo.CreateEx=IDH_TRVSeqItemInfo_CreateEx@RichView.hlp>Main +3 Ancestor for Notes - TCustomRVNoteItemInfo +4 Ancestor for Notes - TCustomRVNoteItemInfo=IDH_Class_TCustomRVNoteItemInfo@RichView.hlp>Main +4 Properties +5 TCustomRVNoteItemInfo.Document=IDH_TCustomRVNoteItemInfo_Document@RichView.hlp>Main +4 Methods +5 TCustomRVNoteItemInfo.ReplaceDocumentEd=IDH_TCustomRVNoteItemInfo_ReplaceDocumentEd@RichView.hlp>Main +3 Endnote - TRVEndnoteItemInfo +4 Endnote - TRVEndnoteItemInfo=IDH_Class_TRVEndnoteItemInfo@RichView.hlp>Main +4 Methods +5 TRVEndnoteItemInfo.Create=IDH_TRVEndnoteItemInfo_Create@RichView.hlp>Main +5 TRVEndnoteItemInfo.CreateEx=IDH_TRVEndnoteItemInfo_CreateEx@RichView.hlp>Main +3 Footnote - TRVFootnoteItemInfo +4 Footnote - TRVFootnoteItemInfo=IDH_Class_TRVFootnoteItemInfo@RichView.hlp>Main +4 Methods +5 TRVFootnoteItemInfo.Create=IDH_TRVFootnoteItemInfo_Create@RichView.hlp>Main +5 TRVFootnoteItemInfo.CreateEx=IDH_TRVFootnoteItemInfo_CreateEx@RichView.hlp>Main +3 Reference to the Parent Note - TRVNoteReferenceItemInfo +4 Reference to the Parent Note - TRVNoteReferenceItemInfo=IDH_Class_TRVNoteReferenceItemInfo@RichView.hlp>Main +4 Methods +5 TRVNoteReferenceItemInfo.Create=IDH_TRVNoteReferenceItemInfo_Create@RichView.hlp>Main +5 TRVNoteReferenceItemInfo.CreateEx=IDH_TRVNoteReferenceItemInfo_CreateEx@RichView.hlp>Main +2 Other Classes +3 ERichViewError=IDH_Class_ERichViewError@RichView.hlp>Main +3 TCustomRVData and Others (TRichView Documents) +4 TCustomRVData and Others (TRichView Documents)=IDH_Class_TRVItemFormattedData@RichView.hlp>Main +4 TCustomRVData.Edit=IDH_TCustomRVData_Edit@RichView.hlp>Main +4 TCustomRVData.GetRVData=IDH_TCustomRVData_GetRVData@RichView.hlp>Main +4 TCustomRVData.GetSourceRVData=IDH_TCustomRVData_GetSourceRVData@RichView.hlp>Main +4 TCustomRVFormattedData.GetOriginEx=IDH_TCustomRVFormattedData_GetOriginEx@RichView.hlp>Main +2 TPrintableRV=TPrintableRV@RichView.hlp>Main +3 TRVBooleanRect=IDH_Class_TRVBooleanRect@RichView.hlp>Main +3 TRVDeleteUnusedStylesData=IDH_Class_TRVDeleteUnusedStylesData@RichView.hlp>Main +3 TRVIntegerList=IDH_Class_TRVIntegerList@RichView.hlp>Main +3 TRVRect=IDH_Class_TRVRect@RichView.hlp>Main +2 Procedures and Functions +3 DrawControl and Others=IDH_CtrlImg_DrawButton@RichView.hlp>Main +3 GetRVESearchOptions=IDH_RVMisc_GetRVESearchOptions@RichView.hlp>Main +3 GetRVSearchOptions=IDH_RVMisc_GetRVSearchOptions@RichView.hlp>Main +3 RV_GetPrinterDC=IDH_Fun_RV_GetPrinterDC@RichView.hlp>Main +3 RV_RegisterHTMLGraphicFormat=IDH_Fun_RV_RegisterHTMLGraphicFormat@RichView.hlp>Main +3 RV_RegisterPngGraphic=IDH_Fun_RV_RegisterPngGraphic@RichView.hlp>Main +3 RVGetFirstEndnote and Others=IDH_Fun_RVGetFirstEndnote@RichView.hlp>Main +3 RVGetNoteTextStyleNo=IDH_Fun_RVGetNoteTextStyleNo@RichView.hlp>Main +3 RVIsURL, RVIsEmail=IDH_Fun_RVIsURL_RVIsEmail@RichView.hlp>Main +3 Unicode Conversion=IDH_Fun_Unicode@RichView.hlp>Main +3 Functions from RVGetText Unit=IDH_RVGetText@RichView.hlp>Main +3 Functions from RVLinear Unit=IDH_RVLinear@RichView.hlp>Main +2 Types +3 TCheckpointData=IDH_Type_TCheckpointData@RichView.hlp>Main +3 TRVAnsiString=IDH_Type_TRVAnsiString@RichView.hlp>Main +3 TRVBiDiMode=IDH_Type_TRVBiDiMode@RichView.hlp>Main +3 TRVBorderStyle=IDH_Type_TRVBorderStyle@RichView.hlp>Main +3 TRVBreakStyle=IDH_Type_TRVBreakStyle@RichView.hlp>Main +3 TRVCellVAlign=TRVCellVAlign@RichView.hlp>Main +3 TRVDisplayOptions=IDH_Type_TRVDisplayOptions@RichView.hlp>Main +3 TRVESearchOptions=IDH_Type_TRVESearchOptions@RichView.hlp>Main +3 TRVExtraItemProperty=IDH_Type_TRVExtraItemProperty@RichView.hlp>Main +3 TRVExtraItemStrProperty=IDH_Type_TRVExtraItemStrProperty@RichView.hlp>Main +3 TRVFontInfoProperties=IDH_Type_TRVFontInfoProperties@RichView.hlp>Main +3 TRVFReaderStyleMode=IDH_Type_TRVFReaderStyleMode@RichView.hlp>Main +3 TRVHTMLLength=IDH_Type_TRVHTMLLength@RichView.hlp>Main +3 TRVItemBackgroundStyle=IDT_TRVItemBackgroundStyle@RichView.hlp>Main +3 TRVOleDropEffects=IDH_Type_TRVOleDropEffect@RichView.hlp>Main +3 TRVParaInfoProperties=IDH_Type_TRVParaInfoProperties@RichView.hlp>Main +3 TRVPrintingStep=IDH_Type_TRVPrintingStep@RichView.hlp>Main +3 TRVRawByteString=IDH_Type_TRVRawByteString@RichView.hlp>Main +3 TRVReaderStyleMode=IDH_TRVReaderStyleMode@RichView.hlp>Main +3 TRVSaveFormat=IDH_Type_TRVSaveFormat@RichView.hlp>Main +3 TRVSaveOptions=IDH_Type_TRVSaveOptions@RichView.hlp>Main +3 TRVSearchOptions=IDH_Type_TRVSearchOptions@RichView.hlp>Main +3 TRVSeqType=IDH_Type_TRVSeqType@RichView.hlp>Main +3 TRVTableBorderStyle=IDH_Type_TRVTableBorderStyle@RichView.hlp>Main +3 TRVTextDrawStates=IDH_Type_TRVTextDrawState@RichView.hlp>Main +3 TRVUndoType=IDH_Type_TRVUndoType@RichView.hlp>Main +3 TRVUnicodeString=IDH_Type_TRVUnicodeString@RichView.hlp>Main +3 TRVVAlign=IDH_Type_TRVVAlign@RichView.hlp>Main +2 Global Constants and Variables +3 Global Constants and Variables=IDH_Constants@RichView.hlp>Main +3 Constants Related to the Caret=IDH_Const_Caret@RichView.hlp>Main +3 RichViewEditDefaultProportionalResize=IDH_Const_RichViewEditDefaultProportionalResize@RichView.hlp>Main +3 RichViewEditEnterAllowsEmptyMarkeredLines=IDH_Const_RichViewEditEnterAllowsEmptyMarkeredLines@RichView.hlp>Main +3 RichViewUnicodeInput=IDH_Const_RichViewUnicodeInput@RichView.hlp>Main +3 RichViewPixelsPerInch=IDH_Const_RichViewPixelsPerInch@RichView.hlp>Main +3 RichViewTableAutoAddRow=IDH_Const_RichViewTableAutoAddRow@RichView.hlp>Main +3 Constants Related to Table Grid=IDH_Const_RichViewTableGrid@RichView.hlp>Main +3 RichViewAllowCopyTableCells=IDH_Const_RichViewAllowCopyTableCells@RichView.hlp>Main +3 Constants Related to HTML and Text=IDH_Const_HTML_Text@RichView.hlp>Main +3 RichViewResetStandardFlag=IDH_Const_RichViewResetStandardFlag@RichView.hlp>Main +3 RichViewSafeFormatting=IDH_Const_RichViewSafeFormatting@RichView.hlp>Main +3 RichViewShowGhostSpaces=IDH_Const_RichViewShowGhostSpaces@RichView.hlp>Main +3 RichViewWrapAnywhere=IDH_Const_RichViewWrapAnywhere@RichView.hlp>Main +3 RVVisibleSpecialCharacters=IDH_Const_RVVisibleSpecialCharacters@RichView.hlp>Main +3 RichViewApostropheInWord=IDH_Const_RichViewApostropheInWord@RichView.hlp>Main +3 RichViewCompareStyleNames=IDH_Const_RichViewCompareStyleNames@RichView.hlp>Main +3 RichViewAlternativePicPrint=IDH_Const_RichViewAlternativePicPrint@RichView.hlp>Main +3 RichViewDoNotCheckRVFStyleRefs=IDH_Const_RichViewDoNotCheckRVFStyleRefs@RichView.hlp>Main +3 rvsXXX constants=IDH_Const_rvsXXX@RichView.hlp>Main +3 Clipboard Related Constants and Variables=IDH_Const_Clipboard@RichView.hlp>Main +3 RVIsCustomURL=IDH_Fun_RVIsCustomURL@RichView.hlp>Main +3 RV_AfterImportGraphic=IDH_Fun_RV_AfterImportGraphic@RichView.hlp>Main +2 How To... +3 How To...=How_To@RichView.hlp>Main +3 change page size and orientation=IDH_HT_PageOptions@RichView.hlp>Main +3 draw page numbers, headers and footers=IDH_HT_PagePrepaint@RichView.hlp>Main +3 implement commands like "make bold", "apply font", etc.=IDH_HT_BOLD@RichView.hlp>Main +3 implement Find and Replace dialogs=IDH_HT_Find_and_Replace@RichView.hlp>Main +3 switch insert/overtype mode=IDH_HT_Switch_insertovertype_mode@RichView.hlp>Main +3 move the caret to the beginning or to the end of document in editor=IDH_HT_MoveCaret@RichView.hlp>Main +3 make Unicode editor=IDH_HT_Make_Unicode_editor@RichView.hlp>Main +3 make a plain text editor=IDH_HT_PlainText@RichView.hlp>Main +3 implement smart indenting=IDH_HT_Implement_smart_indenting@RichView.hlp>Main +3 combine several TRichView documents in one=IDH_HT_Combine@RichView.hlp>Main +3 use third-party graphic classes with RichView=IDH_HT_3PartyGraphics@RichView.hlp>Main +3 create a chat window=IDH_HT_Create_a_chat_window@RichView.hlp>Main +3 remove text formatting=IDH_HT_Remove_text_formatting@RichView.hlp>Main +2 Version History +3 Version History=Version_History@RichView.hlp>Main +3 New in version 12=New_in_version_12@RichView.hlp>Main +3 New in version 11=New_in_version_11@RichView.hlp>Main +3 New in version 10=New_in_version_10@RichView.hlp>Main +3 New in version 1.9=New_in_version_1_9@RichView.hlp>Main +3 New in version 1.8=New_in_version_1_8@RichView.hlp>Main +3 New in version 1.7=New_in_version_1_7@RichView.hlp>Main +3 New in version 1.6=New_in_version_1_6@RichView.hlp>Main +3 New in version 1.5=New_in_version_1_5@RichView.hlp>Main +3 New in version 1.4=New_in_version_1_4@RichView.hlp>Main +3 New in version 1.3=New_in_version_1_3@RichView.hlp>Main +3 New in version 1.2=New_in_version_1_2@RichView.hlp>Main +3 Compatibility with older versions=Compatibility_with_older_versions_of_RichView@RichView.hlp>Main diff --git a/12.0.4/Help/RichView.hlp b/12.0.4/Help/RichView.hlp new file mode 100644 index 0000000..7a6571a Binary files /dev/null and b/12.0.4/Help/RichView.hlp differ diff --git a/12.0.4/Install.html b/12.0.4/Install.html new file mode 100644 index 0000000..7ec10b2 --- /dev/null +++ b/12.0.4/Install.html @@ -0,0 +1,241 @@ + +TRichView 12 - INSTALLATION + +

Common Information

+

Important! +If you have another version of RichView Package installed, +delete it from your hard disk before installing this version! +If an older version remains in paths where Delphi/C++Builder +searches for units, you will not be able to compile/run +your applications with RichView properly. +Even if the new version is installed, Delphi/C++Builder may +compile projects with the older version (if it was not deleted). +

+

+Below are the instructions how to install components, +how to run demos, how to integrate help into IDE. +(Help file is integrated with more or less completeness, + depending on version of Delphi/C++Builder) +

+ +
+ +

Briefly

+

Files

+ + + + + + + + + + + + + + + + +
Subdirectory in UNITSDelphi/C++Builder Version
D6Delphi 6
D7Delphi 7
D9Delphi 2005 (Delphi for Win32)
2006Turbo Delphi 2006, Borland Developer Studio 2006
D2007Delphi 2007 (Win32) (cannot be installed with the packages for C++Builder 2007)
D2009Delphi 2009 (Win32) (cannot be installed with the packages for C++Builder 2009)
D2010Delphi 2010 (Win32) (cannot be installed with the packages for C++Builder 2010)
CB6C++Builder 6
TCPPTurbo C++ 2006
CB2007C++Builder 2007 (cannot be installed with the packages for Delphi 2007)
CB2009C++Builder 2009 (cannot be installed with the packages for Delphi 2009)
CB2010C++Builder 2010 (cannot be installed with the packages for Delphi 2010)
+

Brief Installation Instructions, for All Versions of Delphi and C++Builder

+
    +
  1. Open RVPkg*.* package, install it. +
  2. Open RDBVPkg*.* package, install it. +
  3. Make sure that the path to TRichView units is included in the library path. +
+

The detailed installation instructions are below:

+ + +
+ +

Delphi 6,7

+

Installing the Components

+

The components for Delphi 6/7 are in D6/D7 subfolder of the UNITS folder.

+

The help file is in HELP directory.

+

Open RVPkgD6.dpk / RVPkgD7.dpk (menu "File|Open") and click the "Install" button in the package window.

+

Repeat the steps above with the packages RVDBPkgD6.dpk / RVDBPkgD7.dpk.

+

Make sure that the path to TRichView units (D6/D7 subdirectory) is included in the Delphi library path (menu "Tools | Environment Options", tab "Library", "Library Path").

+ +

Installing Help in Delphi 6,7

+
    +
  1. Choose the menu "Help|Customize...". You'll see Borland OpenHelp Window. +
  2. Click the tab "Contents", then "Add files" button and add "RichView.cnt". +
  3. Click the tab "Index", then "Add files" button and add "RichView.hlp". +
  4. Click the tab "Link", then "Add files" button and add "RichView.hlp". +
  5. Click OpenHelp menu "File|Save project". +
+ +

Demo Projects

+

Demos are in DEMOS\DELPHI subdirectory. +Some additional utilities are in DEMOS\ADDINS.

+ +
+ +

BDS 2005

+

Installing the Components

+

The components for Delphi 2005 are in D9 directory of the UNITS folder.

+

Open RVPkgD9.bdsproj (menu "File|Open"). In the Project Manager window, + right-click the package name and choose "Install" in the context menu.

+

Repeat the steps above with RVDBPkgD9.bdsproj.

+

Make sure that the path to TRichView units (UNITS\D9 subdirectory) is included in the Delphi library path +(menu "Tools | Options", page "Environment Options | Delphi Options | Library - Win32", +"Library Path").

+ +

Help and Demo Projects

+

Help files (in HLP and CHM formats) are in HELP subdirectory.

+

Demos are in DEMOS\DELPHI subdirectory. +Some additional utilities are in DEMOS\ADDINS.

+ +
+ +

BDS 2006 (Delphi and C++Builder), Turbo Delphi 2006

+ +

Installing the Components

+

The components for Delphi and C++Builder 2006 are in UNITS\2006 directory.

+

Open RVPkg2006.bdsproj (menu "File|Open"). In the Project Manager window (usually at the right side of the screen) + right-click the package name and choose "Install" in the context menu.

+

Repeat the steps above with RVDBPkg2006.bdsproj.

+

Make sure that the path to TRichView units (UNITS\2006 subdirectory) is included in the Delphi and C++ library path +(menu "Tools | Options",
+page "Environment Options | Delphi Options | Library - Win32", "Library Path" and
+page "Environment Options | C++ Options | Path and Directories", "Search Path")

+ +

Help and Demo Projects

+

Help files (in HLP and CHM formats) are in HELP subdirectory.

+

Demos for Delphi are in DEMOS\DELPHI subdirectory. +

Demos for C++Builder are in DEMOS\CBUILDER subdirectory. +Some additional utilities are in DEMOS\ADDINS.

+ +
+ +

RAD Studio 2007, Delphi 2007

+ +

Installing the Components

+

The components for Delphi 2007 are in UNITS\D2007 directory.

+

Open RVPkgD2007.dproj (menu "File|Open"). In the Project Manager window (usually at the right side of the screen) + right-click the package name and choose "Install" in the context menu.

+

Repeat the steps above with RVDBPkg2007.dproj.

+

Make sure that the path to TRichView units (UNITS\D2007 subdirectory) is included in the Delphi library path +(menu "Tools | Options",
+page "Environment Options | Delphi Options | Library - Win32", "Library Path")

+ +

Help and Demo Projects

+

Help files (in HLP and CHM formats) are in HELP subdirectory.

+

Demos are in DEMOS\DELPHI subdirectory. +Some additional utilities are in DEMOS\ADDINS.

+ +
+ +

RAD Studio 2009/2010, Delphi 2009/2010

+ +

Installing the Components

+

The components for Delphi 2009/2010 are in D2009 / D2010 subdirectory of the UNITS directory.

+

Open RVPkgD2009.dproj / RVPkgD2010.dproj (menu "File|Open"). In the Project Manager window (usually at the right side of the screen) + right-click the package name and choose "Install" in the context menu.

+

Repeat the steps above with RVDBPkg2009.dproj / RVDBPkg2010.dproj.

+

Make sure that the path to TRichView units (D2009 / D2010 subdirectories of the UNITS directory) is included in the Delphi library path +(menu "Tools | Options",
+page "Environment Options | Delphi Options | Library - Win32", "Library Path")

+ +

Help and Demo Projects

+

Help files (in HLP and CHM formats) are in HELP subdirectory.

+

Demos are in DEMOS\DELPHIUNICODE subdirectory. +Some additional utilities are in DEMOS\ADDINS.

+ + +
+ + +

C++Builder 6

+ +

Installing the Components

+

The Components for C++Builder 6 are in CB6 subdirectory of the UNITS directory.

+

Open RVPkgCB6.bpk (menu "File|Open") and click the "Install" button in the package window.

+

Repeat the steps above with RVDBPkgCB6.bpk.

+

Add path to the components (CB6) to menu "Tools|Environment Options", "Library" tab, "Library path". +

It may be necessary to add paths in each project using the components (menu "Project|Options", "Directories/Conditionals" tab, + "Include path" and "Library path")

+ +

Installing Help in C++Builder 6

+
    +
  1. Copy RichView.hlp and RichView.cnt to the HELP directory of C++Builder +
  2. Run C++Builder. +
  3. Click menu "Help|Customize...". You'll see Borland OpenHelp Window. +
  4. Click the tab "Contents", then "Add files" button and add "RichView.cnt". +
  5. Click the tab "Index", then "Add files" button and add "RichView.hlp". +
  6. Click the tab "Link", then "Add files" button and add "RichView.hlp". +
  7. Click OpenHelp menu "File|Save project". +
+ +

Demo Projects

+

Demos are in DEMOS\CBUILDER subdirectory. +Some additional utilities are in DEMOS\ADDINS.

+ +
+ +

Turbo C++ 2006

+ +

Installing the Components

+

The components for Turbo C++ 2006 are in UNITS\TCPP directory.

+

Open RVPkgTCPP.bdsproj (menu "File|Open"). In the Project Manager window (usually at the right side of the screen), + right-click the package name and choose "Install" in the context menu.

+

Repeat the steps above with RVDBPkgTCPP.bdsproj.

+

Make sure that the path to TRichView units (UNITS\TCPP subdirectory) is included in the TurboC++ library path +(menu "Tools | Options", page "Environment Options | C++ Options | Path and Directories", "Search Path").

+ +

Help and Demo Projects

+

Help files (in HLP and CHM formats) are in HELP subdirectory.

+

Demos are in DEMOS\CBUILDER subdirectory. +Some additional utilities are in DEMOS\ADDINS.

+ +
+ +

RAD Studio 2007, C++Builder 2007

+

Installing the Components

+

The components for C++Builder 2007 are in UNITS\CB2007 directory.

+

Open RVPkgCB2007.cbproj (menu "File|Open"). In the Project Manager window (usually at the right side of the screen) + right-click the package name and choose "Install" in the context menu.

+

Repeat the steps above with RVDBPkgCB2007.cbproj.

+

Make sure that the path to TRichView units (UNITS\CB2007 and UNITS\CB2007\RELEASE subdirectories) is included in the Delphi and C++ library path +(menu "Tools | Options",
+page "Environment Options | Delphi Options | Library - Win32", "Library Path" and
+page "Environment Options | C++ Options | Path and Directories", "Search Path")

+ +

Help and Demo Projects

+

Help files (in HLP and CHM formats) are in HELP subdirectory.

+

Demos in DEMOS\CBUILDER subdirectory. +Some additional utilities are in DEMOS\ADDINS.

+ +
+ +

RAD Studio 2009/2010, C++Builder 2009/2010

+

Installing the Components

+

The components for C++Builder 2009/2010 are in CB2009 / CB2010 subdirectory of the UNITS directory.

+

Open RVPkgCB2009.cbproj / RVPkgCB2010.cbproj (menu "File|Open"). In the Project Manager window (usually at the right side of the screen) + right-click the package name and choose "Install" in the context menu.

+

Repeat the steps above with RVDBPkgCB2009.cbproj / RVDBPkgCB2010.cbproj.

+

Make sure that the paths to TRichView units + (UNITS\CB2009 and UNITS\CB2009\RELEASE subdirectories for C++Builder 2009, + UNITS\CB2010 and UNITS\CB2010\RELEASE subdirectories for C++Builder 2010) are included in the Delphi and C++ library path +(menu "Tools | Options",
+page "Environment Options | Delphi Options | Library - Win32", "Library Path" and
+page "Environment Options | C++ Options | Path and Directories", "Search Path")

+ +

Help and Demo Projects

+

Help files (in HLP and CHM formats) are in HELP subdirectory.

+

Demos in DEMOS\CBUILDERUNICODE subdirectory. +Some additional utilities are in DEMOS\ADDINS.

+ +
\ No newline at end of file diff --git a/12.0.4/ReadMe.txt b/12.0.4/ReadMe.txt new file mode 100644 index 0000000..88199c5 --- /dev/null +++ b/12.0.4/ReadMe.txt @@ -0,0 +1,25 @@ +RichView Package 12 + +RichView is a suite of native Delphi/C++Builder components for displaying, editing and printing hypertext documents. +Components support various character attributes (fonts, subscripts/superscripts, colored text background, custom drawn). +Documents can contain tables, pictures, images from imagelists, arbitrary Delphi controls. +Left, right, center or justify alignments of paragraphs, multilevel bullets and numbering, custom margins and indents, Unicode, background images, print preview, RTF import and export, HTML export, data-aware versions and more... + +HTML\ - general information about components +HELP\ - help file +DEMOS\ - demo projects: + DEMOS\DELPHI\ - for Delphi 4-2007 + DEMOS\CBUILDER\ - for C++Builder 4-2007 + DEMOS\DELPHIUNICODE\ - for Delphi 2009-2010 + DEMOS\CBUILDERUNICODE\ - for C++Builder 2009-2010 + DEMOS\ADDINS\ - additional item types +INSTALL.HTML - installation instructions + +WWW: www.trichview.com +Support +forums: www.trichview.com/forums/ +E-mail: svt@trichview.com or richview@gmail.com +(Sergey Tkachenko) + + +September 14, 2009 \ No newline at end of file diff --git a/12.0.4/Units/D2006/CRVData.dcu b/12.0.4/Units/D2006/CRVData.dcu new file mode 100644 index 0000000..3b983c7 Binary files /dev/null and b/12.0.4/Units/D2006/CRVData.dcu differ diff --git a/12.0.4/Units/D2006/CRVData.hpp b/12.0.4/Units/D2006/CRVData.hpp new file mode 100644 index 0000000..8a1b984 --- /dev/null +++ b/12.0.4/Units/D2006/CRVData.hpp @@ -0,0 +1,513 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Crvdata.pas' rev: 10.00 + +#ifndef CrvdataHPP +#define CrvdataHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Crvdata +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVState { rvstMakingSelection, rvstLineSelection, rvstDrawHover, rvstSkipFormatting, rvstFormattingPart, rvstIgnoreNextMouseDown, rvstChangingBkPalette, rvstCompletelySelected, rvstClearing, rvstDoNotMoveChildren, rvstForceStyleChangeEvent, rvstIgnoreNextChar, rvstDoNotTab, rvstDeselecting, rvstUnAssigningChosen, rvstNoScroll, rvstFinalizingUndo, rvstRTFSkipPar, rvstLoadingAsPartOfItem, rvstNoKillFocusEvents, rvstEditorUnformatted, rvstNameSet, rvstFirstParaAborted, rvstLastParaAborted, rvstInvalidSelection, rvstDoNotClearCurTag, rvstStartingDragDrop, rvstCanDragDropDeleteSelection, rvstKeyPress, rvstDoNotSaveContent, rvstPreserveSoftPageBreaks, rvstNoDBExitUpdate, rvstSavingPage, rvstCreatingInplace }; +#pragma option pop + +typedef Set TRVStates; + +#pragma option push -b- +enum TRVFlag { rvflUseJumps, rvflTrim, rvflShareContents, rvflUseExternalLeading, rvflMouseXYAlwaysCorrect, rvflAllowCustomDrawItems, rvflPrinting, rvflRootEditor, rvflRoot, rvflDBRichViewEdit, rvflCanUseCustomPPI, rvflCanProcessGetText }; +#pragma option pop + +typedef Set TRVFlags; + +#pragma option push -b- +enum TRVFSaveScope { rvfss_Full, rvfss_Selection, rvfss_Page, rvfss_FullInPage }; +#pragma option pop + +typedef Rvclasses::TRVIntegerList* *PRVIntegerList; + +class DELPHICLASS TCustomRVData; +typedef void __fastcall (__closure *TRVEnumItemsProc)(TCustomRVData* RVData, int ItemNo, int &UserData1, const AnsiString UserData2, bool &ContinueEnum); + +class DELPHICLASS TRVLayoutInfo; +class PASCALIMPLEMENTATION TRVLayoutInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + bool Loaded; + int LeftMargin; + int RightMargin; + int TopMargin; + int BottomMargin; + int MinTextWidth; + int MaxTextWidth; + Rvscroll::TRVBiDiMode BiDiMode; + int LastParaAborted; + int FirstParaAborted; + int FirstMarkerListNo; + int FirstMarkerLevel; + __fastcall TRVLayoutInfo(void); + void __fastcall SaveToStream(Classes::TStream* Stream, bool IncludeSize, bool OnlyPageInfo); + void __fastcall LoadFromStream(Classes::TStream* Stream, bool IncludeSize); + void __fastcall SaveTextToStream(Classes::TStream* Stream, bool OnlyPageInfo); + void __fastcall LoadText(const AnsiString s); + void __fastcall LoadBinary(const AnsiString s); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVLayoutInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVHTMLBulletInfo; +class PASCALIMPLEMENTATION TRVHTMLBulletInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + AnsiString FileName; + Imglist::TCustomImageList* ImageList; + int ImageIndex; + Graphics::TColor BackColor; + Graphics::TGraphic* Graphic; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVHTMLBulletInfo(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVHTMLBulletInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFFontTableItem; +class PASCALIMPLEMENTATION TRVRTFFontTableItem : public System::TObject +{ + typedef System::TObject inherited; + +public: + AnsiString FontName; + Graphics::TFontCharset Charset; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFFontTableItem(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFFontTableItem(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFFontTable; +class PASCALIMPLEMENTATION TRVRTFFontTable : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVRTFFontTableItem* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVRTFFontTableItem* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVRTFFontTableItem* Value); + +public: + HIDESBASE int __fastcall Find(const AnsiString FontName, Graphics::TFontCharset Charset); + int __fastcall AddUnique(const AnsiString FontName, Graphics::TFontCharset Charset); + __property TRVRTFFontTableItem* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRTFFontTable(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFFontTable(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TCustomRVData : public Classes::TPersistent +{ + typedef Classes::TPersistent inherited; + +private: + int FFirstJumpNo; + Rvitem::TRVItemList* FItems; + void __fastcall CheckItemIndex(int i); + bool __fastcall GetPageBreaksBeforeItems(int Index); + void __fastcall SetPageBreaksBeforeItems(int Index, bool Value); + bool __fastcall GetClearLeft(int Index); + bool __fastcall GetClearRight(int Index); + void __fastcall SetClearLeft(int Index, const bool Value); + void __fastcall SetClearRight(int Index, const bool Value); + int __fastcall GetItemCount(void); + bool __fastcall ShouldSaveTextToHTML(int StyleNo); + AnsiString __fastcall GetHTMLATag(int ItemNo, AnsiString CSS); + bool __fastcall ShouldSaveTextToRTF(int StyleNo); + void __fastcall AddNLRTag_(const AnsiString s, int StyleNo, int ParaNo, int Tag); + void __fastcall AddNLATag_(const AnsiString s, int StyleNo, int ParaNo, int Tag); + bool __fastcall AddTextUniversal(const AnsiString text, int StyleNo, int FirstParaNo, int OtherParaNo, bool AsSingleParagraph, bool CheckUnicode, int Tag); + +protected: + bool FAllowNewPara; + Rvitem::TRVCPInfo* FirstCP; + Rvitem::TRVCPInfo* LastCP; + Rvitem::TRVCPInfo* NotAddedCP; + virtual bool __fastcall IsWordWrapAllowed(void); + int __fastcall NextCharStr(const AnsiString str, int ItemNo, int Index); + int __fastcall PrevCharStr(const AnsiString str, int ItemNo, int Index); + int __fastcall NextChar(int ItemNo, int Index); + int __fastcall PrevChar(int ItemNo, int Index); + void __fastcall CheckItemClass(int ItemNo, TMetaClass* RequiredClass); + DYNAMIC bool __fastcall ShareItems(void); + DYNAMIC bool __fastcall CanLoadLayout(void); + DYNAMIC AnsiString __fastcall GetURL(int id) = 0 ; + virtual Rvscroll::TRVOptions __fastcall GetOptions(void); + virtual void __fastcall SetOptions(const Rvscroll::TRVOptions Value); + virtual Rvstyle::TRVFOptions __fastcall GetRVFOptions(void); + virtual void __fastcall SetRVFOptions(const Rvstyle::TRVFOptions Value); + virtual Rvstyle::TRVRTFOptions __fastcall GetRTFOptions(void); + virtual void __fastcall SetRTFOptions(const Rvstyle::TRVRTFOptions Value); + virtual Rvstyle::TRVFWarnings __fastcall GetRVFWarnings(void); + virtual void __fastcall SetRVFWarnings(const Rvstyle::TRVFWarnings Value); + DYNAMIC AnsiString __fastcall GetDelimiters(); + virtual Rvstyle::TRVFReaderStyleMode __fastcall GetRVFTextStylesReadMode(void); + virtual Rvstyle::TRVFReaderStyleMode __fastcall GetRVFParaStylesReadMode(void); + DYNAMIC void __fastcall RVFGetLimits(TRVFSaveScope SaveScope, int &StartItem, int &EndItem, int &StartOffs, int &EndOffs, Rvitem::TRVMultiDrawItemPart* &StartPart, Rvitem::TRVMultiDrawItemPart* &EndPart, Rvitem::TCustomRVItemInfo* &SelectedItem); + DYNAMIC Classes::TStrings* __fastcall GetExtraDocuments(void); + DYNAMIC Classes::TPersistent* __fastcall GetRTFProperties(void); + void __fastcall DoOnStyleReaderError(Classes::TReader* Reader, const AnsiString Message, bool &Handled); + bool __fastcall InsertRVFFromStream_(Classes::TStream* Stream, int &Index, int AParaNo, bool AllowReplaceStyles, bool AppendMode, bool EditFlag, Graphics::TColor &Color, Rvback::TRVBackground* Background, TRVLayoutInfo* Layout, int &NonFirstItemsAdded, bool &Protect, bool &FullReformat, bool LoadAsSubDoc); + DYNAMIC void __fastcall DataWriter(Classes::TStream* Stream); + void __fastcall DataReader(Classes::TStream* Stream); + void __fastcall ApplyLayoutInfo(TRVLayoutInfo* Layout); + void __fastcall NormalizeParas(int StartItemNo); + void __fastcall InsertCheckpoint(int ItemNo, int Tag, const AnsiString Name, bool RaiseEvent); + void __fastcall UnlinkCheckpoint(Rvitem::TRVCPInfo* cp, bool DecCPCount); + Rvitem::TRVCPInfo* __fastcall FindCPBeforeItem(int ItemNo); + void __fastcall UpdateCPItemNo(void); + virtual void __fastcall InternalFreeItem(Rvitem::TCustomRVItemInfo* item, bool Clearing); + bool __fastcall IsDelimiter(const AnsiString s, int Index, Rvitem::TRVItemOptions ItemOptions, Rvstyle::TRVCodePage CodePage); + void __fastcall Replace0(AnsiString &s); + bool __fastcall RV_CanConcateItems(int FirstItemNo, Rvitem::TCustomRVItemInfo* item1, Rvitem::TCustomRVItemInfo* item2, bool IgnorePara); + void __fastcall SimpleConcate(int FirstItemNo, Rvitem::TCustomRVItemInfo* item1, Rvitem::TCustomRVItemInfo* item2); + void __fastcall MassSimpleConcate(int FirstItemNo, int LastItemNo); + void __fastcall SimpleConcateSubitems(int ItemNo); + DYNAMIC bool __fastcall SupportsPageBreaks(void); + void __fastcall SaveHTMLCheckpoint(Classes::TStream* Stream, Rvitem::TRVCPInfo* Checkpoint, int &cpno, const AnsiString Prefix, bool FromNewLine, Rvstyle::TRVSaveOptions Options); + AnsiString __fastcall GetTextForHTML(const AnsiString Path, int ItemNo, bool CSSVersion, Rvstyle::TRVSaveOptions SaveOptions); + void __fastcall SaveHTMLNotes(const AnsiString Path, const AnsiString ImagesPrefix, const AnsiString CPPrefix, Classes::TStream* Stream, bool CSSVersion, Rvstyle::TRVSaveOptions Options, Graphics::TColor Color, int &imgSaveNo, Rvclasses::TRVList* Bullets, TMetaClass* NoteClass); + int __fastcall GetFirstParaItem(int ItemNo); + int __fastcall GetFirstParaSectionItem(int ItemNo); + Rvitem::TCustomRVItemInfo* __fastcall FindPreviousItem(int ItemNo, TMetaClass* ItemClass); + int __fastcall FindItemLocalLocationFrom(int StartItemNo, Rvitem::TCustomRVItemInfo* ItemToFind); + Rvseqitem::TRVSeqItemInfo* __fastcall FindPreviousSeq(int ItemNo); + DYNAMIC void __fastcall DestroySeqList(void); + int __fastcall FindLastSeqIndex(int StartAfterMeIndex, Classes::TStringList* SeqNames); + DYNAMIC void __fastcall DestroyMarkers(void); + Rvmarker::TRVMarkerItemInfo* __fastcall FindPreviousMarker(int ItemNo); + int __fastcall FindLastMarkerIndex(int StartAfterMeIndex, Rvclasses::TRVIntegerList* ListStyles); + virtual TRVFlags __fastcall GetFlags(void) = 0 ; + virtual void __fastcall SetFlags(const TRVFlags Value) = 0 ; + void __fastcall AddStringFromFile(const AnsiString s, int StyleNo, int ParaNo, bool FromNewLine, bool AsSingleParagraph, bool &FirstTime, bool &PageBreak); + DYNAMIC void __fastcall AfterDeleteStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + virtual int __fastcall GetMaxLength(void); + +public: + TRVStates State; + int FFirstParaListNo; + int FFirstParaLevel; + int CPCount; + __fastcall TCustomRVData(void); + __fastcall virtual ~TCustomRVData(void); + virtual TCustomRVData* __fastcall GetRVData(void); + virtual TCustomRVData* __fastcall GetSourceRVData(void); + Rvstyle::TRVCodePage __fastcall GetStyleCodePage(int StyleNo); + Rvstyle::TRVCodePage __fastcall GetItemCodePage(int ItemNo); + Rvstyle::TRVCodePage __fastcall GetItemCodePage2(Rvitem::TCustomRVItemInfo* Item); + unsigned __fastcall GetStyleLocale(int StyleNo); + Rvstyle::TRVCodePage __fastcall GetDefaultCodePage(void); + virtual Rvstyle::TRVStyle* __fastcall GetRVStyle(void); + DYNAMIC Controls::TWinControl* __fastcall GetParentControl(void); + DYNAMIC void __fastcall GetParentInfo(int &ParentItemNo, Rvitem::TRVStoreSubRVData* &Location); + DYNAMIC TCustomRVData* __fastcall GetChosenRVData(void); + DYNAMIC Rvitem::TCustomRVItemInfo* __fastcall GetChosenItem(void); + virtual TCustomRVData* __fastcall GetParentData(void); + virtual TCustomRVData* __fastcall GetRootData(void); + virtual TCustomRVData* __fastcall GetAbsoluteParentData(void); + virtual TCustomRVData* __fastcall GetAbsoluteRootData(void); + DYNAMIC AnsiString __fastcall GetNoteText(); + virtual HPALETTE __fastcall GetRVPalette(void); + virtual Windows::PLogPalette __fastcall GetRVLogPalette(void); + virtual Rvscroll::TRVPaletteAction __fastcall GetDoInPaletteMode(void); + void __fastcall UpdateItemsPaletteInfo(void); + Rvitem::TRVItemOptions __fastcall GetItemOptions(int ItemNo); + int __fastcall GetItemNo(Rvitem::TCustomRVItemInfo* Item); + Rvitem::TCustomRVItemInfo* __fastcall GetItem(int ItemNo); + bool __fastcall SetItemExtraIntProperty(int ItemNo, Rvitem::TRVExtraItemProperty Prop, int Value); + bool __fastcall GetItemExtraIntProperty(int ItemNo, Rvitem::TRVExtraItemProperty Prop, int &Value); + bool __fastcall SetItemExtraStrProperty(int ItemNo, Rvitem::TRVExtraItemStrProperty Prop, const AnsiString Value); + bool __fastcall GetItemExtraStrProperty(int ItemNo, Rvitem::TRVExtraItemStrProperty Prop, AnsiString &Value); + int __fastcall GetItemTag(int ItemNo); + Rvstyle::TRVVAlign __fastcall GetItemVAlign(int ItemNo); + bool __fastcall IsParaStart(int ItemNo); + int __fastcall GetItemPara(int ItemNo); + bool __fastcall IsFromNewLine(int ItemNo); + int __fastcall GetOffsAfterItem(int ItemNo); + int __fastcall GetOffsBeforeItem(int ItemNo); + int __fastcall ItemLength(int ItemNo); + void __fastcall SetItemTag(int ItemNo, int ATag); + void __fastcall SetItemVAlign(int ItemNo, Rvstyle::TRVVAlign AVAlign); + int __fastcall GetItemStyle(int ItemNo); + int __fastcall GetActualStyle(Rvitem::TCustomRVItemInfo* Item); + int __fastcall GetActualStyle2(int StyleNo, int ParaNo); + AnsiString __fastcall GetItemTextR(int ItemNo); + void __fastcall SetItemTextR(int ItemNo, const AnsiString s); + void __fastcall SetItemTextA(int ItemNo, const AnsiString s); + void __fastcall SetItemText(int ItemNo, const AnsiString s); + AnsiString __fastcall GetItemTextA(int ItemNo); + AnsiString __fastcall GetItemText(int ItemNo); + AnsiString __fastcall GetTextInItemFormatW(int ItemNo, const WideString s); + WideString __fastcall GetItemTextW(int ItemNo); + void __fastcall SetItemTextW(int ItemNo, const WideString s); + AnsiString __fastcall GetTextInItemFormatA(int ItemNo, const AnsiString s); + int __fastcall FindControlItemNo(Controls::TControl* actrl); + Rvscroll::TRVBiDiMode __fastcall GetItemBiDiMode(int ItemNo); + Rvscroll::TRVBiDiMode __fastcall GetParaBiDiMode(int ParaNo); + virtual Rvscroll::TRVBiDiMode __fastcall GetBiDiMode(void); + void __fastcall FreeItem(int ItemNo, bool Clearing); + DYNAMIC void __fastcall Clear(void); + DYNAMIC void __fastcall DeleteItems(int FirstItemNo, int Count); + void __fastcall DeleteSection(const AnsiString CpName); + DYNAMIC bool __fastcall IsAssignedOnProgress(void); + DYNAMIC void __fastcall DoProgress(Rvstyle::TRVLongOperation Operation, Rvstyle::TRVProgressStage Stage, Byte PercentDone); + DYNAMIC AnsiString __fastcall GetExtraRTFCode(Rvstyle::TRVRTFSaveArea Area, System::TObject* Obj, int Index1, int Index2, bool InStyleSheet); + DYNAMIC AnsiString __fastcall GetExtraHTMLCode(Rvstyle::TRVHTMLSaveArea Area, bool CSSVersion); + DYNAMIC AnsiString __fastcall GetParaHTMLCode(TCustomRVData* RVData, int ItemNo, bool ParaStart, bool CSSVersion); + AnsiString __fastcall GetParaHTMLCode2(TCustomRVData* RVData, int ItemNo, bool ParaStart, bool CSSVersion, Rvstyle::TRVSaveOptions Options, Rvstyle::TRVStyle* RVStyle); + DYNAMIC void __fastcall ReadHyperlink(const AnsiString Target, const AnsiString Extras, Rvstyle::TRVLoadFormat DocFormat, int &StyleNo, int &ItemTag, AnsiString &ItemName); + DYNAMIC void __fastcall WriteHyperlink(int id, TCustomRVData* RVData, int ItemNo, Rvstyle::TRVSaveFormat SaveFormat, AnsiString &Target, AnsiString &Extras); + virtual bool __fastcall SaveItemToFile(const AnsiString Path, TCustomRVData* RVData, int ItemNo, Rvstyle::TRVSaveFormat SaveFormat, bool Unicode, AnsiString &Text); + DYNAMIC Graphics::TGraphic* __fastcall ImportPicture(const AnsiString Location, int Width, int Height, bool &Invalid); + DYNAMIC AnsiString __fastcall GetItemHint(TCustomRVData* RVData, int ItemNo, const AnsiString UpperRVDataHint); + virtual AnsiString __fastcall DoSavePicture(Rvstyle::TRVSaveFormat DocumentSaveFormat, const AnsiString imgSavePrefix, const AnsiString Path, int &imgSaveNo, bool OverrideFiles, Graphics::TColor CurrentFileColor, Graphics::TGraphic* gr); + AnsiString __fastcall SavePicture(Rvstyle::TRVSaveFormat DocumentSaveFormat, const AnsiString imgSavePrefix, const AnsiString Path, int &imgSaveNo, bool OverrideFiles, Graphics::TColor CurrentFileColor, Graphics::TGraphic* gr); + DYNAMIC Graphics::TGraphic* __fastcall RVFPictureNeeded(const AnsiString ItemName, int ItemTag); + DYNAMIC void __fastcall ControlAction(TCustomRVData* RVData, Rvstyle::TRVControlAction ControlAction, int ItemNo, Rvitem::TCustomRVItemInfo* Item); + virtual void __fastcall ItemAction(Rvstyle::TRVItemAction ItemAction, Rvitem::TCustomRVItemInfo* Item, AnsiString &Text, TCustomRVData* RVData); + DYNAMIC void __fastcall ControlAction2(TCustomRVData* RVData, Rvstyle::TRVControlAction ControlAction, int ItemNo, Controls::TControl* &Control) = 0 ; + DYNAMIC Controls::TControl* __fastcall RVFControlNeeded(const AnsiString ItemName, int ItemTag); + DYNAMIC Imglist::TCustomImageList* __fastcall RVFImageListNeeded(int ImageListTag); + DYNAMIC void __fastcall HTMLSaveImage(TCustomRVData* RVData, int ItemNo, const AnsiString Path, Graphics::TColor BackgroundColor, AnsiString &Location, bool &DoDefault); + DYNAMIC void __fastcall SaveImage2(Graphics::TGraphic* Graphic, Rvstyle::TRVSaveFormat SaveFormat, const AnsiString Path, const AnsiString ImagePrefix, int &ImageSaveNo, AnsiString &Location, bool &DoDefault); + virtual AnsiString __fastcall SaveComponentToFile(const AnsiString Path, Classes::TComponent* SaveMe, Rvstyle::TRVSaveFormat SaveFormat); + bool __fastcall LoadTextFromStreamW(Classes::TStream* Stream, int StyleNo, int ParaNo, bool DefAsSingleParagraph); + bool __fastcall LoadTextW(const AnsiString FileName, int StyleNo, int ParaNo, bool DefAsSingleParagraph); + bool __fastcall SaveTextToStream(const AnsiString Path, Classes::TStream* Stream, int LineWidth, bool SelectionOnly, bool TextOnly, bool Unicode, bool UnicodeWriteSignature); + bool __fastcall SaveText(const AnsiString FileName, int LineWidth, bool Unicode); + bool __fastcall LoadText(const AnsiString FileName, int StyleNo, int ParaNo, bool AsSingleParagraph); + bool __fastcall LoadTextFromStream(Classes::TStream* Stream, int StyleNo, int ParaNo, bool AsSingleParagraph); + AnsiString __fastcall SaveBackgroundToHTML(Graphics::TBitmap* bmp, Graphics::TColor Color, const AnsiString Path, const AnsiString ImagesPrefix, int &imgSaveNo, Rvstyle::TRVSaveOptions SaveOptions); + DYNAMIC bool __fastcall SaveHTMLToStreamEx(Classes::TStream* Stream, const AnsiString Path, const AnsiString Title, const AnsiString ImagesPrefix, const AnsiString ExtraStyles, const AnsiString ExternalCSS, const AnsiString CPPrefix, Rvstyle::TRVSaveOptions Options, Graphics::TColor Color, Graphics::TColor &CurrentFileColor, int &imgSaveNo, int LeftMargin, int TopMargin, int RightMargin, int BottomMargin, Rvback::TRVBackground* Background, Rvclasses::TRVList* Bullets); + DYNAMIC bool __fastcall SaveHTMLToStream(Classes::TStream* Stream, const AnsiString Path, const AnsiString Title, const AnsiString ImagesPrefix, Rvstyle::TRVSaveOptions Options, Graphics::TColor Color, int &imgSaveNo, int LeftMargin, int TopMargin, int RightMargin, int BottomMargin, Rvback::TRVBackground* Background, Rvclasses::TRVList* Bullets); + bool __fastcall SaveHTMLEx(const AnsiString FileName, const AnsiString Title, const AnsiString ImagesPrefix, const AnsiString ExtraStyles, const AnsiString ExternalCSS, const AnsiString CPPrefix, Rvstyle::TRVSaveOptions Options, Graphics::TColor Color, Graphics::TColor &CurrentFileColor, int &imgSaveNo, int LeftMargin, int TopMargin, int RightMargin, int BottomMargin, Rvback::TRVBackground* Background); + bool __fastcall SaveHTML(const AnsiString FileName, const AnsiString Title, const AnsiString ImagesPrefix, Rvstyle::TRVSaveOptions Options, Graphics::TColor Color, int &imgSaveNo, int LeftMargin, int TopMargin, int RightMargin, int BottomMargin, Rvback::TRVBackground* Background); + DYNAMIC AnsiString __fastcall GetNextFileName(const AnsiString ImagesPrefix, const AnsiString Path, const AnsiString Ext, int &imgSaveNo, bool OverrideFiles); + void __fastcall DoOnCtrlReaderError(Classes::TReader* Reader, const AnsiString Message, bool &Handled); + bool __fastcall LoadRVFFromStream(Classes::TStream* Stream, Graphics::TColor &Color, Rvback::TRVBackground* Background, TRVLayoutInfo* Layout); + bool __fastcall InsertRVFFromStream(Classes::TStream* Stream, int Index, Graphics::TColor &Color, Rvback::TRVBackground* Background, TRVLayoutInfo* Layout, bool AllowReplaceStyles); + bool __fastcall AppendRVFFromStream(Classes::TStream* Stream, int ParaNo, Graphics::TColor &Color, Rvback::TRVBackground* Background); + bool __fastcall LoadRVF(const AnsiString FileName, Graphics::TColor &Color, Rvback::TRVBackground* Background, TRVLayoutInfo* Layout); + bool __fastcall SaveRVFToStream(Classes::TStream* Stream, bool SelectionOnly, Graphics::TColor Color, Rvback::TRVBackground* Background, TRVLayoutInfo* Layout); + bool __fastcall SaveRVFToStreamEx(Classes::TStream* Stream, TRVFSaveScope SaveScope, Graphics::TColor Color, Rvback::TRVBackground* Background, TRVLayoutInfo* Layout); + bool __fastcall SaveRVF(const AnsiString FileName, bool SelectionOnly, Graphics::TColor Color, Rvback::TRVBackground* Background, TRVLayoutInfo* Layout); + DYNAMIC void __fastcall InitStyleMappings(PRVIntegerList &PTextStylesMapping, PRVIntegerList &PParaStylesMapping, PRVIntegerList &PListStylesMapping); + DYNAMIC void __fastcall DoneStyleMappings(PRVIntegerList PTextStylesMapping, PRVIntegerList PParaStylesMapping, PRVIntegerList PListStylesMapping, bool AsSubDoc); + DYNAMIC bool __fastcall InsertFirstRVFItem(int &Index, AnsiString &s, Rvitem::TCustomRVItemInfo* &item, bool EditFlag, bool &FullReformat, int &NewListNo); + TRVFSaveScope __fastcall GetRVFSaveScope(bool SelectionOnly); + void __fastcall SaveRTFListTable97(Classes::TStream* Stream, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* ListOverrideOffsetsList, TRVRTFFontTable* FontTable, double tpp, TCustomRVData* Header, TCustomRVData* Footer); + DYNAMIC bool __fastcall SaveRTFToStream(Classes::TStream* Stream, const AnsiString Path, bool SelectionOnly, int Level, Graphics::TColor Color, Rvback::TRVBackground* Background, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, TRVRTFFontTable* FontTable, double tpp, bool CompleteDocument, TCustomRVData* Header, TCustomRVData* Footer); + bool __fastcall SaveRTF(const AnsiString FileName, bool SelectionOnly, Graphics::TColor Color, Rvback::TRVBackground* Background); + Rvrtferr::TRVRTFErrorCode __fastcall LoadRTFFromStream(Classes::TStream* Stream); + Rvrtferr::TRVRTFErrorCode __fastcall LoadRTF(const AnsiString FileName); + void __fastcall MakeRTFTables(Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* ListOverrideCountList, bool TopLevel); + void __fastcall AddItemR(const AnsiString Text, Rvitem::TCustomRVItemInfo* Item); + void __fastcall AddItem(const AnsiString Text, Rvitem::TCustomRVItemInfo* Item); + void __fastcall AddItemAsIsR(const AnsiString Text, Rvitem::TCustomRVItemInfo* Item); + void __fastcall AddFmt(const AnsiString FormatStr, System::TVarRec const * Args, const int Args_Size, int StyleNo, int ParaNo); + void __fastcall AddNLR(const AnsiString s, int StyleNo, int ParaNo); + void __fastcall AddNL(const AnsiString s, int StyleNo, int ParaNo); + void __fastcall AddNLRTag(const AnsiString s, int StyleNo, int ParaNo, int Tag); + void __fastcall AddNLTag(const AnsiString s, int StyleNo, int ParaNo, int Tag); + void __fastcall AddTextNLR(const AnsiString s, int StyleNo, int FirstParaNo, int OtherParaNo, int Tag = 0x0); + void __fastcall AddTextNL(const AnsiString s, int StyleNo, int FirstParaNo, int OtherParaNo, int Tag = 0x0); + void __fastcall AddTextNLA(const AnsiString s, int StyleNo, int FirstParaNo, int OtherParaNo, int Tag = 0x0); + void __fastcall AddTextBlockNLA(const AnsiString s, int StyleNo, int ParaNo, int Tag = 0x0); + void __fastcall AddNLATag(const AnsiString s, int StyleNo, int ParaNo, int Tag); + void __fastcall AddNLWTag(const WideString s, int StyleNo, int ParaNo, int Tag); + void __fastcall AddNLWTagRaw(const AnsiString s, int StyleNo, int ParaNo, int Tag); + void __fastcall AddTextNLWRaw(const AnsiString s, int StyleNo, int FirstParaNo, int OtherParaNo, bool DefAsSingleParagraph); + void __fastcall AddTextNLW(const WideString s, int StyleNo, int FirstParaNo, int OtherParaNo, bool DefAsSingleParagraph); + void __fastcall AddTab(int TextStyleNo, int ParaNo); + void __fastcall AddBreakExTag(Byte Width, Rvstyle::TRVBreakStyle Style, Graphics::TColor Color, int Tag); + void __fastcall AddBreak(void); + void __fastcall AddBreakEx(Byte Width, Rvstyle::TRVBreakStyle Style, Graphics::TColor Color); + void __fastcall AddBreakTag(int Tag); + void __fastcall AddBulletEx(const AnsiString Name, int ImageIndex, Imglist::TCustomImageList* ImageList, int ParaNo); + void __fastcall AddBulletExTag(const AnsiString Name, int ImageIndex, Imglist::TCustomImageList* ImageList, int ParaNo, int Tag); + void __fastcall AddHotspotEx(const AnsiString Name, int ImageIndex, int HotImageIndex, Imglist::TCustomImageList* ImageList, int ParaNo); + void __fastcall AddHotspotExTag(const AnsiString Name, int ImageIndex, int HotImageIndex, Imglist::TCustomImageList* ImageList, int ParaNo, int Tag); + void __fastcall AddPictureExTag(const AnsiString Name, Graphics::TGraphic* gr, int ParaNo, Rvstyle::TRVVAlign VAlign, int Tag); + void __fastcall AddControlExTag(const AnsiString Name, Controls::TControl* ctrl, int ParaNo, Rvstyle::TRVVAlign VAlign, int Tag); + void __fastcall AddPictureEx(const AnsiString Name, Graphics::TGraphic* gr, int ParaNo, Rvstyle::TRVVAlign VAlign); + void __fastcall AddControlEx(const AnsiString Name, Controls::TControl* ctrl, int ParaNo, Rvstyle::TRVVAlign VAlign); + void __fastcall AddHotPicture(const AnsiString Name, Graphics::TGraphic* gr, int ParaNo, Rvstyle::TRVVAlign VAlign); + void __fastcall AddHotPictureTag(const AnsiString Name, Graphics::TGraphic* gr, int ParaNo, Rvstyle::TRVVAlign VAlign, int Tag); + void __fastcall FreeCheckpoint(Rvitem::TRVCPInfo* &cp, bool AdjustLinks, bool DecCPCount); + void __fastcall SetCP(Rvitem::TCustomRVItemInfo* Item, Rvitem::TRVCPInfo* &PrevCP, Rvitem::TRVCPInfo* &CP); + void __fastcall UpdateCPPos(Rvitem::TRVCPInfo* cp, int ItemNo); + int __fastcall AddNamedCheckpointExTag(const AnsiString CpName, bool RaiseEvent, int Tag); + void __fastcall SetCheckpointInfo(int ItemNo, int ATag, const AnsiString AName, bool ARaiseEvent); + bool __fastcall RemoveCheckpoint(int ItemNo); + Rvstyle::TCheckpointData __fastcall GetFirstCheckpoint(void); + Rvstyle::TCheckpointData __fastcall GetNextCheckpoint(Rvstyle::TCheckpointData CheckpointData); + Rvstyle::TCheckpointData __fastcall GetLastCheckpoint(void); + Rvstyle::TCheckpointData __fastcall GetPrevCheckpoint(Rvstyle::TCheckpointData CheckpointData); + Rvstyle::TCheckpointData __fastcall GetItemCheckpoint(int ItemNo); + Rvstyle::TCheckpointData __fastcall FindCheckpointByName(const AnsiString Name); + Rvstyle::TCheckpointData __fastcall FindCheckpointByTag(int Tag); + Rvstyle::TCheckpointData __fastcall GetCheckpointByNo(int No); + int __fastcall GetCheckpointItemNo(Rvstyle::TCheckpointData CheckpointData); + int __fastcall GetCheckpointNo(Rvstyle::TCheckpointData CheckpointData); + void __fastcall GetCheckpointInfo(Rvstyle::TCheckpointData CheckpointData, int &Tag, AnsiString &Name, bool &RaiseEvent); + void __fastcall GetBreakInfo(int ItemNo, Byte &AWidth, Rvstyle::TRVBreakStyle &AStyle, Graphics::TColor &AColor, int &ATag); + void __fastcall GetBulletInfo(int ItemNo, AnsiString &AName, int &AImageIndex, Imglist::TCustomImageList* &AImageList, int &ATag); + void __fastcall GetHotspotInfo(int ItemNo, AnsiString &AName, int &AImageIndex, int &AHotImageIndex, Imglist::TCustomImageList* &AImageList, int &ATag); + void __fastcall GetPictureInfo(int ItemNo, AnsiString &AName, Graphics::TGraphic* &Agr, Rvstyle::TRVVAlign &AVAlign, int &ATag); + void __fastcall GetControlInfo(int ItemNo, AnsiString &AName, Controls::TControl* &Actrl, Rvstyle::TRVVAlign &AVAlign, int &ATag); + void __fastcall GetTextInfo(int ItemNo, AnsiString &AText, int &ATag); + void __fastcall SetGrouped(int ItemNo, bool Grouped); + void __fastcall SetBreakInfo(int ItemNo, Byte AWidth, Rvstyle::TRVBreakStyle AStyle, Graphics::TColor AColor, int ATag); + void __fastcall SetBulletInfo(int ItemNo, const AnsiString AName, int AImageIndex, Imglist::TCustomImageList* AImageList, int ATag); + void __fastcall SetHotspotInfo(int ItemNo, const AnsiString AName, int AImageIndex, int AHotImageIndex, Imglist::TCustomImageList* AImageList, int ATag); + bool __fastcall SetPictureInfo(int ItemNo, const AnsiString AName, Graphics::TGraphic* Agr, Rvstyle::TRVVAlign AVAlign, int ATag); + bool __fastcall SetControlInfo(int ItemNo, const AnsiString AName, Rvstyle::TRVVAlign AVAlign, int ATag); + void __fastcall DoMarkStylesInUse(Rvitem::TRVDeleteUnusedStylesData* Data); + void __fastcall DoUpdateStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall MarkStylesInUse(Rvitem::TRVDeleteUnusedStylesData* Data); + void __fastcall DeleteMarkedStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + void __fastcall DeleteUnusedStyles(bool TextStyles, bool ParaStyles, bool ListStyles); + DYNAMIC void __fastcall AfterAddStyle(Rvstyle::TCustomRVInfo* StyleInfo); + DYNAMIC Rvseqitem::TRVSeqList* __fastcall GetSeqList(bool AllowCreate); + void __fastcall AddSeqInList(int ItemNo); + void __fastcall DeleteSeqFromList(Rvitem::TCustomRVItemInfo* Item, bool Clearing); + DYNAMIC Rvmarker::TRVMarkerList* __fastcall GetMarkers(bool AllowCreate); + DYNAMIC Rvmarker::TRVMarkerList* __fastcall GetPrevMarkers(void); + int __fastcall SetListMarkerInfo(int AItemNo, int AListNo, int AListLevel, int AStartFrom, int AParaNo, bool AUseStartFrom); + void __fastcall RecalcMarker(int AItemNo, bool AllowCreateList); + void __fastcall RemoveListMarker(int ItemNo); + int __fastcall GetListMarkerInfo(int AItemNo, int &AListNo, int &AListLevel, int &AStartFrom, bool &AUseStartFrom); + void __fastcall AddMarkerInList(int ItemNo); + void __fastcall DeleteMarkerFromList(Rvitem::TCustomRVItemInfo* Item, bool Clearing); + bool __fastcall IsDelimiterA(char ch, Rvstyle::TRVCodePage CodePage); + bool __fastcall IsDelimiterW(WideChar ch); + bool __fastcall EnumItems(TRVEnumItemsProc Proc, int &UserData1, const AnsiString UserData2); + void __fastcall ShareItemsFrom(TCustomRVData* Source); + void __fastcall AssignItemsFrom(TCustomRVData* Source); + void __fastcall DrainFrom(TCustomRVData* Victim); + void __fastcall SetParagraphStyleToAll(int ParaNo); + void __fastcall SetAddParagraphMode(bool AllowNewPara); + void __fastcall AppendFrom(TCustomRVData* Source); + void __fastcall Inserting(TCustomRVData* RVData, bool Safe); + DYNAMIC TCustomRVData* __fastcall Edit(void); + void __fastcall Beep(void); + void __fastcall ExpandToParaSection(int ItemNo1, int ItemNo2, int &FirstItemNo, int &LastItemNo); + void __fastcall ExpandToPara(int ItemNo1, int ItemNo2, int &FirstItemNo, int &LastItemNo); + AnsiString __fastcall ReplaceTabs(const AnsiString s, int StyleNo, bool UnicodeDef); + void __fastcall AdjustInItemsRange(int &ItemNo); + virtual Graphics::TColor __fastcall GetColor(void); + DYNAMIC Rvdocparams::TRVDocParameters* __fastcall GetDocParameters(bool AllowCreate); + DYNAMIC Classes::TStringList* __fastcall GetDocProperties(void); + __property TRVFlags Flags = {read=GetFlags, write=SetFlags, nodefault}; + __property Rvitem::TRVItemList* Items = {read=FItems}; + __property int ItemCount = {read=GetItemCount, nodefault}; + __property Rvscroll::TRVOptions Options = {read=GetOptions, write=SetOptions, nodefault}; + __property Rvstyle::TRVFOptions RVFOptions = {read=GetRVFOptions, write=SetRVFOptions, nodefault}; + __property Rvstyle::TRVRTFOptions RTFOptions = {read=GetRTFOptions, write=SetRTFOptions, nodefault}; + __property Rvstyle::TRVFWarnings RVFWarnings = {read=GetRVFWarnings, write=SetRVFWarnings, nodefault}; + __property int FirstJumpNo = {read=FFirstJumpNo, write=FFirstJumpNo, nodefault}; + __property bool PageBreaksBeforeItems[int Index] = {read=GetPageBreaksBeforeItems, write=SetPageBreaksBeforeItems}; + __property bool ClearLeft[int Index] = {read=GetClearLeft, write=SetClearLeft}; + __property bool ClearRight[int Index] = {read=GetClearRight, write=SetClearRight}; +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE bool RichViewSavePInHTML; +extern PACKAGE bool RichViewSaveDivInHTMLEx; +extern PACKAGE bool RichViewSavePageBreaksInText; +extern PACKAGE bool RichViewDoNotCheckRVFStyleRefs; +extern PACKAGE bool RichViewAllowCopyTableCells; +#define cssBKAttStrFixed "fixed" +#define cssBKAttStrScroll "scroll" +#define cssBKRepStrRepeat "repeat" +#define cssBKRepStrNoRepeat "no-repeat" +extern PACKAGE char *rv_cssBkAttachment[9]; +extern PACKAGE char *rv_cssBkRepeat[9]; +extern PACKAGE TMetaClass* RVPngGraphiClass; +extern PACKAGE void __fastcall RVCheckUni(int Length); +extern PACKAGE void __fastcall RV_RegisterHTMLGraphicFormat(TMetaClass* ClassType); +extern PACKAGE bool __fastcall RV_IsHTMLGraphicFormat(Graphics::TGraphic* gr); +extern PACKAGE void __fastcall RV_RegisterPngGraphic(TMetaClass* ClassType); +extern PACKAGE AnsiString __fastcall StringToHTMLString(const AnsiString s, Rvstyle::TRVSaveOptions Options, Rvstyle::TRVStyle* RVStyle); +extern PACKAGE AnsiString __fastcall StringToHTMLString2(const AnsiString s, Rvstyle::TRVSaveOptions Options, Rvstyle::TRVCodePage CodePage); +extern PACKAGE AnsiString __fastcall StringToHTMLString3(const AnsiString s, bool UTF8, Rvstyle::TRVCodePage CodePage); +extern PACKAGE void __fastcall RVSaveFontToRTF(Classes::TStream* Stream, Graphics::TFont* Font, Rvclasses::TRVColorList* ColorList, TRVRTFFontTable* FontTable, Rvstyle::TRVStyle* RVStyle); +extern PACKAGE int __fastcall RVCompareLocations(TCustomRVData* RVData1, int ItemNo1, TCustomRVData* RVData2, int ItemNo2); + +} /* namespace Crvdata */ +using namespace Crvdata; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Crvdata diff --git a/12.0.4/Units/D2006/CRVFData.dcu b/12.0.4/Units/D2006/CRVFData.dcu new file mode 100644 index 0000000..9c7d34c Binary files /dev/null and b/12.0.4/Units/D2006/CRVFData.dcu differ diff --git a/12.0.4/Units/D2006/CRVFData.hpp b/12.0.4/Units/D2006/CRVFData.hpp new file mode 100644 index 0000000..87c5996 --- /dev/null +++ b/12.0.4/Units/D2006/CRVFData.hpp @@ -0,0 +1,604 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Crvfdata.pas' rev: 10.00 + +#ifndef CrvfdataHPP +#define CrvfdataHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Crvfdata +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVJumpInfo; +class DELPHICLASS TCustomRVFormattedData; +class DELPHICLASS TRVSelectingInfo; +#pragma option push -b- +enum TRVSelectingState { rvsesInWord, rvsesOutsideWord, rvsesFreeMode, rvsesParaMode }; +#pragma option pop + +class PASCALIMPLEMENTATION TRVSelectingInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + int DrawItemSOffs; + int DrawItemEOffs; + int DrawItemSWordOffs1; + int DrawItemSWordOffs2; + int DrawItemEWordOffs1; + int DrawItemEWordOffs2; + int DrawItemSNo; + int DrawItemENo; + TRVSelectingState SWordState; + TRVSelectingState EWordState; + void __fastcall InitE(TRVSelectingState ASWordState); + bool __fastcall IsAboveSWord(int ADrawItemNo, int ADrawItemOffs); + bool __fastcall IsBelowSWord(int ADrawItemNo, int ADrawItemOffs); + bool __fastcall IsInSWord(int ADrawItemNo, int ADrawItemOffs); + bool __fastcall AreWordsEqual(void); + bool __fastcall IsEWord(int ADrawItemNo, int ADrawItemWordOffs1, int ADrawItemWordOffs2); + bool __fastcall IsEFreeStateNeeded(int ADrawItemNo, int ADrawItemOffs); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVSelectingInfo(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVSelectingInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVSoftPageBreakList; +class PASCALIMPLEMENTATION TRVSoftPageBreakList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVSoftPageBreakList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVSoftPageBreakList(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVRepaintOperation { rvrrInvalidate, rvrrUpdate }; +#pragma option pop + +typedef void __fastcall (__closure *TRVRepaintEvent)(Controls::TControl* Sender, TRVRepaintOperation Operation, Types::PRect Rect); + +struct TRVFormatParams; +class DELPHICLASS TRVFontInfoCache; +class DELPHICLASS TRVDragDropCaretInfo; +class PASCALIMPLEMENTATION TCustomRVFormattedData : public Crvdata::TCustomRVData +{ + typedef Crvdata::TCustomRVData inherited; + +private: + Rvitem::TRVCPInfo* LastRaisedCP; + Controls::TMouseMoveEvent FXORDrawing; + Rvitem::TCustomRVItemInfo* FCaptureMouseItem; + TRVSelectingInfo* FSelectingInfo; + int __fastcall FindDrawItemAtPos(int X, int Y); + void __fastcall CopyTextA_(void); + void __fastcall CopyTextW_(void); + void __fastcall CopyImage_(void); + void __fastcall CopyRVF_(Graphics::TColor Color, Rvback::TRVBackground* Background); + void __fastcall CopyRTF_(Graphics::TColor Color, Rvback::TRVBackground* Background); + void __fastcall StartFormatting(void); + void __fastcall EndFormatting(void); + void __fastcall SearchHotItem(int X, int Y, int HOffs, int VOffs); + void __fastcall AdjustSelection(void); + +protected: + bool XorImageDrawn; + int MouseX; + int MouseY; + Classes::TList* Jumps; + int nJmps; + int LastItemFormatted; + int LastJumpMovedAbove; + int LastDIMovedAbove; + TCustomRVFormattedData* LastRVDataMovedAbove; + int LastJumpDowned; + Rvitem::TCustomRVItemInfo* FPartialSelectedItem; + bool AlreadyFormatted; + TRVSoftPageBreakList* FSoftPageBreaks; + int FClickedDrawItemNo; + TRVRepaintEvent FOnRepaint; + virtual TRVSoftPageBreakList* __fastcall GetSoftPageBreaks(void); + DYNAMIC Controls::TControl* __fastcall GetInplaceEditor(void); + DYNAMIC void __fastcall DestroyInplaceEditor(void); + void __fastcall ClearLastJump(void); + bool __fastcall IsDrawItemParaStart(int DrawItemNo); + bool __fastcall IsDrawItemItemStart(int DrawItemNo); + bool __fastcall IsDrawItemParaSectionStart(int DrawItemNo); + bool __fastcall IsDrawItemParaEnd(int DrawItemNo); + bool __fastcall IsDrawItemFromNewLine(int DrawItemNo); + bool __fastcall IsDrawItemLastOnWrappedLine(int DrawItemNo); + int __fastcall GetDrawItemStyle(int DrawItemNo); + bool __fastcall IsSpaceBetweenDrawItems(int DrawItemNo); + virtual void __fastcall PostPaintTo(Graphics::TCanvas* Canvas, int HOffs, int VOffs, int FirstDrawItemNo, int LastDrawItemNo, bool PrintMode, bool StrictTop, bool StrictBottom); + void __fastcall FindDrawItemForSel(int X, int Y, int &No, int &Offs, bool Strict, bool IgnoreFloating); + int __fastcall FindFloatingAt(int DItemNo, int X, int Y); + bool __fastcall AdjustSelectionByMode(int X, int Y); + bool __fastcall AdjustLineSelection(int X, int Y); + bool __fastcall ExpandSelectionToParagraph(bool OnlyIfMultiple); + void __fastcall ExpandSelectionToLines(bool OneLine); + DYNAMIC void __fastcall DeselectPartiallySelectedItem(Rvitem::TCustomRVItemInfo* NewPartiallySelected); + virtual void __fastcall SetPartialSelectedItem(Rvitem::TCustomRVItemInfo* Item); + bool __fastcall IsSelectionTopDown(void); + bool __fastcall DItem_InsideSelection(int DItemNo, int DItemOffs, bool IncludeBorders); + Types::TRect __fastcall GetClientSelectionRect(); + void __fastcall DrawDragDropCaret(Graphics::TCanvas* Canvas, bool OnlyForSelf); + DYNAMIC bool __fastcall CanStartDragging(void); + DYNAMIC bool __fastcall InitDragging(Rvdragdrop::TRVDropSource* &DropSource, int &OKEffect); + DYNAMIC void __fastcall DoneDragging(bool FDeleteSelection); + DYNAMIC void __fastcall SetClickCoords(int X, int Y); + DYNAMIC bool __fastcall CanStartDragBecauseMouseMoved(int X, int Y); + Graphics::TCanvas* __fastcall GetFormatCanvas(void); + virtual Graphics::TCanvas* __fastcall GetFormatCanvasEx(Graphics::TCanvas* DefCanvas); + void __fastcall FinishScreenLine(const Rvstyle::TRVScreenAndDevice &sad, bool parafinished, int &ExtraSpace, TRVFormatParams &Params); + void __fastcall UpdateLastTab(TRVFormatParams &Params); + void __fastcall FormatAddFloating(TRVFormatParams &Params, const Rvstyle::TRVScreenAndDevice &sad, int DrawItemNo, int &Y); + void __fastcall FormatLine(const AnsiString Text, const AnsiString OrigText, int StartOffs, int Len, int ItemNo, Graphics::TCanvas* Canvas, Rvstyle::TRVScreenAndDevice &sad, TRVFormatParams &Params); + void __fastcall FormatWords(int ItemNo, Graphics::TCanvas* Canvas, Rvstyle::TRVScreenAndDevice &sad, TRVFormatParams &Params); + virtual void __fastcall GetSADForFormatting(Graphics::TCanvas* Canvas, Rvstyle::TRVScreenAndDevice &sad); + DYNAMIC void __fastcall Formatted(int FirstItemNo, int LastItemNo, bool Partial); + DYNAMIC void __fastcall DoAfterFormat(void); + void __fastcall ConcateItems(int FirstItemNo); + bool __fastcall InsideWord(int DrawItemNo, int DrawItemOffs); + void __fastcall GetWordBounds(int DrawItemNo, int DrawItemOffs, int &DrawItemWordOffs1, int &DrawItemWordOffs2); + void __fastcall GetScreenLineBounds(int DrawItemNo, int &First, int &Last); + DYNAMIC void __fastcall AfterDeleteStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + virtual void __fastcall InternalFreeItem(Rvitem::TCustomRVItemInfo* item, bool Clearing); + void __fastcall ApplyZoom(Graphics::TCanvas* Canvas); + void __fastcall ZoomRectDown(Types::TRect &r); + void __fastcall ZoomInt(int &v); + void __fastcall RestoreZoom(Graphics::TCanvas* Canvas); + virtual bool __fastcall GetFirstItemMarker(int &ListNo, int &Level); + void __fastcall GetIndents(int ItemNo, bool IsParaStart, int &FirstParaItemNo, int &LeftIndent, int &RightIndent, int &FirstIndent); + virtual int __fastcall GetRVDataExtraVOffs(void); + Rvstyle::TRVListLevel* __fastcall GetListLevelForItem(int ItemNo); + int __fastcall GetMaxIndent(int ItemNo, int &FirstParaItemNo); + DYNAMIC void __fastcall RVFGetLimits(Crvdata::TRVFSaveScope SaveScope, int &StartItem, int &EndItem, int &StartOffs, int &EndOffs, Rvitem::TRVMultiDrawItemPart* &StartPart, Rvitem::TRVMultiDrawItemPart* &EndPart, Rvitem::TCustomRVItemInfo* &SelectedItem); + DYNAMIC void __fastcall GetMouseClientCoords(Controls::TWinControl* Control, int &X, int &Y); + DYNAMIC void __fastcall LiveSpellingCheckCurrentItem(void); + +public: + Rvitem::TCustomRVItemInfo* FActiveItem; + int DocumentWidth; + int DocumentHeight; + int TextWidth; + int FocusedItemNo; + Dlines::TRVDrawLines* DrawItems; + int FSelStartNo; + int FSelEndNo; + int FSelStartOffs; + int FSelEndOffs; + DYNAMIC void __fastcall CreateFontInfoCache(Graphics::TCanvas* ACanvas, Graphics::TCanvas* AFormatCanvas); + DYNAMIC void __fastcall DestroyFontInfoCache(TRVFontInfoCache* &Cache); + DYNAMIC TRVFontInfoCache* __fastcall GetFontInfoCache(Graphics::TCanvas* ACanvas, Graphics::TCanvas* AFormatCanvas, TCustomRVFormattedData* RVData); + __fastcall TCustomRVFormattedData(void); + __fastcall virtual ~TCustomRVFormattedData(void); + virtual void __fastcall ClearTemporal(void); + DYNAMIC void __fastcall Clear(void); + void __fastcall AssignSoftPageBreaks(Classes::TComponent* RVPrint); + void __fastcall AssignSoftPageBreak(TCustomRVFormattedData* CustomMultiPagePtblRVData, int PageNo); + bool __fastcall ClearSoftPageBreaks(void); + int __fastcall GetNextFocusedItem(int ItemNo, bool GoForward, TCustomRVFormattedData* &TopLevelRVData, int &TopLevelItemNo); + void __fastcall ClearFocus(void); + DYNAMIC void __fastcall AdjustFocus(int NewFocusedItemNo, Classes::TPersistent* TopLevelRVData, int TopLevelItemNo); + DYNAMIC bool __fastcall AllowAnimation(void); + DYNAMIC void __fastcall InsertAnimator(System::TObject* &Animator); + DYNAMIC void __fastcall ResetAniBackground(void); + virtual void __fastcall GetOrigin(int &ALeft, int &ATop); + DYNAMIC void __fastcall GetOriginEx(int &ALeft, int &ATop); + void __fastcall ConvertCoordToAbsRootData(int &X, int &Y); + virtual int __fastcall GetAreaWidth(void) = 0 ; + virtual int __fastcall GetAreaHeight(void) = 0 ; + virtual int __fastcall GetLeftMargin(void) = 0 ; + virtual int __fastcall GetRightMargin(void) = 0 ; + virtual int __fastcall GetTopMargin(void) = 0 ; + virtual int __fastcall GetBottomMargin(void) = 0 ; + virtual int __fastcall GetMinTextWidth(void) = 0 ; + virtual int __fastcall GetMaxTextWidth(void) = 0 ; + virtual int __fastcall GetWidth(void) = 0 ; + virtual int __fastcall GetHeight(void) = 0 ; + virtual void __fastcall SetDocumentAreaSize(int Width, int Height, bool UpdateH) = 0 ; + int __fastcall CalculateEmptyParaSectionWidth(int ItemNo, int &FirstParaItemNo, Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas); + int __fastcall CalculateParaSectionMinWidth(int StartItemNo, int &FirstParaItemNo, Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas); + int __fastcall CalculateMinItemsWidthNoWrap(int StartItemNo, int EndItemNo, Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, bool IgnoreFloating); + int __fastcall CalculateParaSectionMinWidthDef(int StartItemNo); + int __fastcall CalculateParaSectionsMinWidth(int StartItemNo, int EndItemNo, int &FirstParaItemNo, Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas); + int __fastcall CalculateParaSectionsMinWidthDef(int StartItemNo, int EndItemNo); + int __fastcall CalculateMinItemWidthWrap(int ItemNo, Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, bool IgnoreFloating); + int __fastcall CalculateMinItemsWidthPlusWrap(int StartItemNo, int EndItemNo, int &FirstParaItemNo, Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas); + int __fastcall CalculateMinItemWidthPlusEx(int ItemNo); + int __fastcall CalculateMinItemsWidthPlusEx(int StartItemNo, int EndItemNo); + int __fastcall CalculateMinDocWidthPlus(int FirstItemNo, Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas); + int __fastcall CalculateMinWidthAfterInsert(Rvitem::TCustomRVItemInfo* item, int InsertItemNo); + int __fastcall CalculateMinLineWidth(int FirstItemNo, Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas); + DYNAMIC void __fastcall ResetSubCoords(void); + int __fastcall GetDrawItemNo(int BoundLine, int Option); + bool __fastcall GetItemCoords(int ItemNo, int &Left, int &Top); + bool __fastcall GetItemClientCoords(int ItemNo, int &Left, int &Top); + DYNAMIC Types::TPoint __fastcall ClientToScreen(const Types::TPoint &p); + DYNAMIC Types::TPoint __fastcall ScreenToClient(const Types::TPoint &p); + DYNAMIC void __fastcall AdjustSpecialControlsCoords(TCustomRVFormattedData* RVData); + void __fastcall AdjustChildrenCoords(void); + void __fastcall GetWordAtR(int X, int Y, TCustomRVFormattedData* &RVData, int &ItemNo, AnsiString &Word); + bool __fastcall FindWordAtR(AnsiString &Word, int X, int Y, int &StyleNo, int &ItemNo, int &Offs, TCustomRVFormattedData* &RVData, bool ClientCoords); + void __fastcall GetItemAt(int X, int Y, int &ItemNo, int &OffsetInItem); + void __fastcall GetItemAtEx(int X, int Y, TCustomRVFormattedData* &RVData, int &ItemNo, int &OffsetInItem, bool Strict, bool &InSubRVDataOwnerItem); + DYNAMIC void __fastcall ShowRectangle(int Left, int Top, int Width, int Height); + virtual void __fastcall AdjustVScrollUnits(void) = 0 ; + virtual int __fastcall GetHOffs(void); + virtual int __fastcall GetVOffs(void); + int __fastcall GetZHOffs(void); + int __fastcall GetZVOffs(void); + virtual void __fastcall ScrollTo(int Y, bool Redraw) = 0 ; + virtual void __fastcall HScrollTo(int X) = 0 ; + virtual int __fastcall GetVSmallStep(void) = 0 ; + void __fastcall AfterVScroll(void); + void __fastcall OnTimerScroll(void); + DYNAMIC void __fastcall DoCopy(void); + DYNAMIC bool __fastcall IsAssignedCopy(void); + DYNAMIC bool __fastcall IsAssignedRVMouseUp(void) = 0 ; + DYNAMIC bool __fastcall IsAssignedRVMouseDown(void) = 0 ; + DYNAMIC bool __fastcall IsAssignedRVRightClick(void); + DYNAMIC bool __fastcall IsAssignedJump(void) = 0 ; + DYNAMIC bool __fastcall IsAssignedRVDblClick(void); + DYNAMIC bool __fastcall IsAssignedCheckpointVisible(void) = 0 ; + DYNAMIC void __fastcall DoRVMouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int ItemNo, int X, int Y) = 0 ; + DYNAMIC void __fastcall DoRVMouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int ItemNo, int X, int Y) = 0 ; + DYNAMIC void __fastcall DoRVRightClick(const AnsiString ClickedWord, int StyleNo, int X, int Y); + DYNAMIC void __fastcall DoJump(int id) = 0 ; + DYNAMIC void __fastcall DoGetItemCursor(Crvdata::TCustomRVData* RVData, int ItemNo, Controls::TCursor &Cursor); + DYNAMIC void __fastcall DoRVMouseMove(int id) = 0 ; + DYNAMIC void __fastcall DoRVDblClick(const AnsiString ClickedWord, int StyleNo); + DYNAMIC void __fastcall DoSelect(void); + DYNAMIC void __fastcall DoCheckpointVisible(Rvstyle::TCheckpointData CheckpointData) = 0 ; + DYNAMIC void __fastcall DoCurrentTextStyleConversion(int &StyleNo, int ParaStyleNo, int ItemNo, int UserData, bool ToWholeParagraphs); + DYNAMIC void __fastcall DoDrawHyperlink(Crvdata::TCustomRVData* RVData, int ItemNo, const Types::TRect &R); + DYNAMIC Controls::TCursor __fastcall GetNormalCursor(void) = 0 ; + DYNAMIC Rvscroll::TCPEventKind __fastcall GetCPEventKind(void); + virtual Rvback::TRVBackground* __fastcall GetBackground(void) = 0 ; + virtual Graphics::TCanvas* __fastcall GetCanvas(void); + DYNAMIC void __fastcall SetCursor(Controls::TCursor Cursor); + DYNAMIC Controls::TWinControl* __fastcall GetEditor(void); + void __fastcall MouseLeave(void); + DYNAMIC void __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y); + DYNAMIC void __fastcall MouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + DYNAMIC void __fastcall MouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + void __fastcall DblClick(void); + void __fastcall DblClickAt(const Types::TPoint &p); + DYNAMIC void __fastcall AdjustMouseUpSelection(void); + void __fastcall SetMouseCapture(Rvitem::TCustomRVItemInfo* Item, int &Left, int &Top); + void __fastcall ReleaseMouseCapture(Rvitem::TCustomRVItemInfo* Item); + DYNAMIC TRVDragDropCaretInfo* __fastcall GetDragDropCaretInfo(void); + void __fastcall SetDragDropCaretTo(int X, int Y); + void __fastcall RemoveDragDropCaret(void); + void __fastcall SetDragDropCaret(int ItemNo, int Offs); + void __fastcall DoDrag(void); + DYNAMIC bool __fastcall IsDragging(void); + bool __fastcall CanInsertHere(int ItemNo, int Offs); + bool __fastcall IsProtected(int ItemNo, Rvstyle::TRVProtectOption Option); + bool __fastcall IsParaProtected(int ParaNo, Rvstyle::TRVParaOption Option); + bool __fastcall IsItemParaProtected(int ItemNo); + bool __fastcall IsSticking(int FirstItemNo, bool NoSound); + virtual void __fastcall DrawBackground(Graphics::TCanvas* Canvas, const Types::TRect &r); + void __fastcall PaintTo(Graphics::TCanvas* Canvas, const Types::TRect &AClipRect, bool StrictTop, bool StrictBottom, bool InplaceOnMainCanvas, bool PrintMode, int ExtraXOffs, int ExtraYOffs); + virtual void __fastcall GetItemBackground(int ItemNo, const Types::TRect &r, bool MakeImageRect, Graphics::TColor &Color, Graphics::TBitmap* &bmp, bool &UseBitmap); + void __fastcall InvalidateJumpRect(int id); + void __fastcall Refresh(void); + void __fastcall UpdateView(void); + void __fastcall Invalidate(void); + void __fastcall InvalidateRect(const Types::TRect &r); + void __fastcall UpdateBackgroundPaletteInfo(Rvback::TRVBackground* Background); + bool __fastcall UpdatingBackgroundPalette(void); + virtual void __fastcall XorDrawing(void); + void __fastcall XorDrawingEx(int X, int Y); + bool __fastcall ClearXorDrawing(void); + void __fastcall AssignXorDrawing(Controls::TMouseMoveEvent P); + bool __fastcall UsingThisXorDrawing(Controls::TMouseMoveEvent P); + void __fastcall UnAssignXorDrawing(Controls::TMouseMoveEvent P); + TMetaClass* __fastcall GetStandardDrawLineInfoClass(Rvitem::TCustomRVItemInfo* item, Rvstyle::TParaInfo* para); + void __fastcall AdjustDrawItemsForFormatParas(int &StartDrawItemNo, int &EndDrawItemNo, int ItemsInserted); + void __fastcall FormatParas(int StartDrawItemNo, int EndDrawItemNo, int ItemsInserted, bool UpdateParentControl); + void __fastcall FormatParasExact(int StartDrawItemNo, int EndDrawItemNo, int ItemsInserted, bool NoCaching, bool UpdateParentControl = true); + virtual void __fastcall Format_(bool OnlyResized, bool ForceFormat, bool NoScroll, int depth, Graphics::TCanvas* Canvas, bool OnlyTail, bool NoCaching, bool Reformatting); + void __fastcall Format(bool NoCaching); + void __fastcall ChangeDItemWidth(int DItemNo, int NewWidth); + void __fastcall DoSetSelectionBounds(int StartItemNo, int StartItemOffs, int EndItemNo, int EndItemOffs); + void __fastcall SetSelectionBounds(int StartItemNo, int StartItemOffs, int EndItemNo, int EndItemOffs); + bool __fastcall SearchTextR(bool Down, bool MatchCase, bool WholeWord, bool FromStart, bool Unicode, bool MultiItem, AnsiString s); + void __fastcall SelectWordAt(int X, int Y); + bool __fastcall SelectControl(Controls::TControl* AControl); + DYNAMIC void __fastcall Deselect(Rvitem::TCustomRVItemInfo* NewPartiallySelected, bool MakeEvent); + void __fastcall SelectAll(void); + void __fastcall SelectLine(int ItemNo, int Offs); + void __fastcall RestoreSelBounds(int StartNo, int EndNo, int StartOffs, int EndOffs); + DYNAMIC void __fastcall SrchSelectIt(int StartItemNo, int StartOffs, int EndItemNo, int EndOffs, bool Invert); + DYNAMIC void __fastcall SrchStart(bool Down, bool FromStart, int &strt, int &offs); + DYNAMIC void __fastcall AssignChosenRVData(TCustomRVFormattedData* RVData, Rvitem::TCustomRVItemInfo* Item); + DYNAMIC void __fastcall SilentReplaceChosenRVData(TCustomRVFormattedData* RVData); + DYNAMIC void __fastcall UnassignChosenRVData(Crvdata::TCustomRVData* RVData); + void __fastcall ChooseMe(void); + bool __fastcall SelectionExists(bool AllowReset, bool UsePartialSelected); + void __fastcall GetSelectionBounds(int &StartItemNo, int &StartItemOffs, int &EndItemNo, int &EndItemOffs, bool Normalize); + DYNAMIC void __fastcall GetSelBounds(int &StartNo, int &EndNo, int &StartOffs, int &EndOffs, bool Normalize); + void __fastcall StoreSelBounds(int &StartNo, int &EndNo, int &StartOffs, int &EndOffs, bool Normalize); + DYNAMIC void __fastcall GetSelectionBoundsEx(int &StartItemNo, int &StartItemOffs, int &EndItemNo, int &EndItemOffs, bool Normalize); + DYNAMIC void __fastcall GetSelStart(int &DINo, int &DIOffs); + AnsiString __fastcall GetSelTextR(bool Unicode); + Graphics::TGraphic* __fastcall GetSelectedImage(void); + Types::TRect __fastcall GetSelectionRect(); + DYNAMIC void __fastcall DoOnSelection(bool AllowScrolling); + bool __fastcall Item_InsideSelection(int ItemNo, int ItemOffs, bool IncludeBorders); + void __fastcall GetCheckpointXY(Rvstyle::TCheckpointData CheckpointData, int &X, int &Y); + int __fastcall GetCheckpointYEx(Rvstyle::TCheckpointData CheckpointData); + void __fastcall BuildJumpsCoords(int &StartJumpNo, Classes::TList* jumps); + void __fastcall ClearJumps(void); + void __fastcall AdjustJumpsCoords(void); + int __fastcall GetJumpPointY(int id); + int __fastcall GetJumpPointItemNo(int id); + void __fastcall GetJumpPointLocation(int id, TCustomRVFormattedData* &RVData, int &ItemNo); + void __fastcall CopyRVF(Graphics::TColor Color, Rvback::TRVBackground* Background); + void __fastcall CopyRTF(Graphics::TColor Color, Rvback::TRVBackground* Background); + void __fastcall CopyTextA(void); + void __fastcall CopyTextW(void); + void __fastcall CopyText(void); + void __fastcall CopyImage(void); + void __fastcall Copy(Graphics::TColor Color, Rvback::TRVBackground* Background); + bool __fastcall CopyDef(Graphics::TColor Color, Rvback::TRVBackground* Background); + int __fastcall GetLineNo(int ItemNo, int ItemOffs); + void __fastcall GetParaBounds(int DINo1, int DINo2, int &ParaStart, int &ParaEnd); + int __fastcall GetFirstVisible(int TopLine); + DYNAMIC int __fastcall GetFirstItemVisible(void); + DYNAMIC int __fastcall GetLastItemVisible(void); + int __fastcall GetOffsBeforeDrawItem(int DrawItemNo); + int __fastcall GetOffsAfterDrawItem(int DrawItemNo); + void __fastcall DrawItem2Item(int DrawItemNo, int DrawItemOffs, int &ItemNo, int &ItemOffs); + void __fastcall Item2DrawItem(int ItemNo, int ItemOffs, int &DrawItemNo, int &DrawItemOffs); + void __fastcall Item2FirstDrawItem(int ItemNo, int &DrawItemNo); + void __fastcall Item2LastDrawItem(int ItemNo, int &DrawItemNo); + int __fastcall FindDrawItemByItem(int ItemNo); + void __fastcall InvalidateDrawItem(int DrawItemNo, int Spacing); + DYNAMIC void __fastcall DeleteItems(int FirstItemNo, int Count); + void __fastcall DeleteParas(int FirstItemNo, int LastItemNo); + void __fastcall Normalize(void); + DYNAMIC void __fastcall SetControlHint(const AnsiString Hint); + __property Rvitem::TCustomRVItemInfo* PartialSelectedItem = {read=FPartialSelectedItem, write=SetPartialSelectedItem}; + __property Rvitem::TCustomRVItemInfo* CaptureMouseItem = {read=FCaptureMouseItem}; + __property TRVSoftPageBreakList* SoftPageBreaks = {read=GetSoftPageBreaks}; + bool __fastcall IsMultiParagraphSelection(void); + __property TRVRepaintEvent OnRepaint = {read=FOnRepaint, write=FOnRepaint}; +}; + + +class PASCALIMPLEMENTATION TRVJumpInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + TCustomRVFormattedData* RVData; + int l; + int t; + int w; + int h; + int id; + int DrawItemNo; + Controls::TCursor Cursor; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVJumpInfo(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVJumpInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVSoftPageBreakInfo; +class PASCALIMPLEMENTATION TRVSoftPageBreakInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + int ItemNo; + int Offset; + int ExtraData; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVSoftPageBreakInfo(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVSoftPageBreakInfo(void) { } + #pragma option pop + +}; + + +typedef void __fastcall (__closure *TRVDataDrawHyperlinkEvent)(Crvdata::TCustomRVData* RVData, int ItemNo, const Types::TRect &R); + +class PASCALIMPLEMENTATION TRVDragDropCaretInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + int X; + int Y; + int Height; + int ItemNo; + int ItemOffs; + Crvdata::TCustomRVData* RVData; + int RefCount; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVDragDropCaretInfo(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVDragDropCaretInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVFontInfoCacheItem; +class PASCALIMPLEMENTATION TRVFontInfoCacheItem : public System::TObject +{ + typedef System::TObject inherited; + +public: + Rvscroll::TRVBiDiMode LastBiDiMode; + Graphics::TCanvas* Canvas; + tagTEXTMETRICA TextMetric; + Rvstyle::TRVExtraFontInfo ExtraFontInfo; + Rvstyle::TFontInfo* FontInfo; + int VerticalOffset; + int EmptyLineHeight; + int HyphenWidth; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVFontInfoCacheItem(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVFontInfoCacheItem(void) { } + #pragma option pop + +}; + + +typedef TRVFontInfoCacheItem* *PRVFontInfoCacheItem; + +class PASCALIMPLEMENTATION TRVFontInfoCache : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVFontInfoCacheItem* operator[](int Index) { return Items[Index]; } + +protected: + Graphics::TCanvas* FCanvas; + Graphics::TCanvas* FDrawCanvas; + Rvstyle::TRVStyle* FRVStyle; + bool FCanUseCustomPPI; + System::TObject* FOwner; + TRVFontInfoCacheItem* FInvalidItem; + virtual TRVFontInfoCacheItem* __fastcall GetItems(int Index) = 0 ; + +public: + Rvscroll::TRVBiDiMode CurParaBiDiMode; + bool IgnoreParaBiDiMode; + int LastTextStyle; + __fastcall virtual TRVFontInfoCache(const TCustomRVFormattedData* AData, const Rvstyle::TRVStyle* ARVStyle, const Graphics::TCanvas* ACanvas, const Graphics::TCanvas* ADrawCanvas, bool ACanUseCustomPPI); + virtual void __fastcall Clear(void); + __property TRVFontInfoCacheItem* Items[int Index] = {read=GetItems/*, default*/}; + __property System::TObject* Owner = {read=FOwner}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVFontInfoCache(void) { } + #pragma option pop + +}; + + +struct TRVFormatParams +{ + +public: + int x; + int baseline; + int prevdesc; + int prevabove; + bool IsParaStart; + int LineWidth; + int LineStartX; + int LineStartY; + int LastDrawItem; + int VerticalOffs; + int LeftIndent; + int RightIndent; + int FirstIndent; + int LastTextStyle; + int UnadjustedLeftIndent; + int UnadjustedRightSide; + int FirstParaItemNo; + int LineHeightAbove; + int LineHeightBelow; + int TextLength; + int MaxLength; + bool NoCaching; + bool Reformatting; + bool DontFSL; + bool NeedRecalcY; + bool LineHasFloating; + int LastTabDrawItemNo; + Rvstyle::TRVTabAlign LastTabAlign; + int LastTabPosition; + bool SpaceEaten; + TRVFontInfoCache* FontInfoCache; + Graphics::TCanvas* FormatCanvas; + HDC FormatCanvasHandle; + tagTEXTMETRICA TextMetric; + bool AllowWordWrap; + Dlines::TRVFloatingDrawItems* FloatingDrawItems; + Classes::TList* FloatingDrawItemsInThisParaSection; + bool CanBeFloatingAtTheBeginning; + bool MovedDownBecauseOfFloating; + bool UseFormatCanvas; +} ; + +//-- var, const, procedure --------------------------------------------------- +static const Shortint MINEXACTLINESPACING = 0x4; +extern PACKAGE bool RichViewSafeFormatting; +extern PACKAGE bool RichViewShowGhostSpaces; +extern PACKAGE bool RichViewWrapAnywhere; + +} /* namespace Crvfdata */ +using namespace Crvfdata; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Crvfdata diff --git a/12.0.4/Units/D2006/CRVPP.res b/12.0.4/Units/D2006/CRVPP.res new file mode 100644 index 0000000..e52da72 Binary files /dev/null and b/12.0.4/Units/D2006/CRVPP.res differ diff --git a/12.0.4/Units/D2006/Crvpp.dcu b/12.0.4/Units/D2006/Crvpp.dcu new file mode 100644 index 0000000..9183651 Binary files /dev/null and b/12.0.4/Units/D2006/Crvpp.dcu differ diff --git a/12.0.4/Units/D2006/Crvpp.hpp b/12.0.4/Units/D2006/Crvpp.hpp new file mode 100644 index 0000000..3ba8f41 --- /dev/null +++ b/12.0.4/Units/D2006/Crvpp.hpp @@ -0,0 +1,173 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Crvpp.pas' rev: 10.00 + +#ifndef CrvppHPP +#define CrvppHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Crvpp +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVClickMode { rvcmNone, rvcmSwitchZoom }; +#pragma option pop + +class DELPHICLASS TRVMarginsPen; +class PASCALIMPLEMENTATION TRVMarginsPen : public Graphics::TPen +{ + typedef Graphics::TPen inherited; + +__published: + __property Style = {default=5}; + __property Color = {default=12632256}; +public: + #pragma option push -w-inl + /* TPen.Create */ inline __fastcall TRVMarginsPen(void) : Graphics::TPen() { } + #pragma option pop + #pragma option push -w-inl + /* TPen.Destroy */ inline __fastcall virtual ~TRVMarginsPen(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVPAPen; +class PASCALIMPLEMENTATION TRVPAPen : public Graphics::TPen +{ + typedef Graphics::TPen inherited; + +__published: + __property Style = {default=5}; + __property Color = {default=255}; +public: + #pragma option push -w-inl + /* TPen.Create */ inline __fastcall TRVPAPen(void) : Graphics::TPen() { } + #pragma option pop + #pragma option push -w-inl + /* TPen.Destroy */ inline __fastcall virtual ~TRVPAPen(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCustomRVPrintPreview; +class PASCALIMPLEMENTATION TCustomRVPrintPreview : public Rvscroll::TRVScroller +{ + typedef Rvscroll::TRVScroller inherited; + +private: + int SavedZoomPercent; + int FPageNo; + int FZoomPercent; + Rvscroll::TRVZoomMode FZoomMode; + int FPageWidth; + int FPageHeight; + int FPhysPageWidth; + int FPhysPageHeight; + #pragma pack(push,1) + Types::TRect FPhysMargins; + #pragma pack(pop) + Controls::TCursor FZoomInCursor; + Controls::TCursor FZoomOutCursor; + Classes::TNotifyEvent FZoomChanged; + TRVMarginsPen* FMarginsPen; + TRVPAPen* FPrintableAreaPen; + TRVClickMode FClickMode; + Graphics::TColor FPageBorderColor; + Graphics::TColor FShadowColor; + int FShadowWidth; + int FPageBorderWidth; + int FBackgroundMargin; + void __fastcall SetZoomPercent(const int Value); + void __fastcall SetZoomMode(const Rvscroll::TRVZoomMode Value); + HIDESBASE MESSAGE void __fastcall WMEraseBkgnd(Messages::TWMEraseBkgnd &Message); + HIDESBASE MESSAGE void __fastcall WMSize(Messages::TWMSize &Message); + void __fastcall SetZoomInCursor(const Controls::TCursor Value); + void __fastcall SetZoomOutCursor(const Controls::TCursor Value); + void __fastcall SetMarginsPen(const TRVMarginsPen* Value); + void __fastcall SetPrintableAreaPen(const TRVPAPen* Value); + +protected: + DYNAMIC bool __fastcall CanDrawContents(void); + DYNAMIC void __fastcall DrawContents(Graphics::TCanvas* Canvas, const Types::TRect &R); + virtual void __fastcall DrawMargins(Graphics::TCanvas* Canvas, const Types::TRect &R, int PageNo); + virtual void __fastcall DrawPrintableAreaBorder(Graphics::TCanvas* Canvas, const Types::TRect &R, int PageNo); + DYNAMIC int __fastcall GetPreview100PercentWidth(void); + DYNAMIC int __fastcall GetPreview100PercentHeight(void); + DYNAMIC Types::TRect __fastcall GetPhysMargins(); + DYNAMIC int __fastcall GetPageCount(void); + virtual void __fastcall Paint(void); + virtual void __fastcall Loaded(void); + DYNAMIC void __fastcall Click(void); + DYNAMIC void __fastcall MouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + DYNAMIC int __fastcall GetDefSmallStep(void); + void __fastcall UpdateCursor(void); + virtual void __fastcall SetPageNo(const int Value); + __property Controls::TCursor ZoomInCursor = {read=FZoomInCursor, write=SetZoomInCursor, default=102}; + __property Controls::TCursor ZoomOutCursor = {read=FZoomOutCursor, write=SetZoomOutCursor, default=103}; + __property Classes::TNotifyEvent OnZoomChanged = {read=FZoomChanged, write=FZoomChanged}; + __property TRVMarginsPen* MarginsPen = {read=FMarginsPen, write=SetMarginsPen}; + __property TRVPAPen* PrintableAreaPen = {read=FPrintableAreaPen, write=SetPrintableAreaPen}; + +public: + __fastcall virtual TCustomRVPrintPreview(Classes::TComponent* AOwner); + __fastcall virtual ~TCustomRVPrintPreview(void); + void __fastcall SetZoom(int Percent); + void __fastcall First(void); + void __fastcall Last(void); + void __fastcall Next(void); + void __fastcall Prev(void); + void __fastcall UpdateView(void); + __property int PageNo = {read=FPageNo, write=SetPageNo, nodefault}; + __property int ZoomPercent = {read=FZoomPercent, write=SetZoomPercent, nodefault}; + __property Rvscroll::TRVZoomMode ZoomMode = {read=FZoomMode, write=SetZoomMode, nodefault}; + __property TRVClickMode ClickMode = {read=FClickMode, write=FClickMode, default=1}; + __property Graphics::TColor PageBorderColor = {read=FPageBorderColor, write=FPageBorderColor, default=-16777203}; + __property int PageBorderWidth = {read=FPageBorderWidth, write=FPageBorderWidth, default=2}; + __property Graphics::TColor ShadowColor = {read=FShadowColor, write=FShadowColor, default=-16777195}; + __property int ShadowWidth = {read=FShadowWidth, write=FShadowWidth, default=4}; + __property int BackgroundMargin = {read=FBackgroundMargin, write=FBackgroundMargin, default=20}; + +__published: + __property Color = {default=-16777200}; +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TCustomRVPrintPreview(HWND ParentWindow) : Rvscroll::TRVScroller(ParentWindow) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const Shortint crRVZoomIn = 0x66; +static const Shortint crRVZoomOut = 0x67; + +} /* namespace Crvpp */ +using namespace Crvpp; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Crvpp diff --git a/12.0.4/Units/D2006/CtrlImg.dcu b/12.0.4/Units/D2006/CtrlImg.dcu new file mode 100644 index 0000000..df186e4 Binary files /dev/null and b/12.0.4/Units/D2006/CtrlImg.dcu differ diff --git a/12.0.4/Units/D2006/CtrlImg.hpp b/12.0.4/Units/D2006/CtrlImg.hpp new file mode 100644 index 0000000..47da0e7 --- /dev/null +++ b/12.0.4/Units/D2006/CtrlImg.hpp @@ -0,0 +1,45 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Ctrlimg.pas' rev: 10.00 + +#ifndef CtrlimgHPP +#define CtrlimgHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Ctrlimg +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE Graphics::TBitmap* __fastcall DrawButton(Stdctrls::TButton* ctrl); +extern PACKAGE Graphics::TBitmap* __fastcall DrawEdit(Stdctrls::TEdit* ctrl); +extern PACKAGE Graphics::TBitmap* __fastcall DrawMemo(Stdctrls::TMemo* ctrl); +extern PACKAGE Graphics::TBitmap* __fastcall DrawPanel(Extctrls::TPanel* ctrl); +extern PACKAGE Graphics::TBitmap* __fastcall DrawControl(Controls::TControl* ctrl); + +} /* namespace Ctrlimg */ +using namespace Ctrlimg; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Ctrlimg diff --git a/12.0.4/Units/D2006/DBRV.dcr b/12.0.4/Units/D2006/DBRV.dcr new file mode 100644 index 0000000..506c162 Binary files /dev/null and b/12.0.4/Units/D2006/DBRV.dcr differ diff --git a/12.0.4/Units/D2006/DBRV.dcu b/12.0.4/Units/D2006/DBRV.dcu new file mode 100644 index 0000000..fb7073c Binary files /dev/null and b/12.0.4/Units/D2006/DBRV.dcu differ diff --git a/12.0.4/Units/D2006/DBRV.hpp b/12.0.4/Units/D2006/DBRV.hpp new file mode 100644 index 0000000..c844b6d --- /dev/null +++ b/12.0.4/Units/D2006/DBRV.hpp @@ -0,0 +1,411 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Dbrv.pas' rev: 10.00 + +#ifndef DbrvHPP +#define DbrvHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Dbrv +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVDBFieldFormat { rvdbRVF, rvdbRTF, rvdbText }; +#pragma option pop + +typedef void __fastcall (__closure *TRVCustomFormatEvent)(Richview::TCustomRichView* Sender, Classes::TStream* Stream, bool &DoDefault); + +class DELPHICLASS TDBRichView; +class PASCALIMPLEMENTATION TDBRichView : public Richview::TCustomRichView +{ + typedef Richview::TCustomRichView inherited; + +private: + Dbctrls::TFieldDataLink* FDataLink; + bool FAutoDisplay; + bool FFocused; + bool FMemoLoaded; + Classes::TNotifyEvent FOnNewDocument; + Classes::TNotifyEvent FOnLoadDocument; + TRVCustomFormatEvent FOnLoadCustomFormat; + void __fastcall DataChange(System::TObject* Sender); + AnsiString __fastcall GetDataField(); + Db::TDataSource* __fastcall GetDataSource(void); + Db::TField* __fastcall GetField(void); + void __fastcall SetDataField(const AnsiString Value); + void __fastcall SetDataSource(Db::TDataSource* Value); + MESSAGE void __fastcall CMGetDataLink(Messages::TMessage &Message); + void __fastcall SetAutoDisplay(bool Value); + +protected: + virtual void __fastcall Loaded(void); + virtual void __fastcall Notification(Classes::TComponent* AComponent, Classes::TOperation Operation); + DYNAMIC void __fastcall DblClick(void); + virtual void __fastcall Paint(void); + +public: + __fastcall virtual TDBRichView(Classes::TComponent* AOwner); + __fastcall virtual ~TDBRichView(void); + void __fastcall LoadField(void); + __property Db::TField* Field = {read=GetField}; + DYNAMIC bool __fastcall ExecuteAction(Classes::TBasicAction* Action); + DYNAMIC bool __fastcall UpdateAction(Classes::TBasicAction* Action); + +__published: + __property AnsiString DataField = {read=GetDataField, write=SetDataField}; + __property Db::TDataSource* DataSource = {read=GetDataSource, write=SetDataSource}; + __property bool AutoDisplay = {read=FAutoDisplay, write=SetAutoDisplay, default=1}; + __property Classes::TNotifyEvent OnLoadDocument = {read=FOnLoadDocument, write=FOnLoadDocument}; + __property Classes::TNotifyEvent OnNewDocument = {read=FOnNewDocument, write=FOnNewDocument}; + __property TRVCustomFormatEvent OnLoadCustomFormat = {read=FOnLoadCustomFormat, write=FOnLoadCustomFormat}; + __property Align = {default=0}; + __property Anchors = {default=3}; + __property Constraints ; + __property Color = {default=536870911}; + __property Ctl3D ; + __property DragKind = {default=0}; + __property DragMode = {default=0}; + __property Enabled = {default=1}; + __property HelpContext = {default=0}; + __property ParentCtl3D = {default=1}; + __property ParentShowHint = {default=1}; + __property PopupMenu ; + __property ShowHint ; + __property TabOrder = {default=-1}; + __property TabStop = {default=1}; + __property Visible = {default=1}; + __property OnClick ; + __property OnContextPopup ; + __property OnDblClick ; + __property OnDragDrop ; + __property OnDragOver ; + __property OnEndDrag ; + __property OnEnter ; + __property OnExit ; + __property OnKeyDown ; + __property OnKeyPress ; + __property OnKeyUp ; + __property OnMouseMove ; + __property OnMouseWheel ; + __property OnMouseWheelDown ; + __property OnMouseWheelUp ; + __property OnResize ; + __property OnStartDrag ; + __property AnimationMode = {default=1}; + __property BackgroundBitmap ; + __property BackgroundStyle = {default=0}; + __property BiDiMode = {default=0}; + __property BorderStyle = {default=1}; + __property BottomMargin = {default=5}; + __property CPEventKind = {default=0}; + __property Cursor = {default=0}; + __property Delimiters ; + __property DocParameters ; + __property DoInPaletteMode ; + __property FirstJumpNo = {default=0}; + __property HScrollVisible = {default=1}; + __property LeftMargin = {default=5}; + __property MaxLength = {default=0}; + __property MaxTextWidth = {default=0}; + __property MinTextWidth = {default=0}; + __property Options = {default=326949}; + __property RightMargin = {default=5}; + __property RTFOptions = {default=14}; + __property RTFReadProperties ; + __property RVFOptions = {default=98435}; + __property RVFParaStylesReadMode = {default=2}; + __property RVFTextStylesReadMode = {default=2}; + __property Style ; + __property TabNavigation = {default=1}; + __property TopMargin = {default=5}; + __property Tracking = {default=1}; + __property UseXPThemes = {default=1}; + __property VAlign = {default=0}; + __property VScrollVisible = {default=1}; + __property WheelStep = {default=2}; + __property WordWrap = {default=1}; + __property OnAddStyle ; + __property OnCheckpointVisible ; + __property OnControlAction ; + __property OnCopy ; + __property OnGetItemCursor ; + __property OnImportPicture ; + __property OnItemAction ; + __property OnItemHint ; + __property OnJump ; + __property OnHScrolled ; + __property OnHTMLSaveImage ; + __property OnPaint ; + __property OnProgress ; + __property OnReadHyperlink ; + __property OnRVDblClick ; + __property OnRVFImageListNeeded ; + __property OnRVFControlNeeded ; + __property OnRVFPictureNeeded ; + __property OnRVMouseDown ; + __property OnRVMouseMove ; + __property OnRVMouseUp ; + __property OnRVRightClick ; + __property OnSaveComponentToFile ; + __property OnSaveHTMLExtra ; + __property OnSaveImage2 ; + __property OnSaveItemToFile ; + __property OnSaveRTFExtra ; + __property OnSelect ; + __property OnSpellingCheck ; + __property OnVScrolled ; + __property OnWriteHyperlink ; + __property AllowSelection ; + __property SingleClick ; + __property OnURLNeeded ; +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TDBRichView(HWND ParentWindow) : Richview::TCustomRichView(ParentWindow) { } + #pragma option pop + +}; + + +class DELPHICLASS TDBRichViewEdit; +class PASCALIMPLEMENTATION TDBRichViewEdit : public Rvedit::TCustomRichViewEdit +{ + typedef Rvedit::TCustomRichViewEdit inherited; + +private: + Dbctrls::TFieldDataLink* FDataLink; + bool FAutoDisplay; + bool FFocused; + bool FMemoLoaded; + Rvclasses::TRVMemoryStream* FDataSaveStream; + TRVDBFieldFormat FFieldFormat; + bool FAutoDeleteUnusedStyles; + Classes::TNotifyEvent FOnNewDocument; + bool FIgnoreEscape; + Classes::TNotifyEvent FOnLoadDocument; + TRVCustomFormatEvent FOnLoadCustomFormat; + TRVCustomFormatEvent FOnSaveCustomFormat; + void __fastcall DataChange(System::TObject* Sender); + void __fastcall EditingChange(System::TObject* Sender); + AnsiString __fastcall GetDataField(); + Db::TDataSource* __fastcall GetDataSource(void); + Db::TField* __fastcall GetField(void); + bool __fastcall DBGetReadOnly(void); + void __fastcall SetDataField(const AnsiString Value); + void __fastcall SetDataSource(Db::TDataSource* Value); + void __fastcall SetFocused(bool Value); + void __fastcall DBSetReadOnly(bool Value); + void __fastcall SetAutoDisplay(bool Value); + void __fastcall UpdateData(System::TObject* Sender); + HIDESBASE MESSAGE void __fastcall CMEnter(Messages::TWMNoParams &Message); + HIDESBASE MESSAGE void __fastcall CMExit(Messages::TWMNoParams &Message); + MESSAGE void __fastcall CMGetDataLink(Messages::TMessage &Message); + void __fastcall BeginEditing(void); + void __fastcall DoLoadField(bool Check); + MESSAGE void __fastcall WMReload(Messages::TMessage &Msg); + HIDESBASE MESSAGE void __fastcall CMWantSpecialKey(Messages::TWMKey &Message); + +protected: + virtual void __fastcall Loaded(void); + virtual void __fastcall Notification(Classes::TComponent* AComponent, Classes::TOperation Operation); + DYNAMIC void __fastcall DblClick(void); + DYNAMIC void __fastcall KeyPress(char &Key); + virtual void __fastcall Paint(void); + +public: + DYNAMIC void __fastcall DoChange(bool ClearRedo); + virtual bool __fastcall BeforeChange(bool FromOutside); + __fastcall virtual TDBRichViewEdit(Classes::TComponent* AOwner); + __fastcall virtual ~TDBRichViewEdit(void); + void __fastcall LoadField(void); + __property Db::TField* Field = {read=GetField}; + DYNAMIC bool __fastcall ExecuteAction(Classes::TBasicAction* Action); + DYNAMIC bool __fastcall UpdateAction(Classes::TBasicAction* Action); + +__published: + __property bool IgnoreEscape = {read=FIgnoreEscape, write=FIgnoreEscape, default=0}; + __property bool AutoDeleteUnusedStyles = {read=FAutoDeleteUnusedStyles, write=FAutoDeleteUnusedStyles, default=0}; + __property AnsiString DataField = {read=GetDataField, write=SetDataField}; + __property Db::TDataSource* DataSource = {read=GetDataSource, write=SetDataSource}; + __property bool ReadOnly = {read=DBGetReadOnly, write=DBSetReadOnly, nodefault}; + __property bool AutoDisplay = {read=FAutoDisplay, write=SetAutoDisplay, default=1}; + __property TRVDBFieldFormat FieldFormat = {read=FFieldFormat, write=FFieldFormat, default=0}; + __property Classes::TNotifyEvent OnLoadDocument = {read=FOnLoadDocument, write=FOnLoadDocument}; + __property Classes::TNotifyEvent OnNewDocument = {read=FOnNewDocument, write=FOnNewDocument}; + __property TRVCustomFormatEvent OnLoadCustomFormat = {read=FOnLoadCustomFormat, write=FOnLoadCustomFormat}; + __property TRVCustomFormatEvent OnSaveCustomFormat = {read=FOnSaveCustomFormat, write=FOnSaveCustomFormat}; + __property AcceptDragDropFormats = {default=191}; + __property CustomCaretInterval = {default=0}; + __property EditorOptions = {default=18}; + __property UndoLimit = {default=-1}; + __property OnCaretGetOut ; + __property OnCaretMove ; + __property OnChange ; + __property OnChanging ; + __property OnCurParaStyleChanged ; + __property OnCurTextStyleChanged ; + __property OnDrawCustomCaret ; + __property OnMeasureCustomCaret ; + __property OnDropFiles ; + __property OnItemResize ; + __property OnItemTextEdit ; + __property OnOleDragEnter ; + __property OnOleDragLeave ; + __property OnOleDragOver ; + __property OnOleDrop ; + __property OnParaStyleConversion ; + __property OnPaste ; + __property OnStyleConversion ; + __property TabNavigation = {default=0}; + __property Align = {default=0}; + __property Anchors = {default=3}; + __property Constraints ; + __property Color = {default=536870911}; + __property Ctl3D ; + __property DragKind = {default=0}; + __property DragMode = {default=0}; + __property Enabled = {default=1}; + __property HelpContext = {default=0}; + __property ParentCtl3D = {default=1}; + __property ParentShowHint = {default=1}; + __property PopupMenu ; + __property ShowHint ; + __property TabOrder = {default=-1}; + __property TabStop = {default=1}; + __property UseXPThemes = {default=1}; + __property Visible = {default=1}; + __property OnClick ; + __property OnContextPopup ; + __property OnDblClick ; + __property OnDragDrop ; + __property OnDragOver ; + __property OnEndDrag ; + __property OnEnter ; + __property OnExit ; + __property OnKeyDown ; + __property OnKeyPress ; + __property OnKeyUp ; + __property OnMouseMove ; + __property OnMouseWheel ; + __property OnMouseWheelDown ; + __property OnMouseWheelUp ; + __property OnResize ; + __property OnStartDrag ; + __property AnimationMode = {default=1}; + __property BackgroundBitmap ; + __property BackgroundStyle = {default=0}; + __property BiDiMode = {default=0}; + __property BorderStyle = {default=1}; + __property BottomMargin = {default=5}; + __property Cursor = {default=-4}; + __property Delimiters ; + __property DocParameters ; + __property DoInPaletteMode ; + __property FirstJumpNo = {default=0}; + __property HScrollVisible = {default=1}; + __property LeftMargin = {default=5}; + __property OnSmartPopupClick ; + __property LiveSpellingMode = {default=1}; + __property MaxLength = {default=0}; + __property MaxTextWidth = {default=0}; + __property MinTextWidth = {default=0}; + __property Options = {default=326949}; + __property RightMargin = {default=5}; + __property RTFOptions = {default=14}; + __property RTFReadProperties ; + __property RVFOptions = {default=98435}; + __property RVFParaStylesReadMode = {default=2}; + __property RVFTextStylesReadMode = {default=2}; + __property SmartPopupProperties ; + __property Style ; + __property TopMargin = {default=5}; + __property Tracking = {default=1}; + __property VAlign = {default=0}; + __property VScrollVisible = {default=1}; + __property WheelStep = {default=2}; + __property WordWrap = {default=1}; + __property OnAddStyle ; + __property OnControlAction ; + __property OnCopy ; + __property OnGetItemCursor ; + __property OnImportPicture ; + __property OnItemAction ; + __property OnItemHint ; + __property OnJump ; + __property OnHScrolled ; + __property OnHTMLSaveImage ; + __property OnPaint ; + __property OnProgress ; + __property OnReadHyperlink ; + __property OnRVDblClick ; + __property OnRVFImageListNeeded ; + __property OnRVFControlNeeded ; + __property OnRVFPictureNeeded ; + __property OnRVMouseDown ; + __property OnRVMouseMove ; + __property OnRVMouseUp ; + __property OnRVRightClick ; + __property OnSaveComponentToFile ; + __property OnSaveHTMLExtra ; + __property OnSaveImage2 ; + __property OnSaveItemToFile ; + __property OnSaveRTFExtra ; + __property OnSelect ; + __property OnSpellingCheck ; + __property OnVScrolled ; + __property OnWriteHyperlink ; + __property AllowSelection ; + __property SingleClick ; + __property OnURLNeeded ; +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TDBRichViewEdit(HWND ParentWindow) : Rvedit::TCustomRichViewEdit(ParentWindow) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE void __fastcall Register(void); + +} /* namespace Dbrv */ +using namespace Dbrv; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Dbrv diff --git a/12.0.4/Units/D2006/DBRVCool.dcr b/12.0.4/Units/D2006/DBRVCool.dcr new file mode 100644 index 0000000..b5afaca Binary files /dev/null and b/12.0.4/Units/D2006/DBRVCool.dcr differ diff --git a/12.0.4/Units/D2006/DBRVSmall.dcr b/12.0.4/Units/D2006/DBRVSmall.dcr new file mode 100644 index 0000000..a88767f Binary files /dev/null and b/12.0.4/Units/D2006/DBRVSmall.dcr differ diff --git a/12.0.4/Units/D2006/DLines.dcu b/12.0.4/Units/D2006/DLines.dcu new file mode 100644 index 0000000..c97b9d1 Binary files /dev/null and b/12.0.4/Units/D2006/DLines.dcu differ diff --git a/12.0.4/Units/D2006/DLines.hpp b/12.0.4/Units/D2006/DLines.hpp new file mode 100644 index 0000000..8aff2ad --- /dev/null +++ b/12.0.4/Units/D2006/DLines.hpp @@ -0,0 +1,281 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Dlines.pas' rev: 10.00 + +#ifndef DlinesHPP +#define DlinesHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Dlines +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVDrawLineInfo; +class PASCALIMPLEMENTATION TRVDrawLineInfo : public System::TObject +{ + typedef System::TObject inherited; + +private: + void __fastcall RaiseWrongAssignException(const int Value); + +protected: + virtual int __fastcall GetSpaceBefore(void); + virtual void __fastcall SetSpaceBefore(const int Value); + virtual int __fastcall GetExtraSpaceAbove(void); + virtual void __fastcall SetExtraSpaceAbove(const int Value); + virtual int __fastcall GetExtraSpaceBelow(void); + virtual void __fastcall SetExtraSpaceBelow(const int Value); + virtual int __fastcall GetObjectHeight(void); + virtual int __fastcall GetObjectLeft(void); + virtual int __fastcall GetObjectTop(void); + virtual int __fastcall GetObjectWidth(void); + +public: + int Left; + int Top; + int Width; + int Height; + int ItemNo; + int Offs; + int Length; + Byte FromNewLine; + Byte FloatingAboveUsed; + __fastcall TRVDrawLineInfo(int ALeft, int ATop, int AWidth, int AHeight, int AItemNo, Byte AFromNewLine); + virtual void __fastcall SetData(int ALeft, int ATop, int AItemNo, Byte AFromNewLine); + virtual void __fastcall SetSize(int AWidth, int AHeight); + DYNAMIC bool __fastcall InitSplit(const Rvstyle::TRVScreenAndDevice &SaD); + DYNAMIC bool __fastcall CanSplitFirst(int Y, const Rvstyle::TRVScreenAndDevice &SaD, bool FirstOnPage, bool PageHasFootnotes, bool FootnotesChangeHeight); + DYNAMIC bool __fastcall SplitAt(int Y, const Rvstyle::TRVScreenAndDevice &SaD, bool FirstOnPage, Classes::TList* &FootnoteRVDataList, int &MaxHeight, bool FootnotesChangeHeight); + __property int SpaceBefore = {read=GetSpaceBefore, write=SetSpaceBefore, nodefault}; + __property int ExtraSpaceBelow = {read=GetExtraSpaceBelow, write=SetExtraSpaceBelow, nodefault}; + __property int ExtraSpaceAbove = {read=GetExtraSpaceAbove, write=SetExtraSpaceAbove, nodefault}; + __property int ObjectWidth = {read=GetObjectWidth, nodefault}; + __property int ObjectHeight = {read=GetObjectHeight, nodefault}; + __property int ObjectLeft = {read=GetObjectLeft, nodefault}; + __property int ObjectTop = {read=GetObjectTop, nodefault}; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVDrawLineInfo(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVDrawLineInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVJustifyDrawLineInfo; +class PASCALIMPLEMENTATION TRVJustifyDrawLineInfo : public TRVDrawLineInfo +{ + typedef TRVDrawLineInfo inherited; + +private: + int FSpaceBefore; + +protected: + virtual int __fastcall GetSpaceBefore(void); + virtual void __fastcall SetSpaceBefore(const int Value); + +public: + int SpaceBefore; +public: + #pragma option push -w-inl + /* TRVDrawLineInfo.CreateEx */ inline __fastcall TRVJustifyDrawLineInfo(int ALeft, int ATop, int AWidth, int AHeight, int AItemNo, Byte AFromNewLine) : TRVDrawLineInfo(ALeft, ATop, AWidth, AHeight, AItemNo, AFromNewLine) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVJustifyDrawLineInfo(void) : TRVDrawLineInfo() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVJustifyDrawLineInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVSimpleLineHeightDrawLineInfo; +class PASCALIMPLEMENTATION TRVSimpleLineHeightDrawLineInfo : public TRVJustifyDrawLineInfo +{ + typedef TRVJustifyDrawLineInfo inherited; + +private: + int FExtraSpaceBelow; + +protected: + virtual int __fastcall GetExtraSpaceBelow(void); + virtual void __fastcall SetExtraSpaceBelow(const int Value); +public: + #pragma option push -w-inl + /* TRVDrawLineInfo.CreateEx */ inline __fastcall TRVSimpleLineHeightDrawLineInfo(int ALeft, int ATop, int AWidth, int AHeight, int AItemNo, Byte AFromNewLine) : TRVJustifyDrawLineInfo(ALeft, ATop, AWidth, AHeight, AItemNo, AFromNewLine) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVSimpleLineHeightDrawLineInfo(void) : TRVJustifyDrawLineInfo() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVSimpleLineHeightDrawLineInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVComplexLineHeightDrawLineInfo; +class PASCALIMPLEMENTATION TRVComplexLineHeightDrawLineInfo : public TRVSimpleLineHeightDrawLineInfo +{ + typedef TRVSimpleLineHeightDrawLineInfo inherited; + +private: + int FExtraSpaceAbove; + +protected: + virtual int __fastcall GetExtraSpaceAbove(void); + virtual void __fastcall SetExtraSpaceAbove(const int Value); +public: + #pragma option push -w-inl + /* TRVDrawLineInfo.CreateEx */ inline __fastcall TRVComplexLineHeightDrawLineInfo(int ALeft, int ATop, int AWidth, int AHeight, int AItemNo, Byte AFromNewLine) : TRVSimpleLineHeightDrawLineInfo(ALeft, ATop, AWidth, AHeight, AItemNo, AFromNewLine) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVComplexLineHeightDrawLineInfo(void) : TRVSimpleLineHeightDrawLineInfo() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVComplexLineHeightDrawLineInfo(void) { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVDItemFloatingType { rvdifLeft, rvdifRight }; +#pragma option pop + +class DELPHICLASS TRVFloatingDrawLineInfo; +class PASCALIMPLEMENTATION TRVFloatingDrawLineInfo : public TRVComplexLineHeightDrawLineInfo +{ + typedef TRVComplexLineHeightDrawLineInfo inherited; + +private: + int __fastcall GetFloatBottom(void); + int __fastcall GetFloatRight(void); + +protected: + virtual int __fastcall GetObjectHeight(void); + virtual int __fastcall GetObjectLeft(void); + virtual int __fastcall GetObjectTop(void); + virtual int __fastcall GetObjectWidth(void); + +public: + int FloatLeft; + int FloatTop; + int FloatWidth; + int FloatHeight; + TRVDItemFloatingType FloatType; + __property int FloatRight = {read=GetFloatRight, nodefault}; + __property int FloatBottom = {read=GetFloatBottom, nodefault}; +public: + #pragma option push -w-inl + /* TRVDrawLineInfo.CreateEx */ inline __fastcall TRVFloatingDrawLineInfo(int ALeft, int ATop, int AWidth, int AHeight, int AItemNo, Byte AFromNewLine) : TRVComplexLineHeightDrawLineInfo(ALeft, ATop, AWidth, AHeight, AItemNo, AFromNewLine) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVFloatingDrawLineInfo(void) : TRVComplexLineHeightDrawLineInfo() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVFloatingDrawLineInfo(void) { } + #pragma option pop + +}; + + +typedef TMetaClass* TRVDrawLineInfoClass; + +class DELPHICLASS TRVDrawLines; +class PASCALIMPLEMENTATION TRVDrawLines : public Classes::TList +{ + typedef Classes::TList inherited; + +public: + TRVDrawLineInfo* operator[](int Index) { return Items[Index]; } + +private: + int FStartDeletedIndex; + int FDeletedCount; + HIDESBASE TRVDrawLineInfo* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVDrawLineInfo* Value); + void __fastcall DeleteRange(int Index1, int Index2); + +public: + __fastcall TRVDrawLines(void); + void __fastcall MarkForDelete(int Index1, int Index2); + void __fastcall DeleteMarked(void); + HIDESBASE void __fastcall Insert(int Index, void * Item); + HIDESBASE void __fastcall Delete(int Index); + AnsiString __fastcall GetString(int Index, Classes::TList* AItems); + AnsiString __fastcall GetSubString(int Index, Classes::TList* AItems, int AStartIndex, int ALength); + AnsiString __fastcall GetRightString(int Index, Classes::TList* AItems, int AStartIndex); + int __fastcall FindFirstFloatingAboveDrawItem(int Index, int MinIndex, int Bottom, bool UseBottom); + __property TRVDrawLineInfo* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TList.Destroy */ inline __fastcall virtual ~TRVDrawLines(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVFloatingDrawItems; +class PASCALIMPLEMENTATION TRVFloatingDrawItems : public TRVDrawLines +{ + typedef TRVDrawLines inherited; + +private: + bool __fastcall MarkedHaveFloatType(Rvclasses::TRVIntegerList* Marks, TRVDItemFloatingType FloatType); + +public: + void __fastcall FillFloatingAboveDrawItem(int DItemNo, TRVDrawLines* Source); + void __fastcall FillFloatingCrossingY(int Y, int DItemNo, TRVDrawLines* Source); + void __fastcall RemoveNonOverlapping(int Y); + void __fastcall MarkNonOverlapping(int Y, Rvclasses::TRVIntegerList* Marks); + void __fastcall AdjustLineSize(int MinLeftIndent, int MinWidth, int MaxRightSide, int &Y, int &LeftIndent, int &LineWidth, bool AllowDelete, bool ClearLeft, bool ClearRight, Classes::TList* ClearIgnore); + int __fastcall GetFloatBottom(void); +public: + #pragma option push -w-inl + /* TRVDrawLines.Create */ inline __fastcall TRVFloatingDrawItems(void) : TRVDrawLines() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TList.Destroy */ inline __fastcall virtual ~TRVFloatingDrawItems(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Dlines */ +using namespace Dlines; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Dlines diff --git a/12.0.4/Units/D2006/PtRVData.dcu b/12.0.4/Units/D2006/PtRVData.dcu new file mode 100644 index 0000000..c41dfe0 Binary files /dev/null and b/12.0.4/Units/D2006/PtRVData.dcu differ diff --git a/12.0.4/Units/D2006/PtRVData.hpp b/12.0.4/Units/D2006/PtRVData.hpp new file mode 100644 index 0000000..85cb521 --- /dev/null +++ b/12.0.4/Units/D2006/PtRVData.hpp @@ -0,0 +1,509 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Ptrvdata.pas' rev: 10.00 + +#ifndef PtrvdataHPP +#define PtrvdataHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Ptrvdata +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVFootnoteRefList; +class DELPHICLASS TRVFootnotePtblRVData; +class PASCALIMPLEMENTATION TRVFootnoteRefList : public Classes::TList +{ + typedef Classes::TList inherited; + +public: + TRVFootnotePtblRVData* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVFootnotePtblRVData* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVFootnotePtblRVData* Value); + +public: + void __fastcall DeleteByFootnote(Rvnote::TRVFootnoteItemInfo* Footnote); + HIDESBASE void __fastcall Sort(void); + int __fastcall GetFootnoteIndex(Rvnote::TRVFootnoteItemInfo* Footnote); + __property TRVFootnotePtblRVData* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TList.Destroy */ inline __fastcall virtual ~TRVFootnoteRefList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVFootnoteRefList(void) : Classes::TList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVMultiDrawItemPartsList; +class PASCALIMPLEMENTATION TRVMultiDrawItemPartsList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + Rvitem::TRVMultiDrawItemPart* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE Rvitem::TRVMultiDrawItemPart* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const Rvitem::TRVMultiDrawItemPart* Value); + +public: + __property Rvitem::TRVMultiDrawItemPart* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVMultiDrawItemPartsList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVMultiDrawItemPartsList(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVMultiDrawItemInfo; +class PASCALIMPLEMENTATION TRVMultiDrawItemInfo : public Dlines::TRVComplexLineHeightDrawLineInfo +{ + typedef Dlines::TRVComplexLineHeightDrawLineInfo inherited; + +private: + TRVMultiDrawItemPartsList* FPartsList; + +public: + __fastcall TRVMultiDrawItemInfo(void); + __fastcall virtual ~TRVMultiDrawItemInfo(void); + DYNAMIC void __fastcall ResetPages(TRVFootnoteRefList* &FootnoteRVDataList, int &ReleasedHeightAfterFootnotes, bool FootnotesChangeHeight); + DYNAMIC void __fastcall UnformatLastPage(TRVFootnoteRefList* &FootnoteRVDataList, int &ReleasedHeightAfterFootnotes, bool FootnotesChangeHeight); + DYNAMIC void __fastcall AddAllFootnotes(TRVFootnoteRefList* &FootnoteRVDataList, int &Height, bool FootnotesChangeHeight); + DYNAMIC void __fastcall DecHeightByFootnotes(int &Height, bool &ThisPageHasFootnotes); + DYNAMIC void __fastcall RemoveAllFootnotes(TRVFootnoteRefList* &FootnoteRVDataList, int &Height, bool FootnotesChangeHeight); + __property TRVMultiDrawItemPartsList* PartsList = {read=FPartsList}; +public: + #pragma option push -w-inl + /* TRVDrawLineInfo.CreateEx */ inline __fastcall TRVMultiDrawItemInfo(int ALeft, int ATop, int AWidth, int AHeight, int AItemNo, Byte AFromNewLine) : Dlines::TRVComplexLineHeightDrawLineInfo(ALeft, ATop, AWidth, AHeight, AItemNo, AFromNewLine) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVPageInfo; +class PASCALIMPLEMENTATION TRVPageInfo : public Classes::TCollectionItem +{ + typedef Classes::TCollectionItem inherited; + +public: + int StartY; + int StartDrawItemNo; + int StartPart; + int StartY2; + int DocumentHeight; + TRVFootnoteRefList* FootnoteRVDataList; + __fastcall virtual ~TRVPageInfo(void); + virtual void __fastcall Assign(Classes::TPersistent* Source); +public: + #pragma option push -w-inl + /* TCollectionItem.Create */ inline __fastcall virtual TRVPageInfo(Classes::TCollection* Collection) : Classes::TCollectionItem(Collection) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVPageCollection; +class PASCALIMPLEMENTATION TRVPageCollection : public Classes::TCollection +{ + typedef Classes::TCollection inherited; + +public: + TRVPageInfo* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVPageInfo* __fastcall GetItem(int Index); + HIDESBASE void __fastcall SetItem(int Index, const TRVPageInfo* Value); + +public: + __fastcall TRVPageCollection(void); + HIDESBASE TRVPageInfo* __fastcall Add(void); + __property TRVPageInfo* Items[int Index] = {read=GetItem, write=SetItem/*, default*/}; +public: + #pragma option push -w-inl + /* TCollection.Destroy */ inline __fastcall virtual ~TRVPageCollection(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCustomPrintableRVData; +class PASCALIMPLEMENTATION TCustomPrintableRVData : public Rvrvdata::TRichViewRVData +{ + typedef Rvrvdata::TRichViewRVData inherited; + +private: + Graphics::TBitmap* FBackgroundBmp; + Dlines::TRVDrawLineInfo* FDrawItem; + int FItemTop; + int FPageNo; + +protected: + virtual Rvback::TRVBackground* __fastcall GetBack(void); + virtual int __fastcall GetTopCoord(int PageNo); + virtual int __fastcall GetPrintableAreaTop(void); + virtual int __fastcall GetTopCoord2(int PageNo); + virtual void __fastcall DoPagePrepaint(Graphics::TCanvas* Canvas, int PageNo, bool Preview, bool Correction); + virtual void __fastcall DoPagePostpaint(Graphics::TCanvas* Canvas, int PageNo, bool Preview); + virtual void __fastcall CheckPageNo(int PageNo); + DYNAMIC bool __fastcall ShareItems(void); + DYNAMIC Graphics::TCanvas* __fastcall InitPrinterCanvas(void); + DYNAMIC void __fastcall DonePrinterCanvas(Graphics::TCanvas* Canvas); + virtual Rvstyle::TRVColorMode __fastcall GetColorMode(void); + DYNAMIC Crvdata::TCustomRVData* __fastcall GetSourceRVDataForPrinting(void); + virtual void __fastcall DoOnHyperlink(Crvdata::TCustomRVData* RVData, int ItemNo, const Types::TRect &R); + virtual void __fastcall DoOnCheckpoint(Crvdata::TCustomRVData* RVData, int ItemNo, int X, int Y); + virtual bool __fastcall PageExists(int PageNo); + DYNAMIC bool __fastcall IgnoreFootnotes(void); + void __fastcall CalcFootnoteCoords(TRVFootnoteRefList* References, int PageNo); + +public: + bool ParentDrawsBack; + virtual void __fastcall GetDrawItemsRange(int PageNo, int &StartNo, int &EndNo, int &Part); + virtual int __fastcall GetPrintableAreaLeft(int PageNo); + virtual void __fastcall DrawPage(int pgNo, Graphics::TCanvas* Canvas, bool Preview, bool Correction); + virtual void __fastcall DrawBackToBitmap(int Left, int Top, Graphics::TBitmap* bmp, const Rvstyle::TRVScreenAndDevice &sad, int ItemBackgroundLayer, bool RelativeToItem); +public: + #pragma option push -w-inl + /* TRichViewRVData.Destroy */ inline __fastcall virtual ~TCustomPrintableRVData(void) { } + #pragma option pop + #pragma option push -w-inl + /* TRichViewRVData.Create */ inline __fastcall virtual TCustomPrintableRVData(Rvscroll::TRVScroller* RichView) : Rvrvdata::TRichViewRVData(RichView) { } + #pragma option pop + +}; + + +class DELPHICLASS TCustomMultiPagePtblRVData; +class PASCALIMPLEMENTATION TCustomMultiPagePtblRVData : public TCustomPrintableRVData +{ + typedef TCustomPrintableRVData inherited; + +protected: + int StreamSavePage; + DYNAMIC void __fastcall DoFormatting(int PageCompleted, Richview::TRVPrintingStep Step); + DYNAMIC int __fastcall GetInitialStartAt(void); + DYNAMIC int __fastcall GetFurtherStartAt(void); + DYNAMIC void __fastcall SetEndAt(int Value); + DYNAMIC void __fastcall IncEndAtByStartAt(int PageNo); + virtual int __fastcall GetTopCoord(int PageNo); + virtual int __fastcall GetTopCoord2(int PageNo); + DYNAMIC void __fastcall RVFGetLimits(Crvdata::TRVFSaveScope SaveScope, int &StartItem, int &EndItem, int &StartOffs, int &EndOffs, Rvitem::TRVMultiDrawItemPart* &StartPart, Rvitem::TRVMultiDrawItemPart* &EndPart, Rvitem::TCustomRVItemInfo* &SelectedItem); + virtual bool __fastcall PageExists(int PageNo); + DYNAMIC bool __fastcall AllowEmptyFirstPage(void); + TRVFootnotePtblRVData* __fastcall GetFootnoteRVData(Rvnote::TRVFootnoteItemInfo* Footnote); + +public: + TRVPageCollection* Pages; + __fastcall virtual ~TCustomMultiPagePtblRVData(void); + virtual void __fastcall GetDrawItemsRange(int PageNo, int &StartNo, int &EndNo, int &Part); + void __fastcall FormatNextPage(int &i, int &StartAt, int &StartY, int &Y, bool &Splitting, int &MaxHeight, TRVFootnoteRefList* &FootnoteRVDataList, bool FootnotesChangeHeight); + bool __fastcall CanPlaceFirstPageHere(int &Height, bool ParentIsFirstItemOnPage, const Rvstyle::TRVScreenAndDevice &sad, bool ThisPageHasFootnotes, bool FootnotesChangeHeight); + bool __fastcall SavePageAsRVF(Classes::TStream* Stream, int PageNo, Graphics::TColor Color, Rvback::TRVBackground* Background, Crvdata::TRVLayoutInfo* Layout); + int __fastcall GetNoteSeparatorHeight(void); + void __fastcall GetFirstItemOnPageEx(int PageNo, int &ItemNo, int &OffsetInItem, int &ExtraData); + bool __fastcall IsComplexSoftPageBreak(int PageNo); + void __fastcall AssignComplexSoftPageBreakToItem(int PageNo, Crvfdata::TCustomRVFormattedData* RVData); +public: + #pragma option push -w-inl + /* TRichViewRVData.Create */ inline __fastcall virtual TCustomMultiPagePtblRVData(Rvscroll::TRVScroller* RichView) : TCustomPrintableRVData(RichView) { } + #pragma option pop + +}; + + +class DELPHICLASS TCustomMainPtblRVData; +class PASCALIMPLEMENTATION TCustomMainPtblRVData : public TCustomMultiPagePtblRVData +{ + typedef TCustomMultiPagePtblRVData inherited; + +private: + Rvmarker::TRVMarkerList* FPrevMarkers; + +protected: + DYNAMIC void __fastcall DoFormatting(int PageCompleted, Richview::TRVPrintingStep Step); + virtual Rvback::TRVBackground* __fastcall GetBack(void); + virtual int __fastcall GetTopCoord(int PageNo); + virtual int __fastcall GetTopCoord2(int PageNo); + virtual void __fastcall GetSADForFormatting(Graphics::TCanvas* Canvas, Rvstyle::TRVScreenAndDevice &sad); + virtual int __fastcall GetPrintableAreaTop(void); + virtual void __fastcall CheckPageNo(int PageNo); + DYNAMIC void __fastcall Prepare(void); + virtual Rvstyle::TRVColorMode __fastcall GetColorMode(void); + virtual bool __fastcall GetFirstItemMarker(int &ListNo, int &Level); + DYNAMIC Crvdata::TCustomRVData* __fastcall GetSourceRVDataForPrinting(void); + DYNAMIC int __fastcall GetInitialStartAt(void); + DYNAMIC void __fastcall SetEndAt(int Value); + DYNAMIC void __fastcall IncEndAtByStartAt(int PageNo); + virtual void __fastcall DoPagePostpaint(Graphics::TCanvas* Canvas, int PageNo, bool Preview); + +public: + Graphics::TCanvas* PrinterCanvas; + int TmpTMPix; + int TmpBMPix; + Rvstyle::TRVScreenAndDevice PrnSad; + int FTopMarginPix; + int FBottomMarginPix; + bool Transparent; + #pragma pack(push,1) + Types::TRect TmpM; + #pragma pack(pop) + #pragma pack(push,1) + Types::TRect PhysM; + #pragma pack(pop) + Rvstyle::TRVColorMode ColorMode; + bool FIsDestinationReady; + DYNAMIC void __fastcall Clear(void); + DYNAMIC int __fastcall GetPageWidth(void); + DYNAMIC int __fastcall GetPageHeight(void); + virtual int __fastcall GetPrintableAreaLeft(int PageNo); + void __fastcall InitFormatPages(void); + int __fastcall FormatPages(void); + void __fastcall FinalizeFormatPages(void); + virtual Graphics::TCanvas* __fastcall GetCanvas(void); + virtual void __fastcall DrawPage(int pgNo, Graphics::TCanvas* Canvas, bool Preview, bool Correction); + virtual Graphics::TColor __fastcall GetColor(void); + DYNAMIC Rvmarker::TRVMarkerList* __fastcall GetPrevMarkers(void); + __fastcall virtual TCustomMainPtblRVData(Rvscroll::TRVScroller* RichView); +public: + #pragma option push -w-inl + /* TCustomMultiPagePtblRVData.Destroy */ inline __fastcall virtual ~TCustomMainPtblRVData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TPrintableRVData; +class DELPHICLASS TRVHeaderFooterRVData; +class DELPHICLASS TRectPtblRVData; +class PASCALIMPLEMENTATION TRectPtblRVData : public TCustomMultiPagePtblRVData +{ + typedef TCustomMultiPagePtblRVData inherited; + +protected: + virtual void __fastcall GetSADForFormatting(Graphics::TCanvas* Canvas, Rvstyle::TRVScreenAndDevice &sad); + virtual int __fastcall GetPrintableAreaTop(void); + virtual int __fastcall GetTopCoord(int PageNo); + virtual int __fastcall GetTopCoord2(int PageNo); + DYNAMIC Graphics::TCanvas* __fastcall InitPrinterCanvas(void); + virtual Rvstyle::TRVColorMode __fastcall GetColorMode(void); + DYNAMIC Crvdata::TCustomRVData* __fastcall GetSourceRVDataForPrinting(void); + virtual void __fastcall DoOnHyperlink(Crvdata::TCustomRVData* RVData, int ItemNo, const Types::TRect &R); + virtual void __fastcall DoOnCheckpoint(Crvdata::TCustomRVData* RVData, int ItemNo, int X, int Y); + DYNAMIC bool __fastcall IgnoreFootnotes(void); + +public: + Crvdata::TCustomRVData* FSourceDataForPrinting; + TCustomPrintableRVData* FParentPrintData; + int Left; + int Top; + int DX; + int DY; + int Width; + int Height; + bool Transparent; + Graphics::TColor FColor; + DYNAMIC void __fastcall CreateFontInfoCache(Graphics::TCanvas* ACanvas, Graphics::TCanvas* AFormatCanvas); + DYNAMIC void __fastcall DestroyFontInfoCache(Crvfdata::TRVFontInfoCache* &Cache); + DYNAMIC Crvfdata::TRVFontInfoCache* __fastcall GetFontInfoCache(Graphics::TCanvas* ACanvas, Graphics::TCanvas* AFormatCanvas, Crvfdata::TCustomRVFormattedData* RVData); + virtual int __fastcall GetMaxTextWidth(void); + virtual int __fastcall GetMinTextWidth(void); + virtual int __fastcall GetPrintableAreaLeft(int PageNo); + virtual Crvdata::TCustomRVData* __fastcall GetParentData(void); + virtual Crvdata::TCustomRVData* __fastcall GetRootData(void); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteParentData(void); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteRootData(void); + __fastcall TRectPtblRVData(Rvscroll::TRVScroller* RichView, Crvdata::TCustomRVData* SourceDataForPrinting, TCustomPrintableRVData* ParentPrintData); + virtual void __fastcall DrawBackToBitmap(int Left, int Top, Graphics::TBitmap* bmp, const Rvstyle::TRVScreenAndDevice &sad, int ItemBackgroundLayer, bool RelativeToItem); + virtual int __fastcall GetWidth(void); + virtual int __fastcall GetHeight(void); + virtual int __fastcall GetLeftMargin(void); + virtual int __fastcall GetRightMargin(void); + virtual int __fastcall GetTopMargin(void); + virtual int __fastcall GetBottomMargin(void); + virtual Graphics::TCanvas* __fastcall GetCanvas(void); + virtual Graphics::TColor __fastcall GetColor(void); +public: + #pragma option push -w-inl + /* TCustomMultiPagePtblRVData.Destroy */ inline __fastcall virtual ~TRectPtblRVData(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVHeaderFooterRVData : public TRectPtblRVData +{ + typedef TRectPtblRVData inherited; + +protected: + DYNAMIC bool __fastcall IgnoreFootnotes(void); + +public: + int FLeftMargin; + int FRightMargin; + int FTopMargin; + int FBottomMargin; + __fastcall TRVHeaderFooterRVData(Rvscroll::TRVScroller* RichView, Crvdata::TCustomRVData* SourceDataForPrinting, TCustomPrintableRVData* ParentPrintData); + virtual Rvstyle::TRVStyle* __fastcall GetRVStyle(void); + DYNAMIC void __fastcall CreateFontInfoCache(Graphics::TCanvas* ACanvas, Graphics::TCanvas* AFormatCanvas); + DYNAMIC Crvfdata::TRVFontInfoCache* __fastcall GetFontInfoCache(Graphics::TCanvas* ACanvas, Graphics::TCanvas* AFormatCanvas, Crvfdata::TCustomRVFormattedData* RVData); + virtual int __fastcall GetLeftMargin(void); + virtual int __fastcall GetRightMargin(void); + virtual int __fastcall GetTopMargin(void); + virtual int __fastcall GetBottomMargin(void); +public: + #pragma option push -w-inl + /* TCustomMultiPagePtblRVData.Destroy */ inline __fastcall virtual ~TRVHeaderFooterRVData(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TPrintableRVData : public TCustomMainPtblRVData +{ + typedef TCustomMainPtblRVData inherited; + +private: + HRGN rgn; + int rgnres; + +protected: + DYNAMIC void __fastcall DoFormatting(int PageCompleted, Richview::TRVPrintingStep Step); + DYNAMIC Graphics::TCanvas* __fastcall InitPrinterCanvas(void); + DYNAMIC void __fastcall DonePrinterCanvas(Graphics::TCanvas* Canvas); + virtual void __fastcall DoPagePrepaint(Graphics::TCanvas* Canvas, int PageNo, bool Preview, bool Correction); + virtual void __fastcall DoPagePostpaint(Graphics::TCanvas* Canvas, int PageNo, bool Preview); + DYNAMIC void __fastcall Prepare(void); + +public: + int TmpLMMir; + TRVHeaderFooterRVData* Header; + TRVHeaderFooterRVData* Footer; + int HeaderY; + int FooterY; + virtual int __fastcall GetPrintableAreaLeft(int PageNo); + __fastcall virtual TPrintableRVData(Rvscroll::TRVScroller* RichView); + __fastcall virtual ~TPrintableRVData(void); + DYNAMIC int __fastcall GetPageWidth(void); + DYNAMIC int __fastcall GetPageHeight(void); +}; + + +class DELPHICLASS TRVEndnotePtblRVData; +class PASCALIMPLEMENTATION TRVEndnotePtblRVData : public TCustomMultiPagePtblRVData +{ + typedef TCustomMultiPagePtblRVData inherited; + +protected: + DYNAMIC Crvdata::TCustomRVData* __fastcall GetSourceRVDataForPrinting(void); + DYNAMIC int __fastcall GetInitialStartAt(void); + DYNAMIC int __fastcall GetFurtherStartAt(void); + DYNAMIC void __fastcall SetEndAt(int Value); + DYNAMIC void __fastcall IncEndAtByStartAt(int PageNo); + virtual void __fastcall GetSADForFormatting(Graphics::TCanvas* Canvas, Rvstyle::TRVScreenAndDevice &sad); + virtual int __fastcall GetTopCoord(int PageNo); + virtual int __fastcall GetTopCoord2(int PageNo); + DYNAMIC bool __fastcall AllowEmptyFirstPage(void); + DYNAMIC bool __fastcall IgnoreFootnotes(void); + +public: + Rvnote::TRVEndnoteItemInfo* Endnote; + int StartAt; + int NextStartAt; + int EndAt; + bool FromNewPage; + __fastcall virtual TRVEndnotePtblRVData(Rvscroll::TRVScroller* RichView); + virtual Graphics::TCanvas* __fastcall GetCanvas(void); + DYNAMIC Classes::TStringList* __fastcall GetDocProperties(void); + virtual int __fastcall GetPrintableAreaLeft(int PageNo); + virtual int __fastcall GetPrintableAreaTop(void); + virtual Crvdata::TCustomRVData* __fastcall GetParentData(void); + virtual Crvdata::TCustomRVData* __fastcall GetRootData(void); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteParentData(void); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteRootData(void); +public: + #pragma option push -w-inl + /* TCustomMultiPagePtblRVData.Destroy */ inline __fastcall virtual ~TRVEndnotePtblRVData(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVFootnotePtblRVData : public TRectPtblRVData +{ + typedef TRectPtblRVData inherited; + +protected: + DYNAMIC bool __fastcall IgnoreFootnotes(void); + +public: + int IndexOnPage; + Rvnote::TRVFootnoteItemInfo* Footnote; + Crvfdata::TCustomRVFormattedData* FootnoteItemRVData; + int FootnoteDItemNo; + void __fastcall AdjustFootnoteRefWidths(void); +public: + #pragma option push -w-inl + /* TRectPtblRVData.Create */ inline __fastcall TRVFootnotePtblRVData(Rvscroll::TRVScroller* RichView, Crvdata::TCustomRVData* SourceDataForPrinting, TCustomPrintableRVData* ParentPrintData) : TRectPtblRVData(RichView, SourceDataForPrinting, ParentPrintData) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCustomMultiPagePtblRVData.Destroy */ inline __fastcall virtual ~TRVFootnotePtblRVData(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Ptrvdata */ +using namespace Ptrvdata; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Ptrvdata diff --git a/12.0.4/Units/D2006/PtblRV.dcu b/12.0.4/Units/D2006/PtblRV.dcu new file mode 100644 index 0000000..417e739 Binary files /dev/null and b/12.0.4/Units/D2006/PtblRV.dcu differ diff --git a/12.0.4/Units/D2006/PtblRV.hpp b/12.0.4/Units/D2006/PtblRV.hpp new file mode 100644 index 0000000..252f7c5 --- /dev/null +++ b/12.0.4/Units/D2006/PtblRV.hpp @@ -0,0 +1,384 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Ptblrv.pas' rev: 10.00 + +#ifndef PtblrvHPP +#define PtblrvHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Ptblrv +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TCustomRVPrint; +typedef void __fastcall (__closure *TRVPrintComponentEvent)(TCustomRVPrint* Sender, Controls::TControl* PrintMe, Graphics::TBitmap* &ComponentImage); + +typedef void __fastcall (__closure *TRVPrintingEvent)(Richview::TCustomRichView* Sender, int PageCompleted, Richview::TRVPrintingStep Step); + +class DELPHICLASS TRVPrint; +typedef void __fastcall (__closure *TRVPagePrepaintEvent)(TRVPrint* Sender, int PageNo, Graphics::TCanvas* Canvas, bool Preview, const Types::TRect &PageRect, const Types::TRect &PrintAreaRect); + +#pragma option push -b- +enum TRVFixMarginsMode { rvfmmAutoCorrect, rvfmmIgnore }; +#pragma option pop + +class DELPHICLASS TRVEndnotePage; +class PASCALIMPLEMENTATION TRVEndnotePage : public System::TObject +{ + typedef System::TObject inherited; + +public: + int Index; + int Page; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVEndnotePage(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVEndnotePage(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVEndnotePageList; +class PASCALIMPLEMENTATION TRVEndnotePageList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVEndnotePage* operator[](int Index) { return Items[Index]; } + +private: + TRVEndnotePage* __fastcall GetItems(int Index); + void __fastcall SetItems(int Index, const TRVEndnotePage* Value); + +public: + __property TRVEndnotePage* Items[int Index] = {read=GetItems, write=SetItems/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVEndnotePageList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVEndnotePageList(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVEndnoteList; +class PASCALIMPLEMENTATION TRVEndnoteList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + Ptrvdata::TRVEndnotePtblRVData* operator[](int Index) { return Items[Index]; } + +private: + TCustomRVPrint* FOwner; + TRVEndnotePageList* Pages; + Ptrvdata::TRVEndnotePtblRVData* __fastcall GetItems(int Index); + void __fastcall SetItems(int Index, const Ptrvdata::TRVEndnotePtblRVData* Value); + +public: + __fastcall TRVEndnoteList(TCustomRVPrint* AOwner); + __fastcall virtual ~TRVEndnoteList(void); + void __fastcall DrawPage(int RealPageNo, int PageNo, Graphics::TCanvas* Canvas, bool Preview, bool Correction); + __property Ptrvdata::TRVEndnotePtblRVData* Items[int Index] = {read=GetItems, write=SetItems/*, default*/}; +}; + + +class DELPHICLASS TRVFootnoteList; +class PASCALIMPLEMENTATION TRVFootnoteList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + Ptrvdata::TRVFootnotePtblRVData* operator[](int Index) { return Items[Index]; } + +private: + TCustomRVPrint* FOwner; + Ptrvdata::TRVFootnotePtblRVData* __fastcall GetItems(int Index); + void __fastcall SetItems(int Index, const Ptrvdata::TRVFootnotePtblRVData* Value); + +public: + __fastcall TRVFootnoteList(TCustomRVPrint* AOwner); + void __fastcall SortByFootnotes(void); + Ptrvdata::TRVFootnotePtblRVData* __fastcall FindByFootnote(Rvnote::TRVFootnoteItemInfo* Footnote); + __property Ptrvdata::TRVFootnotePtblRVData* Items[int Index] = {read=GetItems, write=SetItems/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVFootnoteList(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVFootnoteDrawItem; +class PASCALIMPLEMENTATION TRVFootnoteDrawItem : public Dlines::TRVComplexLineHeightDrawLineInfo +{ + typedef Dlines::TRVComplexLineHeightDrawLineInfo inherited; + +public: + Ptrvdata::TRVFootnotePtblRVData* DocumentRVData; +public: + #pragma option push -w-inl + /* TRVDrawLineInfo.CreateEx */ inline __fastcall TRVFootnoteDrawItem(int ALeft, int ATop, int AWidth, int AHeight, int AItemNo, Byte AFromNewLine) : Dlines::TRVComplexLineHeightDrawLineInfo(ALeft, ATop, AWidth, AHeight, AItemNo, AFromNewLine) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVFootnoteDrawItem(void) : Dlines::TRVComplexLineHeightDrawLineInfo() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVFootnoteDrawItem(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCustomPrintableRV; +class PASCALIMPLEMENTATION TCustomPrintableRV : public Richview::TCustomRichView +{ + typedef Richview::TCustomRichView inherited; + +private: + TCustomRVPrint* FRVPrint; + +protected: + int FNoteSeparatorHeight; + int FNoteLineWidth; + TRVEndnoteList* FEndnotes; + TRVFootnoteList* FFootnotes; + virtual void __fastcall CreateParams(Controls::TCreateParams &Params); + +public: + __fastcall virtual TCustomPrintableRV(Classes::TComponent* AOwner); + __fastcall virtual ~TCustomPrintableRV(void); + Ptrvdata::TRVFootnotePtblRVData* __fastcall GetFootnoteRVData(Rvnote::TRVFootnoteItemInfo* Footnote); + void __fastcall DrawNoteSeparatorAbove(int PageNo, int Y, Graphics::TCanvas* Canvas, bool FullSize); + void __fastcall CalcFootnotesCoords(Classes::TList* References, int PageNo); + void __fastcall FreeNotesLists(void); + DYNAMIC void __fastcall ApplyLayoutInfo(Crvdata::TRVLayoutInfo* Layout); + virtual bool __fastcall CanUseCustomPPI(void); + void __fastcall InitFormatPages(void); + int __fastcall FormatPages(void); + void __fastcall FinalizeFormatPages(void); + void __fastcall DrawPage(int PageNo, Graphics::TCanvas* Canvas, bool Preview, bool Correction); + __property TCustomRVPrint* RVPrint = {read=FRVPrint, write=FRVPrint}; + __property int NoteSeparatorHeight = {read=FNoteSeparatorHeight, nodefault}; +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TCustomPrintableRV(HWND ParentWindow) : Richview::TCustomRichView(ParentWindow) { } + #pragma option pop + +}; + + +class DELPHICLASS TPrintableRV; +class PASCALIMPLEMENTATION TPrintableRV : public TCustomPrintableRV +{ + typedef TCustomPrintableRV inherited; + +private: + void __fastcall DoOnPrinting(int PageCompleted, Richview::TRVPrintingStep Step); + +protected: + virtual TMetaClass* __fastcall GetDataClass(void); + +public: + bool FMirrorMargins; + int FLeftMarginMM; + int FRightMarginMM; + int FTopMarginMM; + int FBottomMarginMM; + void __fastcall PrintPages(int firstPgNo, int lastPgNo, const AnsiString Title, int Copies, bool Collate); + void __fastcall Print(const AnsiString Title, int Copies, bool Collate); + void __fastcall ContinuousPrint(void); +public: + #pragma option push -w-inl + /* TCustomPrintableRV.Create */ inline __fastcall virtual TPrintableRV(Classes::TComponent* AOwner) : TCustomPrintableRV(AOwner) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomPrintableRV.Destroy */ inline __fastcall virtual ~TPrintableRV(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TPrintableRV(HWND ParentWindow) : TCustomPrintableRV(ParentWindow) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TCustomRVPrint : public Classes::TComponent +{ + typedef Classes::TComponent inherited; + +private: + bool FPreviewCorrection; + TRVPrintComponentEvent FOnPrintComponent; + bool __fastcall GetTransparentBackground(void); + void __fastcall SetTransparentBackground(const bool Value); + int __fastcall GetPreview100PercentHeight(void); + int __fastcall GetPreview100PercentWidth(void); + Rvstyle::TRVColorMode __fastcall GetColorMode(void); + void __fastcall SetColorMode(const Rvstyle::TRVColorMode Value); + bool __fastcall GetIsDestinationReady(void); + +protected: + virtual void __fastcall Loaded(void); + DYNAMIC TCustomPrintableRV* __fastcall CreateRichView(void); + DYNAMIC Richview::TCustomRichView* __fastcall GetSourceRichView(void); + int __fastcall GetPagesCount(void); + int __fastcall FormatEndnotes(void); + void __fastcall PreformatFootnotes(void); + void __fastcall PostformatFootnotes(void); + DYNAMIC bool __fastcall IgnoreEndnotes(void); + +public: + TCustomPrintableRV* rv; + bool Ready; + int StartAt; + int EndAt; + int FormattingID; + __fastcall virtual TCustomRVPrint(Classes::TComponent* AOwner); + void __fastcall Clear(void); + void __fastcall UpdatePaletteInfo(void); + void __fastcall GetFirstItemOnPage(int PageNo, int &ItemNo, int &OffsetInItem); + void __fastcall GetFirstItemOnPageEx(int PageNo, int &ItemNo, int &OffsetInItem, int &ExtraData); + bool __fastcall IsComplexSoftPageBreak(int PageNo); + void __fastcall AssignComplexSoftPageBreakToItem(int PageNo, Crvfdata::TCustomRVFormattedData* RVData); + void __fastcall DrawPreview(int pgNo, Graphics::TCanvas* Canvas, const Types::TRect &PageRect); + void __fastcall DrawMarginsRect(Graphics::TCanvas* Canvas, const Types::TRect &PageRect, int PageNo); + bool __fastcall SavePageAsRVF(Classes::TStream* Stream, int PageNo); + void __fastcall GetMinimalMargins(Types::TRect &MarginsRect, bool ScreenResolution); + __property int PagesCount = {read=GetPagesCount, nodefault}; + __property int Preview100PercentWidth = {read=GetPreview100PercentWidth, nodefault}; + __property int Preview100PercentHeight = {read=GetPreview100PercentHeight, nodefault}; + __property bool IsDestinationReady = {read=GetIsDestinationReady, nodefault}; + +__published: + __property bool PreviewCorrection = {read=FPreviewCorrection, write=FPreviewCorrection, nodefault}; + __property TRVPrintComponentEvent OnPrintComponent = {read=FOnPrintComponent, write=FOnPrintComponent}; + __property bool TransparentBackground = {read=GetTransparentBackground, write=SetTransparentBackground, default=0}; + __property Rvstyle::TRVColorMode ColorMode = {read=GetColorMode, write=SetColorMode, default=1}; +public: + #pragma option push -w-inl + /* TComponent.Destroy */ inline __fastcall virtual ~TCustomRVPrint(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVPrint : public TCustomRVPrint +{ + typedef TCustomRVPrint inherited; + +private: + TRVPrintingEvent FOnFormatting; + TRVPrintingEvent FOnPrinting; + TRVPagePrepaintEvent FOnPagePrepaint; + TRVPagePrepaintEvent FOnPagePostPaint; + bool FClipMargins; + Richview::TCustomRichView* FPrintMe; + TRVFixMarginsMode FFixMarginsMode; + int __fastcall GetLM(void); + int __fastcall GetRM(void); + int __fastcall GetTM(void); + int __fastcall GetBM(void); + void __fastcall SetLM(int mm); + void __fastcall SetRM(int mm); + void __fastcall SetTM(int mm); + void __fastcall SetBM(int mm); + bool __fastcall GetMirrorMargins(void); + void __fastcall SetMirrorMargins(const bool Value); + int __fastcall GetFooterY(void); + int __fastcall GetHeaderY(void); + void __fastcall SetFooterY(const int Value); + void __fastcall SetHeaderY(const int Value); + +protected: + DYNAMIC TCustomPrintableRV* __fastcall CreateRichView(void); + DYNAMIC Richview::TCustomRichView* __fastcall GetSourceRichView(void); + +public: + __fastcall virtual TRVPrint(Classes::TComponent* AOwner); + __fastcall virtual ~TRVPrint(void); + void __fastcall AssignSource(Richview::TCustomRichView* PrintMe); + void __fastcall AssignDocParameters(Rvdocparams::TRVDocParameters* DocParameters); + void __fastcall SetHeader(Crvfdata::TCustomRVFormattedData* RVData); + void __fastcall SetFooter(Crvfdata::TCustomRVFormattedData* RVData); + int __fastcall FormatPages(Rvscroll::TRVDisplayOptions PrintOptions); + void __fastcall PrintPages(int firstPgNo, int lastPgNo, AnsiString Title, int Copies, bool Collate); + void __fastcall Print(AnsiString Title, int Copies, bool Collate); + void __fastcall ContinuousPrint(void); + void __fastcall MakePreview(int pgNo, Graphics::TBitmap* bmp); + void __fastcall MakeScaledPreview(int pgNo, Graphics::TBitmap* bmp); + Types::TRect __fastcall GetHeaderRect(); + Types::TRect __fastcall GetFooterRect(); + HIDESBASE void __fastcall Clear(void); + +__published: + __property bool ClipMargins = {read=FClipMargins, write=FClipMargins, default=0}; + __property bool MirrorMargins = {read=GetMirrorMargins, write=SetMirrorMargins, default=0}; + __property int LeftMarginMM = {read=GetLM, write=SetLM, nodefault}; + __property int RightMarginMM = {read=GetRM, write=SetRM, nodefault}; + __property int TopMarginMM = {read=GetTM, write=SetTM, nodefault}; + __property int BottomMarginMM = {read=GetBM, write=SetBM, nodefault}; + __property int FooterYMM = {read=GetFooterY, write=SetFooterY, default=10}; + __property int HeaderYMM = {read=GetHeaderY, write=SetHeaderY, default=10}; + __property TRVPrintingEvent OnFormatting = {read=FOnFormatting, write=FOnFormatting}; + __property TRVPrintingEvent OnSendingToPrinter = {read=FOnPrinting, write=FOnPrinting}; + __property TRVPagePrepaintEvent OnPagePrepaint = {read=FOnPagePrepaint, write=FOnPagePrepaint}; + __property TRVPagePrepaintEvent OnPagePostpaint = {read=FOnPagePostPaint, write=FOnPagePostPaint}; + __property TRVFixMarginsMode FixMarginsMode = {read=FFixMarginsMode, write=FFixMarginsMode, default=0}; +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE HDC __fastcall RV_GetPrinterDC(void); + +} /* namespace Ptblrv */ +using namespace Ptblrv; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Ptblrv diff --git a/12.0.4/Units/D2006/RVAnimate.dcu b/12.0.4/Units/D2006/RVAnimate.dcu new file mode 100644 index 0000000..75dd463 Binary files /dev/null and b/12.0.4/Units/D2006/RVAnimate.dcu differ diff --git a/12.0.4/Units/D2006/RVAnimate.hpp b/12.0.4/Units/D2006/RVAnimate.hpp new file mode 100644 index 0000000..6120efb --- /dev/null +++ b/12.0.4/Units/D2006/RVAnimate.hpp @@ -0,0 +1,120 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvanimate.pas' rev: 10.00 + +#ifndef RvanimateHPP +#define RvanimateHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvanimate +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVAnimator; +class DELPHICLASS TRVAnimatorList; +class PASCALIMPLEMENTATION TRVAnimatorList : public Classes::TList +{ + typedef Classes::TList inherited; + +public: + bool Active; + int LastMinInterval; + int MinInterval; + __fastcall TRVAnimatorList(void); + __fastcall virtual ~TRVAnimatorList(void); + void __fastcall TimerEvent(void); + virtual void __fastcall Clear(void); + void __fastcall FreeAnimators(void); + void __fastcall Reset(void); + HIDESBASE void __fastcall Add(TRVAnimator* &Item); + void __fastcall ResetBackground(void); +}; + + +class PASCALIMPLEMENTATION TRVAnimator : public System::TObject +{ + typedef System::TObject inherited; + +private: + TRVAnimatorList* List; + +protected: + int FrameIndex; + Rvitem::TCustomRVItemInfo* Item; + int Interval; + virtual int __fastcall GetFrameCount(void) = 0 ; + bool __fastcall IsVisible(void); + void __fastcall CalcNextFrameIndex(void); + void __fastcall DrawFrame(void); + virtual void __fastcall ResetBackground(void); + +public: + Crvfdata::TCustomRVFormattedData* RVData; + __fastcall TRVAnimator(Crvfdata::TCustomRVFormattedData* ARVData, Rvitem::TCustomRVItemInfo* AItem); + void __fastcall Update(Crvfdata::TCustomRVFormattedData* ARVData, Rvitem::TCustomRVItemInfo* AItem); + __fastcall virtual ~TRVAnimator(void); + virtual void __fastcall Reset(void) = 0 ; + virtual void __fastcall ChangeFrame(void) = 0 ; + virtual void __fastcall Draw(int X, int Y, Graphics::TCanvas* Canvas, bool Animation) = 0 ; + virtual tagSIZE __fastcall GetExportImageSize(); + virtual void __fastcall DrawForExport(Graphics::TCanvas* Canvas) = 0 ; + virtual bool __fastcall ExportIgnoresScale(void); +}; + + +class DELPHICLASS TRVBitmapAnimator; +class PASCALIMPLEMENTATION TRVBitmapAnimator : public TRVAnimator +{ + typedef TRVAnimator inherited; + +protected: + virtual int __fastcall GetFrameCount(void); + +public: + virtual void __fastcall Reset(void); + virtual void __fastcall ChangeFrame(void); + virtual void __fastcall Draw(int X, int Y, Graphics::TCanvas* Canvas, bool Animation); + virtual void __fastcall DrawForExport(Graphics::TCanvas* Canvas); + virtual bool __fastcall ExportIgnoresScale(void); +public: + #pragma option push -w-inl + /* TRVAnimator.Create */ inline __fastcall TRVBitmapAnimator(Crvfdata::TCustomRVFormattedData* ARVData, Rvitem::TCustomRVItemInfo* AItem) : TRVAnimator(ARVData, AItem) { } + #pragma option pop + #pragma option push -w-inl + /* TRVAnimator.Destroy */ inline __fastcall virtual ~TRVBitmapAnimator(void) { } + #pragma option pop + +}; + + +typedef void __fastcall (*TRVMakeAnimatorProc)(Rvitem::TCustomRVItemInfo* item, Crvfdata::TCustomRVFormattedData* RVData, TRVAnimator* &anim); + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE TRVMakeAnimatorProc RV_MakeAnimator; +extern PACKAGE int RVMaxAnimations; + +} /* namespace Rvanimate */ +using namespace Rvanimate; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvanimate diff --git a/12.0.4/Units/D2006/RVBack.dcu b/12.0.4/Units/D2006/RVBack.dcu new file mode 100644 index 0000000..1ac8479 Binary files /dev/null and b/12.0.4/Units/D2006/RVBack.dcu differ diff --git a/12.0.4/Units/D2006/RVBack.hpp b/12.0.4/Units/D2006/RVBack.hpp new file mode 100644 index 0000000..460b1f1 --- /dev/null +++ b/12.0.4/Units/D2006/RVBack.hpp @@ -0,0 +1,70 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvback.pas' rev: 10.00 + +#ifndef RvbackHPP +#define RvbackHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvback +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVBackground; +class PASCALIMPLEMENTATION TRVBackground : public System::TObject +{ + typedef System::TObject inherited; + +private: + Graphics::TGraphic* ImageCopy; + Graphics::TBitmap* __fastcall GetBitmap(void); + Rvstyle::TRVItemBackgroundStyle __fastcall GetItemBackStyle(void); + void __fastcall SetItemBackStyle(const Rvstyle::TRVItemBackgroundStyle Value); + +public: + Rvscroll::TBackgroundStyle Style; + Graphics::TGraphic* Image; + __fastcall TRVBackground(bool CreateBitmap); + __fastcall virtual ~TRVBackground(void); + bool __fastcall ScrollRequiresFullRedraw(void); + void __fastcall UpdatePaletted(Rvscroll::TRVPaletteAction PaletteAction, HPALETTE Palette, Windows::PLogPalette LogPalette); + void __fastcall Draw(Graphics::TCanvas* Canvas, const Types::TRect &Rect, int HOffs, int VOffs, int Left, int Top, int Width, int Height, Graphics::TColor Color, bool Clipping, bool PrintSimulation); + void __fastcall Print(Graphics::TCanvas* Canvas, const Types::TRect &ARect, const Types::TRect &AFullRect, const Rvstyle::TRVScreenAndDevice &sad, Graphics::TColor Color, bool Preview, Windows::PLogPalette LogPalette, Classes::TPersistent* PrintingRVData, int ItemBackgroundLayer); + bool __fastcall Empty(void); + bool __fastcall Visible(void); + bool __fastcall IsSemitransparent(void); + void __fastcall FreeImage(void); + void __fastcall AssignImage(Graphics::TGraphic* AImage, Classes::TPersistent* ARVData, bool Copy); + __property Graphics::TBitmap* Bitmap = {read=GetBitmap}; + __property Rvstyle::TRVItemBackgroundStyle ItemBackStyle = {read=GetItemBackStyle, write=SetItemBackStyle, nodefault}; +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvback */ +using namespace Rvback; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvback diff --git a/12.0.4/Units/D2006/RVClasses.dcu b/12.0.4/Units/D2006/RVClasses.dcu new file mode 100644 index 0000000..de3f3d8 Binary files /dev/null and b/12.0.4/Units/D2006/RVClasses.dcu differ diff --git a/12.0.4/Units/D2006/RVClasses.hpp b/12.0.4/Units/D2006/RVClasses.hpp new file mode 100644 index 0000000..b232367 --- /dev/null +++ b/12.0.4/Units/D2006/RVClasses.hpp @@ -0,0 +1,225 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvclasses.pas' rev: 10.00 + +#ifndef RvclassesHPP +#define RvclassesHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvclasses +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVList; +class PASCALIMPLEMENTATION TRVList : public Classes::TList +{ + typedef Classes::TList inherited; + +public: + virtual void __fastcall Clear(void); + HIDESBASE void __fastcall Delete(int Index); + void __fastcall DeleteAsPointer(int Index); + void __fastcall SortPointers(void); + int __fastcall Find(System::TObject* FindThis, Classes::TListSortCompare CompareProc); + __fastcall virtual ~TRVList(void); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVList(void) : Classes::TList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVListIndexerItem; +class PASCALIMPLEMENTATION TRVListIndexerItem : public System::TObject +{ + typedef System::TObject inherited; + +public: + System::TObject* Item; + int Index; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVListIndexerItem(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVListIndexerItem(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVListIndexer; +class PASCALIMPLEMENTATION TRVListIndexer : public TRVList +{ + typedef TRVList inherited; + +public: + HIDESBASE void __fastcall Sort(void); + int __fastcall GetItemIndex(System::TObject* Item); +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVListIndexer(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVListIndexer(void) : TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVIndexedList; +class PASCALIMPLEMENTATION TRVIndexedList : public TRVList +{ + typedef TRVList inherited; + +private: + TRVListIndexer* FIndexer; + +public: + __fastcall TRVIndexedList(void); + __fastcall virtual ~TRVIndexedList(void); + void __fastcall CreateIndexer(void); + HIDESBASE int __fastcall Find(System::TObject* Item); +}; + + +class DELPHICLASS TRVIntegerList; +class PASCALIMPLEMENTATION TRVIntegerList : public Classes::TList +{ + typedef Classes::TList inherited; + +public: + int operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE int __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const int Value); + +public: + __fastcall TRVIntegerList(int Count, int Value); + __fastcall TRVIntegerList(TRVIntegerList* Source); + HIDESBASE void __fastcall Sort(void); + void __fastcall InitWith(int Value, int Count); + void __fastcall Fill(int Value); + HIDESBASE void __fastcall Add(int Value); + bool __fastcall AreAllEqualTo(int Value); + int __fastcall AddUnique(int Value); + HIDESBASE void __fastcall Insert(int Index, int Value); + HIDESBASE void __fastcall Assign(TRVIntegerList* Source); + __property int Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TList.Destroy */ inline __fastcall virtual ~TRVIntegerList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVIntegerList(void) : Classes::TList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVColorList; +class PASCALIMPLEMENTATION TRVColorList : public TRVIntegerList +{ + typedef TRVIntegerList inherited; + +public: + HIDESBASE void __fastcall AddUnique(int Value); +public: + #pragma option push -w-inl + /* TRVIntegerList.CreateEx */ inline __fastcall TRVColorList(int Count, int Value) : TRVIntegerList(Count, Value) { } + #pragma option pop + #pragma option push -w-inl + /* TRVIntegerList.CreateCopy */ inline __fastcall TRVColorList(TRVIntegerList* Source) : TRVIntegerList(Source) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TList.Destroy */ inline __fastcall virtual ~TRVColorList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVColorList(void) : TRVIntegerList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVMemoryStream; +class PASCALIMPLEMENTATION TRVMemoryStream : public Classes::TCustomMemoryStream +{ + typedef Classes::TCustomMemoryStream inherited; + +private: + int FCapacity; + void *FMemory; + int FSize; + int FPosition; + void __fastcall SetCapacity(int NewCapacity); + +protected: + virtual void * __fastcall Realloc(int &NewCapacity); + HIDESBASE void __fastcall SetPointer(void * Ptr, int Size); + __property int Capacity = {read=FCapacity, write=SetCapacity, nodefault}; + +public: + __fastcall virtual ~TRVMemoryStream(void); + void __fastcall Clear(void); + void __fastcall LoadFromStream(Classes::TStream* Stream); + void __fastcall LoadFromFile(const AnsiString FileName); + virtual void __fastcall SetSize(int NewSize)/* overload */; + virtual int __fastcall Write(const void *Buffer, int Count); + virtual int __fastcall Read(void *Buffer, int Count); + virtual int __fastcall Seek(int Offset, Word Origin)/* overload */; + HIDESBASE void __fastcall SaveToStream(Classes::TStream* Stream); + HIDESBASE void __fastcall SaveToFile(const AnsiString FileName); + __property void * Memory = {read=FMemory}; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVMemoryStream(void) : Classes::TCustomMemoryStream() { } + #pragma option pop + + +/* Hoisted overloads: */ + +protected: + inline void __fastcall SetSize(const __int64 NewSize){ TStream::SetSize(NewSize); } + +public: + inline __int64 __fastcall Seek(const __int64 Offset, Classes::TSeekOrigin Origin){ return TStream::Seek(Offset, Origin); } + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const int RVMemoryDelta = 0x40000; + +} /* namespace Rvclasses */ +using namespace Rvclasses; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvclasses diff --git a/12.0.4/Units/D2006/RVCodePages.dcu b/12.0.4/Units/D2006/RVCodePages.dcu new file mode 100644 index 0000000..b9463de Binary files /dev/null and b/12.0.4/Units/D2006/RVCodePages.dcu differ diff --git a/12.0.4/Units/D2006/RVCodePages.hpp b/12.0.4/Units/D2006/RVCodePages.hpp new file mode 100644 index 0000000..0a9033a --- /dev/null +++ b/12.0.4/Units/D2006/RVCodePages.hpp @@ -0,0 +1,38 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvcodepages.pas' rev: 10.00 + +#ifndef RvcodepagesHPP +#define RvcodepagesHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvcodepages +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE void __fastcall GetCodePageValues(Classes::TGetStrProc Proc); +extern PACKAGE AnsiString __fastcall CodePageToIdent(Rvstyle::TRVCodePage CodePage); +extern PACKAGE bool __fastcall IdentToCodePage(const AnsiString Ident, Rvstyle::TRVCodePage &CodePage); + +} /* namespace Rvcodepages */ +using namespace Rvcodepages; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvcodepages diff --git a/12.0.4/Units/D2006/RVCtrlData.dcu b/12.0.4/Units/D2006/RVCtrlData.dcu new file mode 100644 index 0000000..c0ac00b Binary files /dev/null and b/12.0.4/Units/D2006/RVCtrlData.dcu differ diff --git a/12.0.4/Units/D2006/RVCtrlData.hpp b/12.0.4/Units/D2006/RVCtrlData.hpp new file mode 100644 index 0000000..e41839c --- /dev/null +++ b/12.0.4/Units/D2006/RVCtrlData.hpp @@ -0,0 +1,69 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvctrldata.pas' rev: 10.00 + +#ifndef RvctrldataHPP +#define RvctrldataHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvctrldata +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVControlData; +class PASCALIMPLEMENTATION TRVControlData : public Crvfdata::TCustomRVFormattedData +{ + typedef Crvfdata::TCustomRVFormattedData inherited; + +public: + int TopLevelFocusedItemNo; + Crvfdata::TCustomRVFormattedData* TopLevelFocusedRVData; + Rvscroll::TRVTabNavigationType TabNavigation; + virtual void __fastcall ClearTemporal(void); + void __fastcall DoTabNavigation(bool Shift, Controls::TWinControl* PrevCtrl); + virtual void __fastcall PaintBuffered(void); + void __fastcall DrawFocusedRect(Graphics::TCanvas* Canvas); + DYNAMIC void __fastcall Deselect(Rvitem::TCustomRVItemInfo* NewPartiallySelected, bool MakeEvent); + void __fastcall ExecuteFocused(void); + DYNAMIC void __fastcall AdjustFocus(int NewFocusedItemNo, Classes::TPersistent* TopLevelRVData, int TopLevelItemNo); + DYNAMIC void __fastcall MouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + __fastcall TRVControlData(void); +public: + #pragma option push -w-inl + /* TCustomRVFormattedData.Destroy */ inline __fastcall virtual ~TRVControlData(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvctrldata */ +using namespace Rvctrldata; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvctrldata diff --git a/12.0.4/Units/D2006/RVDBDsgn.dcu b/12.0.4/Units/D2006/RVDBDsgn.dcu new file mode 100644 index 0000000..ba196f5 Binary files /dev/null and b/12.0.4/Units/D2006/RVDBDsgn.dcu differ diff --git a/12.0.4/Units/D2006/RVDBDsgn.dfm b/12.0.4/Units/D2006/RVDBDsgn.dfm new file mode 100644 index 0000000..4d029d5 Binary files /dev/null and b/12.0.4/Units/D2006/RVDBDsgn.dfm differ diff --git a/12.0.4/Units/D2006/RVDBDsgn.hpp b/12.0.4/Units/D2006/RVDBDsgn.hpp new file mode 100644 index 0000000..402c36f --- /dev/null +++ b/12.0.4/Units/D2006/RVDBDsgn.hpp @@ -0,0 +1,105 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvdbdsgn.pas' rev: 10.00 + +#ifndef RvdbdsgnHPP +#define RvdbdsgnHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvdbdsgn +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TfrmDBRVDesign; +class PASCALIMPLEMENTATION TfrmDBRVDesign : public Rvdsgn::TfrmRVDesign +{ + typedef Rvdsgn::TfrmRVDesign inherited; + +__published: + Comctrls::TTabSheet* TabSheet3; + Stdctrls::TGroupBox* GroupBox4; + Stdctrls::TCheckBox* cbDBAutoDeleteUnusedStyles; + Stdctrls::TCheckBox* cbDBReadOnly; + Stdctrls::TCheckBox* cbDBEscape; + Stdctrls::TLabel* Label7; + Stdctrls::TComboBox* cmbDBFieldFormat; + HIDESBASE void __fastcall FormActivate(System::TObject* Sender); + HIDESBASE void __fastcall btnOkClick(System::TObject* Sender); +public: + #pragma option push -w-inl + /* TCustomForm.Create */ inline __fastcall virtual TfrmDBRVDesign(Classes::TComponent* AOwner) : Rvdsgn::TfrmRVDesign(AOwner) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomForm.CreateNew */ inline __fastcall virtual TfrmDBRVDesign(Classes::TComponent* AOwner, int Dummy) : Rvdsgn::TfrmRVDesign(AOwner, Dummy) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomForm.Destroy */ inline __fastcall virtual ~TfrmDBRVDesign(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TfrmDBRVDesign(HWND ParentWindow) : Rvdsgn::TfrmRVDesign(ParentWindow) { } + #pragma option pop + +}; + + +class DELPHICLASS TDBRVEEditor; +class PASCALIMPLEMENTATION TDBRVEEditor : public Rvsedit::TRVEEditor +{ + typedef Rvsedit::TRVEEditor inherited; + +public: + virtual void __fastcall ExecuteVerb(int Index); +public: + #pragma option push -w-inl + /* TComponentEditor.Create */ inline __fastcall virtual TDBRVEEditor(Classes::TComponent* AComponent, Designintf::_di_IDesigner ADesigner) : Rvsedit::TRVEEditor(AComponent, ADesigner) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TDBRVEEditor(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE void __fastcall Register(void); + +} /* namespace Rvdbdsgn */ +using namespace Rvdbdsgn; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvdbdsgn diff --git a/12.0.4/Units/D2006/RVDBPkg2006.bdsproj b/12.0.4/Units/D2006/RVDBPkg2006.bdsproj new file mode 100644 index 0000000..8412530 --- /dev/null +++ b/12.0.4/Units/D2006/RVDBPkg2006.bdsproj @@ -0,0 +1,177 @@ + + + + + + + + + + + + RVDBPkg2006.dpk + + + 7.0 + + + 8 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 1 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 44 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + TRichView DB for BDS 2006 (Win32 Delphi and C++Builder) + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + diff --git a/12.0.4/Units/D2006/RVDBPkg2006.dcu b/12.0.4/Units/D2006/RVDBPkg2006.dcu new file mode 100644 index 0000000..206c0d1 Binary files /dev/null and b/12.0.4/Units/D2006/RVDBPkg2006.dcu differ diff --git a/12.0.4/Units/D2006/RVDBPkg2006.dpk b/12.0.4/Units/D2006/RVDBPkg2006.dpk new file mode 100644 index 0000000..d7e3004 --- /dev/null +++ b/12.0.4/Units/D2006/RVDBPkg2006.dpk @@ -0,0 +1,45 @@ +package RVDBPkg2006; + +{$R *.res} +{$R 'DBRVSmall.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TRichView DB for BDS 2006 (Win32 Delphi and C++Builder)'} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + dbrtl, + vcldb, + RVPkg2006, + designide, + vcljpg, + xmlrtl, + vclactnband, + vclx; + +contains + DBRV in 'DBRV.pas', + RVDBDsgn in 'RVDBDsgn.pas'; + +end. diff --git a/12.0.4/Units/D2006/RVDBPkg2006.hpp b/12.0.4/Units/D2006/RVDBPkg2006.hpp new file mode 100644 index 0000000..5c6d266 --- /dev/null +++ b/12.0.4/Units/D2006/RVDBPkg2006.hpp @@ -0,0 +1,117 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvdbpkg2006.pas' rev: 10.00 + +#ifndef Rvdbpkg2006HPP +#define Rvdbpkg2006HPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvdbpkg2006 +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvdbpkg2006 */ +using namespace Rvdbpkg2006; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvdbpkg2006 diff --git a/12.0.4/Units/D2006/RVDBPkg2006.lib b/12.0.4/Units/D2006/RVDBPkg2006.lib new file mode 100644 index 0000000..78ef1f6 Binary files /dev/null and b/12.0.4/Units/D2006/RVDBPkg2006.lib differ diff --git a/12.0.4/Units/D2006/RVDBPkg2006.res b/12.0.4/Units/D2006/RVDBPkg2006.res new file mode 100644 index 0000000..653aa54 Binary files /dev/null and b/12.0.4/Units/D2006/RVDBPkg2006.res differ diff --git a/12.0.4/Units/D2006/RVDataList.dcu b/12.0.4/Units/D2006/RVDataList.dcu new file mode 100644 index 0000000..b3f44d9 Binary files /dev/null and b/12.0.4/Units/D2006/RVDataList.dcu differ diff --git a/12.0.4/Units/D2006/RVDataList.hpp b/12.0.4/Units/D2006/RVDataList.hpp new file mode 100644 index 0000000..aa9aa41 --- /dev/null +++ b/12.0.4/Units/D2006/RVDataList.hpp @@ -0,0 +1,116 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvdatalist.pas' rev: 10.00 + +#ifndef RvdatalistHPP +#define RvdatalistHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvdatalist +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVItemFormattedData; +class DELPHICLASS TRVDataList; +class PASCALIMPLEMENTATION TRVDataList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +protected: + Crvdata::TRVFlags Flags; + virtual Crvdata::TCustomRVData* __fastcall GetParentRVData(void); + +public: + __fastcall TRVDataList(Crvdata::TCustomRVData* AParentRVData); +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVDataList(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVItemFormattedData : public Crvfdata::TCustomRVFormattedData +{ + typedef Crvfdata::TCustomRVFormattedData inherited; + +protected: + TRVDataList* FList; + virtual Crvdata::TRVFlags __fastcall GetFlags(void); + virtual void __fastcall SetFlags(const Crvdata::TRVFlags Value); + +public: + __fastcall TRVItemFormattedData(TRVDataList* AList); + DYNAMIC void __fastcall ShowRectangle(int Left, int Top, int Width, int Height); + virtual void __fastcall ScrollTo(int Y, bool Redraw); + virtual void __fastcall HScrollTo(int X); + virtual int __fastcall GetVSmallStep(void); + virtual Crvdata::TCustomRVData* __fastcall GetParentData(void); + virtual Crvdata::TCustomRVData* __fastcall GetRootData(void); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteParentData(void); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteRootData(void); + DYNAMIC AnsiString __fastcall GetURL(int id); + virtual int __fastcall GetAreaWidth(void); + virtual int __fastcall GetAreaHeight(void); + virtual int __fastcall GetMinTextWidth(void); + virtual int __fastcall GetMaxTextWidth(void); + virtual int __fastcall GetLeftMargin(void); + virtual int __fastcall GetRightMargin(void); + virtual int __fastcall GetTopMargin(void); + virtual int __fastcall GetBottomMargin(void); + virtual void __fastcall AdjustVScrollUnits(void); + virtual void __fastcall SetDocumentAreaSize(int Width, int Height, bool UpdateH); + virtual Rvback::TRVBackground* __fastcall GetBackground(void); + DYNAMIC bool __fastcall IsAssignedRVMouseDown(void); + DYNAMIC bool __fastcall IsAssignedRVMouseUp(void); + DYNAMIC bool __fastcall IsAssignedJump(void); + DYNAMIC bool __fastcall IsAssignedCheckpointVisible(void); + DYNAMIC int __fastcall GetFirstItemVisible(void); + DYNAMIC int __fastcall GetLastItemVisible(void); + DYNAMIC void __fastcall DoRVMouseMove(int id); + DYNAMIC void __fastcall DoRVMouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int ItemNo, int X, int Y); + DYNAMIC void __fastcall DoRVMouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int ItemNo, int X, int Y); + DYNAMIC void __fastcall DoCheckpointVisible(Rvstyle::TCheckpointData CheckpointData); + DYNAMIC void __fastcall ControlAction2(Crvdata::TCustomRVData* RVData, Rvstyle::TRVControlAction ControlAction, int ItemNo, Controls::TControl* &Control); + DYNAMIC void __fastcall DoJump(int id); + DYNAMIC Controls::TCursor __fastcall GetNormalCursor(void); +public: + #pragma option push -w-inl + /* TCustomRVFormattedData.Destroy */ inline __fastcall virtual ~TRVItemFormattedData(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvdatalist */ +using namespace Rvdatalist; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvdatalist diff --git a/12.0.4/Units/D2006/RVDocParams.dcu b/12.0.4/Units/D2006/RVDocParams.dcu new file mode 100644 index 0000000..483bb63 Binary files /dev/null and b/12.0.4/Units/D2006/RVDocParams.dcu differ diff --git a/12.0.4/Units/D2006/RVDocParams.hpp b/12.0.4/Units/D2006/RVDocParams.hpp new file mode 100644 index 0000000..39800d3 --- /dev/null +++ b/12.0.4/Units/D2006/RVDocParams.hpp @@ -0,0 +1,108 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvdocparams.pas' rev: 10.00 + +#ifndef RvdocparamsHPP +#define RvdocparamsHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvdocparams +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVDocParameters; +#pragma pack(push,2) +class PASCALIMPLEMENTATION TRVDocParameters : public Classes::TPersistent +{ + typedef Classes::TPersistent inherited; + +private: + Extended FPageWidth; + Extended FPageHeight; + Extended FLeftMargin; + Extended FRightMargin; + Extended FTopMargin; + Extended FBottomMargin; + Extended FHeaderY; + Extended FFooterY; + Rvstyle::TRVUnits FUnits; + Printers::TPrinterOrientation FOrientation; + int FZoomPercent; + Rvscroll::TRVZoomMode FZoomMode; + bool FMirrorMargins; + bool __fastcall StorePageHeight(void); + bool __fastcall StorePageWidth(void); + bool __fastcall StoreBottomMargin(void); + bool __fastcall StoreLeftMargin(void); + bool __fastcall StoreRightMargin(void); + bool __fastcall StoreTopMargin(void); + bool __fastcall StoreHeaderY(void); + bool __fastcall StoreFooterY(void); + +public: + __fastcall TRVDocParameters(void); + void __fastcall Reset(void); + void __fastcall ResetLayout(void); + void __fastcall ConvertToUnits(Rvstyle::TRVUnits AUnits); + virtual void __fastcall Assign(Classes::TPersistent* Source); + bool __fastcall AreAllValuesDefault(void); + int __fastcall GetRVFLineCount(void); + void __fastcall SaveToRVF(Classes::TStream* Stream); + void __fastcall ReadProperyFromString(const AnsiString s); + void __fastcall SaveToRTF(Classes::TStream* Stream); + int __fastcall ToTwips(Extended Value); + Extended __fastcall FromTwips(int Value); + Extended __fastcall UnitsPerInch(Rvstyle::TRVUnits Units); + +__published: + __property Extended PageWidth = {read=FPageWidth, write=FPageWidth, stored=StorePageWidth}; + __property Extended PageHeight = {read=FPageHeight, write=FPageHeight, stored=StorePageHeight}; + __property Rvstyle::TRVUnits Units = {read=FUnits, write=FUnits, default=0}; + __property Printers::TPrinterOrientation Orientation = {read=FOrientation, write=FOrientation, default=0}; + __property Extended LeftMargin = {read=FLeftMargin, write=FLeftMargin, stored=StoreLeftMargin}; + __property Extended RightMargin = {read=FRightMargin, write=FRightMargin, stored=StoreRightMargin}; + __property Extended TopMargin = {read=FTopMargin, write=FTopMargin, stored=StoreTopMargin}; + __property Extended BottomMargin = {read=FBottomMargin, write=FBottomMargin, stored=StoreBottomMargin}; + __property Extended HeaderY = {read=FHeaderY, write=FHeaderY, stored=StoreHeaderY}; + __property Extended FooterY = {read=FFooterY, write=FFooterY, stored=StoreFooterY}; + __property int ZoomPercent = {read=FZoomPercent, write=FZoomPercent, default=100}; + __property Rvscroll::TRVZoomMode ZoomMode = {read=FZoomMode, write=FZoomMode, default=2}; + __property bool MirrorMargins = {read=FMirrorMargins, write=FMirrorMargins, default=0}; +public: + #pragma option push -w-inl + /* TPersistent.Destroy */ inline __fastcall virtual ~TRVDocParameters(void) { } + #pragma option pop + +}; + +#pragma pack(pop) + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvdocparams */ +using namespace Rvdocparams; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvdocparams diff --git a/12.0.4/Units/D2006/RVDragDrop.dcu b/12.0.4/Units/D2006/RVDragDrop.dcu new file mode 100644 index 0000000..002ae93 Binary files /dev/null and b/12.0.4/Units/D2006/RVDragDrop.dcu differ diff --git a/12.0.4/Units/D2006/RVDragDrop.hpp b/12.0.4/Units/D2006/RVDragDrop.hpp new file mode 100644 index 0000000..5f4ca22 --- /dev/null +++ b/12.0.4/Units/D2006/RVDragDrop.hpp @@ -0,0 +1,168 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvdragdrop.pas' rev: 10.00 + +#ifndef RvdragdropHPP +#define RvdragdropHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- +DECLARE_DINTERFACE_TYPE(IDropTarget) +DECLARE_DINTERFACE_TYPE(IDropSource) +DECLARE_DINTERFACE_TYPE(IEnumFORMATETC) + +namespace Rvdragdrop +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVDropTarget; +class PASCALIMPLEMENTATION TRVDropTarget : public Rvscroll::TRVScrollerInternalIfcObject +{ + typedef Rvscroll::TRVScrollerInternalIfcObject inherited; + +private: + bool FAccepted; + bool __fastcall HasAcceptableFormats(const _di_IDataObject DataObj); + bool __fastcall AllowMoving(int KeyState, int Effect); + int __fastcall GetEffect(int KeyState, int Effect); + void __fastcall FillFormatEtc(tagFORMATETC &FmtEtc, Word Format); + bool __fastcall GetFiles(const unsigned Handle, Classes::TStrings* Files); + +protected: + DYNAMIC Types::TPoint __fastcall ScreenToRichView(const Types::TPoint &pt); + DYNAMIC void __fastcall DoDragDropCaretChanged(void); + +public: + virtual HRESULT __stdcall DragEnter(const _di_IDataObject DataObj, int KeyState, const Types::TPoint pt, int &Effect); + HRESULT __stdcall DragOver(int KeyState, const Types::TPoint pt, int &Effect); + HRESULT __stdcall DragLeave(void); + HRESULT __stdcall Drop(const _di_IDataObject DataObj, int KeyState, const Types::TPoint pt, int &Effect); + bool __fastcall GetMedium(const _di_IDataObject DataObj, Word Format, tagSTGMEDIUM &StgMedium); + Rvclasses::TRVMemoryStream* __fastcall GetAsStream(const _di_IDataObject DataObj, Word Format); + bool __fastcall GetAsTextA(const _di_IDataObject DataObj, Word Format, AnsiString &s); + bool __fastcall GetAsTextW(const _di_IDataObject DataObj, Word Format, AnsiString &s); + Graphics::TBitmap* __fastcall GetAsBitmap(const _di_IDataObject DataObj, bool TryDIBFirst); + Graphics::TMetafile* __fastcall GetAsMetafile(const _di_IDataObject DataObj); + Classes::TStringList* __fastcall GetAsFiles(const _di_IDataObject DataObj); + bool __fastcall HasFormat(const _di_IDataObject DataObj, Word Format); + __fastcall virtual ~TRVDropTarget(void); + DYNAMIC bool __fastcall RegisterDragDropWindow(void); + DYNAMIC void __fastcall UnRegisterDragDropWindow(void); +public: + #pragma option push -w-inl + /* TRVScrollerInternalIfcObject.Create */ inline __fastcall virtual TRVDropTarget(Rvscroll::TRVScroller* AOwner) : Rvscroll::TRVScrollerInternalIfcObject(AOwner) { } + #pragma option pop + +private: + void *__IDropTarget; /* IDropTarget */ + +public: + operator IDropTarget*(void) { return (IDropTarget*)&__IDropTarget; } + +}; + + +class DELPHICLASS TRVEnumFormatEtc; +class PASCALIMPLEMENTATION TRVEnumFormatEtc : public System::TInterfacedObject +{ + typedef System::TInterfacedObject inherited; + +private: + Graphics::TGraphic* FGraphic; + int FIndex; + Word __fastcall GetCurFormat(void); + +public: + __fastcall TRVEnumFormatEtc(Graphics::TGraphic* Graphic, int Index); + HRESULT __stdcall Next(int Celt, /* out */ void *Elt, PLongint PCeltFetched); + HRESULT __stdcall Skip(int Celt); + HRESULT __stdcall Reset(void); + HRESULT __stdcall Clone(/* out */ _di_IEnumFORMATETC &Enum); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVEnumFormatEtc(void) { } + #pragma option pop + +private: + void *__IEnumFORMATETC; /* IEnumFORMATETC */ + +public: + operator IEnumFORMATETC*(void) { return (IEnumFORMATETC*)&__IEnumFORMATETC; } + +}; + + +class DELPHICLASS TRVDropSource; +class PASCALIMPLEMENTATION TRVDropSource : public Rvscroll::TRVScrollerInternalIfcObject +{ + typedef Rvscroll::TRVScrollerInternalIfcObject inherited; + +protected: + tagSTGMEDIUM FMedium; + bool FUseMedium; + DYNAMIC bool __fastcall IsAvailableFormat(Word Format); + DYNAMIC Classes::TMemoryStream* __fastcall GetAsStream(Word Format); + DYNAMIC HRESULT __fastcall GetAsHandle(Word Format, unsigned &Handle); + DYNAMIC HRESULT __fastcall SaveToHandle(Word Format, unsigned Handle); + +public: + HRESULT __stdcall QueryContinueDrag(BOOL FEscapePressed, int KeyState); + HRESULT __stdcall GiveFeedback(int Effect); + virtual HRESULT __stdcall GetData(const tagFORMATETC &FormatEtcIn, /* out */ tagSTGMEDIUM &Medium); + virtual HRESULT __stdcall GetDataHere(const tagFORMATETC &FormatEtcIn, /* out */ tagSTGMEDIUM &Medium); + virtual HRESULT __stdcall QueryGetData(const tagFORMATETC &FormatEtc); + virtual HRESULT __stdcall GetCanonicalFormatEtc(const tagFORMATETC &FormatEtc, /* out */ tagFORMATETC &FormatEtcOut); + virtual HRESULT __stdcall SetData(const tagFORMATETC &FormatEtc, tagSTGMEDIUM &Medium, BOOL FRelease); + virtual HRESULT __stdcall EnumFormatEtc(int Direction, /* out */ _di_IEnumFORMATETC &EnumFormatEtc); + virtual HRESULT __stdcall DAdvise(const tagFORMATETC &FormatEtc, int advf, const _di_IAdviseSink advsink, /* out */ int &Connection); + virtual HRESULT __stdcall DUnadvise(int Connection); + virtual HRESULT __stdcall EnumDAdvise(/* out */ _di_IEnumSTATDATA &EnumAdvise); + __fastcall virtual ~TRVDropSource(void); + bool __fastcall StoreData(Word Format); +public: + #pragma option push -w-inl + /* TRVScrollerInternalIfcObject.Create */ inline __fastcall virtual TRVDropSource(Rvscroll::TRVScroller* AOwner) : Rvscroll::TRVScrollerInternalIfcObject(AOwner) { } + #pragma option pop + +private: + void *__IDropSource; /* IDropSource */ + void *__IDataObject; /* IDataObject */ + +public: + operator IDataObject*(void) { return (IDataObject*)&__IDataObject; } + operator IDropSource*(void) { return (IDropSource*)&__IDropSource; } + +}; + + +typedef TMetaClass* TRVDropSourceClass; + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvdragdrop */ +using namespace Rvdragdrop; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvdragdrop diff --git a/12.0.4/Units/D2006/RVDsgn.dcu b/12.0.4/Units/D2006/RVDsgn.dcu new file mode 100644 index 0000000..6efc967 Binary files /dev/null and b/12.0.4/Units/D2006/RVDsgn.dcu differ diff --git a/12.0.4/Units/D2006/RVDsgn.dfm b/12.0.4/Units/D2006/RVDsgn.dfm new file mode 100644 index 0000000..19a11ee Binary files /dev/null and b/12.0.4/Units/D2006/RVDsgn.dfm differ diff --git a/12.0.4/Units/D2006/RVDsgn.hpp b/12.0.4/Units/D2006/RVDsgn.hpp new file mode 100644 index 0000000..331dac2 --- /dev/null +++ b/12.0.4/Units/D2006/RVDsgn.hpp @@ -0,0 +1,120 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvdsgn.pas' rev: 10.00 + +#ifndef RvdsgnHPP +#define RvdsgnHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvdsgn +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TfrmRVDesign; +class PASCALIMPLEMENTATION TfrmRVDesign : public Forms::TForm +{ + typedef Forms::TForm inherited; + +__published: + Stdctrls::TButton* btnOk; + Stdctrls::TButton* btnCancel; + Comctrls::TPageControl* pc; + Comctrls::TTabSheet* tsStyles; + Stdctrls::TLabel* Label1; + Extctrls::TRadioGroup* rg; + Comctrls::TListView* lv; + Comctrls::TTabSheet* TabSheet1; + Stdctrls::TCheckBox* cbStylesDefault; + Stdctrls::TCheckBox* cbTagsDefault; + Extctrls::TRadioGroup* rgTag; + Stdctrls::TLabel* Label2; + Extctrls::TImage* Image1; + Comctrls::TTabSheet* TabSheet2; + Stdctrls::TGroupBox* GroupBox1; + Stdctrls::TCheckBox* cbRVFSaveBackground; + Stdctrls::TCheckBox* cbRVFSaveLayout; + Stdctrls::TGroupBox* GroupBox2; + Stdctrls::TCheckBox* cbRVFDefault; + Extctrls::TImage* Image2; + Stdctrls::TLabel* Label3; + Stdctrls::TCheckBox* cbRVFSaveDocProperties; + Stdctrls::TGroupBox* GroupBox3; + Stdctrls::TCheckBox* cbRVFIgnoreUnknownPictures; + Stdctrls::TCheckBox* cbRVFIgnoreUnknownControls; + Stdctrls::TCheckBox* cbRVFInvStyles; + Stdctrls::TCheckBox* cbRVFInvImageIndices; + Stdctrls::TCheckBox* cbRVFIgnoreUnknownCtrlProps; + Stdctrls::TLabel* Label4; + Stdctrls::TCheckBox* cbRVFLoadBackground; + Stdctrls::TLabel* Label5; + Stdctrls::TCheckBox* cbRVFLoadLayout; + Stdctrls::TLabel* Label6; + Stdctrls::TCheckBox* cbRVFLoadDocProperties; + Stdctrls::TCheckBox* cbRVFBinary; + Stdctrls::TCheckBox* cbRVFSavePictures; + Stdctrls::TCheckBox* cbRVFSaveControls; + void __fastcall FormActivate(System::TObject* Sender); + void __fastcall rgClick(System::TObject* Sender); + void __fastcall btnOkClick(System::TObject* Sender); + +protected: + Richview::TCustomRichView* rv; + bool Initialized; + void __fastcall SaveReg(void); + +public: + void __fastcall SetRichView(Richview::TCustomRichView* rv); +public: + #pragma option push -w-inl + /* TCustomForm.Create */ inline __fastcall virtual TfrmRVDesign(Classes::TComponent* AOwner) : Forms::TForm(AOwner) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomForm.CreateNew */ inline __fastcall virtual TfrmRVDesign(Classes::TComponent* AOwner, int Dummy) : Forms::TForm(AOwner, Dummy) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomForm.Destroy */ inline __fastcall virtual ~TfrmRVDesign(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TfrmRVDesign(HWND ParentWindow) : Forms::TForm(ParentWindow) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvdsgn */ +using namespace Rvdsgn; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvdsgn diff --git a/12.0.4/Units/D2006/RVERVData.dcu b/12.0.4/Units/D2006/RVERVData.dcu new file mode 100644 index 0000000..a4a32d1 Binary files /dev/null and b/12.0.4/Units/D2006/RVERVData.dcu differ diff --git a/12.0.4/Units/D2006/RVERVData.hpp b/12.0.4/Units/D2006/RVERVData.hpp new file mode 100644 index 0000000..1782449 --- /dev/null +++ b/12.0.4/Units/D2006/RVERVData.hpp @@ -0,0 +1,324 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvervdata.pas' rev: 10.00 + +#ifndef RvervdataHPP +#define RvervdataHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvervdata +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVCharPos; +class PASCALIMPLEMENTATION TRVCharPos : public Classes::TCollectionItem +{ + typedef Classes::TCollectionItem inherited; + +public: + int X; + int DrawItemNo; + int Offset; + int MoveRightTo; + __fastcall virtual TRVCharPos(Classes::TCollection* Owner); + virtual void __fastcall Assign(Classes::TPersistent* Source); +public: + #pragma option push -w-inl + /* TCollectionItem.Destroy */ inline __fastcall virtual ~TRVCharPos(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVCharPosCollection; +class PASCALIMPLEMENTATION TRVCharPosCollection : public Classes::TCollection +{ + typedef Classes::TCollection inherited; + +private: + HIDESBASE TRVCharPos* __fastcall GetItem(int Index); + HIDESBASE void __fastcall SetItem(int Index, const TRVCharPos* Value); + +public: + __property TRVCharPos* Items[int Index] = {read=GetItem, write=SetItem}; +public: + #pragma option push -w-inl + /* TCollection.Create */ inline __fastcall TRVCharPosCollection(TMetaClass* ItemClass) : Classes::TCollection(ItemClass) { } + #pragma option pop + #pragma option push -w-inl + /* TCollection.Destroy */ inline __fastcall virtual ~TRVCharPosCollection(void) { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVParaListOperation { rvplopChange, rvplopRemove, rvplopLevel }; +#pragma option pop + +#pragma option push -b- +enum TRVUndoDest { udNone, udUndo, udRedo }; +#pragma option pop + +class DELPHICLASS TRVEditRVData; +class PASCALIMPLEMENTATION TRVEditRVData : public Rvrvdata::TRichViewRVData +{ + typedef Rvrvdata::TRichViewRVData inherited; + +private: + int FPrevTextStyleNo; + int FCurTag; + Rvresize::TRVItemResizer* FResizer; + Controls::TControl* ResizingControl; + bool FCustomCaretActive; + #pragma pack(push,1) + Types::TRect FCustomCaretRect; + #pragma pack(pop) + #pragma pack(push,1) + Types::TPoint FCustomCaretOldPos; + #pragma pack(pop) + Graphics::TBitmap* FCustomCaretBack; + bool __fastcall InsSomething(Rvitem::TCustomRVItemInfo* &info, AnsiString &s, AnsiString &SplitText, bool AutoTag, bool CallTEEvent, int &InsertPoint, int &ItemsAdded, bool &FullReformat, int &NewListNo, bool NoNewLineReset); + Rvitem::TCustomRVItemInfo* __fastcall InsEmptyString(int Index, int Tag, int ParaStyle, int FontStyle, bool SameAsPrev, bool BR); + Rvitem::TCustomRVItemInfo* __fastcall InsString(AnsiString s, int Index, int Tag, int ParaStyle, int FontStyle, bool SameAsPrev, bool BR, bool &FullReformat); + Rvitem::TCustomRVItemInfo* __fastcall InsString2(AnsiString s, int Index, int Tag, Rvitem::TCustomRVItemInfo* Source, bool SameAsPrev, bool BR, bool &FullReformat); + Rvitem::TCustomRVItemInfo* __fastcall CreateTextItem(int Tag, int ParaStyle, int FontStyle, bool SameAsPrev, bool BR); + Rvitem::TCustomRVItemInfo* __fastcall CreateTextItem2(int Tag, Rvitem::TCustomRVItemInfo* Source, bool SameAsPrev, bool BR); + void __fastcall InsertString(AnsiString &s, AnsiString &SplitText, int StyleNo, bool AutoTag, bool CaretBefore); + void __fastcall DoResizeControl(int ItemNo, int OldWidth, int OldHeight, int NewWidth, int NewHeight); + int __fastcall GetParaEndItemNo(int ItemNo); + bool __fastcall SetParaStyle(int StartItemNo, int EndItemNo, int ParaNo, bool &FullReformat); + void __fastcall AfterAddingText(const AnsiString SplitText, int StartItemNo, int EndItemNo, int ItemsAdded, int DIStartNo, int DIEndNo, bool FullReformat, bool CaretBefore); + bool __fastcall ItemHasPersistentCheckpoint(int ItemNo); + bool __fastcall ParaHasPersistentCheckpoint(int ItemNo); + bool __fastcall MovePersistentCheckpoint(int ItemNo, bool OnlyToPrev); + void __fastcall ClearCurTag(void); + int __fastcall GetOneSelectedItemNo(void); + bool __fastcall InsertItemFromTextFile(AnsiString &s, AnsiString &SplitText, Rvitem::TCustomRVItemInfo* item, bool AutoTag, bool BR, int &FirstIP, int &InsertPoint, int &ItemsAdded, int &MarkerItemNo, bool &FirstItem, bool &PageBreak, bool &FromNewLine, bool &FullReformat); + bool __fastcall DoItemTextEdit(const AnsiString OldText, int ItemNo); + bool __fastcall DoItemTextEditEx(const AnsiString OldText, int ItemNo, Rvedit::TRVUndoType UndoType); + +protected: + DYNAMIC void __fastcall DeselectPartiallySelectedItem(Rvitem::TCustomRVItemInfo* NewPartiallySelected); + virtual void __fastcall SetPartialSelectedItem(Rvitem::TCustomRVItemInfo* Item); + DYNAMIC void __fastcall AfterDeleteStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + bool __fastcall ReplicateMarker(int ReferenceItemNo, int InsertItemNo, bool &FullReformat, bool EditFlag); + void __fastcall AdjustMarkerCaret(bool Right, int &Offs); + void __fastcall AdjustMarkerPos(int &ItemNo, int &Offs, bool DefRight); + bool __fastcall CaretAtTheBeginningOfParaSection(bool OnlyAllowBeginningOfPara); + bool __fastcall CaretAtTheEndOfParaSection(bool OnlyAllowEndOfPara); + bool __fastcall CaretInTheLastLine(void); + bool __fastcall CaretAtTheBeginningOfLine(void); + bool __fastcall CaretAtTheEndOfLine(void); + virtual void __fastcall PostPaintTo(Graphics::TCanvas* Canvas, int XShift, int YShift, int FirstDrawItemNo, int LastDrawItemNo, bool PrintMode, bool StrictTop, bool StrictBottom); + bool __fastcall GetResizeHandleAt(int X, int Y, Rvresize::TRVResizeHandleIndex &Index); + DYNAMIC bool __fastcall InitDragging(Rvdragdrop::TRVDropSource* &DropSource, int &OKEffect); + DYNAMIC void __fastcall DoneDragging(bool FDeleteSelection); + DYNAMIC void __fastcall LiveSpellingCheckCurrentItem(void); + DYNAMIC void __fastcall DoAfterFormat(void); + +public: + Crvfdata::TRVDragDropCaretInfo* FDragDropCaretInfo; + int FCurTextStyleNo; + int FCurParaStyleNo; + Rvundo::TRVUndoList* UndoList; + Rvundo::TRVUndoList* RedoList; + TRVUndoDest UndoDest; + int CaretDrawItemNo; + int CaretOffs; + TRVCharPosCollection* CharEnds; + int CaretHeight; + bool FRVFInserted; + void __fastcall ActivateCustomCaretTimer(void); + void __fastcall DeactivateCustomCaretTimer(void); + void __fastcall DrawCustomCaret(void); + void __fastcall ClearCustomCaret(void); + void __fastcall DestroyCustomCaretBack(void); + virtual void __fastcall PaintBuffered(void); + void __fastcall LaterSetBackLiveSpellingTo(int ItemNo, int Offs, bool ClearPainters); + void __fastcall CreateDragDropCaretInfo(void); + void __fastcall ReleaseDragDropCaretInfo(void); + DYNAMIC Crvfdata::TRVDragDropCaretInfo* __fastcall GetDragDropCaretInfo(void); + void __fastcall AssignCurTag(void); + int __fastcall GetActualCurStyleNo(void); + DYNAMIC void __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y); + DYNAMIC void __fastcall MouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + DYNAMIC void __fastcall MouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + bool __fastcall CancelResize(void); + DYNAMIC void __fastcall AdjustMouseUpSelection(void); + void __fastcall ResizeItem(int ItemNo, int Width, int Height); + virtual void __fastcall XorDrawing(void); + DYNAMIC void __fastcall MarkStylesInUse(Rvitem::TRVDeleteUnusedStylesData* Data); + DYNAMIC bool __fastcall InsertFirstRVFItem(int &Index, AnsiString &s, Rvitem::TCustomRVItemInfo* &li, bool EditFlag, bool &FullReformat, int &NewListNo); + Rvundo::TRVUndoList* __fastcall GetUndoList(void); + void __fastcall Change(void); + void __fastcall ChangeEx(bool ClearRedo); + DYNAMIC void __fastcall DoOnSelection(bool AllowScrolling); + void __fastcall CreateResizer(void); + void __fastcall DestroyResizer(void); + void __fastcall UpdateResizer(void); + DYNAMIC void __fastcall DoCurrentTextStyleConversion(int &StyleNo, int ParaStyleNo, int ItemNo, int UserData, bool ToWholeParagraphs); + void __fastcall Do_ReformateRange(int StartNo, int EndNo, bool SuperReformat); + void __fastcall Do_DeleteItem(int ItemNo, bool &FullReformat); + void __fastcall Do_InsertItem(int ItemNo, AnsiString &s, Rvitem::TCustomRVItemInfo* item, bool FromUndo, bool &FullReformat); + void __fastcall Do_ReplaceItem(int ItemNo, Rvitem::TCustomRVItemInfo* item); + void __fastcall Do_DeleteItems(int StartItemNo, int EndItemNo, bool &FullReformat); + void __fastcall Do_InsertItems(int ItemNo, Rvitem::TRVItemList* sl, bool FromUndo, bool &FullReformat); + void __fastcall Do_ModifyItem(int ItemNo, const AnsiString s, Rvitem::TCustomRVItemInfo* Item); + Rvundo::TRVUndoInsertItemsInfo* __fastcall Do_InsertItems_1(int ItemNo, int Count); + void __fastcall Do_InsertItems_2(int ItemNo, int Count, Rvundo::TRVUndoInsertItemsInfo* ui, bool &FullReformat); + void __fastcall Do_DeleteSubstring(int ItemNo, int Index, int ALength); + void __fastcall Do_InsertSubstring(int ItemNo, int Index, const AnsiString s); + void __fastcall Do_NewLine(int ItemNo, bool SameAsPrev, int ParaNo, bool &FullReformat); + void __fastcall Do_BR(int ItemNo, bool BR, bool &FullReformat); + void __fastcall Do_PageBreak(int ItemNo, bool PageBreak); + void __fastcall Do_ClearTextFlow(int ItemNo, bool Left, bool Right); + void __fastcall Do_ExtraIntProperty(int ItemNo, Rvitem::TRVExtraItemProperty Prop, int Value); + void __fastcall Do_ExtraStrProperty(int ItemNo, Rvitem::TRVExtraItemStrProperty Prop, const AnsiString Value); + void __fastcall Do_Concate(int FirstItemNo); + void __fastcall Do_MoveCP(int SrcItemNo, int DestItemNo); + bool __fastcall Do_Para(int FirstItemNo, int EndItemNo, int ParaNo, bool &FullReformat); + bool __fastcall Do_ParaList(int FirstItemNo, Rvclasses::TRVIntegerList* ParaList, bool &FullReformat); + void __fastcall Do_StyleNo(int ItemNo, int StyleNo); + void __fastcall Do_AssociatedTextStyleNo(int ItemNo, int TextStyleNo); + void __fastcall Do_Tag(int ItemNo, int Tag, bool AssignAsIs); + void __fastcall Do_AddCP(int ItemNo, Rvitem::TRVCPInfo* Checkpoint); + void __fastcall Do_DeleteCP(int ItemNo); + void __fastcall Do_ChangeTextR(int ItemNo, const AnsiString s); + void __fastcall Do_ChangeVAlign(int ItemNo, Rvstyle::TRVVAlign VAlign); + void __fastcall Do_Resize(int ItemNo, int Width, int Height, bool Reformat); + void __fastcall Do_ItemModifyTerminator(int ItemNo, bool Opening); + Rvundo::TRVUndoModifyItemProps* __fastcall Do_ModifyItemIntProperty(int ItemNo, System::TObject* SubObject, const AnsiString PropertyName, int Value, bool AffectSize, bool AffectWidth, TMetaClass* UndoInfoClass); + Rvundo::TRVUndoModifyItemProps* __fastcall Do_ModifyItemStrProperty(int ItemNo, System::TObject* SubObject, const AnsiString PropertyName, const AnsiString Value, TMetaClass* UndoInfoClass); + Rvundo::TRVUndoModifyItemProps* __fastcall Do_ModifyItemIntProperties(int ItemNo, System::TObject* SubObject, Classes::TStringList* PropList, bool AffectSize, bool AffectWidth, TMetaClass* UndoInfoClass); + void __fastcall BeginUndoSequence(Rvedit::TRVUndoType UndoType, bool AllowFinalize); + void __fastcall SetUndoGroupMode(bool GroupUndo); + void __fastcall FinalizeUndoGroup(void); + void __fastcall BeginNamedUndoSequence(Rvedit::TRVUndoType UndoType, const AnsiString Caption, bool AllowFinalize); + void __fastcall EndUndoSequence(void); + void __fastcall BeginRedoSequence(Rvedit::TRVUndoType UndoType, const AnsiString Caption); + DYNAMIC void __fastcall GetSelectionBoundsEx(int &StartItemNo, int &StartItemOffs, int &EndItemNo, int &EndItemOffs, bool Normalize); + DYNAMIC void __fastcall GetSelBounds(int &StartNo, int &EndNo, int &StartOffs, int &EndOffs, bool Normalize); + DYNAMIC void __fastcall Clear(void); + void __fastcall PrepareForEdit(void); + bool __fastcall DeleteSelection_(void); + bool __fastcall CanDelete(void); + void __fastcall InsertTextTyping(AnsiString text, char Key); + void __fastcall InsertTextA_(const AnsiString text, bool AutoTag, bool CaretBefore); + void __fastcall InsertTextW_(const AnsiString text, bool AutoTag, bool CaretBefore); + bool __fastcall OnEnterPress_(bool Shift, bool Recursive); + void __fastcall OnDeletePress_(bool Ctrl, bool MovedFromLineEnd); + void __fastcall OnBackSpacePress_(bool Ctrl, bool MultiDelete, bool FromNextLine); + void __fastcall SetCurTextStyleNo(int Value); + void __fastcall SetCurParaStyleNo(int Value); + virtual void __fastcall ClearTemporal(void); + void __fastcall ApplyParaStyle(int ParaStyleNo, Rvitem::TRVEStyleConversionType ConvType); + bool __fastcall OnHomePress(bool Ctrl); + bool __fastcall OnDownPress(bool Shift, bool Ctrl); + bool __fastcall OnEndPress(bool Ctrl); + bool __fastcall OnLeftPress(bool Shift, bool Ctrl); + bool __fastcall OnPgDownPress(void); + bool __fastcall OnPgUpPress(void); + bool __fastcall OnRightPress(bool Shift, bool Ctrl); + bool __fastcall OnUpPress(bool Shift, bool Ctrl); + void __fastcall MoveCaretToTheBeginningOfThePrevParagraph(void); + void __fastcall MoveCaretToTheEndOfTheNextParagraph(void); + void __fastcall ChangeCaret(bool ForceCreate, bool ScrollToCaret, bool DontChangeStyle, bool RefreshBefore); + HIDESBASEDYNAMIC int __fastcall BuildJumpsCoords(bool IgnoreReadOnly); + DYNAMIC void __fastcall ClearJumpsCoords(void); + virtual void __fastcall Format_(bool OnlyResized, bool ForceFormat, bool NoScroll, int depth, Graphics::TCanvas* Canvas, bool OnlyTail, bool NoCaching, bool Reformatting); + DYNAMIC void __fastcall GetSelStart(int &DINo, int &DIOffs); + DYNAMIC void __fastcall SrchSelectIt(int StartItemNo, int StartOffs, int EndItemNo, int EndOffs, bool Invert); + DYNAMIC void __fastcall SrchStart(bool Down, bool FromStart, int &strt, int &offs); + int __fastcall GetCurItemNo(void); + int __fastcall GetOffsetInCurItem(void); + bool __fastcall InsertSomething(Rvitem::TCustomRVItemInfo* info, AnsiString &s, AnsiString &SplitText, bool AutoTag, bool CaretBefore, bool CallTEEvent); + bool __fastcall NotFormatted(void); + void __fastcall StartShiftMoving(void); + void __fastcall EndShiftMoving(void); + void __fastcall ApplyStyleConversion_(int UserData, Rvitem::TRVEStyleConversionType ConvType, bool ApplyToWholeParas); + bool __fastcall InsertRVFFromStreamEd_(Classes::TStream* Stream); + void __fastcall OnChangeCaretLine(int DLOffs); + void __fastcall ConcateAfterAdding(int &InsertPoint, int &LastInserted, int &ItemsAdded, int &Offs); + bool __fastcall InsertRTFFromStreamEd_(Classes::TStream* Stream); + DYNAMIC bool __fastcall SaveRTFToStream(Classes::TStream* Stream, const AnsiString Path, bool SelectionOnly, int Level, Graphics::TColor Color, Rvback::TRVBackground* Background, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Crvdata::TRVRTFFontTable* FontTable, double tpp, bool CompleteDocument, Crvdata::TCustomRVData* Header, Crvdata::TCustomRVData* Footer); + bool __fastcall InsertTextFromStream(Classes::TStream* Stream, bool OEM, bool AutoTag); + bool __fastcall InsertTextFromStreamW(Classes::TStream* Stream, bool AutoTag); + bool __fastcall InsertTextFromFile(const AnsiString FileName, bool OEM, bool AutoTag); + bool __fastcall InsertTextFromFileW(const AnsiString FileName, bool AutoTag); + void __fastcall KeyPress(char &Key); + void __fastcall AdjustControlPlacement(int ItemNo); + void __fastcall ResizeControl(int ItemNo, int NewWidth, int NewHeight, bool Reformat); + void __fastcall Reformat(bool FullFormat, bool ForceFormat, bool NoScroll, int ItemNo, bool UpdateView); + void __fastcall Reformat_(bool FullFormat, int StartDrawItem, int EndDrawItem, int ItemsAdded); + void __fastcall BeginItemModify(int ItemNo, int &ModifyData); + void __fastcall EndItemModify(int ItemNo, int ModifyData); + void __fastcall SelectCurrentWord(void); + void __fastcall InsertPageBreak(void); + void __fastcall SplitAtCaret(void); + DYNAMIC bool __fastcall SaveHTMLToStreamEx(Classes::TStream* Stream, const AnsiString Path, const AnsiString Title, const AnsiString ImagesPrefix, const AnsiString ExtraStyles, const AnsiString ExternalCSS, const AnsiString CPPrefix, Rvstyle::TRVSaveOptions Options, Graphics::TColor Color, Graphics::TColor &CurrentFileColor, int &imgSaveNo, int LeftMargin, int TopMargin, int RightMargin, int BottomMargin, Rvback::TRVBackground* Background, Rvclasses::TRVList* Bullets); + DYNAMIC bool __fastcall SaveHTMLToStream(Classes::TStream* Stream, const AnsiString Path, const AnsiString Title, const AnsiString ImagesPrefix, Rvstyle::TRVSaveOptions Options, Graphics::TColor Color, int &imgSaveNo, int LeftMargin, int TopMargin, int RightMargin, int BottomMargin, Rvback::TRVBackground* Background, Rvclasses::TRVList* Bullets); + Types::TPoint __fastcall GetIMEWinCoord(); + void __fastcall PrepareForUpdateRangeAfterMarkersOrSeq(int StartNo, int EndNo, bool ForDeletion, int &FirstItemNo, int &LastMarkerIndex, int &LastSeqIndex, Rvclasses::TRVIntegerList* &ListNos, Classes::TStringList* &SeqNames); + void __fastcall UpdateAfterMarkersOrSeq(int FirstItemNo, int LastMarkerIndex, int LastSeqIndex, Rvclasses::TRVIntegerList* ListNos, Classes::TStringList* SeqNames); + void __fastcall UpdateRangeAfterMarkersOrSeq(int StartNo, int EndNo); + void __fastcall ApplyListStyle_(int AListNo, int AListLevel, int AStartFrom, bool AUseStartFrom, bool ARecursive, TRVParaListOperation Operation, int &ItemsAdded, int &StartNo, int &EndNo, int &SelStartNo, int &SelStartOffs, int &SelEndNo, int &SelEndOffs, Rvclasses::TRVIntegerList* ListNos, int &LastVWMarkerIndex); + void __fastcall ApplyListStyle(int AListNo, int AListLevel, int AStartFrom, bool AUseStartFrom, bool ARecursive, TRVParaListOperation Operation); + __fastcall virtual TRVEditRVData(Rvscroll::TRVScroller* RichView); + __fastcall virtual ~TRVEditRVData(void); +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE int RichViewEditCaretWidth; +extern PACKAGE int RichViewEditCaretHeightExtra; +extern PACKAGE int RichViewEditMaxCaretHeight; +extern PACKAGE bool RichViewEditDefaultProportionalResize; +extern PACKAGE bool RichViewEditEnterAllowsEmptyMarkeredLines; + +} /* namespace Rvervdata */ +using namespace Rvervdata; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvervdata diff --git a/12.0.4/Units/D2006/RVEdit.dcu b/12.0.4/Units/D2006/RVEdit.dcu new file mode 100644 index 0000000..360fc51 Binary files /dev/null and b/12.0.4/Units/D2006/RVEdit.dcu differ diff --git a/12.0.4/Units/D2006/RVEdit.hpp b/12.0.4/Units/D2006/RVEdit.hpp new file mode 100644 index 0000000..a442e59 --- /dev/null +++ b/12.0.4/Units/D2006/RVEdit.hpp @@ -0,0 +1,596 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvedit.pas' rev: 10.00 + +#ifndef RveditHPP +#define RveditHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvedit +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVESearchOption { rvseoMatchCase, rvseoDown, rvseoWholeWord, rvseoMultiItem }; +#pragma option pop + +typedef Set TRVESearchOptions; + +#pragma option push -b- +enum TRVEditorOption { rvoClearTagOnStyleApp, rvoCtrlJumps, rvoDoNotWantReturns, rvoDoNotWantShiftReturns, rvoWantTabs, rvoAutoSwitchLang, rvoHideReadOnlyCaret, rvoNoImageResize, rvoNoCaretHighlightJumps }; +#pragma option pop + +typedef Set TRVEditorOptions; + +#pragma option push -b- +enum TRVDragDropFormat { rvddRVF, rvddRTF, rvddText, rvddUnicodeText, rvddBitmap, rvddMetafile, rvddURL, rvddFiles }; +#pragma option pop + +typedef Set TRVDragDropFormats; + +#pragma option push -b- +enum TRVDropFileAction { rvdfNone, rvdfInsert, rvdfLink }; +#pragma option pop + +#pragma option push -b- +enum TRVUndoType { rvutNone, rvutDelete, rvutInsert, rvutPara, rvutMiscTyping, rvutInsertPageBreak, rvutRemovePageBreak, rvutTyping, rvutTag, rvutStyleNo, rvutAddCheckpoint, rvutRemoveCheckpoint, rvutModifyCheckpoint, rvutModifyItem, rvutList, rvutCustom }; +#pragma option pop + +#pragma option push -b- +enum TRVGetOutDirection { rvdLeft, rvdUp, rvdRight, rvdDown, rvdTop, rvdBottom }; +#pragma option pop + +#pragma option push -b- +enum TRVOleDropEffect { rvdeNone, rvdeCopy, rvdeMove, rvdeLink }; +#pragma option pop + +typedef Set TRVOleDropEffects; + +class DELPHICLASS TCustomRichViewEdit; +typedef void __fastcall (__closure *TRVStyleConversionEvent)(TCustomRichViewEdit* Sender, int StyleNo, int UserData, bool AppliedToText, int &NewStyleNo); + +typedef void __fastcall (__closure *TRVStyleConversionEvent_)(TCustomRichViewEdit* Sender, int StyleNo, int ParaStyleNo, int UserData, bool AppliedToText, int &NewStyleNo, bool ToWholeParagraphs); + +typedef void __fastcall (__closure *TRVPasteEvent)(TCustomRichViewEdit* Sender, bool &DoDefault); + +typedef void __fastcall (__closure *TRVOnCaretGetOutEvent)(TCustomRichViewEdit* Sender, TRVGetOutDirection Direction); + +typedef void __fastcall (__closure *TRVChangingEvent)(TCustomRichViewEdit* Sender, bool &CanEdit); + +typedef void __fastcall (__closure *TRVDropFilesEvent)(TCustomRichViewEdit* Sender, Classes::TStrings* Files, TRVDropFileAction &FileAction, bool &DoDefault); + +typedef void __fastcall (__closure *TRVOleDragEnterEvent)(Richview::TCustomRichView* Sender, const _di_IDataObject DataObject, Classes::TShiftState Shift, int X, int Y, TRVOleDropEffects PossibleDropEffects, TRVOleDropEffect &DropEffect); + +typedef void __fastcall (__closure *TRVOleDragOverEvent)(Richview::TCustomRichView* Sender, Classes::TShiftState Shift, int X, int Y, TRVOleDropEffects PossibleDropEffects, TRVOleDropEffect &DropEffect); + +typedef void __fastcall (__closure *TRVOleDropEvent)(Richview::TCustomRichView* Sender, const _di_IDataObject DataObject, Classes::TShiftState Shift, int X, int Y, TRVOleDropEffects PossibleDropEffects, TRVOleDropEffect &DropEffect, bool &DoDefault); + +typedef void __fastcall (__closure *TRVItemResizeEvent)(TCustomRichViewEdit* Sender, Crvfdata::TCustomRVFormattedData* RVData, int ItemNo, int Val1, int Val2); + +typedef void __fastcall (__closure *TRVItemTextEditEvent)(TCustomRichViewEdit* Sender, const AnsiString OldText, Crvdata::TCustomRVData* RVData, int ItemNo, int &NewTag, int &NewStyleNo); + +typedef void __fastcall (__closure *TRVDrawCustomCaretEvent)(TCustomRichViewEdit* Sender, Graphics::TCanvas* Canvas, const Types::TRect &Rect); + +typedef void __fastcall (__closure *TRVMeasureCustomCaretEvent)(TCustomRichViewEdit* Sender, Types::TRect &Rect); + +typedef void __fastcall (__closure *TRVGetSRichViewEditEvent)(TCustomRichViewEdit* Sender, Controls::TCustomControl* &SRichViewEdit); + +class PASCALIMPLEMENTATION TCustomRichViewEdit : public Richview::TCustomRichView +{ + typedef Richview::TCustomRichView inherited; + +private: + bool FModified; + int FLockCount; + bool FReadOnly; + TRVEditorOptions FEditorOptions; + TRVDragDropFormats FAcceptDragDropFormats; + Classes::TNotifyEvent FOnCurParaStyleChanged; + Classes::TNotifyEvent FOnCurTextStyleChanged; + Classes::TNotifyEvent FOnChange; + Classes::TNotifyEvent FOnCaretMove; + TRVChangingEvent FOnChanging; + TRVStyleConversionEvent FOnStyleConversion; + TRVStyleConversionEvent FOnParaStyleConversion; + TRVPasteEvent FOnPaste; + TRVOnCaretGetOutEvent FOnCaretGetOut; + TRVDropFilesEvent FOnDropFiles; + Rvdragdrop::TRVDropTarget* FDropTarget; + TRVOleDragEnterEvent FOnOleDragEnter; + TRVOleDropEvent FOnOleDrop; + TRVOleDragOverEvent FOnOleDragOver; + Classes::TNotifyEvent FOnOleDragLeave; + int FCustomCaretInterval; + TRVDrawCustomCaretEvent FOnDrawCustomCaret; + TRVMeasureCustomCaretEvent FOnMeasureCustomCaret; + TRVItemTextEditEvent FOnItemTextEdit; + TRVItemResizeEvent FOnItemResize; + TRVGetSRichViewEditEvent FOnGetSRichViewEdit; + void __fastcall CheckItemClass(int ItemNo, TMetaClass* RequiredClass); + MESSAGE void __fastcall WMInputLangChange(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall WMSetFocus(Messages::TWMSetFocus &Message); + HIDESBASE MESSAGE void __fastcall WMKillFocus(Messages::TWMKillFocus &Message); + MESSAGE void __fastcall WMCut(Messages::TWMNoParams &Message); + MESSAGE void __fastcall WMPaste(Messages::TWMNoParams &Message); + HIDESBASE MESSAGE void __fastcall WMGetDlgCode(Messages::TWMNoParams &Message); + MESSAGE void __fastcall CMWantSpecialKey(Messages::TWMKey &Message); + MESSAGE void __fastcall WMSysChar(Messages::TWMKey &Message); + HIDESBASE MESSAGE void __fastcall WMKeyDown(Messages::TWMKey &Message); + HIDESBASE MESSAGE void __fastcall WMChar(Messages::TWMKey &Message); + MESSAGE void __fastcall WMUndoFromInplace(Messages::TMessage &Message); + MESSAGE void __fastcall WMRedoFromInplace(Messages::TMessage &Message); + MESSAGE void __fastcall WMClear(Messages::TMessage &Message); + MESSAGE void __fastcall WMUndo(Messages::TMessage &Message); + MESSAGE void __fastcall EMUndo(Messages::TMessage &Message); + MESSAGE void __fastcall EMRedo(Messages::TMessage &Message); + MESSAGE void __fastcall EMCanUndo(Messages::TMessage &Message); + MESSAGE void __fastcall EMCanRedo(Messages::TMessage &Message); + MESSAGE void __fastcall EMCanPaste(Messages::TMessage &Message); + MESSAGE void __fastcall WMCreate(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall WMDestroy(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall WMTimer(Messages::TWMTimer &Message); + void __fastcall UpdateImeWindow(void); + void __fastcall GetCompositionFormParams(tagCOMPOSITIONFORM &CF); + MESSAGE void __fastcall WMImeStartComposition(Messages::TMessage &Message); + MESSAGE void __fastcall WMImeComposition(Messages::TMessage &Message); + MESSAGE void __fastcall WMImeChar(Messages::TMessage &Message); + void __fastcall SetCurParaStyleNo(const int Value); + void __fastcall SetCurTextStyleNo(const int Value); + int __fastcall GetCurParaStyleNo(void); + int __fastcall GetCurTextStyleNo(void); + int __fastcall GetCurItemStyle(void); + int __fastcall GetCurItemNo(void); + int __fastcall GetOffsetInCurItem(void); + void __fastcall ApplyTextStyleConversionProc(TCustomRichViewEdit* Sender, int StyleNo, int ParaStyleNo, int UserData, bool AppliedToText, int &NewStyleNo, bool ToWholeParagraphs); + void __fastcall ApplyParaStyleTemplateConversionProc(TCustomRichViewEdit* Sender, int StyleNo, int ParaStyleNo, int UserData, bool AppliedToText, int &NewStyleNo, bool ToWholeParagraphs); + void __fastcall ApplyTextStyleTemplateConversionProc(TCustomRichViewEdit* Sender, int StyleNo, int ParaStyleNo, int UserData, bool AppliedToText, int &NewStyleNo, bool ToWholeParagraphs); + void __fastcall ApplyUserParaStyleConversionProc(TCustomRichViewEdit* Sender, int StyleNo, int ParaStyleNo, int UserData, bool AppliedToText, int &NewStyleNo, bool ToWholeParagraphs); + void __fastcall ApplyUserTextStyleConversionProc(TCustomRichViewEdit* Sender, int StyleNo, int ParaStyleNo, int UserData, bool AppliedToText, int &NewStyleNo, bool ToWholeParagraphs); + int __fastcall GetUndoLimit(void); + void __fastcall SetUndoLimit(const int Value); + bool __fastcall IsUndoShortcut(Classes::TShiftState Shift, Word Key); + bool __fastcall IsRedoShortcut(Classes::TShiftState Shift, Word Key); + void __fastcall InsertTextW_(const AnsiString text); + MESSAGE void __fastcall WMUniChar(Messages::TMessage &Message); + HIDESBASE void __fastcall SetTabNavigation(const Rvscroll::TRVTabNavigationType Value); + TCustomRichViewEdit* __fastcall GetTopLevelEditor(void); + bool __fastcall DoChanging(void); + int __fastcall GetActualCurTextStyleNo(void); + void __fastcall SetCustomCaretInterval(const int Value); + +protected: + virtual void __fastcall CreateParams(Controls::TCreateParams &Params); + virtual TMetaClass* __fastcall GetDataClass(void); + virtual void __fastcall SetReadOnly(const bool Value); + virtual bool __fastcall GetReadOnly(void); + DYNAMIC void __fastcall KeyDown(Word &Key, Classes::TShiftState Shift); + DYNAMIC void __fastcall KeyUp(Word &Key, Classes::TShiftState Shift); + DYNAMIC void __fastcall KeyPress(char &Key); + void __fastcall OnEnterPress(bool Shift); + void __fastcall OnBackSpacePress(bool Ctrl); + void __fastcall OnDeletePress(bool Ctrl); + virtual void __fastcall AfterVScroll(void); + virtual void __fastcall AfterHScroll(void); + DYNAMIC bool __fastcall OleDragEnter(int X, int Y); + DYNAMIC void __fastcall CallOleDragEnterEvent(const _di_IDataObject DataObj, int KeyState, const Types::TPoint &pt, int PossibleEffects, int &Effect); + DYNAMIC void __fastcall OleDragLeave(void); + DYNAMIC bool __fastcall OleDragOver(int X, int Y); + DYNAMIC void __fastcall CallOleDragOverEvent(int KeyState, const Types::TPoint &pt, int PossibleEffects, int &Effect); + DYNAMIC int __fastcall OleDrop(const _di_IDataObject DataObj, bool FMove, int KeyState, const Types::TPoint &pt, int PossibleEffects); + DYNAMIC void __fastcall ReleaseOleDropTargetObject(void); + Word __fastcall GetAcceptableRVFormat(void); + DYNAMIC bool __fastcall OleCanAcceptFormat(Word Format); + DYNAMIC void __fastcall AdjustPopupMenuPos(Types::TPoint &pt); + AnsiString __fastcall GetBasePathFromHTMLInClipboard(); + DYNAMIC void __fastcall SetSmartPopupTarget(void); + __property Classes::TNotifyEvent OnChange = {read=FOnChange, write=FOnChange}; + __property Classes::TNotifyEvent OnCaretMove = {read=FOnCaretMove, write=FOnCaretMove}; + __property TRVChangingEvent OnChanging = {read=FOnChanging, write=FOnChanging}; + __property TRVPasteEvent OnPaste = {read=FOnPaste, write=FOnPaste}; + __property TabNavigation = {read=GetTabNavigation, write=SetTabNavigation, default=0}; + __property TRVDragDropFormats AcceptDragDropFormats = {read=FAcceptDragDropFormats, write=FAcceptDragDropFormats, default=191}; + virtual void __fastcall BeforeScroll(void); + +public: + TRVStyleConversionEvent_ FCurStyleConversion; + __fastcall virtual TCustomRichViewEdit(Classes::TComponent* AOwner); + void __fastcall SetFReadOnly(bool Value); + bool __fastcall BeforeInserting(void); + void __fastcall AfterInserting(void); + DYNAMIC void __fastcall CurParaStyleChange(void); + DYNAMIC void __fastcall CurTextStyleChange(void); + virtual bool __fastcall BeforeChange(bool FromOutside); + DYNAMIC void __fastcall DoChange(bool ClearRedo); + DYNAMIC void __fastcall Selecting(void); + void __fastcall AfterCaretMove(void); + HIDESBASE void __fastcall AssignEvents(Richview::TCustomRichView* Source); + void __fastcall BeforeUnicode(void); + TCustomRichViewEdit* __fastcall GetRootEditor(void); + void __fastcall RefreshAll(void); + void __fastcall InsertTextW(const WideString text, bool CaretBefore = false); + bool __fastcall InsertStringWTag(const WideString s, int Tag); + bool __fastcall InsertItemR(const AnsiString Name, Rvitem::TCustomRVItemInfo* Item); + bool __fastcall InsertItem(const AnsiString Name, Rvitem::TCustomRVItemInfo* Item); + void __fastcall InsertTextA(const AnsiString text, bool CaretBefore = false); + void __fastcall InsertText(const AnsiString text, bool CaretBefore = false); + bool __fastcall InsertStringATag(const AnsiString s, int Tag); + bool __fastcall InsertStringTag(const AnsiString s, int Tag); + bool __fastcall InsertTab(void); + HIDESBASE bool __fastcall InsertControl(const AnsiString Name, Controls::TControl* ctrl, Rvstyle::TRVVAlign VAlign); + bool __fastcall InsertPicture(const AnsiString Name, Graphics::TGraphic* gr, Rvstyle::TRVVAlign VAlign); + bool __fastcall InsertHotPicture(const AnsiString Name, Graphics::TGraphic* gr, Rvstyle::TRVVAlign VAlign); + bool __fastcall InsertBreak(Byte Width, Rvstyle::TRVBreakStyle Style, Graphics::TColor Color); + bool __fastcall InsertBullet(int ImageIndex, Imglist::TCustomImageList* ImageList); + bool __fastcall InsertHotspot(int ImageIndex, int HotImageIndex, Imglist::TCustomImageList* ImageList); + bool __fastcall InsertRVFFromStreamEd(Classes::TStream* Stream); + bool __fastcall InsertRVFFromFileEd(const AnsiString FileName); + bool __fastcall InsertTextFromFile(const AnsiString FileName); + bool __fastcall InsertOEMTextFromFile(const AnsiString FileName); + bool __fastcall InsertTextFromFileW(const AnsiString FileName); + bool __fastcall InsertRTFFromStreamEd(Classes::TStream* Stream); + bool __fastcall InsertRTFFromFileEd(const AnsiString FileName); + void __fastcall InsertPageBreak(void); + void __fastcall RemoveCurrentPageBreak(void); + void __fastcall ClearTextFlow(bool Left, bool Right); + void __fastcall ConvertToPicture(int ItemNo); + void __fastcall ConvertToHotPicture(int ItemNo); + bool __fastcall CanDelete(void); + DYNAMIC void __fastcall DeleteSelection(void); + void __fastcall CutDef(void); + void __fastcall ApplyParaStyle(int ParaStyleNo); + void __fastcall ApplyTextStyle(int TextStyleNo); + void __fastcall ApplyStyleConversion(int UserData); + void __fastcall ApplyParaStyleConversion(int UserData); + void __fastcall ApplyParaStyleTemplate(int TemplateNo); + void __fastcall ApplyTextStyleTemplate(int TemplateNo, bool ToWholeParagraphs); + void __fastcall ApplyStyleTemplate(int TemplateNo); + bool __fastcall CanPasteRTF(void); + DYNAMIC bool __fastcall CanPaste(void); + bool __fastcall CanPasteRVF(void); + DYNAMIC void __fastcall Paste(void); + bool __fastcall PasteBitmap(bool TextAsName); + bool __fastcall PasteMetafile(bool TextAsName); + bool __fastcall PasteGraphicFiles(bool FileNamesAsNames, bool StoreFileNames); + void __fastcall PasteText(void); + void __fastcall PasteTextA(void); + void __fastcall PasteRVF(void); + bool __fastcall PasteRTF(void); + void __fastcall PasteTextW(void); + int __fastcall GetCurrentTag(void); + Rvstyle::TRVVAlign __fastcall GetCurrentItemVAlign(void); + AnsiString __fastcall GetCurrentItemTextR(); + AnsiString __fastcall GetCurrentItemText(); + Rvitem::TCustomRVItemInfo* __fastcall GetCurrentItem(void); + bool __fastcall GetCurrentItemEx(TMetaClass* RequiredClass, TCustomRichViewEdit* &ItemRichViewEdit, Rvitem::TCustomRVItemInfo* &Item); + AnsiString __fastcall GetCurrentItemTextA(); + WideString __fastcall GetCurrentItemTextW(); + void __fastcall GetCurrentBreakInfo(Byte &AWidth, Rvstyle::TRVBreakStyle &AStyle, Graphics::TColor &AColor, int &ATag); + void __fastcall GetCurrentBulletInfo(AnsiString &AName, int &AImageIndex, Imglist::TCustomImageList* &AImageList, int &ATag); + void __fastcall GetCurrentHotspotInfo(AnsiString &AName, int &AImageIndex, int &AHotImageIndex, Imglist::TCustomImageList* &AImageList, int &ATag); + void __fastcall GetCurrentPictureInfo(AnsiString &AName, Graphics::TGraphic* &Agr, Rvstyle::TRVVAlign &AVAlign, int &ATag); + void __fastcall GetCurrentControlInfo(AnsiString &AName, Controls::TControl* &Actrl, Rvstyle::TRVVAlign &AVAlign, int &ATag); + void __fastcall GetCurrentTextInfo(AnsiString &AText, int &ATag); + void __fastcall SetItemTextEdR(int ItemNo, const AnsiString s); + void __fastcall SetItemTextEd(int ItemNo, const AnsiString s); + void __fastcall SetItemTagEd(int ItemNo, int ATag); + void __fastcall SetItemVAlignEd(int ItemNo, Rvstyle::TRVVAlign VAlign); + void __fastcall ResizeControl(int ItemNo, int NewWidth, int NewHeight); + void __fastcall SetItemTextEdA(int ItemNo, const AnsiString s); + void __fastcall SetItemTextEdW(int ItemNo, const WideString s); + void __fastcall SetCurrentItemTextR(const AnsiString s); + void __fastcall SetCurrentItemText(const AnsiString s); + void __fastcall SetCurrentTag(int ATag); + void __fastcall SetCurrentItemVAlign(Rvstyle::TRVVAlign VAlign); + void __fastcall SetCurrentItemTextA(const AnsiString s); + void __fastcall SetCurrentItemTextW(const WideString s); + void __fastcall SetBreakInfoEd(int ItemNo, Byte AWidth, Rvstyle::TRVBreakStyle AStyle, Graphics::TColor AColor, int ATag); + void __fastcall SetBulletInfoEd(int ItemNo, const AnsiString AName, int AImageIndex, Imglist::TCustomImageList* AImageList, int ATag); + void __fastcall SetHotspotInfoEd(int ItemNo, const AnsiString AName, int AImageIndex, int AHotImageIndex, Imglist::TCustomImageList* AImageList, int ATag); + void __fastcall SetPictureInfoEd(int ItemNo, const AnsiString AName, Graphics::TGraphic* Agr, Rvstyle::TRVVAlign AVAlign, int ATag); + void __fastcall SetControlInfoEd(int ItemNo, const AnsiString AName, Rvstyle::TRVVAlign AVAlign, int ATag); + void __fastcall SetCurrentBreakInfo(Byte AWidth, Rvstyle::TRVBreakStyle AStyle, Graphics::TColor AColor, int ATag); + void __fastcall SetCurrentBulletInfo(const AnsiString AName, int AImageIndex, Imglist::TCustomImageList* AImageList, int ATag); + void __fastcall SetCurrentHotspotInfo(const AnsiString AName, int AImageIndex, int AHotImageIndex, Imglist::TCustomImageList* AImageList, int ATag); + void __fastcall SetCurrentPictureInfo(const AnsiString AName, Graphics::TGraphic* Agr, Rvstyle::TRVVAlign AVAlign, int ATag); + void __fastcall SetCurrentControlInfo(const AnsiString AName, Rvstyle::TRVVAlign AVAlign, int ATag); + void __fastcall ResizeCurrentControl(int NewWidth, int NewHeight); + void __fastcall SplitAtCaret(void); + void __fastcall AdjustControlPlacement(int ItemNo); + void __fastcall AdjustControlPlacement2(Controls::TControl* Control); + void __fastcall BeginItemModify(int ItemNo, int &ModifyData); + void __fastcall EndItemModify(int ItemNo, int ModifyData); + void __fastcall BeginCurrentItemModify(int &ModifyData); + void __fastcall EndCurrentItemModify(int ModifyData); + bool __fastcall GetCurrentItemExtraIntProperty(Rvitem::TRVExtraItemProperty Prop, int &Value); + void __fastcall SetItemExtraIntPropertyEd(int ItemNo, Rvitem::TRVExtraItemProperty Prop, int Value, bool AutoReformat); + void __fastcall SetCurrentItemExtraIntProperty(Rvitem::TRVExtraItemProperty Prop, int Value, bool AutoReformat); + bool __fastcall GetCurrentItemExtraStrProperty(Rvitem::TRVExtraItemStrProperty Prop, AnsiString &Value); + void __fastcall SetItemExtraStrPropertyEd(int ItemNo, Rvitem::TRVExtraItemStrProperty Prop, const AnsiString Value, bool AutoReformat); + void __fastcall SetCurrentItemExtraStrProperty(Rvitem::TRVExtraItemStrProperty Prop, const AnsiString Value, bool AutoReformat); + Rvstyle::TCheckpointData __fastcall GetCurrentCheckpoint(void); + Rvstyle::TCheckpointData __fastcall GetCheckpointAtCaret(void); + void __fastcall SetCheckpointInfoEd(int ItemNo, int ATag, const AnsiString AName, bool ARaiseEvent); + void __fastcall RemoveCheckpointEd(int ItemNo); + void __fastcall SetCurrentCheckpointInfo(int ATag, const AnsiString AName, bool ARaiseEvent); + void __fastcall InsertCheckpoint(int ATag, const AnsiString AName, bool ARaiseEvent); + void __fastcall RemoveCurrentCheckpoint(void); + void __fastcall RemoveCheckpointAtCaret(void); + HIDESBASE bool __fastcall SearchTextA(const AnsiString s, TRVESearchOptions SrchOptions); + HIDESBASE bool __fastcall SearchTextW(WideString s, TRVESearchOptions SrchOptions); + HIDESBASE bool __fastcall SearchText(AnsiString s, TRVESearchOptions SrchOptions); + void __fastcall SelectCurrentWord(void); + void __fastcall SelectCurrentLine(void); + bool __fastcall CanChange(void); + void __fastcall Change(void); + void __fastcall BeginUpdate(void); + void __fastcall EndUpdate(void); + DYNAMIC void __fastcall Undo(void); + DYNAMIC void __fastcall Redo(void); + TRVUndoType __fastcall UndoAction(void); + TRVUndoType __fastcall RedoAction(void); + AnsiString __fastcall UndoName(); + AnsiString __fastcall RedoName(); + void __fastcall ClearUndo(void); + void __fastcall SetUndoGroupMode(bool GroupUndo); + void __fastcall BeginUndoGroup(TRVUndoType UndoType); + void __fastcall BeginUndoCustomGroup(const AnsiString Name); + void __fastcall ApplyListStyle(int AListNo, int AListLevel, int AStartFrom, bool AUseStartFrom, bool ARecursive); + void __fastcall RemoveLists(bool ARecursive); + void __fastcall ChangeListLevels(int LevelDelta); + bool __fastcall GetCurrentMisspelling(bool SelectIt, AnsiString &Word, int &StyleNo); + DYNAMIC bool __fastcall ExecuteAction(Classes::TBasicAction* Action); + DYNAMIC bool __fastcall UpdateAction(Classes::TBasicAction* Action); + void __fastcall GetCurrentLineCol(int &Line, int &Column); + __property bool Modified = {read=FModified, write=FModified, nodefault}; + __property int CurItemNo = {read=GetCurItemNo, nodefault}; + __property int CurItemStyle = {read=GetCurItemStyle, nodefault}; + __property int CurParaStyleNo = {read=GetCurParaStyleNo, write=SetCurParaStyleNo, nodefault}; + __property int CurTextStyleNo = {read=GetCurTextStyleNo, write=SetCurTextStyleNo, nodefault}; + __property int ActualCurTextStyleNo = {read=GetActualCurTextStyleNo, write=SetCurTextStyleNo, nodefault}; + __property int OffsetInCurItem = {read=GetOffsetInCurItem, nodefault}; + __property TRVEditorOptions EditorOptions = {read=FEditorOptions, write=FEditorOptions, default=18}; + __property bool ReadOnly = {read=GetReadOnly, write=SetReadOnly, nodefault}; + __property int UndoLimit = {read=GetUndoLimit, write=SetUndoLimit, default=-1}; + __property TCustomRichViewEdit* TopLevelEditor = {read=GetTopLevelEditor}; + __property TCustomRichViewEdit* RootEditor = {read=GetRootEditor}; + __property TRVOnCaretGetOutEvent OnCaretGetOut = {read=FOnCaretGetOut, write=FOnCaretGetOut}; + __property TRVDropFilesEvent OnDropFiles = {read=FOnDropFiles, write=FOnDropFiles}; + __property TRVStyleConversionEvent OnParaStyleConversion = {read=FOnParaStyleConversion, write=FOnParaStyleConversion}; + __property TRVStyleConversionEvent OnStyleConversion = {read=FOnStyleConversion, write=FOnStyleConversion}; + __property Classes::TNotifyEvent OnCurParaStyleChanged = {read=FOnCurParaStyleChanged, write=FOnCurParaStyleChanged}; + __property Classes::TNotifyEvent OnCurTextStyleChanged = {read=FOnCurTextStyleChanged, write=FOnCurTextStyleChanged}; + __property TRVItemTextEditEvent OnItemTextEdit = {read=FOnItemTextEdit, write=FOnItemTextEdit}; + __property OnMouseMove ; + __property OnDragOver ; + __property OnDragDrop ; + __property TRVOleDragEnterEvent OnOleDragEnter = {read=FOnOleDragEnter, write=FOnOleDragEnter}; + __property TRVOleDragOverEvent OnOleDragOver = {read=FOnOleDragOver, write=FOnOleDragOver}; + __property TRVOleDropEvent OnOleDrop = {read=FOnOleDrop, write=FOnOleDrop}; + __property Classes::TNotifyEvent OnOleDragLeave = {read=FOnOleDragLeave, write=FOnOleDragLeave}; + __property int CustomCaretInterval = {read=FCustomCaretInterval, write=SetCustomCaretInterval, default=0}; + __property TRVDrawCustomCaretEvent OnDrawCustomCaret = {read=FOnDrawCustomCaret, write=FOnDrawCustomCaret}; + __property TRVMeasureCustomCaretEvent OnMeasureCustomCaret = {read=FOnMeasureCustomCaret, write=FOnMeasureCustomCaret}; + __property TRVItemResizeEvent OnItemResize = {read=FOnItemResize, write=FOnItemResize}; + __property TRVGetSRichViewEditEvent OnGetSRichViewEdit = {read=FOnGetSRichViewEdit, write=FOnGetSRichViewEdit}; +public: + #pragma option push -w-inl + /* TCustomRichView.Destroy */ inline __fastcall virtual ~TCustomRichViewEdit(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TCustomRichViewEdit(HWND ParentWindow) : Richview::TCustomRichView(ParentWindow) { } + #pragma option pop + +}; + + +class DELPHICLASS TRichViewEdit; +class PASCALIMPLEMENTATION TRichViewEdit : public TCustomRichViewEdit +{ + typedef TCustomRichViewEdit inherited; + +__published: + __property AcceptDragDropFormats = {default=191}; + __property CustomCaretInterval = {default=0}; + __property EditorOptions = {default=18}; + __property ReadOnly ; + __property UndoLimit = {default=-1}; + __property OnCaretGetOut ; + __property OnChange ; + __property OnChanging ; + __property OnCaretMove ; + __property OnCurParaStyleChanged ; + __property OnCurTextStyleChanged ; + __property OnDrawCustomCaret ; + __property OnMeasureCustomCaret ; + __property OnDropFiles ; + __property OnItemResize ; + __property OnItemTextEdit ; + __property OnOleDragEnter ; + __property OnOleDragLeave ; + __property OnOleDragOver ; + __property OnOleDrop ; + __property OnParaStyleConversion ; + __property OnPaste ; + __property OnStyleConversion ; + __property TabNavigation = {default=0}; + __property Align = {default=0}; + __property Anchors = {default=3}; + __property Constraints ; + __property Color = {default=536870911}; + __property Ctl3D ; + __property DragKind = {default=0}; + __property DragMode = {default=0}; + __property Enabled = {default=1}; + __property HelpContext = {default=0}; + __property ParentCtl3D = {default=1}; + __property ParentShowHint = {default=1}; + __property PopupMenu ; + __property ShowHint ; + __property TabOrder = {default=-1}; + __property TabStop = {default=1}; + __property Visible = {default=1}; + __property OnClick ; + __property OnContextPopup ; + __property OnDblClick ; + __property OnDragDrop ; + __property OnDragOver ; + __property OnEndDrag ; + __property OnEnter ; + __property OnExit ; + __property OnKeyDown ; + __property OnKeyPress ; + __property OnKeyUp ; + __property OnMouseMove ; + __property OnMouseWheel ; + __property OnMouseWheelDown ; + __property OnMouseWheelUp ; + __property OnResize ; + __property OnStartDrag ; + __property AnimationMode = {default=1}; + __property BackgroundBitmap ; + __property BackgroundStyle = {default=0}; + __property BiDiMode = {default=0}; + __property BorderStyle = {default=1}; + __property BottomMargin = {default=5}; + __property Cursor = {default=-4}; + __property Delimiters ; + __property DocParameters ; + __property DoInPaletteMode ; + __property FirstJumpNo = {default=0}; + __property HScrollVisible = {default=1}; + __property LeftMargin = {default=5}; + __property LiveSpellingMode = {default=1}; + __property MaxLength = {default=0}; + __property MaxTextWidth = {default=0}; + __property MinTextWidth = {default=0}; + __property Options = {default=326949}; + __property RightMargin = {default=5}; + __property RTFOptions = {default=14}; + __property RTFReadProperties ; + __property RVFOptions = {default=98435}; + __property RVFParaStylesReadMode = {default=2}; + __property RVFTextStylesReadMode = {default=2}; + __property SmartPopupProperties ; + __property Style ; + __property TopMargin = {default=5}; + __property Tracking = {default=1}; + __property UseXPThemes = {default=1}; + __property VAlign = {default=0}; + __property VScrollVisible = {default=1}; + __property WheelStep = {default=2}; + __property WordWrap = {default=1}; + __property OnAddStyle ; + __property OnControlAction ; + __property OnCopy ; + __property OnGetItemCursor ; + __property OnImportPicture ; + __property OnItemAction ; + __property OnItemHint ; + __property OnJump ; + __property OnHScrolled ; + __property OnHTMLSaveImage ; + __property OnPaint ; + __property OnProgress ; + __property OnReadHyperlink ; + __property OnRVDblClick ; + __property OnRVFImageListNeeded ; + __property OnRVFControlNeeded ; + __property OnRVFPictureNeeded ; + __property OnRVMouseDown ; + __property OnRVMouseMove ; + __property OnRVMouseUp ; + __property OnRVRightClick ; + __property OnSaveComponentToFile ; + __property OnSaveHTMLExtra ; + __property OnSaveImage2 ; + __property OnSaveItemToFile ; + __property OnSaveRTFExtra ; + __property OnSelect ; + __property OnSmartPopupClick ; + __property OnSpellingCheck ; + __property OnVScrolled ; + __property OnWriteHyperlink ; + __property AllowSelection ; + __property SingleClick ; + __property OnURLNeeded ; +public: + #pragma option push -w-inl + /* TCustomRichViewEdit.Create */ inline __fastcall virtual TRichViewEdit(Classes::TComponent* AOwner) : TCustomRichViewEdit(AOwner) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCustomRichView.Destroy */ inline __fastcall virtual ~TRichViewEdit(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TRichViewEdit(HWND ParentWindow) : TCustomRichViewEdit(ParentWindow) { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRichViewUnicodeInput { rvuiStandard, rvuiAlternative }; +#pragma option pop + +//-- var, const, procedure --------------------------------------------------- +static const Word WM_RVUNDOFROMINPLACE = 0x40d; +static const Word WM_RVREDOFROMINPLACE = 0x40e; +extern PACKAGE TRichViewUnicodeInput RichViewUnicodeInput; + +} /* namespace Rvedit */ +using namespace Rvedit; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvedit diff --git a/12.0.4/Units/D2006/RVFMisc.dcu b/12.0.4/Units/D2006/RVFMisc.dcu new file mode 100644 index 0000000..4fa37e4 Binary files /dev/null and b/12.0.4/Units/D2006/RVFMisc.dcu differ diff --git a/12.0.4/Units/D2006/RVFMisc.hpp b/12.0.4/Units/D2006/RVFMisc.hpp new file mode 100644 index 0000000..5731ce0 --- /dev/null +++ b/12.0.4/Units/D2006/RVFMisc.hpp @@ -0,0 +1,76 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvfmisc.pas' rev: 10.00 + +#ifndef RvfmiscHPP +#define RvfmiscHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvfmisc +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE bool RichViewWriteControlIgnoreChildren; +extern PACKAGE void __fastcall RVFWrite(Classes::TStream* Stream, const AnsiString s); +extern PACKAGE void __fastcall RVFWriteLine(Classes::TStream* Stream, AnsiString s); +extern PACKAGE void __fastcall RVFWriteLineX(Classes::TStream* Stream, const AnsiString s, bool Unicode, bool HexUnicode); +extern PACKAGE AnsiString __fastcall RVFStream2TextString(Rvclasses::TRVMemoryStream* Stream); +extern PACKAGE AnsiString __fastcall RVEncodeString(const AnsiString str); +extern PACKAGE bool __fastcall RVFTextString2Stream(const AnsiString str, Rvclasses::TRVMemoryStream* Stream); +extern PACKAGE AnsiString __fastcall RVDecodeString(const AnsiString str); +extern PACKAGE void __fastcall RVFSaveStreamToStream(Classes::TStream* SourceStream, Classes::TStream* Stream); +extern PACKAGE Rvclasses::TRVMemoryStream* __fastcall RVFStringToStream(const AnsiString str); +extern PACKAGE AnsiString __fastcall RVEncodeWideString(const WideString str); +extern PACKAGE WideString __fastcall RVDecodeWideString(const AnsiString str); +extern PACKAGE bool __fastcall RVFLoadPicture(const AnsiString s, Graphics::TGraphic* gr); +extern PACKAGE AnsiString __fastcall RVFSavePicture(Graphics::TGraphic* gr); +extern PACKAGE AnsiString __fastcall RVFSavePictureBinaryWithoutSize(Graphics::TGraphic* gr); +extern PACKAGE void __fastcall RVFLoadPictureBinary(const AnsiString Data, Graphics::TGraphic* gr); +extern PACKAGE void __fastcall RVFLoadPictureBinary2(Classes::TStream* AStream, Graphics::TGraphic* gr); +extern PACKAGE void __fastcall RVFSavePictureBinary(Classes::TStream* Stream, Graphics::TGraphic* gr); +extern PACKAGE bool __fastcall RVFLoadControl(const AnsiString s, Classes::TComponent* &ctrl, const AnsiString ClassName, Controls::TWinControl* ParentControl, Classes::TReaderError OnError); +extern PACKAGE AnsiString __fastcall RVFSaveControl(Classes::TComponent* ctrl); +extern PACKAGE bool __fastcall RVFLoadControlBinary(const AnsiString Data, Classes::TComponent* &ctrl, const AnsiString ClassName, Controls::TWinControl* ParentControl, Classes::TReaderError OnError); +extern PACKAGE void __fastcall RVFSaveControlBinary(Classes::TStream* Stream, Classes::TComponent* ctrl); +extern PACKAGE bool __fastcall RVFReadString(char * &P, AnsiString &s); +extern PACKAGE bool __fastcall RVFReadInteger(char * &P, int &V); +extern PACKAGE AnsiString __fastcall RVFReadText(char * &P); +extern PACKAGE bool __fastcall RVFReadTag(char * &P, bool TagsArePChars, bool Quoted, int &Tag, bool UTF8Strings); +extern PACKAGE bool __fastcall RVFReadParaStyle(Rvstyle::TRVStyle* RVStyle, char * &P, int &V, bool UTF8Strings, bool &StyleNameUsed); +extern PACKAGE bool __fastcall RVFReadTextStyle(Rvstyle::TRVStyle* RVStyle, char * &P, int &V, bool UTF8Strings, bool &StyleNameUsed); +extern PACKAGE AnsiString __fastcall RVFSaveTag(bool TagsArePChars, int Tag); +extern PACKAGE AnsiString __fastcall RVFSaveText(Rvstyle::TRVStyle* RVStyle, bool UseStyleNames, int TextIdx); +extern PACKAGE AnsiString __fastcall RVFSavePara(Rvstyle::TRVStyle* RVStyle, bool UseStyleNames, int TextIdx); +extern PACKAGE AnsiString __fastcall RVFItemSavePara(int ParaNo, Classes::TPersistent* RVData, bool ForceSameAsPrev); +extern PACKAGE AnsiString __fastcall RVFEncodeLineBreaks(const AnsiString s); +extern PACKAGE AnsiString __fastcall RVFDecodeLineBreaks(const AnsiString s); +extern PACKAGE AnsiString __fastcall StringToRVFString(const AnsiString s); +extern PACKAGE AnsiString __fastcall RVFStringToString(const AnsiString s, bool UTF8); + +} /* namespace Rvfmisc */ +using namespace Rvfmisc; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvfmisc diff --git a/12.0.4/Units/D2006/RVFuncs.dcu b/12.0.4/Units/D2006/RVFuncs.dcu new file mode 100644 index 0000000..c4a1380 Binary files /dev/null and b/12.0.4/Units/D2006/RVFuncs.dcu differ diff --git a/12.0.4/Units/D2006/RVFuncs.hpp b/12.0.4/Units/D2006/RVFuncs.hpp new file mode 100644 index 0000000..2fa93a9 --- /dev/null +++ b/12.0.4/Units/D2006/RVFuncs.hpp @@ -0,0 +1,125 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvfuncs.pas' rev: 10.00 + +#ifndef RvfuncsHPP +#define RvfuncsHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvfuncs +{ +//-- type declarations ------------------------------------------------------- +typedef bool __fastcall (*TCustomRVIsURLFunction)(const AnsiString Word); + +#pragma option push -b- +enum TRVLineStyle { rvlsNormal, rvlsRoundDotted, rvlsDotted, rvlsDashed, rvlsDashDotted, rvlsDashDotDotted }; +#pragma option pop + +typedef Graphics::TGraphic* __fastcall (*TRV_CreateGraphicsFunction)(TMetaClass* GraphicClass); + +typedef void __fastcall (*TRV_AfterImportGraphicsProc)(Graphics::TGraphic* Graphic); + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE int RichViewPixelsPerInch; +static const Extended RVEps = 1.000000E-20; +extern PACKAGE TCustomRVIsURLFunction RVIsCustomURL; +extern PACKAGE TRV_CreateGraphicsFunction RV_CreateGraphics; +extern PACKAGE TRV_AfterImportGraphicsProc RV_AfterImportGraphic; +extern PACKAGE bool RichViewAlternativePicPrint; +extern PACKAGE Windows::POutlineTextmetricA __fastcall RV_GetOutlineTextMetrics(Graphics::TCanvas* Canvas); +extern PACKAGE int __fastcall RV_CopyTag(int SourceTag, bool TagsArePChars); +extern PACKAGE bool __fastcall RV_CompareTags(int Tag1, int Tag2, bool TagsArePChars); +extern PACKAGE AnsiString __fastcall RV_ReplaceTabsA(const AnsiString s, int SpacesInTab); +extern PACKAGE AnsiString __fastcall RV_ReplaceTabsW(const AnsiString s, int SpacesInTab); +extern PACKAGE int __fastcall RV_CharPos(const char * Str, char Chr, int Length); +extern PACKAGE void __fastcall RV_ReplaceStr(AnsiString &str, AnsiString oldstr, AnsiString newstr); +extern PACKAGE void __fastcall RV_ReplaceStrA(AnsiString &str, AnsiString oldstr, AnsiString newstr); +extern PACKAGE AnsiString __fastcall RV_GetHintStr(Rvstyle::TRVSaveFormat DocFormat, const AnsiString Hint); +extern PACKAGE int __fastcall RV_GetDefSubSuperScriptSize(int NormalSize); +extern PACKAGE int __fastcall RV_GetDefSubSuperScriptSizeRev(int ScriptSize); +extern PACKAGE AnsiString __fastcall RV_IntToRoman(int Value); +extern PACKAGE AnsiString __fastcall RV_IntToAlpha(int Value); +extern PACKAGE AnsiString __fastcall RV_GetHTMLRGBStr(Graphics::TColor Color, bool Quotes); +extern PACKAGE AnsiString __fastcall RV_GetHTMLRGBStr2(Graphics::TColor Color, bool Quotes); +extern PACKAGE AnsiString __fastcall RV_GetCSSBkColor(Graphics::TColor Color); +extern PACKAGE AnsiString __fastcall RV_GetHTMLPath(const AnsiString Path); +extern PACKAGE void __fastcall RV_AddStrEx(AnsiString &s1, const AnsiString s2, const AnsiString Delimiter); +extern PACKAGE void __fastcall RV_AddStr(AnsiString &s1, const AnsiString s2); +extern PACKAGE void __fastcall RV_AddStrExA(AnsiString &s1, const AnsiString s2, const AnsiString Delimiter); +extern PACKAGE void __fastcall RV_AddStrA(AnsiString &s1, const AnsiString s2); +extern PACKAGE AnsiString __fastcall RV_GetHTMLFontCSS(Graphics::TFont* Font, bool UseFontName); +extern PACKAGE int __fastcall RV_HTMLGetFontSize(int pts); +extern PACKAGE AnsiString __fastcall RV_HTMLOpenFontTag(Rvstyle::TFontInfo* ts, Rvstyle::TFontInfo* normalts, bool Relative, Rvstyle::TRVSaveOptions SaveOptions); +extern PACKAGE AnsiString __fastcall RV_HTMLOpenFontTag2(Graphics::TFont* fnt, Rvstyle::TFontInfo* normalts, bool UseFontName, Rvstyle::TRVSaveOptions SaveOptions); +extern PACKAGE AnsiString __fastcall RV_HTMLCloseFontTag(Rvstyle::TFontInfo* ts, Rvstyle::TFontInfo* normalts, bool Relative); +extern PACKAGE AnsiString __fastcall RV_HTMLCloseFontTag2(Graphics::TFont* fnt, Rvstyle::TFontInfo* normalts, bool UseFontName); +extern PACKAGE AnsiString __fastcall RV_MakeHTMLSymbolStrA(const AnsiString s); +extern PACKAGE AnsiString __fastcall RV_MakeHTMLSymbolStrRaw(const AnsiString s); +extern PACKAGE AnsiString __fastcall RV_MakeHTMLSymbolStr(const AnsiString s); +extern PACKAGE AnsiString __fastcall RV_MakeHTMLStr(const AnsiString str, bool SpecialCode); +extern PACKAGE AnsiString __fastcall RV_CharSet2HTMLLang(Graphics::TFontCharset CharSet); +extern PACKAGE AnsiString __fastcall RV_DecodeURL(const AnsiString s, bool DecodeLineBreaks); +extern PACKAGE AnsiString __fastcall RV_HTMLGetEndingSlash(Rvstyle::TRVSaveOptions SaveOptions); +extern PACKAGE AnsiString __fastcall RV_HTMLGetNoValueAttribute(const AnsiString Attr, Rvstyle::TRVSaveOptions SaveOptions); +extern PACKAGE AnsiString __fastcall RV_HTMLGetIntAttrVal2(int Value, Rvstyle::TRVSaveOptions SaveOptions); +extern PACKAGE AnsiString __fastcall RV_HTMLGetIntAttrVal(int Value, Rvstyle::TRVSaveOptions SaveOptions); +extern PACKAGE AnsiString __fastcall RV_HTMLGetStrAttrVal(const AnsiString Value, Rvstyle::TRVSaveOptions SaveOptions); +extern PACKAGE AnsiString __fastcall RVMakeRTFStr(const AnsiString s, bool SpecialCode, bool UseNamedEntities); +extern PACKAGE AnsiString __fastcall RVMakeRTFStrW(const WideString s, Rvstyle::TRVCodePage CodePage, bool SaveAnsi, bool ForceSaveAnsi, bool SpecialCode); +extern PACKAGE AnsiString __fastcall RVMakeRTFFileNameStr(const AnsiString s, Rvstyle::TRVCodePage CodePage, bool SaveAnsi); +extern PACKAGE AnsiString __fastcall MakeRTFIdentifierStr(const AnsiString s, Rvstyle::TRVCodePage CodePage, bool SaveAnsi); +extern PACKAGE AnsiString __fastcall MakeRTFBookmarkNameStr(const AnsiString s); +extern PACKAGE void __fastcall RVWriteUnicodeRTFStr(Classes::TStream* Stream, const AnsiString s, Rvstyle::TRVCodePage CodePage, bool SaveAnsi, bool ForceSaveAnsi, bool SpecialCode, bool DoubleBSlashes); +extern PACKAGE bool __fastcall RVIsURL(const AnsiString s); +extern PACKAGE bool __fastcall RVIsEmail(const AnsiString s); +extern PACKAGE int __fastcall RV_XToDevice(int X, const Rvstyle::TRVScreenAndDevice &sad); +extern PACKAGE int __fastcall RV_YToDevice(int Y, const Rvstyle::TRVScreenAndDevice &sad); +extern PACKAGE int __fastcall RV_XToScreen(int X, const Rvstyle::TRVScreenAndDevice &sad); +extern PACKAGE int __fastcall RV_YToScreen(int Y, const Rvstyle::TRVScreenAndDevice &sad); +extern PACKAGE void __fastcall RV_RectToScreen(Types::TRect &R, const Rvstyle::TRVScreenAndDevice &sad); +extern PACKAGE void __fastcall RV_InfoAboutSaD(Rvstyle::TRVScreenAndDevice &sad, Graphics::TCanvas* Canvas); +extern PACKAGE int __fastcall RV_GetPixelsPerInch(void); +extern PACKAGE bool __fastcall RV_PointInRect(int X, int Y, int Left, int Top, int Width, int Height); +extern PACKAGE Graphics::TGraphic* __fastcall RV_CreateGraphicsDefault(TMetaClass* GraphicClass); +extern PACKAGE void __fastcall RV_AfterImportGraphicDefault(Graphics::TGraphic* Graphic); +extern PACKAGE int __fastcall RV_GetLuminance(Graphics::TColor Color); +extern PACKAGE Graphics::TColor __fastcall RV_GetGray(Graphics::TColor Color); +extern PACKAGE Graphics::TColor __fastcall RV_GetPrnColor(Graphics::TColor Color); +extern PACKAGE Graphics::TColor __fastcall RV_GetColor(Graphics::TColor Color, Rvstyle::TRVColorMode ColorMode); +extern PACKAGE Graphics::TColor __fastcall RV_GetBackColor(Graphics::TColor Color, Rvstyle::TRVColorMode ColorMode); +extern PACKAGE bool __fastcall RV_IsGraphicTransparent(Graphics::TGraphic* gr); +extern PACKAGE void __fastcall RV_SetPaletteToPicture(Graphics::TGraphic* gr, Windows::PLogPalette PLogPal); +extern PACKAGE void __fastcall RV_PictureToDevice(Graphics::TCanvas* Canvas, int x, int y, int width, int height, Rvstyle::PRVScreenAndDevice sad, Graphics::TGraphic* gr, bool ToScreen); +extern PACKAGE void __fastcall ShadeRectangle(Graphics::TCanvas* Canvas, const Types::TRect &R, Graphics::TColor Color); +extern PACKAGE int __fastcall RV_Sign(int Value); +extern PACKAGE void __fastcall RVDrawCustomHLine(Graphics::TCanvas* Canvas, Graphics::TColor Color, TRVLineStyle LineStyle, int LineWidth, int Left, int Right, int Y, int PeriodLength); +extern PACKAGE int __fastcall RVGetDefaultUnderlineWidth(int FontSize); +extern PACKAGE void __fastcall RVDrawLineBetweenRects(int Left1, int Top1, int Width1, int Height1, int Left2, int Top2, int Width2, int Height2, Graphics::TCanvas* Canvas); + +} /* namespace Rvfuncs */ +using namespace Rvfuncs; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvfuncs diff --git a/12.0.4/Units/D2006/RVGetText.dcu b/12.0.4/Units/D2006/RVGetText.dcu new file mode 100644 index 0000000..77eb607 Binary files /dev/null and b/12.0.4/Units/D2006/RVGetText.dcu differ diff --git a/12.0.4/Units/D2006/RVGetText.hpp b/12.0.4/Units/D2006/RVGetText.hpp new file mode 100644 index 0000000..f55c0eb --- /dev/null +++ b/12.0.4/Units/D2006/RVGetText.hpp @@ -0,0 +1,45 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvgettext.pas' rev: 10.00 + +#ifndef RvgettextHPP +#define RvgettextHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvgettext +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE AnsiString __fastcall GetCurrentLineText(Rvedit::TCustomRichViewEdit* rve); +extern PACKAGE AnsiString __fastcall GetVisibleText(Richview::TCustomRichView* rv); +extern PACKAGE AnsiString __fastcall GetRVDataText(Crvdata::TCustomRVData* RVData); +extern PACKAGE AnsiString __fastcall GetAllText(Richview::TCustomRichView* rv); +extern PACKAGE AnsiString __fastcall GetCurrentParaSectionText(Rvedit::TCustomRichViewEdit* rve); +extern PACKAGE AnsiString __fastcall GetCurrentParaText(Rvedit::TCustomRichViewEdit* rve); +extern PACKAGE AnsiString __fastcall GetCurrentChar(Rvedit::TCustomRichViewEdit* rve); +extern PACKAGE AnsiString __fastcall GetCurrentWord(Rvedit::TCustomRichViewEdit* rve); + +} /* namespace Rvgettext */ +using namespace Rvgettext; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvgettext diff --git a/12.0.4/Units/D2006/RVGetTextW.dcu b/12.0.4/Units/D2006/RVGetTextW.dcu new file mode 100644 index 0000000..966b4c4 Binary files /dev/null and b/12.0.4/Units/D2006/RVGetTextW.dcu differ diff --git a/12.0.4/Units/D2006/RVGetTextW.hpp b/12.0.4/Units/D2006/RVGetTextW.hpp new file mode 100644 index 0000000..c580e42 --- /dev/null +++ b/12.0.4/Units/D2006/RVGetTextW.hpp @@ -0,0 +1,46 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvgettextw.pas' rev: 10.00 + +#ifndef RvgettextwHPP +#define RvgettextwHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvgettextw +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE WideString __fastcall GetCurrentLineText(Rvedit::TCustomRichViewEdit* rve); +extern PACKAGE WideString __fastcall GetVisibleText(Richview::TCustomRichView* rv); +extern PACKAGE WideString __fastcall GetRVDataText(Crvdata::TCustomRVData* RVData); +extern PACKAGE WideString __fastcall GetAllText(Richview::TCustomRichView* rv); +extern PACKAGE WideString __fastcall GetCurrentParaSectionText(Rvedit::TCustomRichViewEdit* rve); +extern PACKAGE WideString __fastcall GetCurrentParaText(Rvedit::TCustomRichViewEdit* rve); +extern PACKAGE WideString __fastcall GetCurrentChar(Rvedit::TCustomRichViewEdit* rve); +extern PACKAGE WideString __fastcall GetCurrentWord(Rvedit::TCustomRichViewEdit* rve); + +} /* namespace Rvgettextw */ +using namespace Rvgettextw; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvgettextw diff --git a/12.0.4/Units/D2006/RVGifAnimate.pas b/12.0.4/Units/D2006/RVGifAnimate.pas new file mode 100644 index 0000000..3d42751 --- /dev/null +++ b/12.0.4/Units/D2006/RVGifAnimate.pas @@ -0,0 +1,303 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVGifImageAnimator: displaying animation for } +{ TGifImage by Anders Melander. } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, GifImage; + +type + { --------------------------------------------------------------------------- + TRVGifImageAnimator: displaying animations for gif images + (using TGifImage by Anders Melander) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be its background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVGifImageAnimator ========================} +{ Destructor } +destructor TRVGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVGifImageAnimator.CalcInterval; +var gif: TGifImage; +begin + gif := TGifImage(TRVGraphicItemInfo(item).Image); + Interval := 10; //GIFDefaultDelay; + if gif.Images[FrameIndex].GraphicControlExtension=nil then + exit; + if gif.Images[FrameIndex].GraphicControlExtension.Delay > 0 then begin + Interval := gif.Images[FrameIndex].GraphicControlExtension.Delay; + if (Interval < GIFMinimumDelay) then + Interval := GIFMinimumDelay; + if (Interval > GIFMaximumDelay) then + Interval := GIFMaximumDelay; + end; + Interval := Interval*10; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +type + TGifSubImageHack = class (TGifSubImage) + end; + +{ Draws the current frame } +procedure TRVGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TGifImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul, HeightDiv: Integer; + WidthMul, WidthDiv: Integer; + begin + with gif.Images[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Left, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Top, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Left+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Top+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if (FrameIndex>0) and (gif.Images[FrameIndex-1].GraphicControlExtension<>nil) then + case gif.Images[FrameIndex-1].GraphicControlExtension.Disposal of + dmBackground: + begin + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex-1); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + gif.Images[FrameIndex].StretchDraw(bmp.Canvas, + ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex), + gif.Images[FrameIndex].Transparent, (goTile in gif.DrawOptions)); + gif.Images[FrameIndex].HasBitmap := False; + TGifSubImageHack(gif.Images[FrameIndex]).FreeMask; + TGifSubImageHack(gif.Images[FrameIndex]).Palette := 0; + gif.Palette := 0; + end; + +begin + gif := TGifImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if (goTransparent in gif.DrawOptions) then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex1) and gif.Images[Result-1].Empty do + dec(Result); +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVGifImageAnimator.GetFrameCount: Integer; +begin + Result := TGifImage(TRVGraphicItemInfo(item).Image).Images.Count; + while (Result>1) and + TGifImage(TRVGraphicItemInfo(item).Image).Images[Result-1].Empty do + dec(Result); +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TGifImage) and + (GetGifFrameCount(TGifImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D2006/RVItem.dcu b/12.0.4/Units/D2006/RVItem.dcu new file mode 100644 index 0000000..28b8a1b Binary files /dev/null and b/12.0.4/Units/D2006/RVItem.dcu differ diff --git a/12.0.4/Units/D2006/RVItem.hpp b/12.0.4/Units/D2006/RVItem.hpp new file mode 100644 index 0000000..b9b2504 --- /dev/null +++ b/12.0.4/Units/D2006/RVItem.hpp @@ -0,0 +1,804 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvitem.pas' rev: 10.00 + +#ifndef RvitemHPP +#define RvitemHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvitem +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS ERichViewError; +class PASCALIMPLEMENTATION ERichViewError : public Sysutils::Exception +{ + typedef Sysutils::Exception inherited; + +public: + #pragma option push -w-inl + /* Exception.Create */ inline __fastcall ERichViewError(const AnsiString Msg) : Sysutils::Exception(Msg) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateFmt */ inline __fastcall ERichViewError(const AnsiString Msg, System::TVarRec const * Args, const int Args_Size) : Sysutils::Exception(Msg, Args, Args_Size) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateRes */ inline __fastcall ERichViewError(int Ident)/* overload */ : Sysutils::Exception(Ident) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateResFmt */ inline __fastcall ERichViewError(int Ident, System::TVarRec const * Args, const int Args_Size)/* overload */ : Sysutils::Exception(Ident, Args, Args_Size) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateHelp */ inline __fastcall ERichViewError(const AnsiString Msg, int AHelpContext) : Sysutils::Exception(Msg, AHelpContext) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateFmtHelp */ inline __fastcall ERichViewError(const AnsiString Msg, System::TVarRec const * Args, const int Args_Size, int AHelpContext) : Sysutils::Exception(Msg, Args, Args_Size, AHelpContext) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateResHelp */ inline __fastcall ERichViewError(int Ident, int AHelpContext)/* overload */ : Sysutils::Exception(Ident, AHelpContext) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateResFmtHelp */ inline __fastcall ERichViewError(System::PResStringRec ResStringRec, System::TVarRec const * Args, const int Args_Size, int AHelpContext)/* overload */ : Sysutils::Exception(ResStringRec, Args, Args_Size, AHelpContext) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~ERichViewError(void) { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVItemOption { rvioSameAsPrev, rvioPageBreakBefore, rvioBR, rvioUnicode, rvioClearLeft, rvioClearRight, rvioGroupWithNext }; +#pragma option pop + +typedef Set TRVItemOptions; + +#pragma option push -b- +enum TRVItemState { rvisSpellChecked }; +#pragma option pop + +typedef Set TRVItemStates; + +#pragma option push -b- +enum TRVItemDrawState { rvidsSelected, rvidsCurrent, rvidsHover, rvidsPrinting, rvidsPreview, rvidsPreviewCorrection, rvidsControlFocused, rvidsCanUseCustomPPI, rvidsRTL, rvidsShowSpecialCharacters, rvidsDrawInplaceOnMainCanvas, rvidsPrintSimulation }; +#pragma option pop + +typedef Set TRVItemDrawStates; + +#pragma option push -b- +enum TRVFReadMode { rmText, rmBeforeBinary, rmBinary, rmBeforeUnicode, rmUnicode, rmAfterUnicode }; +#pragma option pop + +#pragma option push -b- +enum TRVFReadState { rstHeader, rstData, rstSkip }; +#pragma option pop + +#pragma option push -b- +enum TRVItemBoolProperty { rvbpIgnorePara, rvbpFullWidth, rvbpValid, rvbpRequiresRVFLines, rvbpDrawingChangesFont, rvbpCanSaveUnicode, rvbpAlwaysInText, rvbpImmediateControlOwner, rvbpResizable, rvbpResizeHandlesOutside, rvbpHasSubRVData, rvbpClickSelect, rvbpNoHTML_P, rvbpSwitchToAssStyleNo, rvbpFloating }; +#pragma option pop + +#pragma option push -b- +enum TRVItemBoolPropertyEx { rvbpDisplayActiveState, rvbpPrintToBMP, rvbpJump, rvbpAllowsFocus, rvbpHotColdJump, rvbpXORFocus, rvbpActualPrintSize }; +#pragma option pop + +#pragma option push -b- +enum TRVEnterDirection { rvedLeft, rvedRight, rvedTop, rvedBottom }; +#pragma option pop + +#pragma option push -b- +enum TRVExtraItemProperty { rvepUnknown, rvepVShift, rvepVShiftAbs, rvepImageWidth, rvepImageHeight, rvepTransparent, rvepTransparentMode, rvepTransparentColor, rvepMinHeightOnPage, rvepSpacing, rvepResizable, rvepDeleteProtect, rvepNoHTMLImageSize, rvepAnimationInterval, rvepVisible }; +#pragma option pop + +#pragma option push -b- +enum TRVExtraItemStrProperty { rvespUnknown, rvespHint, rvespAlt, rvespImageFileName }; +#pragma option pop + +#pragma option push -b- +enum TRVEStyleConversionType { rvscParaStyle, rvscTextStyle, rvscParaStyleConversion, rvscTextStyleConversion, rvscParaStyleTemplate, rvscTextStyleTemplate }; +#pragma option pop + +class DELPHICLASS TRVMultiDrawItemPart; +class DELPHICLASS TCustomRVItemInfo; +class PASCALIMPLEMENTATION TRVMultiDrawItemPart : public System::TObject +{ + typedef System::TObject inherited; + +public: + int Height; + DYNAMIC int __fastcall GetSoftPageBreakInfo(void); + DYNAMIC bool __fastcall IsComplexSoftPageBreak(Dlines::TRVDrawLineInfo* DrawItem); + DYNAMIC void __fastcall AssignSoftPageBreaksToItem(Dlines::TRVDrawLineInfo* DrawItem, TCustomRVItemInfo* Item); + virtual int __fastcall GetImageHeight(void); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVMultiDrawItemPart(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVMultiDrawItemPart(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVDeleteUnusedStylesData; +class PASCALIMPLEMENTATION TRVDeleteUnusedStylesData : public System::TObject +{ + typedef System::TObject inherited; + +private: + bool FInitialized; + bool FConvertedToShifts; + Rvclasses::TRVIntegerList* FUsedTextStyles; + Rvclasses::TRVIntegerList* FUsedParaStyles; + Rvclasses::TRVIntegerList* FUsedListStyles; + bool FTextStyles; + bool FParaStyles; + bool FListStyles; + +public: + __fastcall TRVDeleteUnusedStylesData(bool ATextStyles, bool AParaStyles, bool AListStyles); + __fastcall virtual ~TRVDeleteUnusedStylesData(void); + void __fastcall Init(Rvstyle::TRVStyle* RVStyle); + void __fastcall ConvertFlagsToShifts(Rvstyle::TRVStyle* RVStyle); + __property Rvclasses::TRVIntegerList* UsedTextStyles = {read=FUsedTextStyles}; + __property Rvclasses::TRVIntegerList* UsedParaStyles = {read=FUsedParaStyles}; + __property Rvclasses::TRVIntegerList* UsedListStyles = {read=FUsedListStyles}; + __property bool TextStyles = {read=FTextStyles, nodefault}; + __property bool ParaStyles = {read=FParaStyles, nodefault}; + __property bool ListStyles = {read=FListStyles, nodefault}; + __property bool ConvertedToShifts = {read=FConvertedToShifts, nodefault}; +}; + + +class DELPHICLASS TRVCPInfo; +class PASCALIMPLEMENTATION TRVCPInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + AnsiString Name; + TRVCPInfo* Next; + TRVCPInfo* Prev; + bool RaiseEvent; + bool Persistent; + TCustomRVItemInfo* ItemInfo; + int ItemNo; + int Tag; + void __fastcall Assign(TRVCPInfo* Source, bool TagsArePChars); + TRVCPInfo* __fastcall CreateCopy(bool TagsArePChars); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVCPInfo(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVCPInfo(void) { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVSubRVDataPos { rvdFirst, rvdLast, rvdChosenUp, rvdChosenDown, rvdNext, rvdPrev }; +#pragma option pop + +class DELPHICLASS TRVStoreSubRVData; +class PASCALIMPLEMENTATION TRVStoreSubRVData : public System::TObject +{ + typedef System::TObject inherited; + +public: + DYNAMIC TRVStoreSubRVData* __fastcall Duplicate(void); + DYNAMIC int __fastcall Compare(TRVStoreSubRVData* StoreSub); +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVStoreSubRVData(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVStoreSubRVData(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TCustomRVItemInfo : public Classes::TPersistent +{ + typedef Classes::TPersistent inherited; + +private: + bool __fastcall GetSameAsPrev(void); + void __fastcall SetSameAsPrev(const bool Value); + bool __fastcall GetBR(void); + void __fastcall SetBR(bool Value); + bool __fastcall GetPageBreakBefore(void); + void __fastcall SetPageBreakBefore(const bool Value); + bool __fastcall GetClearLeft(void); + bool __fastcall GetClearRight(void); + void __fastcall SetClearLeft(const bool Value); + void __fastcall SetClearRight(const bool Value); + +protected: + DYNAMIC AnsiString __fastcall SaveRVFHeaderTail(Classes::TPersistent* RVData); + DYNAMIC int __fastcall GetRVFExtraPropertyCount(void); + DYNAMIC void __fastcall SaveRVFExtraProperties(Classes::TStream* Stream); + void __fastcall SetExtraPropertyFromRVFStr(const AnsiString Str, bool UTF8Strings); + virtual int __fastcall GetAssociatedTextStyleNo(void); + virtual void __fastcall SetAssociatedTextStyleNo(int Value); + +public: + AnsiString ItemText; + int StyleNo; + int ParaNo; + TRVItemOptions ItemOptions; + TRVItemStates ItemState; + Rvwordpaint::TRVWordPainterList* WordPaintList; + TRVCPInfo* Checkpoint; + int JumpID; + int Tag; + int DrawItemNo; + AnsiString Hint; + __fastcall virtual TCustomRVItemInfo(Classes::TPersistent* RVData); + __fastcall virtual ~TCustomRVItemInfo(void); + void __fastcall ClearLiveSpellingResult(void); + void __fastcall ClearWordPainters(int Index); + bool __fastcall AdjustWordPaintersOnInsert(int Index, const AnsiString Text, char ch, Classes::TPersistent* RVData); + bool __fastcall AdjustWordPaintersOnDelete(int Index, int Count); + bool __fastcall GetMisspelling(int Offs, int &MisOffs, int &MisLength); + void __fastcall AddMisspelling(int StartOffs, int Length); + bool __fastcall IsMisspelled(int Index); + bool __fastcall ValidateMisspelledWord(const AnsiString AItemText, const AnsiString AWord); + HIDESBASEDYNAMIC void __fastcall Assign(TCustomRVItemInfo* Source); + DYNAMIC void __fastcall TransferProperties(TCustomRVItemInfo* Source, Classes::TPersistent* RVData); + DYNAMIC Classes::TPersistent* __fastcall GetSubRVDataAt(int X, int Y); + virtual int __fastcall GetMinWidth(Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData); + DYNAMIC bool __fastcall OwnsControl(Controls::TControl* AControl); + DYNAMIC bool __fastcall OwnsInplaceEditor(Controls::TControl* AEditor); + bool __fastcall CanBeBorderStart(void); + bool __fastcall ParaStart(bool CountBR); + __property bool SameAsPrev = {read=GetSameAsPrev, write=SetSameAsPrev, nodefault}; + virtual Graphics::TGraphic* __fastcall AsImage(void); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + DYNAMIC AnsiString __fastcall AsText(int LineWidth, Classes::TPersistent* RVData, const AnsiString Text, const AnsiString Path, bool TextOnly, bool Unicode); + DYNAMIC void __fastcall UpdatePaletteInfo(Rvscroll::TRVPaletteAction PaletteAction, bool ForceRecreateCopy, HPALETTE Palette, Windows::PLogPalette LogPalette); + DYNAMIC bool __fastcall ReadRVFHeaderTail(char * &P, Classes::TPersistent* RVData, bool UTF8Strings, bool &AssStyleNameUsed); + virtual bool __fastcall GetBoolValue(TRVItemBoolProperty Prop); + virtual bool __fastcall GetBoolValueEx(TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + DYNAMIC bool __fastcall ReadRVFLine(const AnsiString s, Classes::TPersistent* RVData, int ReadType, int LineNo, int LineCount, AnsiString &Name, TRVFReadMode &ReadMode, TRVFReadState &ReadState, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC void __fastcall SaveRVFSelection(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo); + DYNAMIC void __fastcall SaveTextSelection(Classes::TStream* Stream, Classes::TPersistent* RVData, int LineWidth, const AnsiString Path, bool TextOnly, bool Unicode); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + DYNAMIC void __fastcall FillRTFTables(Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* ListOverrideCountList, Classes::TPersistent* RVData); + virtual void __fastcall PaintFullWidth(int Left, int Right, int Top, Graphics::TCanvas* Canvas, TRVItemDrawStates State, Rvstyle::TRVStyle* Style, const Types::TRect &ClipRect, Dlines::TRVDrawLineInfo* dli, int ExtraX, int ExtraY); + virtual void __fastcall Paint(int x, int y, Graphics::TCanvas* Canvas, TRVItemDrawStates State, Rvstyle::TRVStyle* Style, Dlines::TRVDrawLineInfo* dli); + virtual bool __fastcall PrintToBitmap(Graphics::TBitmap* Bkgnd, bool Preview, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode); + virtual void __fastcall Print(Graphics::TCanvas* Canvas, int x, int y, int x2, bool Preview, bool Correction, const Rvstyle::TRVScreenAndDevice &sad, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode, Classes::TPersistent* RVData); + virtual int __fastcall GetImageWidth(Rvstyle::TRVStyle* RVStyle); + virtual int __fastcall GetImageHeight(Rvstyle::TRVStyle* RVStyle); + virtual int __fastcall GetBorderWidth(void); + virtual int __fastcall GetBorderHeight(void); + DYNAMIC void __fastcall MovingToUndoList(int ItemNo, System::TObject* RVData, System::TObject* AContainerUndoItem); + DYNAMIC void __fastcall MovingFromUndoList(int ItemNo, System::TObject* RVData); + DYNAMIC void __fastcall FinalizeUndoGroup(void); + DYNAMIC bool __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y, int ItemNo, System::TObject* RVData); + DYNAMIC bool __fastcall MouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y, int ItemNo, System::TObject* RVData); + DYNAMIC bool __fastcall MouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y, int ItemNo, System::TObject* RVData); + DYNAMIC void __fastcall BeforeLoading(Rvstyle::TRVLoadFormat FileFormat); + DYNAMIC void __fastcall AfterLoading(Rvstyle::TRVLoadFormat FileFormat); + DYNAMIC void __fastcall DeselectPartial(void); + DYNAMIC bool __fastcall PartiallySelected(void); + DYNAMIC bool __fastcall CanDeletePartiallySelected(void); + DYNAMIC void __fastcall DeletePartiallySelected(void); + DYNAMIC void __fastcall ApplyStyleConversionToSubRVDatas(int UserData, bool SelectedOnly, TRVEStyleConversionType ConvType); + DYNAMIC void __fastcall ApplyStyleConversion(Classes::TPersistent* RVData, int ItemNo, int UserData, TRVEStyleConversionType ConvType); + virtual Dlines::TRVDrawLineInfo* __fastcall CreatePrintingDrawItem(System::TObject* RVData, const Rvstyle::TRVScreenAndDevice &sad); + DYNAMIC void __fastcall StartExport(void); + DYNAMIC void __fastcall EndExport(void); + virtual void __fastcall Inserting(System::TObject* RVData, AnsiString &Text, bool Safe); + virtual void __fastcall Inserted(System::TObject* RVData, int ItemNo); + DYNAMIC void __fastcall BeforeUndoChangeProperty(void); + DYNAMIC void __fastcall AfterUndoChangeProperty(void); + DYNAMIC bool __fastcall EnterItem(TRVEnterDirection From, int Coord); + DYNAMIC Controls::TCursor __fastcall GetHypertextCursor(Rvstyle::TRVStyle* RVStyle); + DYNAMIC void __fastcall BuildJumps(int Left, int Top, int &StartJumpNo, Classes::TList* jumps); + DYNAMIC void __fastcall Focusing(void); + DYNAMIC bool __fastcall MoveFocus(bool GoForward, Classes::TPersistent* &TopLevelRVData, int &TopLevelItemNo); + DYNAMIC void __fastcall ClearFocus(void); + DYNAMIC void __fastcall Execute(Classes::TPersistent* RVData); + DYNAMIC bool __fastcall AdjustFocusToControl(Controls::TControl* Control, Classes::TPersistent* &TopLevelRVData, int &TopLevelItemNo); + virtual void __fastcall OnDocWidthChange(int DocWidth, Dlines::TRVDrawLineInfo* dli, bool Printing, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData, Rvstyle::PRVScreenAndDevice sad, int &HShift, int &Desc, bool NoCaching, bool Reformatting, bool UseFormatCanvas); + DYNAMIC void __fastcall MarkStylesInUse(TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall UpdateStyles(TRVDeleteUnusedStylesData* Data); + DYNAMIC Classes::TPersistent* __fastcall GetSubRVData(TRVStoreSubRVData* &StoreState, TRVSubRVDataPos Position); + DYNAMIC void __fastcall ChooseSubRVData(TRVStoreSubRVData* StoreState); + DYNAMIC void __fastcall CleanUpChosen(void); + DYNAMIC void __fastcall ResetSubCoords(void); + DYNAMIC bool __fastcall SetExtraIntProperty(TRVExtraItemProperty Prop, int Value); + DYNAMIC bool __fastcall GetExtraIntProperty(TRVExtraItemProperty Prop, int &Value); + DYNAMIC bool __fastcall SetExtraStrProperty(TRVExtraItemStrProperty Prop, const AnsiString Value); + DYNAMIC bool __fastcall GetExtraStrProperty(TRVExtraItemStrProperty Prop, AnsiString &Value); + DYNAMIC bool __fastcall SetExtraCustomProperty(const AnsiString PropName, const AnsiString Value); + DYNAMIC int __fastcall GetSoftPageBreakDY(int Data); + int __fastcall GetActualStyleNo(Rvstyle::TRVStyle* RVStyle); + virtual void __fastcall DrawBackgroundForPrinting(Graphics::TCanvas* Canvas, const Types::TRect &Rect, const Types::TRect &FullRect, Rvstyle::TRVColorMode ColorMode, int ItemBackgroundLayer); + DYNAMIC void __fastcall ClearSoftPageBreaks(void); + DYNAMIC void __fastcall UpdateAnimator(System::TObject* RVData); + DYNAMIC void __fastcall KeyDown(Word Key, bool Shift); + __property bool BR = {read=GetBR, write=SetBR, nodefault}; + __property bool PageBreakBefore = {read=GetPageBreakBefore, write=SetPageBreakBefore, nodefault}; + __property bool ClearLeft = {read=GetClearLeft, write=SetClearLeft, nodefault}; + __property bool ClearRight = {read=GetClearRight, write=SetClearRight, nodefault}; + __property int AssociatedTextStyleNo = {read=GetAssociatedTextStyleNo, write=SetAssociatedTextStyleNo, nodefault}; +}; + + +typedef TMetaClass* TCustomRVItemInfoClass; + +class DELPHICLASS TRVItemList; +class PASCALIMPLEMENTATION TRVItemList : public Classes::TList +{ + typedef Classes::TList inherited; + +public: + AnsiString operator[](int Index) { return Items[Index]; } + +private: + AnsiString __fastcall GetItem(int Index); + TCustomRVItemInfo* __fastcall GetObject(int Index); + void __fastcall SetItem(int Index, const AnsiString Value); + void __fastcall SetObject(int Index, const TCustomRVItemInfo* Value); + +public: + void __fastcall AddObject(const AnsiString ItemText, TCustomRVItemInfo* Item); + void __fastcall InsertObject(int Index, const AnsiString ItemText, TCustomRVItemInfo* Item); + int __fastcall IndexOfObject(TCustomRVItemInfo* Item); + __property AnsiString Items[int Index] = {read=GetItem, write=SetItem/*, default*/}; + __property TCustomRVItemInfo* Objects[int Index] = {read=GetObject, write=SetObject}; +public: + #pragma option push -w-inl + /* TList.Destroy */ inline __fastcall virtual ~TRVItemList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVItemList(void) : Classes::TList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVTextItemInfo; +class PASCALIMPLEMENTATION TRVTextItemInfo : public TCustomRVItemInfo +{ + typedef TCustomRVItemInfo inherited; + +public: + virtual bool __fastcall GetBoolValueEx(TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + DYNAMIC void __fastcall Execute(Classes::TPersistent* RVData); + DYNAMIC void __fastcall MarkStylesInUse(TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall UpdateStyles(TRVDeleteUnusedStylesData* Data); + DYNAMIC bool __fastcall ReadRVFHeaderTail(char * &P, Classes::TPersistent* RVData, bool UTF8Strings, bool &AssStyleNameUsed); +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Create */ inline __fastcall virtual TRVTextItemInfo(Classes::TPersistent* RVData) : TCustomRVItemInfo(RVData) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVTextItemInfo(void) { } + #pragma option pop + +}; + + +typedef TMetaClass* TRVTextItemInfoClass; + +class DELPHICLASS TRVNonTextItemInfo; +class PASCALIMPLEMENTATION TRVNonTextItemInfo : public TCustomRVItemInfo +{ + typedef TCustomRVItemInfo inherited; + +protected: + virtual int __fastcall GetHeight(void); + virtual int __fastcall GetWidth(void); + DYNAMIC int __fastcall GetRVFExtraPropertyCount(void); + DYNAMIC void __fastcall SaveRVFExtraProperties(Classes::TStream* Stream); + +public: + bool DeleteProtect; + virtual int __fastcall GetLeftOverhang(void); + virtual void __fastcall AdjustInserted(int x, int y, bool adjusty); + DYNAMIC void __fastcall Assign(TCustomRVItemInfo* Source); + DYNAMIC bool __fastcall SetExtraIntProperty(TRVExtraItemProperty Prop, int Value); + DYNAMIC bool __fastcall GetExtraIntProperty(TRVExtraItemProperty Prop, int &Value); + __property int Height = {read=GetHeight, nodefault}; + __property int Width = {read=GetWidth, nodefault}; +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Create */ inline __fastcall virtual TRVNonTextItemInfo(Classes::TPersistent* RVData) : TCustomRVItemInfo(RVData) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVNonTextItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVFullLineItemInfo; +class PASCALIMPLEMENTATION TRVFullLineItemInfo : public TRVNonTextItemInfo +{ + typedef TRVNonTextItemInfo inherited; + +public: + virtual bool __fastcall GetBoolValue(TRVItemBoolProperty Prop); +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Create */ inline __fastcall virtual TRVFullLineItemInfo(Classes::TPersistent* RVData) : TRVNonTextItemInfo(RVData) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVFullLineItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRectItemInfo; +class PASCALIMPLEMENTATION TRVRectItemInfo : public TRVNonTextItemInfo +{ + typedef TRVNonTextItemInfo inherited; + +protected: + int FMinHeightOnPage; + DYNAMIC AnsiString __fastcall SaveRVFHeaderTail(Classes::TPersistent* RVData); + DYNAMIC int __fastcall GetRVFExtraPropertyCount(void); + DYNAMIC void __fastcall SaveRVFExtraProperties(Classes::TStream* Stream); + AnsiString __fastcall GetVShiftCSS(Rvstyle::TRVStyle* RVStyle); + +public: + Rvstyle::TRVVAlign VAlign; + int VShift; + bool VShiftAbs; + int Spacing; + __fastcall virtual TRVRectItemInfo(Classes::TPersistent* RVData); + DYNAMIC void __fastcall Assign(TCustomRVItemInfo* Source); + DYNAMIC bool __fastcall SetExtraIntProperty(TRVExtraItemProperty Prop, int Value); + DYNAMIC bool __fastcall GetExtraIntProperty(TRVExtraItemProperty Prop, int &Value); + DYNAMIC bool __fastcall ReadRVFHeaderTail(char * &P, Classes::TPersistent* RVData, bool UTF8Strings, bool &AssStyleNameUsed); + virtual bool __fastcall GetBoolValue(TRVItemBoolProperty Prop); + virtual int __fastcall GetBorderWidth(void); + virtual int __fastcall GetBorderHeight(void); +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVRectItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVTabItemInfo; +class PASCALIMPLEMENTATION TRVTabItemInfo : public TRVRectItemInfo +{ + typedef TRVRectItemInfo inherited; + +private: + void __fastcall DrawTab(Graphics::TCanvas* Canvas, int x, int y, Dlines::TRVDrawLineInfo* dli, Rvstyle::TRVStyle* Style, Rvstyle::TRVTextDrawStates TextDrawState, bool CanUseCustomPPI, bool RTL, bool SpecialChars, bool Printing, Rvstyle::TRVColorMode ColorMode); + +protected: + virtual int __fastcall GetAssociatedTextStyleNo(void); + virtual void __fastcall SetAssociatedTextStyleNo(int Value); + DYNAMIC AnsiString __fastcall SaveRVFHeaderTail(Classes::TPersistent* RVData); + HIDESBASE int __fastcall GetActualStyleNo(Rvstyle::TRVStyle* RVStyle); + +public: + int TextStyleNo; + AnsiString Leader; + DYNAMIC bool __fastcall ReadRVFHeaderTail(char * &P, Classes::TPersistent* RVData, bool UTF8Strings, bool &AssStyleNameUsed); + virtual bool __fastcall GetBoolValueEx(TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + virtual bool __fastcall GetBoolValue(TRVItemBoolProperty Prop); + DYNAMIC void __fastcall MarkStylesInUse(TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall UpdateStyles(TRVDeleteUnusedStylesData* Data); + virtual void __fastcall Paint(int x, int y, Graphics::TCanvas* Canvas, TRVItemDrawStates State, Rvstyle::TRVStyle* Style, Dlines::TRVDrawLineInfo* dli); + virtual void __fastcall Print(Graphics::TCanvas* Canvas, int x, int y, int x2, bool Preview, bool Correction, const Rvstyle::TRVScreenAndDevice &sad, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode, Classes::TPersistent* RVData); + DYNAMIC void __fastcall ApplyStyleConversion(Classes::TPersistent* RVData, int ItemNo, int UserData, TRVEStyleConversionType ConvType); + virtual void __fastcall OnDocWidthChange(int DocWidth, Dlines::TRVDrawLineInfo* dli, bool Printing, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData, Rvstyle::PRVScreenAndDevice sad, int &HShift, int &Desc, bool NoCaching, bool Reformatting, bool UseFormatCanvas); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + DYNAMIC AnsiString __fastcall AsText(int LineWidth, Classes::TPersistent* RVData, const AnsiString Text, const AnsiString Path, bool TextOnly, bool Unicode); +public: + #pragma option push -w-inl + /* TRVRectItemInfo.Create */ inline __fastcall virtual TRVTabItemInfo(Classes::TPersistent* RVData) : TRVRectItemInfo(RVData) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVTabItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVControlItemInfo; +class PASCALIMPLEMENTATION TRVControlItemInfo : public TRVRectItemInfo +{ + typedef TRVRectItemInfo inherited; + +protected: + bool FResizable; + bool FVisible; + virtual int __fastcall GetHeight(void); + virtual int __fastcall GetWidth(void); + DYNAMIC int __fastcall GetRVFExtraPropertyCount(void); + DYNAMIC void __fastcall SaveRVFExtraProperties(Classes::TStream* Stream); + +public: + Controls::TControl* Control; + int PercentWidth; + __fastcall TRVControlItemInfo(Classes::TPersistent* RVData, Controls::TControl* AControl, Rvstyle::TRVVAlign AVAlign); + __fastcall virtual TRVControlItemInfo(Classes::TPersistent* RVData); + DYNAMIC void __fastcall Assign(TCustomRVItemInfo* Source); + __fastcall virtual ~TRVControlItemInfo(void); + virtual int __fastcall GetMinWidth(Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData); + virtual void __fastcall AdjustInserted(int x, int y, bool adjusty); + virtual bool __fastcall PrintToBitmap(Graphics::TBitmap* Bkgnd, bool Preview, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode); + virtual Dlines::TRVDrawLineInfo* __fastcall CreatePrintingDrawItem(System::TObject* RVData, const Rvstyle::TRVScreenAndDevice &sad); + virtual void __fastcall Paint(int x, int y, Graphics::TCanvas* Canvas, TRVItemDrawStates State, Rvstyle::TRVStyle* Style, Dlines::TRVDrawLineInfo* dli); + DYNAMIC bool __fastcall OwnsControl(Controls::TControl* AControl); + DYNAMIC AnsiString __fastcall AsText(int LineWidth, Classes::TPersistent* RVData, const AnsiString Text, const AnsiString Path, bool TextOnly, bool Unicode); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + DYNAMIC bool __fastcall ReadRVFLine(const AnsiString s, Classes::TPersistent* RVData, int ReadType, int LineNo, int LineCount, AnsiString &Name, TRVFReadMode &ReadMode, TRVFReadState &ReadState, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC bool __fastcall SetExtraIntProperty(TRVExtraItemProperty Prop, int Value); + DYNAMIC bool __fastcall GetExtraIntProperty(TRVExtraItemProperty Prop, int &Value); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + virtual bool __fastcall GetBoolValue(TRVItemBoolProperty Prop); + virtual bool __fastcall GetBoolValueEx(TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + virtual int __fastcall GetImageHeight(Rvstyle::TRVStyle* RVStyle); + virtual int __fastcall GetImageWidth(Rvstyle::TRVStyle* RVStyle); + DYNAMIC void __fastcall MovingToUndoList(int ItemNo, System::TObject* RVData, System::TObject* AContainerUndoItem); + DYNAMIC void __fastcall MovingFromUndoList(int ItemNo, System::TObject* RVData); + virtual void __fastcall Inserting(System::TObject* RVData, AnsiString &Text, bool Safe); + DYNAMIC void __fastcall Focusing(void); + virtual void __fastcall OnDocWidthChange(int DocWidth, Dlines::TRVDrawLineInfo* dli, bool Printing, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData, Rvstyle::PRVScreenAndDevice sad, int &HShift, int &Desc, bool NoCaching, bool Reformatting, bool UseFormatCanvas); + __property int MinHeightOnPage = {read=FMinHeightOnPage, write=FMinHeightOnPage, nodefault}; +}; + + +class DELPHICLASS TRVGraphicItemInfo; +class PASCALIMPLEMENTATION TRVGraphicItemInfo : public TRVRectItemInfo +{ + typedef TRVRectItemInfo inherited; + +protected: + System::TObject* FAnimator; + bool FResizable; + virtual int __fastcall GetHeight(void); + virtual int __fastcall GetWidth(void); + DYNAMIC int __fastcall GetRVFExtraPropertyCount(void); + DYNAMIC void __fastcall SaveRVFExtraProperties(Classes::TStream* Stream); + +public: + Graphics::TGraphic* Image; + Graphics::TGraphic* ImageCopy; + int ImageWidth; + int ImageHeight; + int Interval; + bool NoHTMLImageSize; + AnsiString Alt; + AnsiString ImageFileName; + __fastcall virtual TRVGraphicItemInfo(Classes::TPersistent* RVData, Graphics::TGraphic* AImage, Rvstyle::TRVVAlign AVAlign); + __fastcall virtual TRVGraphicItemInfo(Classes::TPersistent* RVData); + DYNAMIC void __fastcall Assign(TCustomRVItemInfo* Source); + DYNAMIC void __fastcall TransferProperties(TCustomRVItemInfo* Source, Classes::TPersistent* RVData); + DYNAMIC bool __fastcall SetExtraIntProperty(TRVExtraItemProperty Prop, int Value); + DYNAMIC bool __fastcall GetExtraIntProperty(TRVExtraItemProperty Prop, int &Value); + DYNAMIC bool __fastcall SetExtraStrProperty(TRVExtraItemStrProperty Prop, const AnsiString Value); + DYNAMIC bool __fastcall GetExtraStrProperty(TRVExtraItemStrProperty Prop, AnsiString &Value); + DYNAMIC void __fastcall UpdatePaletteInfo(Rvscroll::TRVPaletteAction PaletteAction, bool ForceRecreateCopy, HPALETTE Palette, Windows::PLogPalette LogPalette); + virtual int __fastcall GetMinWidth(Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData); + __fastcall virtual ~TRVGraphicItemInfo(void); + virtual Graphics::TGraphic* __fastcall AsImage(void); + virtual void __fastcall Paint(int x, int y, Graphics::TCanvas* Canvas, TRVItemDrawStates State, Rvstyle::TRVStyle* Style, Dlines::TRVDrawLineInfo* dli); + virtual bool __fastcall GetBoolValue(TRVItemBoolProperty Prop); + virtual bool __fastcall GetBoolValueEx(TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + DYNAMIC bool __fastcall ReadRVFLine(const AnsiString s, Classes::TPersistent* RVData, int ReadType, int LineNo, int LineCount, AnsiString &Name, TRVFReadMode &ReadMode, TRVFReadState &ReadState, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + virtual bool __fastcall PrintToBitmap(Graphics::TBitmap* Bkgnd, bool Preview, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode); + virtual void __fastcall Print(Graphics::TCanvas* Canvas, int x, int y, int x2, bool Preview, bool Correction, const Rvstyle::TRVScreenAndDevice &sad, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode, Classes::TPersistent* RVData); + virtual int __fastcall GetImageHeight(Rvstyle::TRVStyle* RVStyle); + virtual int __fastcall GetImageWidth(Rvstyle::TRVStyle* RVStyle); + DYNAMIC void __fastcall MovingToUndoList(int ItemNo, System::TObject* RVData, System::TObject* AContainerUndoItem); + virtual Dlines::TRVDrawLineInfo* __fastcall CreatePrintingDrawItem(System::TObject* RVData, const Rvstyle::TRVScreenAndDevice &sad); + DYNAMIC void __fastcall UpdateAnimator(System::TObject* RVData); + __property int MinHeightOnPage = {read=FMinHeightOnPage, write=FMinHeightOnPage, nodefault}; +}; + + +typedef TMetaClass* TRVGraphicItemInfoClass; + +class DELPHICLASS TRVHotGraphicItemInfo; +class PASCALIMPLEMENTATION TRVHotGraphicItemInfo : public TRVGraphicItemInfo +{ + typedef TRVGraphicItemInfo inherited; + +public: + virtual bool __fastcall GetBoolValueEx(TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + __fastcall virtual TRVHotGraphicItemInfo(Classes::TPersistent* RVData, Graphics::TGraphic* AImage, Rvstyle::TRVVAlign AVAlign); + DYNAMIC void __fastcall Execute(Classes::TPersistent* RVData); +public: + #pragma option push -w-inl + /* TRVGraphicItemInfo.Create */ inline __fastcall virtual TRVHotGraphicItemInfo(Classes::TPersistent* RVData) : TRVGraphicItemInfo(RVData) { } + #pragma option pop + #pragma option push -w-inl + /* TRVGraphicItemInfo.Destroy */ inline __fastcall virtual ~TRVHotGraphicItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVBulletItemInfo; +class PASCALIMPLEMENTATION TRVBulletItemInfo : public TRVRectItemInfo +{ + typedef TRVRectItemInfo inherited; + +protected: + virtual int __fastcall GetHeight(void); + virtual int __fastcall GetWidth(void); + virtual int __fastcall GetImageIndex(bool Hot); + DYNAMIC AnsiString __fastcall SaveRVFHeaderTail(Classes::TPersistent* RVData); + DYNAMIC int __fastcall GetRVFExtraPropertyCount(void); + DYNAMIC void __fastcall SaveRVFExtraProperties(Classes::TStream* Stream); + +public: + Imglist::TCustomImageList* ImageList; + int ImageIndex; + bool NoHTMLImageSize; + AnsiString Alt; + __fastcall TRVBulletItemInfo(Classes::TPersistent* RVData, int AImageIndex, Imglist::TCustomImageList* AImageList, Rvstyle::TRVVAlign AVAlign); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + DYNAMIC void __fastcall Assign(TCustomRVItemInfo* Source); + virtual int __fastcall GetMinWidth(Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData); + virtual void __fastcall Paint(int x, int y, Graphics::TCanvas* Canvas, TRVItemDrawStates State, Rvstyle::TRVStyle* Style, Dlines::TRVDrawLineInfo* dli); + virtual bool __fastcall PrintToBitmap(Graphics::TBitmap* Bkgnd, bool Preview, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode); + DYNAMIC bool __fastcall ReadRVFHeaderTail(char * &P, Classes::TPersistent* RVData, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC bool __fastcall ReadRVFLine(const AnsiString s, Classes::TPersistent* RVData, int ReadType, int LineNo, int LineCount, AnsiString &Name, TRVFReadMode &ReadMode, TRVFReadState &ReadState, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + virtual bool __fastcall GetBoolValue(TRVItemBoolProperty Prop); + virtual bool __fastcall GetBoolValueEx(TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + DYNAMIC bool __fastcall SetExtraIntProperty(TRVExtraItemProperty Prop, int Value); + DYNAMIC bool __fastcall GetExtraIntProperty(TRVExtraItemProperty Prop, int &Value); + DYNAMIC bool __fastcall SetExtraStrProperty(TRVExtraItemStrProperty Prop, const AnsiString Value); + DYNAMIC bool __fastcall GetExtraStrProperty(TRVExtraItemStrProperty Prop, AnsiString &Value); + virtual int __fastcall GetImageHeight(Rvstyle::TRVStyle* RVStyle); + virtual int __fastcall GetImageWidth(Rvstyle::TRVStyle* RVStyle); +public: + #pragma option push -w-inl + /* TRVRectItemInfo.Create */ inline __fastcall virtual TRVBulletItemInfo(Classes::TPersistent* RVData) : TRVRectItemInfo(RVData) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVBulletItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVHotspotItemInfo; +class PASCALIMPLEMENTATION TRVHotspotItemInfo : public TRVBulletItemInfo +{ + typedef TRVBulletItemInfo inherited; + +protected: + virtual int __fastcall GetImageIndex(bool Hot); + DYNAMIC AnsiString __fastcall SaveRVFHeaderTail(Classes::TPersistent* RVData); + +public: + int HotImageIndex; + __fastcall TRVHotspotItemInfo(Classes::TPersistent* RVData, int AImageIndex, int AHotImageIndex, Imglist::TCustomImageList* AImageList, Rvstyle::TRVVAlign AVAlign); + DYNAMIC void __fastcall Assign(TCustomRVItemInfo* Source); + DYNAMIC bool __fastcall ReadRVFHeaderTail(char * &P, Classes::TPersistent* RVData, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + virtual bool __fastcall GetBoolValueEx(TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + DYNAMIC void __fastcall Execute(Classes::TPersistent* RVData); +public: + #pragma option push -w-inl + /* TRVRectItemInfo.Create */ inline __fastcall virtual TRVHotspotItemInfo(Classes::TPersistent* RVData) : TRVBulletItemInfo(RVData) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVHotspotItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVBreakItemInfo; +class PASCALIMPLEMENTATION TRVBreakItemInfo : public TRVFullLineItemInfo +{ + typedef TRVFullLineItemInfo inherited; + +protected: + DYNAMIC AnsiString __fastcall SaveRVFHeaderTail(Classes::TPersistent* RVData); + +public: + Byte LineWidth; + Rvstyle::TRVBreakStyle Style; + Graphics::TColor Color; + __fastcall TRVBreakItemInfo(Classes::TPersistent* RVData, Byte ALineWidth, Rvstyle::TRVBreakStyle AStyle, Graphics::TColor AColor); + DYNAMIC void __fastcall Assign(TCustomRVItemInfo* Source); + virtual void __fastcall OnDocWidthChange(int DocWidth, Dlines::TRVDrawLineInfo* dli, bool Printing, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData, Rvstyle::PRVScreenAndDevice sad, int &HShift, int &Desc, bool NoCaching, bool Reformatting, bool UseFormatCanvas); + virtual void __fastcall PaintFullWidth(int Left, int Right, int Top, Graphics::TCanvas* Canvas, TRVItemDrawStates State, Rvstyle::TRVStyle* Style, const Types::TRect &ClipRect, Dlines::TRVDrawLineInfo* dli, int ExtraX, int ExtraY); + virtual void __fastcall Print(Graphics::TCanvas* Canvas, int x, int y, int x2, bool Preview, bool Correction, const Rvstyle::TRVScreenAndDevice &sad, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode, Classes::TPersistent* RVData); + DYNAMIC AnsiString __fastcall AsText(int LineWidth, Classes::TPersistent* RVData, const AnsiString Text, const AnsiString Path, bool TextOnly, bool Unicode); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + DYNAMIC bool __fastcall ReadRVFHeaderTail(char * &P, Classes::TPersistent* RVData, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + DYNAMIC void __fastcall FillRTFTables(Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* ListOverrideCountList, Classes::TPersistent* RVData); + virtual bool __fastcall GetBoolValue(TRVItemBoolProperty Prop); + virtual bool __fastcall GetBoolValueEx(TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Create */ inline __fastcall virtual TRVBreakItemInfo(Classes::TPersistent* RVData) : TRVFullLineItemInfo(RVData) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVBreakItemInfo(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE TMetaClass* RichViewTextItemClass; +extern PACKAGE int RichViewFloatingPlaceHolderHeight; +static const Shortint RVItemOptionsMask = 0x3f; +extern PACKAGE void __fastcall WriteRVFExtraIntPropertyStr(Classes::TStream* Stream, TRVExtraItemProperty Prop, int Value); +extern PACKAGE void __fastcall WriteRVFExtraStrPropertyStr(Classes::TStream* Stream, TRVExtraItemStrProperty Prop, const AnsiString Value); +extern PACKAGE void __fastcall RegisterRichViewItemClass(int StyleNo, TMetaClass* ItemClass); +extern PACKAGE TCustomRVItemInfo* __fastcall CreateRichViewItem(int StyleNo, Classes::TPersistent* RVData); +extern PACKAGE TCustomRVItemInfo* __fastcall RV_DuplicateItem(TCustomRVItemInfo* Source, Classes::TPersistent* RVData, bool DuplicateCheckpoint); +extern PACKAGE TRVItemOptions __fastcall RVFGetItemOptions(TRVItemOptions ItemOptions, bool ForceSameAsPrev); +extern PACKAGE AnsiString __fastcall RV_GetExtraIMGStr(Rvstyle::TRVSaveOptions SaveOptions, int Width, int Height, bool NoHTMLImageSize); +extern PACKAGE void __fastcall RVSaveImageToRTF(Classes::TStream* Stream, double TwipsPerPixel, Graphics::TGraphic* Image, int ImageWidth, int ImageHeight, Rvstyle::TRVRTFOptions Options, System::TObject* Animator); +extern PACKAGE void __fastcall RVSaveImageListImageToRTF(Classes::TStream* Stream, double TwipsPerPixel, Imglist::TCustomImageList* ImageList, int ImageIndex, Rvstyle::TRVRTFOptions RTFOptions); +extern PACKAGE void __fastcall RVSaveImageSharedImageInHTML(Imglist::TCustomImageList* ImageList, int ImageIndex, Graphics::TGraphic* Graphic, AnsiString &Location, Classes::TPersistent* RVData, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, Rvclasses::TRVList* Bullets); +extern PACKAGE void __fastcall RVDrawEdge(Graphics::TCanvas* Canvas, const Types::TRect &r, Graphics::TColor TopLeftColor, Graphics::TColor BottomRightColor, int LineWidth); + +} /* namespace Rvitem */ +using namespace Rvitem; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvitem diff --git a/12.0.4/Units/D2006/RVJvGifAnimate.pas b/12.0.4/Units/D2006/RVJvGifAnimate.pas new file mode 100644 index 0000000..22c5724 --- /dev/null +++ b/12.0.4/Units/D2006/RVJvGifAnimate.pas @@ -0,0 +1,284 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVJvGIFImageAnimator: displaying animation for } +{ TJvGIFImage from Project JEDI's JVCL. } +{ http://jvcl.sourceforge.net } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVJvGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, JvGif; + +type + { --------------------------------------------------------------------------- + TRVJvGifImageAnimator: displaying animations for gif images + (using TJvGIFImage from Project JEDI's JVCL) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be it's background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVJvGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVJvGifImageAnimator ========================} +{ Destructor } +destructor TRVJvGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVJvGifImageAnimator.CalcInterval; +var gif: TJvGIFImage; +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + Interval := 100; + if gif.Frames[FrameIndex].AnimateInterval > 0 then begin + Interval := gif.Frames[FrameIndex].AnimateInterval; + end; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVJvGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVJvGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +{ Draws the current frame } +procedure TRVJvGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TJvGIFImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul , + HeightDiv : integer; + WidthMul , + WidthDiv : integer; + begin + with gif.Frames[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Origin.X, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Origin.Y, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Origin.X+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Origin.Y+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if FrameIndex>0 then + case gif.Frames[FrameIndex-1].DisposalMethod of + dmRestoreBackground: + begin + r := Rect(0,0,bmp.Width,bmp.Height); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex); + gif.Frames[FrameIndex].Draw(bmp.Canvas, r, gif.Frames[FrameIndex].TransparentColor <> clNone); + end; + +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if gif.Transparent then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex clNone); +end; +{------------------------------------------------------------------------------} +{ Image size for RTF saving } +function TRVJvGifImageAnimator.GetExportImageSize: TSize; +begin + Result.cy := TJvGIFImage(TRVGraphicItemInfo(item).Image).Height; + Result.cx := TJvGIFImage(TRVGraphicItemInfo(item).Image).Width; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames in gif } +function GetGifFrameCount(gif: TJvGIFImage): Integer; +begin + Result := gif.Count; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVJvGifImageAnimator.GetFrameCount: Integer; +begin + Result := TJvGIFImage(TRVGraphicItemInfo(item).Image).Count; +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVJvGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVJvGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TJvGifImage) and + (GetGifFrameCount(TJvGIFImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVJvGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVJvGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D2006/RVLabelItem.dcu b/12.0.4/Units/D2006/RVLabelItem.dcu new file mode 100644 index 0000000..1d2f5cf Binary files /dev/null and b/12.0.4/Units/D2006/RVLabelItem.dcu differ diff --git a/12.0.4/Units/D2006/RVLabelItem.hpp b/12.0.4/Units/D2006/RVLabelItem.hpp new file mode 100644 index 0000000..a9bfb55 --- /dev/null +++ b/12.0.4/Units/D2006/RVLabelItem.hpp @@ -0,0 +1,128 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvlabelitem.pas' rev: 10.00 + +#ifndef RvlabelitemHPP +#define RvlabelitemHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvlabelitem +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVLabelItemInfo; +class PASCALIMPLEMENTATION TRVLabelItemInfo : public Rvitem::TRVRectItemInfo +{ + typedef Rvitem::TRVRectItemInfo inherited; + +private: + int Width; + int Height; + int Descend; + int YOffs; + int FMinWidth; + Classes::TAlignment FAlignment; + bool FCanUseCustomPPI; + Classes::TPersistent* FParentRVData; + int FTextStyleNo; + void __fastcall SetMinWidth(const int Value); + void __fastcall SetAlignment(const Classes::TAlignment Value); + Rvstyle::TRVStyle* __fastcall GetRVStyle(void); + +protected: + bool FUpdated; + virtual void __fastcall DoPaint(const Types::TRect &r, Graphics::TCanvas* Canvas, Rvitem::TRVItemDrawStates State, Rvstyle::TRVStyle* Style, Dlines::TRVDrawLineInfo* dli, Rvstyle::TRVColorMode ColorMode, const AnsiString Text); + virtual int __fastcall GetHeight(void); + virtual int __fastcall GetWidth(void); + virtual int __fastcall GetAssociatedTextStyleNo(void); + virtual void __fastcall SetAssociatedTextStyleNo(int Value); + virtual void __fastcall SetParentRVData(const Classes::TPersistent* Value); + void __fastcall SavePropertiesToRVF(Classes::TStream* Stream, Classes::TPersistent* RVData); + void __fastcall LoadPropertiesFromRVF(const AnsiString s, int Index, Classes::TPersistent* RVData, bool UTF8Strings, bool &TextStyleNameUsed); + DYNAMIC int __fastcall GetRVFExtraPropertyCount(void); + DYNAMIC void __fastcall SaveRVFExtraProperties(Classes::TStream* Stream); + DYNAMIC AnsiString __fastcall GetTextForPrintMeasuring(Classes::TPersistent* RVData); + virtual AnsiString __fastcall GetTextForPrinting(Classes::TPersistent* RVData, Dlines::TRVDrawLineInfo* DrawItem); + virtual int __fastcall GetTextStyleNo(void); + virtual void __fastcall SetTextStyleNo(const int Value); + +public: + AnsiString Text; + bool ProtectTextStyleNo; + bool RemoveInternalLeading; + Controls::TCursor Cursor; + __fastcall virtual TRVLabelItemInfo(Classes::TPersistent* RVData); + __fastcall TRVLabelItemInfo(Classes::TPersistent* RVData, int TextStyleNo, const AnsiString Text); + DYNAMIC void __fastcall MovingToUndoList(int ItemNo, System::TObject* RVData, System::TObject* AContainerUndoItem); + DYNAMIC void __fastcall MovingFromUndoList(int ItemNo, System::TObject* RVData); + DYNAMIC bool __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y, int ItemNo, System::TObject* RVData); + virtual int __fastcall GetMinWidth(Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData); + virtual bool __fastcall GetBoolValue(Rvitem::TRVItemBoolProperty Prop); + virtual bool __fastcall GetBoolValueEx(Rvitem::TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + virtual void __fastcall Paint(int x, int y, Graphics::TCanvas* Canvas, Rvitem::TRVItemDrawStates State, Rvstyle::TRVStyle* Style, Dlines::TRVDrawLineInfo* dli); + virtual void __fastcall Print(Graphics::TCanvas* Canvas, int x, int y, int x2, bool Preview, bool Correction, const Rvstyle::TRVScreenAndDevice &sad, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode, Classes::TPersistent* RVData); + DYNAMIC void __fastcall AfterLoading(Rvstyle::TRVLoadFormat FileFormat); + DYNAMIC bool __fastcall SetExtraCustomProperty(const AnsiString PropName, const AnsiString Value); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, Rvitem::TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC bool __fastcall ReadRVFLine(const AnsiString s, Classes::TPersistent* RVData, int ReadType, int LineNo, int LineCount, AnsiString &Name, Rvitem::TRVFReadMode &ReadMode, Rvitem::TRVFReadState &ReadState, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall Assign(Rvitem::TCustomRVItemInfo* Source); + DYNAMIC void __fastcall MarkStylesInUse(Rvitem::TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall UpdateStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall ApplyStyleConversion(Classes::TPersistent* RVData, int ItemNo, int UserData, Rvitem::TRVEStyleConversionType ConvType); + void __fastcall UpdateMe(void); + virtual void __fastcall OnDocWidthChange(int DocWidth, Dlines::TRVDrawLineInfo* dli, bool Printing, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData, Rvstyle::PRVScreenAndDevice sad, int &HShift, int &Desc, bool NoCaching, bool Reformatting, bool UseFormatCanvas); + int __fastcall GetFinalPrintingWidth(Graphics::TCanvas* Canvas, Dlines::TRVDrawLineInfo* dli, Classes::TPersistent* RVData); + DYNAMIC void __fastcall Execute(Classes::TPersistent* RVData); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + DYNAMIC AnsiString __fastcall AsText(int LineWidth, Classes::TPersistent* RVData, const AnsiString Text, const AnsiString Path, bool TextOnly, bool Unicode); + virtual void __fastcall Inserted(System::TObject* RVData, int ItemNo); + void __fastcall Changed(void); + __property int TextStyleNo = {read=GetTextStyleNo, write=SetTextStyleNo, nodefault}; + __property int MinWidth = {read=FMinWidth, write=SetMinWidth, nodefault}; + __property Classes::TAlignment Alignment = {read=FAlignment, write=SetAlignment, nodefault}; + __property Rvstyle::TRVStyle* RVStyle = {read=GetRVStyle}; + __property Classes::TPersistent* ParentRVData = {read=FParentRVData, write=SetParentRVData}; +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVLabelItemInfo(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const short rvsLabel = -200; + +} /* namespace Rvlabelitem */ +using namespace Rvlabelitem; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvlabelitem diff --git a/12.0.4/Units/D2006/RVLinear.dcu b/12.0.4/Units/D2006/RVLinear.dcu new file mode 100644 index 0000000..e36ac55 Binary files /dev/null and b/12.0.4/Units/D2006/RVLinear.dcu differ diff --git a/12.0.4/Units/D2006/RVLinear.hpp b/12.0.4/Units/D2006/RVLinear.hpp new file mode 100644 index 0000000..76c686a --- /dev/null +++ b/12.0.4/Units/D2006/RVLinear.hpp @@ -0,0 +1,65 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvlinear.pas' rev: 10.00 + +#ifndef RvlinearHPP +#define RvlinearHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvlinear +{ +//-- type declarations ------------------------------------------------------- +struct TRVSelection +{ + +public: + int SelStart; + int SelLength; + bool MultiCell; + int StartRow; + int StartCol; + int RowOffs; + int ColOffs; +} ; + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE int RVCharsPerLineBreak; +extern PACKAGE char RVNonTextCharacter; +extern PACKAGE bool __fastcall RichViewToLinear(Richview::TCustomRichView* rv, Crvdata::TCustomRVData* CurRVData, Crvdata::TCustomRVData* RVData, int ItemNo, int ItemOffs, int &LinearPos); +extern PACKAGE bool __fastcall LinearToRichView(Richview::TCustomRichView* rv, Crvdata::TCustomRVData* CurRVData, int &LinearPos, Crvdata::TCustomRVData* &RVData, int &ItemNo, int &ItemOffs); +extern PACKAGE int __fastcall RVGetLinearCaretPos(Rvedit::TCustomRichViewEdit* rve); +extern PACKAGE void __fastcall RVSetLinearCaretPos(Rvedit::TCustomRichViewEdit* rve, int LinearPos); +extern PACKAGE void __fastcall RVGetSelection(Richview::TCustomRichView* rv, int &SelStart, int &SelLength); +extern PACKAGE void __fastcall RVSetSelection(Richview::TCustomRichView* rv, int SelStart, int SelLength); +extern PACKAGE void __fastcall RVGetSelectionEx(Richview::TCustomRichView* rv, TRVSelection &Selection); +extern PACKAGE void __fastcall RVSetSelectionEx(Richview::TCustomRichView* rv, const TRVSelection &Selection); +extern PACKAGE AnsiString __fastcall RVGetTextRange(Richview::TCustomRichView* rv, int RangeStart, int RangeLength); +extern PACKAGE int __fastcall RVGetTextLength(Richview::TCustomRichView* rv); + +} /* namespace Rvlinear */ +using namespace Rvlinear; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvlinear diff --git a/12.0.4/Units/D2006/RVMapWht.dcu b/12.0.4/Units/D2006/RVMapWht.dcu new file mode 100644 index 0000000..33b73b3 Binary files /dev/null and b/12.0.4/Units/D2006/RVMapWht.dcu differ diff --git a/12.0.4/Units/D2006/RVMapWht.hpp b/12.0.4/Units/D2006/RVMapWht.hpp new file mode 100644 index 0000000..ce5e766 --- /dev/null +++ b/12.0.4/Units/D2006/RVMapWht.hpp @@ -0,0 +1,80 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvmapwht.pas' rev: 10.00 + +#ifndef RvmapwhtHPP +#define RvmapwhtHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvmapwht +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- +static const Word RVSMW_FONTNAME = 0x2710; +static const Word RVSMW_FONTSIZE = 0x2710; +static const Word RVSMW_FONTCHARSET = 0xc350; +static const Word RVSMW_EACHRGBCOLOR = 0xd05; +static const Word RVSMW_COLORSET = 0xbb8; +static const Word RVSMW_ALLCAPS = 0xc350; +static const Word RVSMW_OVERLINE = 0xc350; +static const Word RVSMW_EACHRGBBCOLOR = 0x2710; +static const Word RVSMW_BCOLORSET = 0xc350; +static const Word RVSMW_FONTEACHSTYLE = 0xc350; +static const Word RVSMW_HOVEREACHEFFECT = 0x2710; +static const Word RVSMW_FONTSTYLESET = 0xc350; +static const Word RVSMW_CHARSCALE = 0x12c; +static const Word RVSMW_CHARSPACING = 0x3e8; +static const Word RVSMW_TEXTBIDIMODE = 0x3e8; +static const Word RVSMW_VSHIFT = 0xc350; +static const Word RVSMW_VSHIFTRATIO = 0x3e8; +static const Word RVSMW_CURSOR = 0x1388; +static const int RVSMW_PROTECTION = 0x186a0; +static const Word RVSMW_SPECIALCODE = 0xc350; +static const Shortint RVSMW_LANGUAGE = 0x64; +static const Word RVSMW_SUBSUPERSCRIPTTYPE = 0xc350; +static const Word RVSNW_PROTECTION = 0xc350; +static const Word RVSMW_ALIGNMENT = 0xc350; +static const Word RVSMW_PARABIDIMODE = 0x2710; +static const Word RVSMW_OUTLINELEVEL = 0xc350; +static const Word RVSMW_LINESPACING = 0x1388; +static const Word RVSMW_INDENT = 0x3e8; +static const Word RVSMW_BORDERSIDE = 0x1388; +static const Word RVSMW_BORDERNOSIDE = 0x4e20; +static const Word RVSMW_WIDTH = 0x3e8; +static const Word RVSMW_BORDERSTYLE = 0x3e8; +static const Shortint RVSMW_PADDING = 0x64; +static const Word RVSMW_NOWRAP = 0x3e8; +static const int RVSMW_READONLY = 0x186a0; +static const Word RVSMW_STYLEPROTECT = 0x3e8; +static const Word RVSMW_DONOTWANTRETURNS = 0x2710; +static const Word RVSMW_KEEPLINESTOGETHER = 0x1f4; +static const Word RVSMW_KEEPWITHNEXT = 0x1f4; +static const Byte RVSMW_TABPOS = 0xc8; +static const Shortint RVSMW_TABALIGN = 0x64; +static const Shortint RVSMW_LEADER = 0x32; +static const Word RVSMW_NOTAB = 0x190; +static const Word RVMW_LISTTYPE = 0x1388; +static const Shortint RVMW_LISTMISC = 0x64; +extern PACKAGE int __fastcall RV_CompareInts(int New, int Old, int Weight); +extern PACKAGE int __fastcall RV_CompareColors(Graphics::TColor Color1, Graphics::TColor Color2, int w1, int w2); + +} /* namespace Rvmapwht */ +using namespace Rvmapwht; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvmapwht diff --git a/12.0.4/Units/D2006/RVMarker.dcu b/12.0.4/Units/D2006/RVMarker.dcu new file mode 100644 index 0000000..0f5315c Binary files /dev/null and b/12.0.4/Units/D2006/RVMarker.dcu differ diff --git a/12.0.4/Units/D2006/RVMarker.hpp b/12.0.4/Units/D2006/RVMarker.hpp new file mode 100644 index 0000000..4f213b0 --- /dev/null +++ b/12.0.4/Units/D2006/RVMarker.hpp @@ -0,0 +1,147 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvmarker.pas' rev: 10.00 + +#ifndef RvmarkerHPP +#define RvmarkerHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvmarker +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVMarkerItemInfo; +class DELPHICLASS TRVMarkerList; +class PASCALIMPLEMENTATION TRVMarkerItemInfo : public Rvitem::TRVRectItemInfo +{ + typedef Rvitem::TRVRectItemInfo inherited; + +private: + int FWidth; + int FHeight; + int FDescent; + int FOverhang; + int FCachedIndexInList; + void __fastcall DoPaint(int x, int y, Graphics::TCanvas* Canvas, Rvitem::TRVItemDrawStates State, Rvstyle::TRVStyle* Style, Dlines::TRVDrawLineInfo* dli, Rvstyle::TRVColorMode ColorMode); + +protected: + DYNAMIC AnsiString __fastcall SaveRVFHeaderTail(Classes::TPersistent* RVData); + void __fastcall CalcSize(Graphics::TCanvas* Canvas, Classes::TPersistent* RVData, int &Width, int &Height, int &Desc, int &Overhang, Rvstyle::PRVScreenAndDevice sad, bool ForMinWidth, int &HShift, int &SpaceBefore); + void __fastcall CalcDisplayString(Rvstyle::TRVStyle* RVStyle, TRVMarkerList* List, int Index); + virtual int __fastcall GetHeight(void); + virtual int __fastcall GetWidth(void); + Rvstyle::TRVListLevel* __fastcall GetLevelInfoEx(Rvstyle::TRVStyle* RVStyle, int LevelNo); + DYNAMIC int __fastcall GetRVFExtraPropertyCount(void); + DYNAMIC void __fastcall SaveRVFExtraProperties(Classes::TStream* Stream); + +public: + int ListNo; + int Level; + int Counter; + bool Reset; + int StartFrom; + AnsiString DisplayString; + bool NoHTMLImageSize; + __fastcall TRVMarkerItemInfo(Classes::TPersistent* RVData, int AListNo, int ALevel, int AStartFrom, bool AReset); + __fastcall virtual TRVMarkerItemInfo(Classes::TPersistent* RVData); + DYNAMIC void __fastcall Assign(Rvitem::TCustomRVItemInfo* Source); + Rvstyle::TRVListLevel* __fastcall GetLevelInfo(Rvstyle::TRVStyle* RVStyle); + virtual int __fastcall GetMinWidth(Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData); + virtual bool __fastcall GetBoolValue(Rvitem::TRVItemBoolProperty Prop); + virtual bool __fastcall GetBoolValueEx(Rvitem::TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + virtual void __fastcall OnDocWidthChange(int DocWidth, Dlines::TRVDrawLineInfo* dli, bool Printing, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData, Rvstyle::PRVScreenAndDevice sad, int &HShift, int &Desc, bool NoCaching, bool Reformatting, bool UseFormatCanvas); + virtual void __fastcall Paint(int x, int y, Graphics::TCanvas* Canvas, Rvitem::TRVItemDrawStates State, Rvstyle::TRVStyle* Style, Dlines::TRVDrawLineInfo* dli); + virtual void __fastcall Print(Graphics::TCanvas* Canvas, int x, int y, int x2, bool Preview, bool Correction, const Rvstyle::TRVScreenAndDevice &sad, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode, Classes::TPersistent* RVData); + virtual bool __fastcall PrintToBitmap(Graphics::TBitmap* Bkgnd, bool Preview, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode); + DYNAMIC bool __fastcall ReadRVFHeaderTail(char * &P, Classes::TPersistent* RVData, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, Rvitem::TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC void __fastcall MovingToUndoList(int ItemNo, System::TObject* RVData, System::TObject* AContainerUndoItem); + DYNAMIC void __fastcall MovingFromUndoList(int ItemNo, System::TObject* RVData); + virtual int __fastcall GetImageWidth(Rvstyle::TRVStyle* RVStyle); + virtual int __fastcall GetImageHeight(Rvstyle::TRVStyle* RVStyle); + virtual int __fastcall GetLeftOverhang(void); + void __fastcall HTMLOpenOrCloseTags(Classes::TStream* Stream, int OldLevelNo, int NewLevelNo, Rvstyle::TRVStyle* RVStyle, bool UseCSS); + void __fastcall SaveHTMLSpecial(Classes::TStream* Stream, TRVMarkerItemInfo* Prev, Rvstyle::TRVStyle* RVStyle, bool UseCSS); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + AnsiString __fastcall GetLICSS(Classes::TPersistent* RVData, int ItemNo, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, Rvclasses::TRVList* Bullets); + DYNAMIC void __fastcall FillRTFTables(Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* ListOverrideCountList, Classes::TPersistent* RVData); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + DYNAMIC void __fastcall MarkStylesInUse(Rvitem::TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall UpdateStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + DYNAMIC AnsiString __fastcall AsText(int LineWidth, Classes::TPersistent* RVData, const AnsiString Text, const AnsiString Path, bool TextOnly, bool Unicode); + int __fastcall GetIndexInList(Classes::TList* List); + DYNAMIC bool __fastcall SetExtraIntProperty(Rvitem::TRVExtraItemProperty Prop, int Value); + DYNAMIC bool __fastcall GetExtraIntProperty(Rvitem::TRVExtraItemProperty Prop, int &Value); +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVMarkerItemInfo(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVMarkerList : public Classes::TList +{ + typedef Classes::TList inherited; + +public: + TRVMarkerList* PrevMarkerList; + int __fastcall InsertAfter(TRVMarkerItemInfo* InsertMe, TRVMarkerItemInfo* AfterMe); + void __fastcall RecalcCounters(int StartFrom, Rvstyle::TRVStyle* RVStyle); + bool __fastcall FindParentMarker(int Index, TRVMarkerItemInfo* Marker, TRVMarkerList* &ParentList, int &ParentIndex); + void __fastcall RecalcDisplayStrings(Rvstyle::TRVStyle* RVStyle); + void __fastcall SaveToStream(Classes::TStream* Stream, int Count, bool IncludeSize); + void __fastcall LoadFromStream(Classes::TStream* Stream, Classes::TPersistent* RVData, bool IncludeSize); + void __fastcall SaveTextToStream(Classes::TStream* Stream, int Count); + void __fastcall LoadText(const AnsiString s, Classes::TPersistent* RVData); + void __fastcall LoadBinary(const AnsiString s, Classes::TPersistent* RVData); +public: + #pragma option push -w-inl + /* TList.Destroy */ inline __fastcall virtual ~TRVMarkerList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVMarkerList(void) : Classes::TList() { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE Rvstyle::TRVListLevel* __fastcall RVGetLevelInfo(Rvstyle::TRVStyle* RVStyle, int ListNo, int Level); + +} /* namespace Rvmarker */ +using namespace Rvmarker; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvmarker diff --git a/12.0.4/Units/D2006/RVMisc.dcu b/12.0.4/Units/D2006/RVMisc.dcu new file mode 100644 index 0000000..01f6ca7 Binary files /dev/null and b/12.0.4/Units/D2006/RVMisc.dcu differ diff --git a/12.0.4/Units/D2006/RVMisc.hpp b/12.0.4/Units/D2006/RVMisc.hpp new file mode 100644 index 0000000..ceca3c1 --- /dev/null +++ b/12.0.4/Units/D2006/RVMisc.hpp @@ -0,0 +1,38 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvmisc.pas' rev: 10.00 + +#ifndef RvmiscHPP +#define RvmiscHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvmisc +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE Rvscroll::TRVSearchOptions __fastcall GetRVSearchOptions(Dialogs::TFindOptions fo); +extern PACKAGE Rvedit::TRVESearchOptions __fastcall GetRVESearchOptions(Dialogs::TFindOptions fo); + +} /* namespace Rvmisc */ +using namespace Rvmisc; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvmisc diff --git a/12.0.4/Units/D2006/RVNote.dcu b/12.0.4/Units/D2006/RVNote.dcu new file mode 100644 index 0000000..fef8aec Binary files /dev/null and b/12.0.4/Units/D2006/RVNote.dcu differ diff --git a/12.0.4/Units/D2006/RVNote.hpp b/12.0.4/Units/D2006/RVNote.hpp new file mode 100644 index 0000000..faf92ad --- /dev/null +++ b/12.0.4/Units/D2006/RVNote.hpp @@ -0,0 +1,205 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvnote.pas' rev: 10.00 + +#ifndef RvnoteHPP +#define RvnoteHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvnote +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVNoteData; +class PASCALIMPLEMENTATION TRVNoteData : public Rvsubdata::TRVSubData +{ + typedef Rvsubdata::TRVSubData inherited; + +public: + AnsiString FNoteTextForPrinting; + DYNAMIC AnsiString __fastcall GetNoteText(); + AnsiString __fastcall GetNoteTextForPrinting(); +public: + #pragma option push -w-inl + /* TRVSubData.Create */ inline __fastcall TRVNoteData(Rvitem::TCustomRVItemInfo* AOwner, Crvdata::TCustomRVData* AMainRVData) : Rvsubdata::TRVSubData(AOwner, AMainRVData) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCustomRVData.Destroy */ inline __fastcall virtual ~TRVNoteData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCustomRVNoteItemInfo; +class PASCALIMPLEMENTATION TCustomRVNoteItemInfo : public Rvseqitem::TRVSeqItemInfo +{ + typedef Rvseqitem::TRVSeqItemInfo inherited; + +private: + TRVNoteData* FDocument; + +protected: + virtual void __fastcall SetParentRVData(const Classes::TPersistent* Value); + virtual void __fastcall SetNumberType(const Rvstyle::TRVSeqType Value); + DYNAMIC AnsiString __fastcall GetRTFDestinationModifier(); + void __fastcall Do_ChangeDoc(Classes::TStream* Stream, int ItemNo); + +public: + __fastcall virtual ~TCustomRVNoteItemInfo(void); + DYNAMIC void __fastcall MovingToUndoList(int ItemNo, System::TObject* RVData, System::TObject* AContainerUndoItem); + DYNAMIC void __fastcall MovingFromUndoList(int ItemNo, System::TObject* RVData); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, Rvitem::TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC bool __fastcall ReadRVFLine(const AnsiString s, Classes::TPersistent* RVData, int ReadType, int LineNo, int LineCount, AnsiString &Name, Rvitem::TRVFReadMode &ReadMode, Rvitem::TRVFReadState &ReadState, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + DYNAMIC void __fastcall FillRTFTables(Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* ListOverrideCountList, Classes::TPersistent* RVData); + DYNAMIC AnsiString __fastcall GetHTMLAnchorName(); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + virtual bool __fastcall GetBoolValue(Rvitem::TRVItemBoolProperty Prop); + DYNAMIC void __fastcall MarkStylesInUse(Rvitem::TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall UpdateStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall Assign(Rvitem::TCustomRVItemInfo* Source); + void __fastcall ReplaceDocumentEd(Classes::TStream* Stream); + __property TRVNoteData* Document = {read=FDocument}; +public: + #pragma option push -w-inl + /* TRVSeqItemInfo.CreateEx */ inline __fastcall TCustomRVNoteItemInfo(Classes::TPersistent* RVData, const AnsiString ASeqName, Rvstyle::TRVSeqType ANumberType, int ATextStyleNo, int AStartFrom, bool AReset) : Rvseqitem::TRVSeqItemInfo(RVData, ASeqName, ANumberType, ATextStyleNo, AStartFrom, AReset) { } + #pragma option pop + #pragma option push -w-inl + /* TRVSeqItemInfo.Create */ inline __fastcall virtual TCustomRVNoteItemInfo(Classes::TPersistent* RVData) : Rvseqitem::TRVSeqItemInfo(RVData) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVEndnoteItemInfo; +class PASCALIMPLEMENTATION TRVEndnoteItemInfo : public TCustomRVNoteItemInfo +{ + typedef TCustomRVNoteItemInfo inherited; + +private: + void __fastcall Init(Classes::TPersistent* RVData); + +protected: + virtual Rvstyle::TRVSeqType __fastcall GetNumberType(void); + DYNAMIC AnsiString __fastcall GetRTFDestinationModifier(); + +public: + __fastcall TRVEndnoteItemInfo(Classes::TPersistent* RVData, int ATextStyleNo, int AStartFrom, bool AReset); + __fastcall virtual TRVEndnoteItemInfo(Classes::TPersistent* RVData); + DYNAMIC AnsiString __fastcall GetHTMLAnchorName(); +public: + #pragma option push -w-inl + /* TCustomRVNoteItemInfo.Destroy */ inline __fastcall virtual ~TRVEndnoteItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVFootnoteItemInfo; +class PASCALIMPLEMENTATION TRVFootnoteItemInfo : public TCustomRVNoteItemInfo +{ + typedef TCustomRVNoteItemInfo inherited; + +private: + void __fastcall Init(Classes::TPersistent* RVData); + +protected: + virtual Rvstyle::TRVSeqType __fastcall GetNumberType(void); + DYNAMIC AnsiString __fastcall GetTextForPrintMeasuring(Classes::TPersistent* RVData); + virtual AnsiString __fastcall GetTextForPrinting(Classes::TPersistent* RVData, Dlines::TRVDrawLineInfo* DrawItem); + +public: + __fastcall TRVFootnoteItemInfo(Classes::TPersistent* RVData, int ATextStyleNo, int AStartFrom, bool AReset); + __fastcall virtual TRVFootnoteItemInfo(Classes::TPersistent* RVData); + virtual Dlines::TRVDrawLineInfo* __fastcall CreatePrintingDrawItem(System::TObject* RVData, const Rvstyle::TRVScreenAndDevice &sad); + DYNAMIC AnsiString __fastcall GetHTMLAnchorName(); +public: + #pragma option push -w-inl + /* TCustomRVNoteItemInfo.Destroy */ inline __fastcall virtual ~TRVFootnoteItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVNoteReferenceItemInfo; +class PASCALIMPLEMENTATION TRVNoteReferenceItemInfo : public Rvlabelitem::TRVLabelItemInfo +{ + typedef Rvlabelitem::TRVLabelItemInfo inherited; + +protected: + virtual AnsiString __fastcall GetTextForPrinting(Classes::TPersistent* RVData, Dlines::TRVDrawLineInfo* DrawItem); + +public: + __fastcall virtual TRVNoteReferenceItemInfo(Classes::TPersistent* RVData); + __fastcall TRVNoteReferenceItemInfo(Classes::TPersistent* RVData, int TextStyleNo); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, Rvitem::TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC bool __fastcall ReadRVFLine(const AnsiString s, Classes::TPersistent* RVData, int ReadType, int LineNo, int LineCount, AnsiString &Name, Rvitem::TRVFReadMode &ReadMode, Rvitem::TRVFReadState &ReadState, bool UTF8Strings, bool &AssStyleNameUsed); + virtual void __fastcall OnDocWidthChange(int DocWidth, Dlines::TRVDrawLineInfo* dli, bool Printing, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData, Rvstyle::PRVScreenAndDevice sad, int &HShift, int &Desc, bool NoCaching, bool Reformatting, bool UseFormatCanvas); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVNoteReferenceItemInfo(void) { } + #pragma option pop + +}; + + +typedef TMetaClass* TCustomRVNoteItemInfoClass; + +typedef TMetaClass* TRVEndnoteItemInfoClass; + +//-- var, const, procedure --------------------------------------------------- +#define RV_FOOTNOTE_SEQNAME "@footnote@" +#define RV_ENDNOTE_SEQNAME "@endnote@" +#define RV_FOOTNOTE_HTML_ANCHOR "footnote%d" +#define RV_ENDNOTE_HTML_ANCHOR "endnote%d" +static const short rvsFootnote = -203; +static const short rvsEndnote = -204; +static const short rvsNoteReference = -205; +extern PACKAGE int __fastcall RVGetNoteTextStyleNo(Rvstyle::TRVStyle* RVStyle, int StyleNo); +extern PACKAGE TCustomRVNoteItemInfo* __fastcall GetNextNote(Crvdata::TCustomRVData* RVData, TCustomRVNoteItemInfo* Note, TMetaClass* NoteClass); +extern PACKAGE TRVEndnoteItemInfo* __fastcall RVGetFirstEndnote(Richview::TCustomRichView* RichView); +extern PACKAGE TRVEndnoteItemInfo* __fastcall RVGetFirstEndnoteInRootRVData(Crvdata::TCustomRVData* RVData); +extern PACKAGE TRVEndnoteItemInfo* __fastcall RVGetNextEndnote(Richview::TCustomRichView* RichView, TRVEndnoteItemInfo* Endnote); +extern PACKAGE TRVFootnoteItemInfo* __fastcall RVGetFirstFootnote(Richview::TCustomRichView* RichView); +extern PACKAGE TRVFootnoteItemInfo* __fastcall RVGetNextFootnote(Richview::TCustomRichView* RichView, TRVFootnoteItemInfo* Footnote); +extern PACKAGE TRVFootnoteItemInfo* __fastcall RVGetFirstFootnoteInRootRVData(Crvdata::TCustomRVData* RVData); + +} /* namespace Rvnote */ +using namespace Rvnote; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvnote diff --git a/12.0.4/Units/D2006/RVOfficeCnv.dcu b/12.0.4/Units/D2006/RVOfficeCnv.dcu new file mode 100644 index 0000000..f774481 Binary files /dev/null and b/12.0.4/Units/D2006/RVOfficeCnv.dcu differ diff --git a/12.0.4/Units/D2006/RVOfficeCnv.hpp b/12.0.4/Units/D2006/RVOfficeCnv.hpp new file mode 100644 index 0000000..d7d9015 --- /dev/null +++ b/12.0.4/Units/D2006/RVOfficeCnv.hpp @@ -0,0 +1,174 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvofficecnv.pas' rev: 10.00 + +#ifndef RvofficecnvHPP +#define RvofficecnvHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvofficecnv +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVOfficeConverterInfo; +class PASCALIMPLEMENTATION TRVOfficeConverterInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + AnsiString ClsName; + AnsiString Name; + AnsiString Path; + AnsiString Filter; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVOfficeConverterInfo(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVOfficeConverterInfo(void) { } + #pragma option pop + +}; + + +typedef int __stdcall (*TInitConverter32)(HWND hwndWord, char * szModule); + +typedef void __stdcall (*TUninitConverter)(void); + +typedef int __stdcall (*TForeignToRtf32Callback)(int cchBuff, int nPercent); + +typedef int __stdcall (*TRtfToForeign32Callback)(int rgfOptions, int nReserved); + +typedef short __stdcall (*TForeignToRtf32)(unsigned ghszFile, void * pstgForeign, unsigned ghBuff, unsigned ghszClass, unsigned ghszSubset, TForeignToRtf32Callback lpfnOut); + +typedef short __stdcall (*TRtfToForeign32)(unsigned ghszFile, void * pstgForeign, unsigned ghBuff, unsigned ghszClass, TRtfToForeign32Callback lpfnIn); + +typedef unsigned __stdcall (*TRegisterApp)(int lFlags, void * lpRegApp); + +typedef short __stdcall (*TIsFormatCorrect32)(unsigned ghszFile, unsigned ghszClass); + +typedef void __fastcall (__closure *TConvertingEvent)(System::TObject* Sender, int Percent); + +class DELPHICLASS TRVOfficeCnvList; +class DELPHICLASS TRVOfficeConverter; +class PASCALIMPLEMENTATION TRVOfficeConverter : public Classes::TComponent +{ + typedef Classes::TComponent inherited; + +private: + TRVOfficeCnvList* FImportConverters; + TRVOfficeCnvList* FExportConverters; + TConvertingEvent FOnConverting; + Rvclasses::TRVMemoryStream* FStream; + bool FExcludeHTMLImportConverter; + bool FExcludeHTMLExportConverter; + bool FPreviewMode; + int FErrorCode; + bool FExtensionsInFilter; + TRVOfficeCnvList* __fastcall GetExportConverters(void); + TRVOfficeCnvList* __fastcall GetImportConverters(void); + void __fastcall SetExcludeHTMLExportConverter(const bool Value); + void __fastcall SetExcludeHTMLImportConverter(const bool Value); + +public: + __fastcall virtual TRVOfficeConverter(Classes::TComponent* AOwner); + __fastcall virtual ~TRVOfficeConverter(void); + bool __fastcall ImportRTF(const AnsiString FileName, int ConverterIndex); + bool __fastcall ExportRTF(const AnsiString FileName, int ConverterIndex); + bool __fastcall ImportRV(const AnsiString FileName, Richview::TCustomRichView* rv, int ConverterIndex); + bool __fastcall ExportRV(const AnsiString FileName, Richview::TCustomRichView* rv, int ConverterIndex); + AnsiString __fastcall GetImportFilter(); + AnsiString __fastcall GetExportFilter(); + bool __fastcall IsValidImporter(const AnsiString FileName, int Index); + __property TRVOfficeCnvList* ImportConverters = {read=GetImportConverters}; + __property TRVOfficeCnvList* ExportConverters = {read=GetExportConverters}; + __property Rvclasses::TRVMemoryStream* Stream = {read=FStream}; + __property int ErrorCode = {read=FErrorCode, nodefault}; + +__published: + __property bool ExcludeHTMLImportConverter = {read=FExcludeHTMLImportConverter, write=SetExcludeHTMLImportConverter, default=0}; + __property bool ExcludeHTMLExportConverter = {read=FExcludeHTMLExportConverter, write=SetExcludeHTMLExportConverter, default=0}; + __property bool PreviewMode = {read=FPreviewMode, write=FPreviewMode, default=0}; + __property bool ExtensionsInFilter = {read=FExtensionsInFilter, write=FExtensionsInFilter, default=0}; + __property TConvertingEvent OnConverting = {read=FOnConverting, write=FOnConverting}; +}; + + +class PASCALIMPLEMENTATION TRVOfficeCnvList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVOfficeConverterInfo* operator[](int Index) { return Items[Index]; } + +private: + TRVOfficeConverter* FOwner; + unsigned hBuffer; + TConvertingEvent FOnConverting; + Rvclasses::TRVMemoryStream* FStream; + int FStep; + int FStart; + int FSize; + HIDESBASE void __fastcall Put(int Index, TRVOfficeConverterInfo* Value); + HIDESBASE TRVOfficeConverterInfo* __fastcall Get(int Index); + void __fastcall LoadList(const AnsiString RegPath, bool ExcludeHTML); + +public: + __fastcall TRVOfficeCnvList(const AnsiString RegPath, TRVOfficeConverter* Owner, bool ExcludeHTML); + AnsiString __fastcall GetFilter(bool IncludeExtensions); + void __fastcall ImportRTF(const AnsiString FileName, int Index); + void __fastcall ExportRTF(const AnsiString FileName, int Index); + bool __fastcall IsFormatCorrect(const AnsiString FileName, int Index); + __property TRVOfficeConverterInfo* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVOfficeCnvList(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const Shortint rvceCnvLoadError = 0x1; +static const Shortint rvceFuncError = 0x2; +static const Shortint rvceInitError = 0x3; +static const Shortint rvceOpenInFileErr = -1; +static const Shortint rvceReadErr = -2; +static const Shortint rvceOpenConvErr = -3; +static const Shortint rvceWriteErr = -4; +static const Shortint rvceInvalidFile = -5; +static const Shortint rvceOpenExceptErr = -6; +static const Shortint rvceWriteExceptErr = -7; +static const Shortint rvceNoMemory = -8; +static const Shortint rvceInvalidDoc = -9; +static const Shortint rvceDiskFull = -10; +static const Shortint rvceDocTooLarge = -11; +static const Shortint rvceOpenOutFileErr = -12; +static const Shortint rvceUserCancel = -13; +static const Shortint rvceWrongFileType = -14; + +} /* namespace Rvofficecnv */ +using namespace Rvofficecnv; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvofficecnv diff --git a/12.0.4/Units/D2006/RVPkg2006.bdsproj b/12.0.4/Units/D2006/RVPkg2006.bdsproj new file mode 100644 index 0000000..a81fc48 --- /dev/null +++ b/12.0.4/Units/D2006/RVPkg2006.bdsproj @@ -0,0 +1,177 @@ + + + + + + + + + + + + RVPkg2006.dpk + + + 7.0 + + + 8 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + True + True + True + + + + 0 + 44 + False + 1 + False + False + False + 16384 + 1048576 + 4194304 + TRichView for BDS 2006 (Win32 Delphi and C++Builder) + + + + + + + + + + + False + + + + + + False + + + True + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + + diff --git a/12.0.4/Units/D2006/RVPkg2006.dcu b/12.0.4/Units/D2006/RVPkg2006.dcu new file mode 100644 index 0000000..54836c4 Binary files /dev/null and b/12.0.4/Units/D2006/RVPkg2006.dcu differ diff --git a/12.0.4/Units/D2006/RVPkg2006.dpk b/12.0.4/Units/D2006/RVPkg2006.dpk new file mode 100644 index 0000000..6068ca0 --- /dev/null +++ b/12.0.4/Units/D2006/RVPkg2006.dpk @@ -0,0 +1,92 @@ +package RVPkg2006; + +{$R *.res} +{$R 'RVRegCool.dcr'} +{$ALIGN 8} +{$ASSERTIONS OFF} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS OFF} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TRichView for BDS 2006 (Win32 Delphi and C++Builder)'} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcljpg, + vcl, + designide; + +contains + CRVData in 'CRVData.pas', + CRVFData in 'CRVFData.pas', + Crvpp in 'Crvpp.pas', + CtrlImg in 'CtrlImg.pas', + DLines in 'DLines.pas', + PtblRV in 'PtblRV.pas', + PtRVData in 'PtRVData.pas', + RichView in 'RichView.pas', + RVAnimate in 'RVAnimate.pas', + RVBack in 'RVBack.pas', + RVClasses in 'RVClasses.pas', + RVCodePages in 'RVCodePages.pas', + RVCtrlData in 'RVCtrlData.pas', + RVDataList in 'RVDataList.pas', + RVDragDrop in 'RVDragDrop.pas', + RVDsgn in 'RVDsgn.pas', + RVEdit in 'RVEdit.pas', + RVERVData in 'RVERVData.pas', + RVFMisc in 'RVFMisc.pas', + RVFuncs in 'RVFuncs.pas', + RVGetText in 'RVGetText.pas', + RVGetTextW in 'RVGetTextW.pas', + RVItem in 'RVItem.pas', + RVLinear in 'RVLinear.pas', + RVMapWht in 'RVMapWht.pas', + RVMarker in 'RVMarker.pas', + RVMisc in 'RVMisc.pas', + RVOfficeCnv in 'RVOfficeCnv.pas', + RVPopup in 'RVPopup.pas', + Rvpp in 'Rvpp.pas', + RVReg in 'RVReg.pas', + RVReport in 'RVReport.pas', + RVResize in 'RVResize.pas', + Rvrtf in 'Rvrtf.pas', + RVRTFErr in 'RVRTFErr.pas', + RVRTFProps in 'RVRTFProps.pas', + RVRVData in 'RVRVData.pas', + RVScroll in 'RVScroll.pas', + RVSEdit in 'RVSEdit.pas', + RVSer in 'RVSer.pas', + RVStr in 'RVStr.pas', + RVStyle in 'RVStyle.pas', + RVTable in 'RVTable.pas', + RVThread in 'RVThread.pas', + RVTInplace in 'RVTInplace.pas', + RVUndo in 'RVUndo.pas', + RVUni in 'RVUni.pas', + RVWordPaint in 'RVWordPaint.pas', + RVXPTheme in 'RVXPTheme.pas', + RVLabelItem in 'RVLabelItem.pas', + RVNote in 'RVNote.pas', + RVSeqItem in 'RVSeqItem.pas', + RVSubData in 'RVSubData.pas', + RVDocParams in 'RVDocParams.pas', + RVTypes in 'RVTypes.pas'; + +end. diff --git a/12.0.4/Units/D2006/RVPkg2006.hpp b/12.0.4/Units/D2006/RVPkg2006.hpp new file mode 100644 index 0000000..8226f31 --- /dev/null +++ b/12.0.4/Units/D2006/RVPkg2006.hpp @@ -0,0 +1,144 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvpkg2006.pas' rev: 10.00 + +#ifndef Rvpkg2006HPP +#define Rvpkg2006HPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvpkg2006 +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvpkg2006 */ +using namespace Rvpkg2006; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvpkg2006 diff --git a/12.0.4/Units/D2006/RVPkg2006.lib b/12.0.4/Units/D2006/RVPkg2006.lib new file mode 100644 index 0000000..41d1f19 Binary files /dev/null and b/12.0.4/Units/D2006/RVPkg2006.lib differ diff --git a/12.0.4/Units/D2006/RVPkg2006.res b/12.0.4/Units/D2006/RVPkg2006.res new file mode 100644 index 0000000..653aa54 Binary files /dev/null and b/12.0.4/Units/D2006/RVPkg2006.res differ diff --git a/12.0.4/Units/D2006/RVPopup.dcu b/12.0.4/Units/D2006/RVPopup.dcu new file mode 100644 index 0000000..5c51be3 Binary files /dev/null and b/12.0.4/Units/D2006/RVPopup.dcu differ diff --git a/12.0.4/Units/D2006/RVPopup.hpp b/12.0.4/Units/D2006/RVPopup.hpp new file mode 100644 index 0000000..839dab4 --- /dev/null +++ b/12.0.4/Units/D2006/RVPopup.hpp @@ -0,0 +1,132 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvpopup.pas' rev: 10.00 + +#ifndef RvpopupHPP +#define RvpopupHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvpopup +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVSmartPopupProperties; +class DELPHICLASS TRVSmartPopupButton; +class PASCALIMPLEMENTATION TRVSmartPopupButton : public Controls::TCustomControl +{ + typedef Controls::TCustomControl inherited; + +private: + bool FHot; + bool FAlwaysHot; + TRVSmartPopupProperties* FSmartPopupProperties; + void __fastcall SetSmartPopupProperties(const TRVSmartPopupProperties* Value); + HIDESBASE MESSAGE void __fastcall CMMouseEnter(Messages::TMessage &Msg); + HIDESBASE MESSAGE void __fastcall CMMouseLeave(Messages::TMessage &Msg); + HIDESBASE MESSAGE void __fastcall WMEraseBkgnd(Messages::TWMEraseBkgnd &Message); + +protected: + virtual void __fastcall Paint(void); + +public: + Rvitem::TCustomRVItemInfo* Item; + Crvdata::TCustomRVData* RVData; + int ItemNo; + __fastcall virtual ~TRVSmartPopupButton(void); + DYNAMIC void __fastcall Click(void); + __property TRVSmartPopupProperties* SmartPopupProperties = {read=FSmartPopupProperties, write=SetSmartPopupProperties}; +public: + #pragma option push -w-inl + /* TCustomControl.Create */ inline __fastcall virtual TRVSmartPopupButton(Classes::TComponent* AOwner) : Controls::TCustomControl(AOwner) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TRVSmartPopupButton(HWND ParentWindow) : Controls::TCustomControl(ParentWindow) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVSmartPopupProperties : public Classes::TPersistent +{ + typedef Classes::TPersistent inherited; + +private: + int FImageIndex; + Imglist::TCustomImageList* FImageList; + Graphics::TColor FColor; + Graphics::TColor FHoverLineColor; + Graphics::TColor FLineColor; + Graphics::TColor FHoverColor; + Menus::TPopupMenu* FMenu; + AnsiString FHint; + Classes::TShortCut FShortCut; + Rvscroll::TRVSmartPopupType FButtonType; + TRVSmartPopupButton* FButton; + Rvscroll::TRVSmartPopupPosition FPosition; + void __fastcall SetImageIndex(const int Value); + void __fastcall SetImageList(const Imglist::TCustomImageList* Value); + void __fastcall SetColor(const Graphics::TColor Value); + void __fastcall SetHoverColor(const Graphics::TColor Value); + void __fastcall SetHoverLineColor(const Graphics::TColor Value); + void __fastcall SetLineColor(const Graphics::TColor Value); + void __fastcall SetHint(const AnsiString Value); + bool __fastcall StoreHint(void); + +public: + Rvscroll::TRVScroller* RichView; + __fastcall TRVSmartPopupProperties(void); + virtual void __fastcall Assign(Classes::TPersistent* Source); + void __fastcall SetButtonState(bool Hot); + +__published: + __property int ImageIndex = {read=FImageIndex, write=SetImageIndex, default=0}; + __property Imglist::TCustomImageList* ImageList = {read=FImageList, write=SetImageList}; + __property Graphics::TColor Color = {read=FColor, write=SetColor, default=-16777211}; + __property Graphics::TColor HoverColor = {read=FHoverColor, write=SetHoverColor, default=-16777192}; + __property Graphics::TColor LineColor = {read=FLineColor, write=SetLineColor, default=-16777203}; + __property Graphics::TColor HoverLineColor = {read=FHoverLineColor, write=SetHoverLineColor, default=-16777193}; + __property Menus::TPopupMenu* Menu = {read=FMenu, write=FMenu}; + __property AnsiString Hint = {read=FHint, write=SetHint, stored=StoreHint}; + __property Classes::TShortCut ShortCut = {read=FShortCut, write=FShortCut, default=24616}; + __property Rvscroll::TRVSmartPopupType ButtonType = {read=FButtonType, write=FButtonType, default=0}; + __property Rvscroll::TRVSmartPopupPosition Position = {read=FPosition, write=FPosition, default=2}; +public: + #pragma option push -w-inl + /* TPersistent.Destroy */ inline __fastcall virtual ~TRVSmartPopupProperties(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvpopup */ +using namespace Rvpopup; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvpopup diff --git a/12.0.4/Units/D2006/RVRTFErr.dcu b/12.0.4/Units/D2006/RVRTFErr.dcu new file mode 100644 index 0000000..90f8173 Binary files /dev/null and b/12.0.4/Units/D2006/RVRTFErr.dcu differ diff --git a/12.0.4/Units/D2006/RVRTFErr.hpp b/12.0.4/Units/D2006/RVRTFErr.hpp new file mode 100644 index 0000000..8652615 --- /dev/null +++ b/12.0.4/Units/D2006/RVRTFErr.hpp @@ -0,0 +1,36 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvrtferr.pas' rev: 10.00 + +#ifndef RvrtferrHPP +#define RvrtferrHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvrtferr +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVRTFErrorCode { rtf_ec_OK, rtf_ec_StackUnderflow, rtf_ec_StackOverflow, rtf_ec_UnmatchedBrace, rtf_ec_InvalidHex, rtf_ec_BadTable, rtf_ec_Assertion, rtf_ec_EndOfFile, rtf_ec_FileOpenError, rtf_ec_Exception, rtf_ec_InvalidPicture, rtf_ec_Aborted }; +#pragma option pop + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvrtferr */ +using namespace Rvrtferr; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvrtferr diff --git a/12.0.4/Units/D2006/RVRTFProps.dcu b/12.0.4/Units/D2006/RVRTFProps.dcu new file mode 100644 index 0000000..9fd4801 Binary files /dev/null and b/12.0.4/Units/D2006/RVRTFProps.dcu differ diff --git a/12.0.4/Units/D2006/RVRTFProps.hpp b/12.0.4/Units/D2006/RVRTFProps.hpp new file mode 100644 index 0000000..6f07511 --- /dev/null +++ b/12.0.4/Units/D2006/RVRTFProps.hpp @@ -0,0 +1,218 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvrtfprops.pas' rev: 10.00 + +#ifndef RvrtfpropsHPP +#define RvrtfpropsHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvrtfprops +{ +//-- type declarations ------------------------------------------------------- +typedef void __fastcall (__closure *TRVAllowUseStyleEvent)(int StyleNo, bool TextStyle, bool &Allow); + +typedef void __fastcall (__closure *TRVCustomImageItemEvent)(Crvdata::TCustomRVData* RVData, Graphics::TGraphic* Graphic, bool Hypertext, Rvitem::TCustomRVItemInfo* &item, bool &FreeGraphic, Rvrtf::TRVRTFPicture* RTFPicture, const AnsiString FileName, AnsiString &Name); + +typedef TMetaClass* TRVRTFReaderClass; + +class DELPHICLASS TRVRTFReaderProperties; +class PASCALIMPLEMENTATION TRVRTFReaderProperties : public Classes::TPersistent +{ + typedef Classes::TPersistent inherited; + +private: + Rvstyle::TRVReaderUnicode FUnicodeMode; + Rvstyle::TRVReaderStyleMode FTextStyleMode; + Rvstyle::TRVReaderStyleMode FParaStyleMode; + bool FIgnorePictures; + bool FIgnoreTables; + bool FIgnoreBookmarks; + bool FIgnoreNotes; + bool FIgnoreSequences; + bool FUseHypertextStyles; + int FParaNo; + int FStyleNo; + bool FExplicitTableWidth; + bool FSkipHiddenText; + bool FHideTableGridLines; + bool FLineBreaksAsParagraphs; + AnsiString FBookmarkName; + int FEmptyPara; + Crvdata::TCustomRVData* RVData; + Crvdata::TCustomRVData* CurrentRVData; + Rvstyle::TRVStyle* RVStyle; + bool PageBreak; + Crvdata::TCustomRVData* PageBreakRVData; + double PixelsPerTwip; + Rvrtf::TRVRTFReader* Reader; + bool FirstTime; + bool FUseCharsetForUnicode; + Graphics::TFontCharset FCharsetForUnicode; + int InsertPoint; + int CurrentRow; + int CurrentCol; + Rvclasses::TRVList* SubDataList; + Crvdata::TCustomRVData* FHeaderRVData; + Crvdata::TCustomRVData* FFooterRVData; + int FHeaderYMM; + int FFooterYMM; + Rvscroll::TRVRTFHighlight FConvertHighlight; + Rvrtf::TRVRTFHeaderFooterType HFType; + AnsiString FBasePath; + bool FExtractMetafileBitmaps; + bool FBasePathLinks; + bool FUseSingleCellPadding; + bool IgnoreLists; + int LastMarkerIndex; + bool IsLastMarkerWord97; + Rvclasses::TRVIntegerList* LevelToListNo; + Rvclasses::TRVIntegerList* ListTableMap97; + int ListStylesCountBefore; + int LastNoteRefIndex; + bool FReadDocParameters; + bool FStoreImagesFileNames; + void __fastcall InitReader(void); + void __fastcall DoneReader(void); + int __fastcall ReturnParaNo(Rvrtf::TRVRTFPosition Position); + Rvitem::TRVTextItemInfo* __fastcall CreateTextItem(const AnsiString Text, const WideString WideText, int StyleNo, int ParaNo, bool UseUnicode, AnsiString &ResText); + int __fastcall GetMarkerIndex(Rvrtf::TRVRTFMarkerProperties* RTFMarker); + bool __fastcall InsertMarker(int ParaNo); + bool __fastcall InsertMarker97(int ParaNo); + void __fastcall ReaderUpdateMarker(System::TObject* Sender); + void __fastcall MergeListTable97(void); + bool __fastcall AreListStylesEqual97(Rvstyle::TRVListInfo* RVList, Rvrtf::TRVRTFList97* RTFList); + int __fastcall FindListStyle97(Rvrtf::TRVRTFList97* RTFList, Rvclasses::TRVIntegerList* ForbiddenStyles); + void __fastcall InsertItem(AnsiString &Text, Rvitem::TCustomRVItemInfo* item, Rvrtf::TRVRTFPosition Position); + void __fastcall CurrentBorder(Rvstyle::TRVBorderStyle &RVBorderStyle, int &RVBorderWidth, int &RVBorderIntWidth, Graphics::TColor &RVBorderColor, Rvstyle::TRVRect* &RVBorderOffs); + int __fastcall FindParaNo(Rvstyle::TRVBorderStyle RVBorderStyle, int RVBorderWidth, int RVBorderIntWidth, Graphics::TColor RVBorderColor, Rvstyle::TRVRect* RVBorderOffs); + int __fastcall GetEmptyParaNo(Rvstyle::TRVAlignment Alignment); + int __fastcall GetEmptyStyleNo(void); + int __fastcall FindBestParaNo(void); + int __fastcall FindStyleNo(bool AUnicode, bool AHypertext, bool SwitchProtect); + int __fastcall FindBestStyleNo(bool AUnicode, bool AHypertext, bool ASwitchProtect); + void __fastcall AddPara(Rvstyle::TRVBorderStyle RVBorderStyle, int RVBorderWidth, int RVBorderIntWidth, Graphics::TColor RVBorderColor, Rvstyle::TRVRect* RVBorderOffs); + void __fastcall AddStyle(bool AUnicode, bool AHypertext, bool ASwitchProtect); + int __fastcall ReturnParaNo_(void); + int __fastcall ReturnStyleNo(bool AUnicode, bool ASwitchProtect); + bool __fastcall IsHypertext_(void); + bool __fastcall IsHypertext(AnsiString &Target, AnsiString &Hint, AnsiString &Extras); + bool __fastcall AllowUseStyle(int StyleNo, bool TextStyle); + void __fastcall SetParaNo(const int Value); + void __fastcall SetStyleNo(const int Value); + +protected: + void __fastcall ReaderProgress(Rvrtf::TRVRTFReader* Sender, Rvrtf::TRVRTFProgressStage Stage, Byte PercentDone); + void __fastcall NewReaderText(Rvrtf::TRVRTFReader* Sender, const AnsiString Text, Rvrtf::TRVRTFPosition Position); + void __fastcall NewReaderSeq(Rvrtf::TRVRTFReader* Sender, Rvrtf::TRVRTFPosition Position, const AnsiString SeqName, Rvrtf::TRVRTFSeqType NumberingType, bool Reset, int StartFrom); + void __fastcall ReaderNote(Rvrtf::TRVRTFReader* Sender, Rvrtf::TRVRTFNoteEventType What, Rvrtf::TRVRTFPosition Position); + void __fastcall ReaderEndParsing(System::TObject* Sender); + void __fastcall NewReaderUnicodeText(Rvrtf::TRVRTFReader* Sender, const WideString Text, Rvrtf::TRVRTFPosition Position); + void __fastcall NewReaderPicture(Rvrtf::TRVRTFReader* Sender, Rvrtf::TRVRTFPicture* RTFPicture, Graphics::TGraphic* Graphic, Rvrtf::TRVRTFPosition Position, const AnsiString FileName, bool &Inserted); + void __fastcall ReaderImportPicture(Rvrtf::TRVRTFReader* Sender, const AnsiString Location, Graphics::TGraphic* &Graphic, bool &Invalid); + void __fastcall AssignRowProperties(void); + void __fastcall ReaderTable(Rvrtf::TRVRTFReader* Sender, Rvrtf::TRVRTFTableEventKind WhatHappens, bool &Processed); + void __fastcall ReaderPageBreak(System::TObject* Sender); + void __fastcall ReaderHeaderFooter(Rvrtf::TRVRTFReader* Sender, Rvrtf::TRVRTFHeaderFooterType HFType, bool Starting, bool &Supported); + void __fastcall ReaderBookmarkStart(Rvrtf::TRVRTFReader* Sender, const AnsiString BookmarkName); + DYNAMIC void __fastcall ReaderTranslateKeyword(Rvrtf::TRVRTFReader* Sender, const AnsiString Keyword, int Param, bool fParam, AnsiString &Text, bool &DoDefault); + +public: + bool EditFlag; + Rvrtferr::TRVRTFErrorCode ErrorCode; + bool FailedBecauseOfProtect; + bool FullReformat; + int NonFirstItemsAdded; + bool AllowNewPara; + TRVAllowUseStyleEvent OnAllowUseStyle; + TRVCustomImageItemEvent OnCustomImageItem; + int Index; + __fastcall TRVRTFReaderProperties(void); + virtual void __fastcall Assign(Classes::TPersistent* Source); + Rvrtferr::TRVRTFErrorCode __fastcall ReadFromFile(const AnsiString AFileName, Crvdata::TCustomRVData* ARVData); + Rvrtferr::TRVRTFErrorCode __fastcall ReadFromStream(Classes::TStream* AStream, Crvdata::TCustomRVData* ARVData); + Rvrtferr::TRVRTFErrorCode __fastcall InsertFromStreamEd(Classes::TStream* AStream, Crvdata::TCustomRVData* ARVData, int &AIndex); + __property bool ExplicitTableWidth = {read=FExplicitTableWidth, write=FExplicitTableWidth, default=0}; + virtual TMetaClass* __fastcall GetRVRTFReaderClass(void); + void __fastcall SetHeader(Crvdata::TCustomRVData* RVData); + void __fastcall SetFooter(Crvdata::TCustomRVData* RVData); + __property int HeaderYMM = {read=FHeaderYMM, nodefault}; + __property int FooterYMM = {read=FFooterYMM, nodefault}; + __property AnsiString BasePath = {read=FBasePath, write=FBasePath}; + __property Rvrtf::TRVRTFReader* RTFReader = {read=Reader}; + __property Crvdata::TCustomRVData* HeaderRVData = {read=FHeaderRVData}; + __property Crvdata::TCustomRVData* FooterRVData = {read=FFooterRVData}; + +__published: + __property Rvstyle::TRVReaderUnicode UnicodeMode = {read=FUnicodeMode, write=FUnicodeMode, default=1}; + __property Rvstyle::TRVReaderStyleMode TextStyleMode = {read=FTextStyleMode, write=FTextStyleMode, default=1}; + __property Rvstyle::TRVReaderStyleMode ParaStyleMode = {read=FParaStyleMode, write=FParaStyleMode, default=1}; + __property bool IgnorePictures = {read=FIgnorePictures, write=FIgnorePictures, default=0}; + __property bool IgnoreNotes = {read=FIgnoreNotes, write=FIgnoreNotes, default=0}; + __property bool IgnoreSequences = {read=FIgnoreSequences, write=FIgnoreSequences, default=0}; + __property bool IgnoreTables = {read=FIgnoreTables, write=FIgnoreTables, default=0}; + __property bool IgnoreBookmarks = {read=FIgnoreBookmarks, write=FIgnoreBookmarks, default=0}; + __property bool UseHypertextStyles = {read=FUseHypertextStyles, write=FUseHypertextStyles, default=0}; + __property int TextStyleNo = {read=FStyleNo, write=SetStyleNo, default=0}; + __property int ParaStyleNo = {read=FParaNo, write=SetParaNo, default=0}; + __property bool SkipHiddenText = {read=FSkipHiddenText, write=FSkipHiddenText, default=1}; + __property bool AutoHideTableGridLines = {read=FHideTableGridLines, write=FHideTableGridLines, default=0}; + __property bool LineBreaksAsParagraphs = {read=FLineBreaksAsParagraphs, write=FLineBreaksAsParagraphs, default=0}; + __property bool ReadDocParameters = {read=FReadDocParameters, write=FReadDocParameters, default=0}; + __property bool UseSingleCellPadding = {read=FUseSingleCellPadding, write=FUseSingleCellPadding, default=0}; + __property bool ExtractMetafileBitmaps = {read=FExtractMetafileBitmaps, write=FExtractMetafileBitmaps, default=1}; + __property Rvscroll::TRVRTFHighlight ConvertHighlight = {read=FConvertHighlight, write=FConvertHighlight, default=2}; + __property bool StoreImagesFileNames = {read=FStoreImagesFileNames, write=FStoreImagesFileNames, default=0}; + __property bool BasePathLinks = {read=FBasePathLinks, write=FBasePathLinks, default=1}; + __property bool UseCharsetForUnicode = {read=FUseCharsetForUnicode, write=FUseCharsetForUnicode, default=0}; + __property Graphics::TFontCharset CharsetForUnicode = {read=FCharsetForUnicode, write=FCharsetForUnicode, default=1}; +public: + #pragma option push -w-inl + /* TPersistent.Destroy */ inline __fastcall virtual ~TRVRTFReaderProperties(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE int RV_TableGridEps; + +} /* namespace Rvrtfprops */ +using namespace Rvrtfprops; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvrtfprops diff --git a/12.0.4/Units/D2006/RVRTFReg.dcr b/12.0.4/Units/D2006/RVRTFReg.dcr new file mode 100644 index 0000000..1d96bf6 Binary files /dev/null and b/12.0.4/Units/D2006/RVRTFReg.dcr differ diff --git a/12.0.4/Units/D2006/RVRVData.dcu b/12.0.4/Units/D2006/RVRVData.dcu new file mode 100644 index 0000000..89f0785 Binary files /dev/null and b/12.0.4/Units/D2006/RVRVData.dcu differ diff --git a/12.0.4/Units/D2006/RVRVData.hpp b/12.0.4/Units/D2006/RVRVData.hpp new file mode 100644 index 0000000..412f6d9 --- /dev/null +++ b/12.0.4/Units/D2006/RVRVData.hpp @@ -0,0 +1,265 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvrvdata.pas' rev: 10.00 + +#ifndef RvrvdataHPP +#define RvrvdataHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvrvdata +{ +//-- type declarations ------------------------------------------------------- +typedef void __fastcall (__closure *TRVGetMouseClientCoords)(Controls::TControl* Sender, int &X, int &Y); + +class DELPHICLASS TRichViewRVData; +class PASCALIMPLEMENTATION TRichViewRVData : public Rvctrldata::TRVControlData +{ + typedef Rvctrldata::TRVControlData inherited; + +private: + Classes::TNotifyEvent FOnClear; + Classes::TStrings* __fastcall GetExtraDocumentsList(void); + void __fastcall SetExtraDocumentsList(const Classes::TStrings* Value); + +protected: + Classes::TStringList* FExtraDocuments; + Crvfdata::TRVDataDrawHyperlinkEvent FOnDrawHyperlink; + Rvscroll::TRVScroller* FRichView; + Crvfdata::TRVFontInfoCache* FFontInfoCache; + int FClickX; + int FClickY; + Rvclasses::TRVIntegerList* RVFTextStylesMapping; + Rvclasses::TRVIntegerList* RVFParaStylesMapping; + Rvclasses::TRVIntegerList* RVFListStyleMapping; + Rvseqitem::TRVSeqList* FSeqList; + Rvmarker::TRVMarkerList* FMarkers; + DYNAMIC void __fastcall DestroyMarkers(void); + DYNAMIC void __fastcall DestroySeqList(void); + DYNAMIC Controls::TControl* __fastcall GetInplaceEditor(void); + DYNAMIC void __fastcall DestroyInplaceEditor(void); + DYNAMIC Classes::TPersistent* __fastcall GetRTFProperties(void); + DYNAMIC bool __fastcall CanStartDragging(void); + DYNAMIC bool __fastcall InitDragging(Rvdragdrop::TRVDropSource* &DropSource, int &OKEffect); + DYNAMIC void __fastcall DoneDragging(bool FDeleteSelection); + DYNAMIC void __fastcall SetClickCoords(int X, int Y); + DYNAMIC bool __fastcall CanStartDragBecauseMouseMoved(int X, int Y); + virtual int __fastcall GetRVDataExtraVOffs(void); + Crvfdata::TRVFontInfoCache* __fastcall DoCreateFontInfoCache(Graphics::TCanvas* ACanvas, Graphics::TCanvas* AFormatCanvas, Crvfdata::TCustomRVFormattedData* Owner); + virtual int __fastcall GetMaxLength(void); + virtual bool __fastcall IsWordWrapAllowed(void); + virtual Graphics::TCanvas* __fastcall GetFormatCanvasEx(Graphics::TCanvas* DefCanvas); + DYNAMIC Classes::TStrings* __fastcall GetExtraDocuments(void); + +public: + bool FPlayingAnimation; + Rvanimate::TRVAnimatorList* FAnimatorList; + Rvdragdrop::TRVDropSource* FDropSource; + Rvpopup::TRVSmartPopupButton* FSmartPopupButton; + Classes::TNotifyEvent OnSetHint; + TRVGetMouseClientCoords OnGetMouseClientCoords; + DYNAMIC void __fastcall InitStyleMappings(Crvdata::PRVIntegerList &PTextStylesMapping, Crvdata::PRVIntegerList &PParaStylesMapping, Crvdata::PRVIntegerList &PListStylesMapping); + DYNAMIC void __fastcall DoneStyleMappings(Crvdata::PRVIntegerList PTextStylesMapping, Crvdata::PRVIntegerList PParaStylesMapping, Crvdata::PRVIntegerList PListStylesMapping, bool AsSubDoc); + DYNAMIC void __fastcall CreateFontInfoCache(Graphics::TCanvas* ACanvas, Graphics::TCanvas* AFormatCanvas); + DYNAMIC void __fastcall DestroyFontInfoCache(Crvfdata::TRVFontInfoCache* &Cache); + DYNAMIC Crvfdata::TRVFontInfoCache* __fastcall GetFontInfoCache(Graphics::TCanvas* ACanvas, Graphics::TCanvas* AFormatCanvas, Crvfdata::TCustomRVFormattedData* RVData); + DYNAMIC void __fastcall AdjustSpecialControlsCoords(Crvfdata::TCustomRVFormattedData* RVData); + void __fastcall SetSmartPopupCoords(void); + DYNAMIC void __fastcall Clear(void); + __fastcall virtual ~TRichViewRVData(void); + DYNAMIC bool __fastcall CanLoadLayout(void); + DYNAMIC AnsiString __fastcall GetExtraRTFCode(Rvstyle::TRVRTFSaveArea Area, System::TObject* Obj, int Index1, int Index2, bool InStyleSheet); + DYNAMIC AnsiString __fastcall GetExtraHTMLCode(Rvstyle::TRVHTMLSaveArea Area, bool CSSVersion); + DYNAMIC AnsiString __fastcall GetParaHTMLCode(Crvdata::TCustomRVData* RVData, int ItemNo, bool ParaStart, bool CSSVersion); + DYNAMIC Crvdata::TCustomRVData* __fastcall GetChosenRVData(void); + DYNAMIC Rvitem::TCustomRVItemInfo* __fastcall GetChosenItem(void); + DYNAMIC void __fastcall AssignChosenRVData(Crvfdata::TCustomRVFormattedData* RVData, Rvitem::TCustomRVItemInfo* Item); + DYNAMIC void __fastcall SilentReplaceChosenRVData(Crvfdata::TCustomRVFormattedData* RVData); + DYNAMIC void __fastcall UnassignChosenRVData(Crvdata::TCustomRVData* RVData); + DYNAMIC Controls::TWinControl* __fastcall GetParentControl(void); + DYNAMIC void __fastcall GetMouseClientCoords(Controls::TWinControl* Control, int &X, int &Y); + virtual Rvscroll::TRVPaletteAction __fastcall GetDoInPaletteMode(void); + virtual HPALETTE __fastcall GetRVPalette(void); + virtual Rvstyle::TRVStyle* __fastcall GetRVStyle(void); + virtual Windows::PLogPalette __fastcall GetRVLogPalette(void); + DYNAMIC AnsiString __fastcall GetURL(int id); + DYNAMIC void __fastcall ReadHyperlink(const AnsiString Target, const AnsiString Extras, Rvstyle::TRVLoadFormat DocFormat, int &StyleNo, int &ItemTag, AnsiString &ItemName); + DYNAMIC void __fastcall WriteHyperlink(int id, Crvdata::TCustomRVData* RVData, int ItemNo, Rvstyle::TRVSaveFormat SaveFormat, AnsiString &Target, AnsiString &Extras); + virtual Rvscroll::TRVOptions __fastcall GetOptions(void); + virtual void __fastcall SetOptions(const Rvscroll::TRVOptions Value); + DYNAMIC Classes::TStringList* __fastcall GetDocProperties(void); + virtual Rvstyle::TRVFOptions __fastcall GetRVFOptions(void); + virtual void __fastcall SetRVFOptions(const Rvstyle::TRVFOptions Value); + virtual Rvstyle::TRVFWarnings __fastcall GetRVFWarnings(void); + virtual void __fastcall SetRVFWarnings(const Rvstyle::TRVFWarnings Value); + virtual Rvstyle::TRVRTFOptions __fastcall GetRTFOptions(void); + virtual void __fastcall SetRTFOptions(const Rvstyle::TRVRTFOptions Value); + virtual int __fastcall GetAreaWidth(void); + virtual int __fastcall GetAreaHeight(void); + virtual void __fastcall GetOrigin(int &ALeft, int &ATop); + DYNAMIC void __fastcall GetOriginEx(int &ALeft, int &ATop); + virtual int __fastcall GetMinTextWidth(void); + virtual int __fastcall GetMaxTextWidth(void); + virtual int __fastcall GetLeftMargin(void); + virtual int __fastcall GetRightMargin(void); + virtual int __fastcall GetTopMargin(void); + virtual int __fastcall GetBottomMargin(void); + virtual Crvdata::TRVFlags __fastcall GetFlags(void); + virtual void __fastcall SetFlags(const Crvdata::TRVFlags Value); + virtual void __fastcall AdjustVScrollUnits(void); + virtual void __fastcall SetDocumentAreaSize(int Width, int Height, bool UpdateH); + virtual void __fastcall ScrollTo(int Y, bool Redraw); + virtual void __fastcall HScrollTo(int X); + virtual int __fastcall GetVSmallStep(void); + virtual Rvback::TRVBackground* __fastcall GetBackground(void); + DYNAMIC bool __fastcall IsAssignedCopy(void); + DYNAMIC bool __fastcall IsAssignedRVMouseDown(void); + DYNAMIC bool __fastcall IsAssignedRVMouseUp(void); + DYNAMIC bool __fastcall IsAssignedRVRightClick(void); + DYNAMIC bool __fastcall IsAssignedJump(void); + DYNAMIC bool __fastcall IsAssignedRVDblClick(void); + DYNAMIC bool __fastcall IsAssignedCheckpointVisible(void); + DYNAMIC bool __fastcall IsAssignedOnProgress(void); + DYNAMIC void __fastcall DoProgress(Rvstyle::TRVLongOperation Operation, Rvstyle::TRVProgressStage Stage, Byte PercentDone); + DYNAMIC void __fastcall DoCopy(void); + DYNAMIC void __fastcall DoRVMouseMove(int id); + DYNAMIC void __fastcall DoRVMouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int ItemNo, int X, int Y); + DYNAMIC void __fastcall DoRVMouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int ItemNo, int X, int Y); + DYNAMIC void __fastcall DoRVRightClick(const AnsiString ClickedWord, int StyleNo, int X, int Y); + DYNAMIC void __fastcall DoRVDblClick(const AnsiString ClickedWord, int StyleNo); + DYNAMIC void __fastcall DoCheckpointVisible(Rvstyle::TCheckpointData CheckpointData); + DYNAMIC void __fastcall DoDrawHyperlink(Crvdata::TCustomRVData* RVData, int ItemNo, const Types::TRect &R); + DYNAMIC void __fastcall DoGetItemCursor(Crvdata::TCustomRVData* RVData, int ItemNo, Controls::TCursor &Cursor); + DYNAMIC void __fastcall DoJump(int id); + DYNAMIC void __fastcall DoSelect(void); + DYNAMIC Controls::TCursor __fastcall GetNormalCursor(void); + DYNAMIC Rvscroll::TCPEventKind __fastcall GetCPEventKind(void); + DYNAMIC void __fastcall HTMLSaveImage(Crvdata::TCustomRVData* RVData, int ItemNo, const AnsiString Path, Graphics::TColor BackgroundColor, AnsiString &Location, bool &DoDefault); + DYNAMIC void __fastcall SaveImage2(Graphics::TGraphic* Graphic, Rvstyle::TRVSaveFormat SaveFormat, const AnsiString Path, const AnsiString ImagePrefix, int &ImageSaveNo, AnsiString &Location, bool &DoDefault); + __fastcall virtual TRichViewRVData(Rvscroll::TRVScroller* RichView); + virtual int __fastcall GetHOffs(void); + virtual int __fastcall GetVOffs(void); + virtual Graphics::TCanvas* __fastcall GetCanvas(void); + virtual int __fastcall GetWidth(void); + virtual int __fastcall GetHeight(void); + virtual Graphics::TColor __fastcall GetColor(void); + virtual AnsiString __fastcall SaveComponentToFile(const AnsiString Path, Classes::TComponent* SaveMe, Rvstyle::TRVSaveFormat SaveFormat); + virtual bool __fastcall SaveItemToFile(const AnsiString Path, Crvdata::TCustomRVData* RVData, int ItemNo, Rvstyle::TRVSaveFormat SaveFormat, bool Unicode, AnsiString &Text); + DYNAMIC Graphics::TGraphic* __fastcall ImportPicture(const AnsiString Location, int Width, int Height, bool &Invalid); + DYNAMIC AnsiString __fastcall GetItemHint(Crvdata::TCustomRVData* RVData, int ItemNo, const AnsiString UpperRVDataHint); + DYNAMIC Graphics::TGraphic* __fastcall RVFPictureNeeded(const AnsiString ItemName, int ItemTag); + DYNAMIC Controls::TControl* __fastcall RVFControlNeeded(const AnsiString ItemName, int ItemTag); + DYNAMIC void __fastcall SetControlHint(const AnsiString Hint); + DYNAMIC Imglist::TCustomImageList* __fastcall RVFImageListNeeded(int ImageListTag); + DYNAMIC AnsiString __fastcall GetDelimiters(); + virtual Rvstyle::TRVFReaderStyleMode __fastcall GetRVFTextStylesReadMode(void); + virtual Rvstyle::TRVFReaderStyleMode __fastcall GetRVFParaStylesReadMode(void); + virtual Rvscroll::TRVBiDiMode __fastcall GetBiDiMode(void); + DYNAMIC void __fastcall ControlAction2(Crvdata::TCustomRVData* RVData, Rvstyle::TRVControlAction ControlAction, int ItemNo, Controls::TControl* &Control); + virtual void __fastcall ItemAction(Rvstyle::TRVItemAction ItemAction, Rvitem::TCustomRVItemInfo* Item, AnsiString &Text, Crvdata::TCustomRVData* RVData); + DYNAMIC void __fastcall AfterAddStyle(Rvstyle::TCustomRVInfo* StyleInfo); + DYNAMIC Rvdocparams::TRVDocParameters* __fastcall GetDocParameters(bool AllowCreate); + DYNAMIC Crvfdata::TRVDragDropCaretInfo* __fastcall GetDragDropCaretInfo(void); + DYNAMIC bool __fastcall IsDragging(void); + DYNAMIC void __fastcall InsertAnimator(System::TObject* &Animator); + DYNAMIC bool __fastcall AllowAnimation(void); + DYNAMIC void __fastcall ResetAniBackground(void); + DYNAMIC Rvseqitem::TRVSeqList* __fastcall GetSeqList(bool AllowCreate); + DYNAMIC AnsiString __fastcall GetNoteText(); + DYNAMIC Rvmarker::TRVMarkerList* __fastcall GetMarkers(bool AllowCreate); + __property Rvscroll::TRVScroller* RichView = {read=FRichView}; + __property Crvfdata::TRVDataDrawHyperlinkEvent OnDrawHyperlink = {read=FOnDrawHyperlink, write=FOnDrawHyperlink}; + __property Classes::TStrings* ExtraDocumentsList = {read=GetExtraDocumentsList, write=SetExtraDocumentsList}; + __property Classes::TNotifyEvent OnClear = {read=FOnClear, write=FOnClear}; +}; + + +typedef TMetaClass* TRichViewRVDataClass; + +class DELPHICLASS TRVFontInfoCacheFast; +class PASCALIMPLEMENTATION TRVFontInfoCacheFast : public Crvfdata::TRVFontInfoCache +{ + typedef Crvfdata::TRVFontInfoCache inherited; + +protected: + virtual Crvfdata::TRVFontInfoCacheItem* __fastcall GetItems(int Index); + +public: + virtual void __fastcall Clear(void); +public: + #pragma option push -w-inl + /* TRVFontInfoCache.Create */ inline __fastcall virtual TRVFontInfoCacheFast(const Crvfdata::TCustomRVFormattedData* AData, const Rvstyle::TRVStyle* ARVStyle, const Graphics::TCanvas* ACanvas, const Graphics::TCanvas* ADrawCanvas, bool ACanUseCustomPPI) : Crvfdata::TRVFontInfoCache(AData, ARVStyle, ACanvas, ADrawCanvas, ACanUseCustomPPI) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVFontInfoCacheFast(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVFontInfoCacheLowResource; +class PASCALIMPLEMENTATION TRVFontInfoCacheLowResource : public Crvfdata::TRVFontInfoCache +{ + typedef Crvfdata::TRVFontInfoCache inherited; + +protected: + virtual Crvfdata::TRVFontInfoCacheItem* __fastcall GetItems(int Index); +public: + #pragma option push -w-inl + /* TRVFontInfoCache.Create */ inline __fastcall virtual TRVFontInfoCacheLowResource(const Crvfdata::TCustomRVFormattedData* AData, const Rvstyle::TRVStyle* ARVStyle, const Graphics::TCanvas* ACanvas, const Graphics::TCanvas* ADrawCanvas, bool ACanUseCustomPPI) : Crvfdata::TRVFontInfoCache(AData, ARVStyle, ACanvas, ADrawCanvas, ACanUseCustomPPI) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVFontInfoCacheLowResource(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvrvdata */ +using namespace Rvrvdata; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvrvdata diff --git a/12.0.4/Units/D2006/RVReg.dcr b/12.0.4/Units/D2006/RVReg.dcr new file mode 100644 index 0000000..5ef086c Binary files /dev/null and b/12.0.4/Units/D2006/RVReg.dcr differ diff --git a/12.0.4/Units/D2006/RVReg.dcu b/12.0.4/Units/D2006/RVReg.dcu new file mode 100644 index 0000000..00e5ec5 Binary files /dev/null and b/12.0.4/Units/D2006/RVReg.dcu differ diff --git a/12.0.4/Units/D2006/RVReg.hpp b/12.0.4/Units/D2006/RVReg.hpp new file mode 100644 index 0000000..3b62ac4 --- /dev/null +++ b/12.0.4/Units/D2006/RVReg.hpp @@ -0,0 +1,44 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvreg.pas' rev: 10.00 + +#ifndef RvregHPP +#define RvregHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvreg +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE void __fastcall Register(void); + +} /* namespace Rvreg */ +using namespace Rvreg; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvreg diff --git a/12.0.4/Units/D2006/RVRegCool.dcr b/12.0.4/Units/D2006/RVRegCool.dcr new file mode 100644 index 0000000..57c6c0c Binary files /dev/null and b/12.0.4/Units/D2006/RVRegCool.dcr differ diff --git a/12.0.4/Units/D2006/RVRegSmall.dcr b/12.0.4/Units/D2006/RVRegSmall.dcr new file mode 100644 index 0000000..064018c Binary files /dev/null and b/12.0.4/Units/D2006/RVRegSmall.dcr differ diff --git a/12.0.4/Units/D2006/RVReport.dcu b/12.0.4/Units/D2006/RVReport.dcu new file mode 100644 index 0000000..0f8627d Binary files /dev/null and b/12.0.4/Units/D2006/RVReport.dcu differ diff --git a/12.0.4/Units/D2006/RVReport.hpp b/12.0.4/Units/D2006/RVReport.hpp new file mode 100644 index 0000000..1165853 --- /dev/null +++ b/12.0.4/Units/D2006/RVReport.hpp @@ -0,0 +1,192 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvreport.pas' rev: 10.00 + +#ifndef RvreportHPP +#define RvreportHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvreport +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVReportHelper; +typedef void __fastcall (__closure *TRVDrawHyperlinkEvent)(TRVReportHelper* Sender, Crvdata::TCustomRVData* RVData, int ItemNo, const Types::TRect &R); + +typedef void __fastcall (__closure *TRVDrawCheckpointEvent)(TRVReportHelper* Sender, Crvdata::TCustomRVData* RVData, int ItemNo, int X, int Y); + +class DELPHICLASS TReportRVData; +class PASCALIMPLEMENTATION TReportRVData : public Ptrvdata::TCustomMainPtblRVData +{ + typedef Ptrvdata::TCustomMainPtblRVData inherited; + +private: + int StartY; + int StartAt; + int Y; + int DrawItemNo; + int CurHeight; + bool Splitting; + void __fastcall StoreMargins(void); + void __fastcall RestoreMargins(void); + void __fastcall Init(Graphics::TCanvas* ACanvas, int APageWidth); + HIDESBASE bool __fastcall FormatNextPage(int AMaxHeight); + bool __fastcall Finished(void); + void __fastcall Reset(void); + +protected: + DYNAMIC bool __fastcall ShareItems(void); + virtual void __fastcall DoOnHyperlink(Crvdata::TCustomRVData* RVData, int ItemNo, const Types::TRect &R); + virtual void __fastcall DoOnCheckpoint(Crvdata::TCustomRVData* RVData, int ItemNo, int X, int Y); + +public: + virtual int __fastcall GetHeight(void); + DYNAMIC int __fastcall GetPageHeight(void); + DYNAMIC int __fastcall GetPageWidth(void); +public: + #pragma option push -w-inl + /* TCustomMainPtblRVData.Create */ inline __fastcall virtual TReportRVData(Rvscroll::TRVScroller* RichView) : Ptrvdata::TCustomMainPtblRVData(RichView) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCustomMultiPagePtblRVData.Destroy */ inline __fastcall virtual ~TReportRVData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TReportRichView; +class PASCALIMPLEMENTATION TReportRichView : public Ptblrv::TCustomPrintableRV +{ + typedef Ptblrv::TCustomPrintableRV inherited; + +private: + int __fastcall GetHeight(void); + int __fastcall GetWidth(void); + int __fastcall GetLeft(void); + int __fastcall GetTop(void); + +protected: + virtual TMetaClass* __fastcall GetDataClass(void); + virtual void __fastcall SetBiDiModeRV(const Rvscroll::TRVBiDiMode Value); + +public: + __fastcall virtual TReportRichView(Classes::TComponent* AOwner); + virtual bool __fastcall CanUseCustomPPI(void); + +__published: + __property Color = {default=536870911}; + __property BackgroundBitmap ; + __property BackgroundStyle ; + __property BiDiMode = {default=0}; + __property BottomMargin = {default=5}; + __property Delimiters ; + __property LeftMargin = {default=5}; + __property Options = {default=326949}; + __property RightMargin = {default=5}; + __property RTFOptions = {default=14}; + __property RTFReadProperties ; + __property RVFOptions = {default=98435}; + __property RVFParaStylesReadMode = {default=2}; + __property RVFTextStylesReadMode = {default=2}; + __property Style ; + __property TopMargin = {default=5}; + __property OnControlAction ; + __property OnHTMLSaveImage ; + __property OnRVFImageListNeeded ; + __property OnRVFControlNeeded ; + __property OnRVFPictureNeeded ; + __property OnSaveComponentToFile ; + __property OnURLNeeded ; + __property OnReadHyperlink ; + __property OnWriteHyperlink ; + __property int Width = {read=GetWidth, nodefault}; + __property int Height = {read=GetHeight, nodefault}; + __property int Left = {read=GetLeft, nodefault}; + __property int Top = {read=GetTop, nodefault}; +public: + #pragma option push -w-inl + /* TCustomPrintableRV.Destroy */ inline __fastcall virtual ~TReportRichView(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TReportRichView(HWND ParentWindow) : Ptblrv::TCustomPrintableRV(ParentWindow) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVReportHelper : public Ptblrv::TCustomRVPrint +{ + typedef Ptblrv::TCustomRVPrint inherited; + +private: + TRVDrawHyperlinkEvent FOnDrawHyperlink; + TRVDrawCheckpointEvent FOnDrawCheckpoint; + TReportRichView* __fastcall GetRichView(void); + +protected: + DYNAMIC Ptblrv::TCustomPrintableRV* __fastcall CreateRichView(void); + +public: + __fastcall virtual TRVReportHelper(Classes::TComponent* AOwner); + void __fastcall Init(Graphics::TCanvas* ACanvas, int APageWidth); + bool __fastcall FormatNextPage(int AMaxHeight); + void __fastcall Reset(void); + void __fastcall DrawPage(int APageNo, Graphics::TCanvas* ACanvas, bool APreview, int AHeight); + void __fastcall DrawPageAt(int Left, int Top, int APageNo, Graphics::TCanvas* ACanvas, bool APreview, int AHeight); + bool __fastcall Finished(void); + int __fastcall GetLastPageHeight(void); + +__published: + __property TReportRichView* RichView = {read=GetRichView}; + __property ColorMode = {default=0}; + __property TRVDrawHyperlinkEvent OnDrawHyperlink = {read=FOnDrawHyperlink, write=FOnDrawHyperlink}; + __property TRVDrawCheckpointEvent OnDrawCheckpoint = {read=FOnDrawCheckpoint, write=FOnDrawCheckpoint}; +public: + #pragma option push -w-inl + /* TComponent.Destroy */ inline __fastcall virtual ~TRVReportHelper(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvreport */ +using namespace Rvreport; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvreport diff --git a/12.0.4/Units/D2006/RVResize.dcu b/12.0.4/Units/D2006/RVResize.dcu new file mode 100644 index 0000000..5b451a6 Binary files /dev/null and b/12.0.4/Units/D2006/RVResize.dcu differ diff --git a/12.0.4/Units/D2006/RVResize.hpp b/12.0.4/Units/D2006/RVResize.hpp new file mode 100644 index 0000000..780353c --- /dev/null +++ b/12.0.4/Units/D2006/RVResize.hpp @@ -0,0 +1,99 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvresize.pas' rev: 10.00 + +#ifndef RvresizeHPP +#define RvresizeHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvresize +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVResizeHandleIndex { rvrhLeftTop, rvrhRightTop, rvrhRightBottom, rvrhLeftBottom, rvrhTop, rvrhRight, rvrhBottom, rvrhLeft }; +#pragma option pop + +#pragma option push -b- +enum TRVResizeHandlesPosition { rvhpInside, rvhpOutside }; +#pragma option pop + +class DELPHICLASS TRVItemResizer; +class PASCALIMPLEMENTATION TRVItemResizer : public System::TObject +{ + typedef System::TObject inherited; + +private: + int FWidth; + int FHeight; + Dlines::TRVDrawLineInfo* FDrawItem; + int FDrawItemNo; + int FItemNo; + bool FDragging; + bool FDragCancelled; + int FDx; + int FDy; + #pragma pack(push,1) + Types::TRect FDragRect; + #pragma pack(pop) + TRVResizeHandleIndex FDraggedResizeHandle; + Rvitem::TCustomRVItemInfo* FItem; + TRVResizeHandlesPosition FPosition; + bool __fastcall IsCornerResizeHandle(TRVResizeHandleIndex Index); + void __fastcall GetResizeHandleShift(TRVResizeHandleIndex Index, int &DX, int &DY); + +public: + __fastcall TRVItemResizer(Dlines::TRVDrawLineInfo* ADrawItem, Rvitem::TCustomRVItemInfo* AItem, int ADrawItemNo); + void __fastcall Draw(Graphics::TCanvas* Canvas, int HOffs, int VOffs); + void __fastcall GetResizeHandleCoords(TRVResizeHandleIndex Index, bool Shifted, int &X, int &Y); + bool __fastcall GetResizeHandleAt(int X, int Y, int HOffs, int VOffs, TRVResizeHandleIndex &Index); + bool __fastcall MouseDown(int X, int Y, int HOffs, int VOffs); + void __fastcall MouseUp(int X, int Y, int HOffs, int VOffs); + void __fastcall DragTo(Classes::TShiftState Shift, int X, int Y, int HOffs, int VOffs); + Controls::TCursor __fastcall GetResizeHandleCursor(TRVResizeHandleIndex Index); + void __fastcall XorDrawing(Graphics::TCanvas* Canvas, int HOffs, int VOffs); + void __fastcall CancelDrag(void); + void __fastcall UpdateItem(Dlines::TRVDrawLineInfo* ADrawItem, Rvitem::TCustomRVItemInfo* AItem, int ADrawItemNo); + __property bool Dragging = {read=FDragging, nodefault}; + __property bool DragCancelled = {read=FDragCancelled, nodefault}; + __property int ItemNo = {read=FItemNo, nodefault}; + __property int DrawItemNo = {read=FDrawItemNo, nodefault}; + __property Dlines::TRVDrawLineInfo* DrawItem = {read=FDrawItem}; + __property int Width = {read=FWidth, nodefault}; + __property int Height = {read=FHeight, nodefault}; + __property TRVResizeHandlesPosition Position = {read=FPosition, write=FPosition, nodefault}; +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVItemResizer(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const Shortint RichViewResizeHandleSize = 0x6; + +} /* namespace Rvresize */ +using namespace Rvresize; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvresize diff --git a/12.0.4/Units/D2006/RVSEdit.dcu b/12.0.4/Units/D2006/RVSEdit.dcu new file mode 100644 index 0000000..016bb61 Binary files /dev/null and b/12.0.4/Units/D2006/RVSEdit.dcu differ diff --git a/12.0.4/Units/D2006/RVSEdit.hpp b/12.0.4/Units/D2006/RVSEdit.hpp new file mode 100644 index 0000000..8f545c7 --- /dev/null +++ b/12.0.4/Units/D2006/RVSEdit.hpp @@ -0,0 +1,199 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvsedit.pas' rev: 10.00 + +#ifndef RvseditHPP +#define RvseditHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvsedit +{ +//-- type declarations ------------------------------------------------------- +typedef TDefaultEditor TRVComponentEditor; +; + +class DELPHICLASS TRVSEditor; +class PASCALIMPLEMENTATION TRVSEditor : public Designeditors::TDefaultEditor +{ + typedef Designeditors::TDefaultEditor inherited; + +private: + void __fastcall LoadStylesFromINIFile(void); + void __fastcall SaveStylesToINIFile(void); + +protected: + int VerbIndex; + virtual void __fastcall EditProperty(const Designintf::_di_IProperty PropertyEditor, bool &Continue); + +public: + virtual void __fastcall ExecuteVerb(int Index); + virtual AnsiString __fastcall GetVerb(int Index); + virtual int __fastcall GetVerbCount(void); +public: + #pragma option push -w-inl + /* TComponentEditor.Create */ inline __fastcall virtual TRVSEditor(Classes::TComponent* AComponent, Designintf::_di_IDesigner ADesigner) : Designeditors::TDefaultEditor(AComponent, ADesigner) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVSEditor(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVEEditor; +class PASCALIMPLEMENTATION TRVEEditor : public Designeditors::TDefaultEditor +{ + typedef Designeditors::TDefaultEditor inherited; + +public: + virtual void __fastcall ExecuteVerb(int Index); + virtual AnsiString __fastcall GetVerb(int Index); + virtual int __fastcall GetVerbCount(void); +public: + #pragma option push -w-inl + /* TComponentEditor.Create */ inline __fastcall virtual TRVEEditor(Classes::TComponent* AComponent, Designintf::_di_IDesigner ADesigner) : Designeditors::TDefaultEditor(AComponent, ADesigner) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVEEditor(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVCodePageProperty; +class PASCALIMPLEMENTATION TRVCodePageProperty : public Designeditors::TIntegerProperty +{ + typedef Designeditors::TIntegerProperty inherited; + +public: + virtual Designintf::TPropertyAttributes __fastcall GetAttributes(void); + virtual AnsiString __fastcall GetValue(); + virtual void __fastcall GetValues(Classes::TGetStrProc Proc); + virtual void __fastcall SetValue(const AnsiString Value)/* overload */; +public: + #pragma option push -w-inl + /* TPropertyEditor.Create */ inline __fastcall virtual TRVCodePageProperty(const Designintf::_di_IDesigner ADesigner, int APropCount) : Designeditors::TIntegerProperty(ADesigner, APropCount) { } + #pragma option pop + #pragma option push -w-inl + /* TPropertyEditor.Destroy */ inline __fastcall virtual ~TRVCodePageProperty(void) { } + #pragma option pop + + +/* Hoisted overloads: */ + +public: + inline void __fastcall SetValue(const WideString Value){ TPropertyEditor::SetValue(Value); } + +}; + + +class DELPHICLASS TRVStyleTemplateIdProperty; +class PASCALIMPLEMENTATION TRVStyleTemplateIdProperty : public Designeditors::TIntegerProperty +{ + typedef Designeditors::TIntegerProperty inherited; + +private: + Rvstyle::TRVStyleTemplateCollection* __fastcall GetCollection(void); + +public: + virtual Designintf::TPropertyAttributes __fastcall GetAttributes(void); + virtual AnsiString __fastcall GetValue(); + virtual void __fastcall GetValues(Classes::TGetStrProc Proc); + virtual void __fastcall SetValue(const AnsiString Value)/* overload */; +public: + #pragma option push -w-inl + /* TPropertyEditor.Create */ inline __fastcall virtual TRVStyleTemplateIdProperty(const Designintf::_di_IDesigner ADesigner, int APropCount) : Designeditors::TIntegerProperty(ADesigner, APropCount) { } + #pragma option pop + #pragma option push -w-inl + /* TPropertyEditor.Destroy */ inline __fastcall virtual ~TRVStyleTemplateIdProperty(void) { } + #pragma option pop + + +/* Hoisted overloads: */ + +public: + inline void __fastcall SetValue(const WideString Value){ TPropertyEditor::SetValue(Value); } + +}; + + +class DELPHICLASS TRVStyleTemplateCollectionProperty; +class PASCALIMPLEMENTATION TRVStyleTemplateCollectionProperty : public Colnedit::TCollectionProperty +{ + typedef Colnedit::TCollectionProperty inherited; + +public: + virtual Designintf::TPropertyAttributes __fastcall GetAttributes(void); +public: + #pragma option push -w-inl + /* TPropertyEditor.Create */ inline __fastcall virtual TRVStyleTemplateCollectionProperty(const Designintf::_di_IDesigner ADesigner, int APropCount) : Colnedit::TCollectionProperty(ADesigner, APropCount) { } + #pragma option pop + #pragma option push -w-inl + /* TPropertyEditor.Destroy */ inline __fastcall virtual ~TRVStyleTemplateCollectionProperty(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVStyleTemplateNameProperty; +class PASCALIMPLEMENTATION TRVStyleTemplateNameProperty : public Designeditors::TStringProperty +{ + typedef Designeditors::TStringProperty inherited; + +public: + virtual Designintf::TPropertyAttributes __fastcall GetAttributes(void); + virtual void __fastcall GetValues(Classes::TGetStrProc Proc); +public: + #pragma option push -w-inl + /* TPropertyEditor.Create */ inline __fastcall virtual TRVStyleTemplateNameProperty(const Designintf::_di_IDesigner ADesigner, int APropCount) : Designeditors::TStringProperty(ADesigner, APropCount) { } + #pragma option pop + #pragma option push -w-inl + /* TPropertyEditor.Destroy */ inline __fastcall virtual ~TRVStyleTemplateNameProperty(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE void __fastcall Register(void); + +} /* namespace Rvsedit */ +using namespace Rvsedit; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvsedit diff --git a/12.0.4/Units/D2006/RVScroll.dcu b/12.0.4/Units/D2006/RVScroll.dcu new file mode 100644 index 0000000..418cd02 Binary files /dev/null and b/12.0.4/Units/D2006/RVScroll.dcu differ diff --git a/12.0.4/Units/D2006/RVScroll.hpp b/12.0.4/Units/D2006/RVScroll.hpp new file mode 100644 index 0000000..4a72c12 --- /dev/null +++ b/12.0.4/Units/D2006/RVScroll.hpp @@ -0,0 +1,263 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvscroll.pas' rev: 10.00 + +#ifndef RvscrollHPP +#define RvscrollHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvscroll +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVBiDiMode { rvbdUnspecified, rvbdLeftToRight, rvbdRightToLeft }; +#pragma option pop + +#pragma option push -b- +enum TRVOption { rvoAllowSelection, rvoSingleClick, rvoScrollToEnd, rvoClientTextWidth, rvoShowCheckpoints, rvoShowPageBreaks, rvoShowSpecialCharacters, rvoTagsArePChars, rvoAutoCopyText, rvoAutoCopyUnicodeText, rvoAutoCopyRVF, rvoAutoCopyImage, rvoAutoCopyRTF, rvoFormatInvalidate, rvoDblClickSelectsWord, rvoRClickDeselects, rvoDisallowDrag, rvoShowItemHints, rvoFastFormatting }; +#pragma option pop + +typedef Set TRVOptions; + +#pragma option push -b- +enum TRVTabNavigationType { rvtnNone, rvtnTab, rvtnCtrlTab }; +#pragma option pop + +#pragma option push -b- +enum TRVPaletteAction { rvpaDoNothing, rvpaAssignPalette, rvpaCreateCopies, rvpaCreateCopiesEx }; +#pragma option pop + +#pragma option push -b- +enum TBackgroundStyle { bsNoBitmap, bsStretched, bsTiled, bsTiledAndScrolled, bsCentered, bsTopLeft, bsTopRight, bsBottomLeft, bsBottomRight }; +#pragma option pop + +#pragma option push -b- +enum TRVZoomMode { rvzmFullPage, rvzmPageWidth, rvzmCustom }; +#pragma option pop + +#pragma option push -b- +enum TRVDisplayOption { rvdoImages, rvdoComponents, rvdoBullets }; +#pragma option pop + +typedef Set TRVDisplayOptions; + +#pragma option push -b- +enum TRVSearchOption { rvsroMatchCase, rvsroDown, rvsroWholeWord, rvsroFromStart, rvsroMultiItem }; +#pragma option pop + +typedef Set TRVSearchOptions; + +#pragma option push -b- +enum TCPEventKind { cpeNone, cpeAsSectionStart, cpeWhenVisible }; +#pragma option pop + +#pragma option push -b- +enum TRVScrollBarStyle { rvssRegular, rvssFlat, rvssHotTrack }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFHighlight { rtfhlIgnore, rtfhlFixedColors, rtfhlColorTable }; +#pragma option pop + +#pragma option push -b- +enum TRVSmartPopupType { rvsptDropDown, rvsptShowDialog, rvsptSimple }; +#pragma option pop + +#pragma option push -b- +enum TRVSmartPopupPosition { rvsppTopLeft, rvsppTopRight, rvsppBottomRight, rvsppBottomLeft }; +#pragma option pop + +class DELPHICLASS TRVScrollerInternalIfcObject; +class DELPHICLASS TRVScroller; +class PASCALIMPLEMENTATION TRVScroller : public Controls::TCustomControl +{ + typedef Controls::TCustomControl inherited; + +private: + Forms::TFormBorderStyle FBorderStyle; + int FSmallStep; + bool FTracking; + bool FFullRedraw; + bool FVScrollVisible; + bool FHScrollVisible; + bool FUpdatingScrollBars; + int FVScrollMax; + int FVScrollPage; + int FHScrollMax; + int FHScrollPage; + TRVPaletteAction FDoInPaletteMode; + bool FUseXPThemes; + bool FNoVScroll; + HIDESBASE MESSAGE void __fastcall WMSetFocus(Messages::TWMSetFocus &Message); + HIDESBASE MESSAGE void __fastcall WMHScroll(Messages::TWMScroll &Message); + HIDESBASE MESSAGE void __fastcall WMVScroll(Messages::TWMScroll &Message); + MESSAGE void __fastcall WMGetDlgCode(Messages::TWMNoParams &Message); + HIDESBASE MESSAGE void __fastcall CMCtl3DChanged(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall WMQueryNewPalette(Messages::TWMNoParams &Message); + HIDESBASE MESSAGE void __fastcall WMPaletteChanged(Messages::TWMPaletteChanged &Message); + MESSAGE void __fastcall WMThemeChanged(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall WMNCPaint(Messages::TMessage &Message); + int __fastcall GetVScrollMax(void); + int __fastcall GetHScrollMax(void); + void __fastcall SetVScrollVisible(bool vis); + void __fastcall SetHScrollVisible(bool vis); + void __fastcall SetBorderStyle(const Forms::TBorderStyle Value); + void __fastcall SetDoInPaletteMode(TRVPaletteAction Value); + void __fastcall SetVScrollPos(int Value); + Controls::TWinControl* __fastcall GetInplaceEditor(void); + Classes::TPersistent* __fastcall GetChosenRVData(void); + virtual void __fastcall CreateThemeHandle(void); + virtual void __fastcall FreeThemeHandle(void); + void __fastcall SetUseXPThemes(const bool Value); + +protected: + TRVBiDiMode FBiDiMode; + Classes::TNotifyEvent FOnVScrolled; + Classes::TNotifyEvent FOnHScrolled; + Byte FVDisableNoScroll; + int HPos; + int VPos; + int XSize; + int YSize; + bool KeyboardScroll; + Classes::TPersistent* FChosenItem; + Classes::TPersistent* FChosenRVData; + unsigned FTheme; + int FScrollFactor; + int FWheelStep; + DYNAMIC bool __fastcall DoMouseWheelDown(Classes::TShiftState Shift, const Types::TPoint &MousePos); + DYNAMIC bool __fastcall DoMouseWheelUp(Classes::TShiftState Shift, const Types::TPoint &MousePos); + virtual void __fastcall SetBiDiModeRV(const TRVBiDiMode Value); + virtual void __fastcall CreateParams(Controls::TCreateParams &Params); + virtual void __fastcall CreateWnd(void); + DYNAMIC void __fastcall AfterCreateWnd1(void); + DYNAMIC void __fastcall AfterCreateWnd2(void); + virtual void __fastcall DestroyWnd(void); + DYNAMIC HPALETTE __fastcall GetPalette(void); + DYNAMIC void __fastcall MouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + DYNAMIC void __fastcall KeyDown(Word &Key, Classes::TShiftState Shift); + virtual void __fastcall SetVPos(int p, bool Redraw); + virtual void __fastcall SetHPos(int p); + void __fastcall ScrollChildren(int dx, int dy); + virtual void __fastcall AfterVScroll(void); + virtual void __fastcall AfterHScroll(void); + virtual void __fastcall BeforeScroll(void); + DYNAMIC int __fastcall GetDefSmallStep(void); + Windows::PLogPalette __fastcall AllocLogPalette(int ColorCount); + void __fastcall FreeLogPalette(Windows::PLogPalette &lpLogPal); + DYNAMIC Windows::PLogPalette __fastcall GenerateLogPalette(void); + DYNAMIC void __fastcall UpdatePaletteInfo(void); + virtual void __fastcall SetVSmallStep(int Value); + DYNAMIC bool __fastcall OleDragEnter(int X, int Y); + DYNAMIC void __fastcall CallOleDragEnterEvent(const _di_IDataObject DataObj, int KeyState, const Types::TPoint &pt, int PossibleEffects, int &Effect); + DYNAMIC void __fastcall OleDragLeave(void); + DYNAMIC bool __fastcall OleDragOver(int X, int Y); + DYNAMIC void __fastcall CallOleDragOverEvent(int KeyState, const Types::TPoint &pt, int PossibleEffects, int &Effect); + DYNAMIC void __fastcall ReleaseOleDropTargetObject(void); + DYNAMIC int __fastcall OleDrop(const _di_IDataObject DataObj, bool FMove, int KeyState, const Types::TPoint &pt, int PossibleEffects); + DYNAMIC bool __fastcall OleCanAcceptFormat(Word Format); + __property bool Tracking = {read=FTracking, write=FTracking, default=1}; + __property Classes::TNotifyEvent OnVScrolled = {read=FOnVScrolled, write=FOnVScrolled}; + __property Classes::TNotifyEvent OnHScrolled = {read=FOnHScrolled, write=FOnHScrolled}; + __property TRVPaletteAction DoInPaletteMode = {read=FDoInPaletteMode, write=SetDoInPaletteMode, nodefault}; + __property int VSmallStep = {read=FSmallStep, write=SetVSmallStep, nodefault}; + __property Controls::TWinControl* InplaceEditor = {read=GetInplaceEditor}; + __property Forms::TBorderStyle BorderStyle = {read=FBorderStyle, write=SetBorderStyle, nodefault}; + __property int WheelStep = {read=FWheelStep, write=FWheelStep, default=2}; + __property bool FullRedraw = {read=FFullRedraw, write=FFullRedraw, nodefault}; + __property bool VScrollVisible = {read=FVScrollVisible, write=SetVScrollVisible, default=1}; + __property bool HScrollVisible = {read=FHScrollVisible, write=SetHScrollVisible, default=1}; + __property int VScrollPos = {read=VPos, write=SetVScrollPos, nodefault}; + __property int HScrollPos = {read=HPos, write=SetHPos, nodefault}; + __property int VScrollMax = {read=GetVScrollMax, nodefault}; + __property int HScrollMax = {read=GetHScrollMax, nodefault}; + +public: + HPALETTE RVPalette; + tagLOGPALETTE *PRVLogPalette; + __fastcall virtual TRVScroller(Classes::TComponent* AOwner); + __fastcall virtual ~TRVScroller(void); + void __fastcall UpdateScrollBars(int XS, int YS, bool UpdateH, bool UseDNS); + void __fastcall ScrollToNoRedraw(int y); + void __fastcall ScrollTo(int y); + void __fastcall AssignChosenRVData(Classes::TPersistent* RVData, Classes::TPersistent* Item); + void __fastcall SilentReplaceChosenRVData(Classes::TPersistent* RVData); + void __fastcall UnassignChosenRVData(Classes::TPersistent* RVData); + void __fastcall DestroyInplace(void); + bool __fastcall FocusedEx(void); + void __fastcall SetFocusSilent(void); + void __fastcall PaintTo_(HDC DC, int X, int Y); + __property int AreaWidth = {read=XSize, nodefault}; + __property int AreaHeight = {read=YSize, nodefault}; + __property Classes::TPersistent* ChosenRVData = {read=GetChosenRVData}; + __property Classes::TPersistent* ChosenItem = {read=FChosenItem}; + __property TRVBiDiMode BiDiMode = {read=FBiDiMode, write=SetBiDiModeRV, default=0}; + __property bool UseXPThemes = {read=FUseXPThemes, write=SetUseXPThemes, default=1}; + __property Canvas ; + __property bool NoVScroll = {read=FNoVScroll, write=FNoVScroll, default=0}; +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TRVScroller(HWND ParentWindow) : Controls::TCustomControl(ParentWindow) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVScrollerInternalIfcObject : public System::TInterfacedObject +{ + typedef System::TInterfacedObject inherited; + +protected: + TRVScroller* FOwner; + bool __fastcall OwnerDragEnter(int X, int Y); + void __fastcall CallOwnerDragEnterEvent(const _di_IDataObject DataObj, int KeyState, const Types::TPoint &pt, int PossibleEffects, int &Effect); + void __fastcall OwnerDragLeave(void); + bool __fastcall OwnerDragOver(int X, int Y); + void __fastcall CallOwnerDragOverEvent(int KeyState, const Types::TPoint &pt, int PossibleEffects, int &Effect); + virtual void __fastcall OwnerReleaseDropTargetObject(void); + int __fastcall OwnerDrop(const _di_IDataObject DataObj, bool FMove, int KeyState, const Types::TPoint &pt, int PossibleEffects); + bool __fastcall OwnerCanAcceptFormat(Word Format); + +public: + __fastcall virtual TRVScrollerInternalIfcObject(TRVScroller* AOwner); + __fastcall virtual ~TRVScrollerInternalIfcObject(void); +}; + + +//-- var, const, procedure --------------------------------------------------- +#define rvdoALL (Set () << TRVDisplayOption(0) << TRVDisplayOption(1) << TRVDisplayOption(2) ) +extern PACKAGE int __fastcall RV_GetYByTag(Controls::TControl* AControl); +extern PACKAGE void __fastcall RV_Tag2Y(Controls::TControl* AControl); + +} /* namespace Rvscroll */ +using namespace Rvscroll; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvscroll diff --git a/12.0.4/Units/D2006/RVSeqItem.dcu b/12.0.4/Units/D2006/RVSeqItem.dcu new file mode 100644 index 0000000..f9c8c29 Binary files /dev/null and b/12.0.4/Units/D2006/RVSeqItem.dcu differ diff --git a/12.0.4/Units/D2006/RVSeqItem.hpp b/12.0.4/Units/D2006/RVSeqItem.hpp new file mode 100644 index 0000000..3463aad --- /dev/null +++ b/12.0.4/Units/D2006/RVSeqItem.hpp @@ -0,0 +1,103 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvseqitem.pas' rev: 10.00 + +#ifndef RvseqitemHPP +#define RvseqitemHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvseqitem +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVSeqItemInfo; +class DELPHICLASS TRVSeqList; +class PASCALIMPLEMENTATION TRVSeqItemInfo : public Rvlabelitem::TRVLabelItemInfo +{ + typedef Rvlabelitem::TRVLabelItemInfo inherited; + +private: + Rvstyle::TRVSeqType FNumberType; + +protected: + int FCachedIndexInList; + void __fastcall CalcDisplayString(TRVSeqList* List); + virtual Rvstyle::TRVSeqType __fastcall GetNumberType(void); + virtual void __fastcall SetNumberType(const Rvstyle::TRVSeqType Value); + +public: + int Counter; + int StartFrom; + bool Reset; + AnsiString SeqName; + AnsiString FormatString; + __fastcall TRVSeqItemInfo(Classes::TPersistent* RVData, const AnsiString ASeqName, Rvstyle::TRVSeqType ANumberType, int ATextStyleNo, int AStartFrom, bool AReset); + __fastcall virtual TRVSeqItemInfo(Classes::TPersistent* RVData); + int __fastcall GetIndexInList(Classes::TList* List); + DYNAMIC void __fastcall MovingToUndoList(int ItemNo, System::TObject* RVData, System::TObject* AContainerUndoItem); + DYNAMIC void __fastcall MovingFromUndoList(int ItemNo, System::TObject* RVData); + DYNAMIC void __fastcall Assign(Rvitem::TCustomRVItemInfo* Source); + AnsiString __fastcall GetDisplayString(TRVSeqList* List, int ACounter); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, Rvitem::TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC bool __fastcall ReadRVFLine(const AnsiString s, Classes::TPersistent* RVData, int ReadType, int LineNo, int LineCount, AnsiString &Name, Rvitem::TRVFReadMode &ReadMode, Rvitem::TRVFReadState &ReadState, bool UTF8Strings, bool &AssStyleNameUsed); + __property Rvstyle::TRVSeqType NumberType = {read=GetNumberType, write=SetNumberType, nodefault}; +public: + #pragma option push -w-inl + /* TCustomRVItemInfo.Destroy */ inline __fastcall virtual ~TRVSeqItemInfo(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVSeqList : public Classes::TList +{ + typedef Classes::TList inherited; + +public: + int __fastcall InsertAfter(TRVSeqItemInfo* InsertMe, TRVSeqItemInfo* AfterMe); + void __fastcall RecalcCounters(int StartFrom, Rvstyle::TRVStyle* RVStyle); + void __fastcall RecalcDisplayStrings(Rvstyle::TRVStyle* RVStyle); +public: + #pragma option push -w-inl + /* TList.Destroy */ inline __fastcall virtual ~TRVSeqList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVSeqList(void) : Classes::TList() { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const short rvsSequence = -202; + +} /* namespace Rvseqitem */ +using namespace Rvseqitem; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvseqitem diff --git a/12.0.4/Units/D2006/RVSer.dcu b/12.0.4/Units/D2006/RVSer.dcu new file mode 100644 index 0000000..6029b0a Binary files /dev/null and b/12.0.4/Units/D2006/RVSer.dcu differ diff --git a/12.0.4/Units/D2006/RVSer.hpp b/12.0.4/Units/D2006/RVSer.hpp new file mode 100644 index 0000000..cbd4f05 --- /dev/null +++ b/12.0.4/Units/D2006/RVSer.hpp @@ -0,0 +1,85 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvser.pas' rev: 10.00 + +#ifndef RvserHPP +#define RvserHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvser +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVSerEntry; +class PASCALIMPLEMENTATION TRVSerEntry : public System::TObject +{ + typedef System::TObject inherited; + +public: + Crvdata::TCustomRVData* RVData; + int AbsFirstItemNo; + int FirstItemNo; + bool IsFirst; + __fastcall TRVSerEntry(Crvdata::TCustomRVData* ARVData); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVSerEntry(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVSerializer; +class PASCALIMPLEMENTATION TRVSerializer : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +private: + int FCachedEntryNo; + Crvfdata::TCustomRVFormattedData* FRootRVData; + void __fastcall CreateEntries(Crvdata::TCustomRVData* RVData, int &AbsItemNo); + +public: + int AbsItemCount; + __fastcall TRVSerializer(Crvfdata::TCustomRVFormattedData* RVData); + void __fastcall Rebuild(void); + void __fastcall AbsoluteToRV(int AbsItemNo, Crvdata::TCustomRVData* &RVData, int &ItemNo, bool &AfterItem); + void __fastcall RVToAbsolute(Crvdata::TCustomRVData* RVData, int ItemNo, bool AfterItem, int &AbsItemNo); +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVSerializer(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvser */ +using namespace Rvser; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvser diff --git a/12.0.4/Units/D2006/RVStr.dcu b/12.0.4/Units/D2006/RVStr.dcu new file mode 100644 index 0000000..f0e0ecb Binary files /dev/null and b/12.0.4/Units/D2006/RVStr.dcu differ diff --git a/12.0.4/Units/D2006/RVStr.hpp b/12.0.4/Units/D2006/RVStr.hpp new file mode 100644 index 0000000..752b66d --- /dev/null +++ b/12.0.4/Units/D2006/RVStr.hpp @@ -0,0 +1,229 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvstr.pas' rev: 10.00 + +#ifndef RvstrHPP +#define RvstrHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvstr +{ +//-- type declarations ------------------------------------------------------- +//-- var, const, procedure --------------------------------------------------- +#define errRVNil "Parameter can't be NIL" +#define errRVNotFormatted "RichView must be formatted for this operation" +#define errRVNoMemory "No memory" +#define errRVTypesMismatch "Can't get or set this kind of information for this item" +#define errRVUnicode "Can't perform Unicode operation" +#define errRVCPByCP "Calling AddCheckpoint after AddCheckpoint is not allowed i"\ + "n this version" +#define errRVNoSuchCP "Invalid checkpoint index - %d" +#define errRVTagsTypesMismatch "Can't assign RichView to RichView - tags types mismatch" +#define errRVNoSuchCP2 "Invalid checkpoint data" +#define errRVItemRangeError "Item index is out of bounds" +#define errRVCPExists "Checkpoint already exists" +#define errStyleIsNotAssigned "Style of printable TRichView component is not assigned" +#define errInvalidPageNo "Invalid page number is specified for printing" +#define errTRVItemFormattedDataNS "This method is not supported for TRVItemFormattedData" +#define errRViewerOnly "Not supported in editor" +#define errRVUndo "Undo error" +#define errRVCP "Checkpoint error" +#define errRVItemReg1 "Can't register RichView item type - system is not initiali"\ + "zed yet" +#define errRVItemReg2 "Can't register RichView item type - this StyleNo is alread"\ + "y registered" +#define errRVUndoEmpty "Can't modify empty undo list" +#define errRVUndoAdd "Incorrect adding into undo list" +#define errRVUndoEmptyBuffer "Undo buffer is empty" +#define errRVNegative "Value must not be negative" +#define errRVFDocProp "Invalid RVF format" +#define errRVCaretPosition "Invalid caret position. Please contact the developer, if y"\ + "ou can reproduce this problem" +#define errRVPrint "Internal printing error" +#define errRVCompare "Error when comparing positions in the document" +#define errRVInvProp "This property is not valid here" +#define errRVError "RichView Error" +#define errWrongAssign "Cannot assign value to this undefined property" +#define errRVBadStyleTemplateParent "Circular references are not allowed" +#define RVRC_ZOOMIN_CURSOR "RV_ZOOMIN_CURSOR" +#define RVRC_ZOOMOUT_CURSOR "RV_ZOOMOUT_CURSOR" +#define RVRC_JUMP_CURSOR "RV_JUMP_CURSOR" +#define RVRC_FLIPARROW_CURSOR "RV_FLIPARROW_CURSOR" +#define RVNORMALSTYLETEMPLATENAME "Normal" +#define RVINIFILEYES "Yes" +#define RVINIFILENO "No" +#define RVINIFILEYESU "YES" +#define RVINIFILENOU "NO" +static const char RVINIUNKNOWN = '\x3f'; +#define RVINI_TEXTSTYLECOUNT "FontsCount" +#define RVINI_TEXTSTYLEPREFIX "Font%s" +#define RVINI_PARASTYLECOUNT "ParasCount" +#define RVINI_PARASTYLEPREFIX "Para%s" +#define RVINI_LISTSTYLECOUNT "ListCount" +#define RVINI_LISTSTYLEPREFIX "List%s" +#define RVINI_STANDARD "Standard" +#define RVINI_LEFT "Left" +#define RVINI_RIGHT "Right" +#define RVINI_TOP "Top" +#define RVINI_BOTTOM "Bottom" +#define RVINI_WIDTH "Width" +#define RVINI_STYLE "Style" +#define RVINI_INTERNALWIDTH "InternalWidth" +#define RVINI_BOFFSPREFIX "Offsets%s" +#define RVINI_VISBPREFIX "Visible%s" +#define RVINI_SPACEBEFORE "SpaceBefore" +#define RVINI_SPACEAFTER "SpaceAfter" +#define RVINI_LEFTINDENT "LeftIndent" +#define RVINI_RIGHTIDENT "RightIndent" +#define RVINI_FIRSTINDENT "FirstIndent" +#define RVINI_LINESPACING "LineSpacing" +#define RVINI_LINESPACINGTYPE "LSType" +#define RVINI_NEXTPARANO "NextParaNo" +#define RVINI_DEFSTYLENO "DefStyleNo" +#define RVINI_ALIGNMENT "Alignment" +#define RVINI_NOWRAP "NoWrap" +#define RVINI_READONLY "ReadOnly" +#define RVINI_STYLEPROTECT "StyleProtect" +#define RVINI_DONOTWANTRETURNS "DoNotWantReturns" +#define RVINI_KEEPLINESTOGETHER "KeepLinesTogether" +#define RVINI_KEEPWITHNEXT "KeepWithNext" +#define RVINI_BORDERPREFIX "Border%s" +#define RVINI_BACKGROUNDPREFIX "Background%s" +#define RVINI_STYLENAME "StyleName" +#define RVINI_FONTNAME "Name" +#define RVINI_JUMP "Jump" +#define RVINI_SPACESINTAB "SpacesInTab" +#define RVINI_DEFTABWIDTH "DefTabWidth" +#define RVINI_JUMPCURSOR "JumpCursor" +#define RVINI_SIZE "Size" +#define RVINI_COLOR "Color" +#define RVINI_BACKCOLOR "BackColor" +#define RVINI_HOVERBACKCOLOR "HoverBackColor" +#define RVINI_HOVERCOLOR "HoverColor" +#define RVINI_HOVERUNDERLINE "HoverUnderline" +#define RVINI_CURRENTITEMCOLOR "CurItemColor" +#define RVINI_CHARSET "Charset" +#define RVINI_CHARSCALE "CharScale" +#define RVINI_CHARSPACING "CharSpacing" +#define RVINI_OUTLINELEVEL "OutlineLevel" +#define RVINI_BIDIMODE "BiDiMode" +#define RVINI_BOLD "Bold" +#define RVINI_UNDERLINE "Underline" +#define RVINI_STRIKEOUT "StrikeOut" +#define RVINI_ITALIC "Italic" +#define RVINI_OVERLINE "Overline" +#define RVINI_ALLCAPS "Caps" +#define RVINI_PROTECTION "Protection" +#define RVINI_RTFCODE "RTFCode" +#define RVINI_HTMLCODE "HTMLCode" +#define RVINI_VSHIFT "VShift" +#define RVINI_NEXTSTYLENO "NextStyleNo" +#define RVINI_BASESTYLENO "BaseStyleNo" +#define RVINI_UNICODE "Unicode" +#define RVINI_SCRIPT "Script" +#define RVINI_UNDERLINETYPE "UnderlineType" +#define RVINI_UNDERLINECOLOR "UnderlineColor" +#define RVINI_HOVERUNDERLINECOLOR "HoverUnderlineColor" +#define RVINI_SELECTIONMODE "SelectionMode" +#define RVINI_SELECTIONSTYLE "SelectionStyle" +#define RVINI_SELCOLOR "SelColor" +#define RVINI_SELTEXTCOLOR "SelTextColor" +#define RVINI_ISELCOLOR "ISelColor" +#define RVINI_ISELTEXTCOLOR "ISelTextColor" +#define RVINI_CPCOLOR "CheckpointColor" +#define RVINI_CPEVCOLOR "CheckpointEvColor" +#define RVINI_PAGEBREAKCOLOR "PageBreakColor" +#define RVINI_SOFTPAGEBREAKCOLOR "SoftPageBreakColor" +#define RVINI_LIVESPELLINGCOLOR "LiveSpellingColor" +#define RVINI_FLOATLINECOLOR "FloatLineColor" +#define RVINI_SPECCHARCOLOR "SpecCharColor" +#define RVINI_USESOUND "UseSound" +#define RVINI_DEFUNICODESTYLE "DefUnicodeStyle" +#define RVINI_DEFCODEPAGE "DefCodePage" +#define RVINI_LINESELECTCURSOR "LineSelectCursor" +#define RVINI_FIELDHIGHLIGHTCOLOR "FieldHighlightColor" +#define RVINI_FIELDHIGHLIGHTTYPE "FieldHighlightType" +#define RVINI_FOOTNOTENUMBERING "FootnoteNumbering" +#define RVINI_FOOTNOTEPAGERESET "FootnotePageReset" +#define RVINI_ENDNOTENUMBERING "EndnoteNumbering" +#define RVINI_LISTTYPE "ListType" +#define RVINI_IMAGEINDEX "ImageIndex" +#define RVINI_FORMATSTRING "FormatString" +#define RVINI_MARKERINDENT "MarkerIndent" +#define RVINI_MARKERALIGNMENT "MarkerAlignment" +#define RVINI_FORMATSTRINGW "FormatStringW" +#define RVINI_PICTURE "Picture" +#define RVINI_GRAPHICCLASS "GraphicClass" +#define RVINI_TABALIGN "Align" +#define RVINI_TABPOSITION "Pos" +#define RVINI_TABLEADER "Leader" +#define RVINI_TABPREFIX "Tab%s" +#define RVINI_TABCOUNT "TabCount" +#define RVINI_FONT "Font" +#define RVINI_LOCONTINUOUS "Continuous" +#define RVINI_LOLEVELRESET "LevelReset" +#define RVINI_LEVELSCOUNT "LevelsCount" +#define RVINI_ONELEVELPREVIEW "OneLevelPreview" +#define RVINI_LISTID "ListId" +#define RVINI_LEVELPREFIX "Lvl%s" +#define RVSTYLE_REG "RVStyle" +#define RVINI_SINGLESYMBOLS "SingleSymbols" +#define RVWCEDIT "E" +#define RVDEFAULTCHECKPOINTPREFIX "RichViewCheckpoint" +static const char RVDEFAULTCHARACTER = '\x3f'; +#define RVDEFAULTDELIMITERS " .;,:(){}\"/\\<>!?[]‘’“”-+*= „" +#define RVAddress "http://www.trichview.com" +#define RVVersion "v12.0.4" +#define RVPalettePage "RichView" +#define RVNOSTYLEMSG "Style is not defined\rCreate a TRVStyle object and assign "\ + "it to %s.Style" +static const char RVFTagEmptyStr = '\x30'; +#define RVFormatName "RichView Format" +#define RTFormatName "Rich Text Format" +#define URLFormatName "UniformResourceLocator" +#define HTMLFormatName "HTML Format" +#define HTMLClipboardSourceURL "SourceURL:" +#define RVDEFSTYLENAME0 "Normal text" +#define RVDEFSTYLENAME1 "Heading" +#define RVDEFSTYLENAME2 "Subheading" +#define RVDEFSTYLENAME3 "Keywords" +#define RVDEFSTYLENAME4 "Jump 1" +#define RVDEFSTYLENAME5 "Jump 2" +#define RVDEFPARASTYLENAME1 "Centered" +#define RVDEFAULTDESIGNFONT "MS Sans Serif" +#define RVDEFAULTSTYLEFONT "Arial" +#define RVDEFAULTTEXTSTYLENAME "Font Style" +#define RVDEFAULTPARASTYLENAME "Paragraph Style" +#define RVDEFAULTLISTSTYLENAME "List Style" +#define RVDEFAULTSTYLETEMPLATENAME "Style %d" +#define RVLISTLEVELDISPLAYNAME "%s %d/%d/%d" +#define RVFONT_SYMBOL "Symbol" +#define RVFONT_WINGDINGS "Wingdings" +extern PACKAGE char *RVListTypeStr[10]; +extern PACKAGE char *RVAlignStr[3]; +extern PACKAGE Word CFRV_RVF; +extern PACKAGE Word CFRV_RTF; +extern PACKAGE Word CFRV_HTML; +extern PACKAGE Word CFRV_URL; + +} /* namespace Rvstr */ +using namespace Rvstr; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvstr diff --git a/12.0.4/Units/D2006/RVStyle.dcu b/12.0.4/Units/D2006/RVStyle.dcu new file mode 100644 index 0000000..7d75479 Binary files /dev/null and b/12.0.4/Units/D2006/RVStyle.dcu differ diff --git a/12.0.4/Units/D2006/RVStyle.hpp b/12.0.4/Units/D2006/RVStyle.hpp new file mode 100644 index 0000000..cef4c23 --- /dev/null +++ b/12.0.4/Units/D2006/RVStyle.hpp @@ -0,0 +1,1469 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvstyle.pas' rev: 10.00 + +#ifndef RvstyleHPP +#define RvstyleHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvstyle +{ +//-- type declarations ------------------------------------------------------- +struct TRVScreenAndDevice +{ + +public: + int ppixScreen; + int ppiyScreen; + int ppixDevice; + int ppiyDevice; + int LeftMargin; + int RightMargin; +} ; + +typedef TRVScreenAndDevice *PRVScreenAndDevice; + +#pragma option push -b- +enum TRVHoverEffect { rvheUnderline }; +#pragma option pop + +typedef Set TRVHoverEffects; + +#pragma option push -b- +enum TRVSaveFormat { rvsfText, rvsfHTML, rvsfRTF, rvsfRVF }; +#pragma option pop + +#pragma option push -b- +enum TRVLoadFormat { rvlfText, rvlfHTML, rvlfRTF, rvlfRVF, rvlfURL, rvlfOther }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFSaveArea { rv_rtfs_TextStyle, rv_rtfs_ParaStyle, rv_rtfs_ListStyle, rv_rtfs_CellProps, rv_rtfs_RowProps, rv_rtfs_Doc }; +#pragma option pop + +#pragma option push -b- +enum TRVHTMLSaveArea { rv_thms_Head, rv_thms_BodyAttribute, rv_thms_Body, rv_thms_End }; +#pragma option pop + +#pragma option push -b- +enum TRVReaderUnicode { rvruMixed, rvruNoUnicode, rvruOnlyUnicode }; +#pragma option pop + +#pragma option push -b- +enum TRVReaderStyleMode { rvrsUseSpecified, rvrsUseClosest, rvrsAddIfNeeded }; +#pragma option pop + +#pragma option push -b- +enum TRVFReaderStyleMode { rvf_sIgnore, rvf_sInsertMap, rvf_sInsertMerge }; +#pragma option pop + +#pragma option push -b- +enum TRVColorMode { rvcmColor, rvcmPrinterColor, rvcmGrayScale, rvcmBlackAndWhite, rvcmBlackOnWhite }; +#pragma option pop + +typedef unsigned TRVCodePage; + +#pragma option push -b- +enum TRVItemBackgroundStyle { rvbsColor, rvbsStretched, rvbsTiled, rvbsCentered }; +#pragma option pop + +#pragma option push -b- +enum TRVSubSuperScriptType { rvsssNormal, rvsssSubscript, rvsssSuperScript }; +#pragma option pop + +#pragma option push -b- +enum TRVUnderlineType { rvutNormal, rvutThick, rvutDouble, rvutDotted, rvutThickDotted, rvutDashed, rvutThickDashed, rvutLongDashed, rvutThickLongDashed, rvutDashDotted, rvutThickDashDotted, rvutDashDotDotted, rvutThickDashDotDotted }; +#pragma option pop + +typedef void *TCheckpointData; + +#pragma option push -b- +enum TRVTextDrawState { rvtsSelected, rvtsHover, rvtsItemStart, rvtsItemEnd, rvtsDrawItemStart, rvtsDrawItemEnd, rvtsControlFocused, rvtsSpecialCharacters }; +#pragma option pop + +typedef Set TRVTextDrawStates; + +#pragma option push -b- +enum TRVPageBreakType { rvpbSoftPageBreak, rvpbPageBreak }; +#pragma option pop + +#pragma option push -b- +enum TRVBreakStyle { rvbsLine, rvbsRectangle, rvbs3d, rvbsDotted, rvbsDashed }; +#pragma option pop + +#pragma option push -b- +enum TRVVAlign { rvvaBaseline, rvvaMiddle, rvvaAbsTop, rvvaAbsBottom, rvvaAbsMiddle, rvvaLeft, rvvaRight }; +#pragma option pop + +#pragma option push -b- +enum TRVBorderStyle { rvbNone, rvbSingle, rvbDouble, rvbTriple, rvbThickInside, rvbThickOutside }; +#pragma option pop + +#pragma option push -b- +enum TRVSeqType { rvseqDecimal, rvseqLowerAlpha, rvseqUpperAlpha, rvseqLowerRoman, rvseqUpperRoman }; +#pragma option pop + +#pragma option push -b- +enum TRVListType { rvlstBullet, rvlstPicture, rvlstImageList, rvlstDecimal, rvlstLowerAlpha, rvlstUpperAlpha, rvlstLowerRoman, rvlstUpperRoman, rvlstImageListCounter, rvlstUnicodeBullet }; +#pragma option pop + +#pragma option push -b- +enum TRVMarkerAlignment { rvmaLeft, rvmaRight, rvmaCenter }; +#pragma option pop + +#pragma option push -b- +enum TRVListLevelOption { rvloContinuous, rvloLevelReset, rvloLegalStyleNumbering }; +#pragma option pop + +typedef Set TRVListLevelOptions; + +typedef AnsiString TRVMarkerFormatString; + +typedef WideString TRVMarkerFormatStringW; + +#pragma option push -b- +enum TRVFOption { rvfoSavePicturesBody, rvfoSaveControlsBody, rvfoIgnoreUnknownPicFmt, rvfoIgnoreUnknownCtrls, rvfoIgnoreUnknownCtrlProperties, rvfoConvUnknownStylesToZero, rvfoConvLargeImageIdxToZero, rvfoSaveBinary, rvfoUseStyleNames, rvfoSaveBack, rvfoLoadBack, rvfoSaveTextStyles, rvfoSaveParaStyles, rvfoSaveLayout, rvfoLoadLayout, rvfoSaveDocProperties, rvfoLoadDocProperties }; +#pragma option pop + +typedef Set TRVFOptions; + +#pragma option push -b- +enum TRVLongOperation { rvloLoading, rvloConverting }; +#pragma option pop + +#pragma option push -b- +enum TRVProgressStage { rvpstgStarting, rvpstgRunning, rvpstgEnding }; +#pragma option pop + +#pragma option push -b- +enum TRVFWarning { rvfwUnknownPicFmt, rvfwUnknownCtrls, rvfwConvUnknownStyles, rvfwConvLargeImageIdx, rvfwConvToUnicode, rvfwConvFromUnicode, rvfwInvalidPicture, rvfwUnknownStyleProperties, rvfwUnknownCtrlProperties }; +#pragma option pop + +typedef Set TRVFWarnings; + +#pragma option push -b- +enum TRVControlAction { rvcaAfterRVFLoad, rvcaDestroy, rvcaMoveToUndoList, rvcaMoveFromUndoList, rvcaDestroyInUndoList, rvcaBeforeRVFSave, rvcaAfterRVFSave }; +#pragma option pop + +#pragma option push -b- +enum TRVItemAction { rviaInserting, rviaInserted, rviaTextModifying, rviaDestroying, rviaMovingToUndoList }; +#pragma option pop + +#pragma option push -b- +enum TRVProtectOption { rvprStyleProtect, rvprStyleSplitProtect, rvprModifyProtect, rvprDeleteProtect, rvprConcateProtect, rvprRVFInsertProtect, rvprDoNotAutoSwitch, rvprParaStartProtect, rvprSticking, rvprSticking2, rvprSticking3, rvprStickToTop, rvprStickToBottom }; +#pragma option pop + +typedef Set TRVProtectOptions; + +#pragma option push -b- +enum TRVParaOption { rvpaoNoWrap, rvpaoReadOnly, rvpaoStyleProtect, rvpaoDoNotWantReturns, rvpaoKeepLinesTogether, rvpaoKeepWithNext, rvpaoWidowOrphanControl }; +#pragma option pop + +typedef Set TRVParaOptions; + +#pragma option push -b- +enum TRVTextOption { rvteoHTMLCode, rvteoRTFCode }; +#pragma option pop + +typedef Set TRVTextOptions; + +#pragma option push -b- +enum TRVSaveOption { rvsoOverrideImages, rvsoFirstOnly, rvsoMiddleOnly, rvsoLastOnly, rvsoDefault0Style, rvsoNoHypertextImageBorders, rvsoImageSizes, rvsoForceNonTextCSS, rvsoUseCheckpointsNames, rvsoMarkersAsText, rvsoInlineCSS, rvsoNoDefCSSStyle, rvsoUseItemImageFileNames, rvsoXHTML, rvsoUTF8 }; +#pragma option pop + +typedef Set TRVSaveOptions; + +#pragma option push -b- +enum TRVRTFOption { rvrtfSaveStyleSheet, rvrtfDuplicateUnicode, rvrtfSaveEMFAsWMF, rvrtfSaveJpegAsJpeg, rvrtfSaveBitmapDefault, rvrtfSaveEMFDefault, rvrtfSavePicturesBinary, rvrtfPNGInsteadOfBitmap, rvrtfSaveDocParameters, rvrtfSaveHeaderFooter }; +#pragma option pop + +typedef Set TRVRTFOptions; + +#pragma option push -b- +enum TRVFontStyle { rvfsOverline, rvfsAllCaps }; +#pragma option pop + +typedef Set TRVFontStyles; + +#pragma option push -b- +enum TRVAlignment { rvaLeft, rvaRight, rvaCenter, rvaJustify }; +#pragma option pop + +#pragma option push -b- +enum TRVUnits { rvuInches, rvuCentimeters, rvuMillimeters, rvuPicas, rvuPixels, rvuPoints }; +#pragma option pop + +struct TRVExtraFontInfo +{ + +public: + int ScriptHeight; +} ; + +typedef TRVExtraFontInfo *PRVExtraFontInfo; + +typedef TCustomIniFile TRVIniFile; +; + +#pragma option push -b- +enum TRVSaveCSSOption { rvcssOnlyDifference, rvcssIgnoreLeftAlignment, rvcssNoDefCSSStyle, rvcssUTF8, rvcssDefault0Style }; +#pragma option pop + +typedef Set TRVSaveCSSOptions; + +#pragma option push -b- +enum TRVFontInfoProperty { rvfiFontName, rvfiSize, rvfiCharset, rvfiUnicode, rvfiBold, rvfiItalic, rvfiUnderline, rvfiStrikeout, rvfiOverline, rvfiAllCaps, rvfiSubSuperScriptType, rvfiVShift, rvfiColor, rvfiBackColor, rvfiJump, rvfiHoverBackColor, rvfiHoverColor, rvfiHoverUnderline, rvfiJumpCursor, rvfiNextStyleNo, rvfiProtection, rvfiCharScale, rvfiBaseStyleNo, rvfiBiDiMode, rvfiCharSpacing, rvfiHTMLCode, rvfiRTFCode, rvfiUnderlineType, rvfiUnderlineColor, rvfiHoverUnderlineColor, rvfiCustom }; +#pragma option pop + +#pragma option push -b- +enum TRVParaInfoProperty { rvpiFirstIndent, rvpiLeftIndent, rvpiRightIndent, rvpiSpaceBefore, rvpiSpaceAfter, rvpiAlignment, rvpiNextParaNo, rvpiDefStyleNo, rvpiLineSpacing, rvpiLineSpacingType, rvpiBackground_Color, rvpiBackground_BO_Left, rvpiBackground_BO_Top, rvpiBackground_BO_Right, rvpiBackground_BO_Bottom, rvpiBorder_Color, rvpiBorder_Style, rvpiBorder_Width, rvpiBorder_InternalWidth, rvpiBorder_BO_Left, rvpiBorder_BO_Top, rvpiBorder_BO_Right, rvpiBorder_BO_Bottom, rvpiBorder_Vis_Left, rvpiBorder_Vis_Top, rvpiBorder_Vis_Right, rvpiBorder_Vis_Bottom, rvpiNoWrap, rvpiReadOnly, rvpiStyleProtect, rvpiDoNotWantReturns, rvpiKeepLinesTogether, rvpiKeepWithNext, rvpiTabs, rvpiBiDiMode, rvpiOutlineLevel, rvpiCustom }; +#pragma option pop + +typedef TRVParaInfoProperty TRVParaInfoProperty1; + +typedef TRVParaInfoProperty TRVParaInfoProperty2; + +typedef Set TRVFontInfoProperties; + +typedef Set TRVParaInfoProperties; + +typedef Set TRVParaInfoProperties1; + +typedef Set TRVParaInfoProperties2; + +#pragma option push -b- +enum TRVLineSpacingType { rvlsPercent, rvlsSpaceBetween, rvlsLineHeightAtLeast, rvlsLineHeightExact }; +#pragma option pop + +#pragma option push -b- +enum TRVStyleMergeMode { rvs_merge_SmartMerge, rvs_merge_Map, rvs_merge_Append }; +#pragma option pop + +#pragma option push -b- +enum TRVSelectionMode { rvsmChar, rvsmWord, rvsmParagraph }; +#pragma option pop + +#pragma option push -b- +enum TRVSelectionStyle { rvssItems, rvssLines }; +#pragma option pop + +#pragma option push -b- +enum TRVTabAlign { rvtaLeft, rvtaRight, rvtaCenter }; +#pragma option pop + +typedef int TRVStyleTemplateId; + +typedef AnsiString TRVStyleTemplateName; + +#pragma option push -b- +enum TRVSpecialCharacter { rvscSpace, rvscNBSP, rvscParagraph, rvscSoftHyphen, rvscParagraphAttrs, rvcFloatingLines }; +#pragma option pop + +typedef Set TRVSpecialCharacters; + +#pragma option push -b- +enum TRVFieldHighlightType { rvfhNever, rvfhCurrent, rvfhAlways }; +#pragma option pop + +class DELPHICLASS TRVStyle; +typedef void __fastcall (__closure *TRVDrawTextBackEvent)(TRVStyle* Sender, Graphics::TCanvas* Canvas, int StyleNo, int Left, int Top, int Width, int Height, TRVTextDrawStates DrawState, bool &DoDefault); + +typedef void __fastcall (__closure *TRVApplyStyleEvent)(TRVStyle* Sender, Graphics::TCanvas* Canvas, int StyleNo, bool &DoDefault); + +typedef void __fastcall (__closure *TRVAfterApplyStyleEvent)(TRVStyle* Sender, Graphics::TCanvas* Canvas, int StyleNo); + +typedef void __fastcall (__closure *TRVApplyStyleColorEvent)(TRVStyle* Sender, Graphics::TCanvas* Canvas, int StyleNo, TRVTextDrawStates DrawState, bool &DoDefault); + +typedef void __fastcall (__closure *TRVDrawStyleTextEvent)(TRVStyle* Sender, const AnsiString s, Graphics::TCanvas* Canvas, int StyleNo, int SpaceBefore, int Left, int Top, int Width, int Height, TRVTextDrawStates DrawState, bool &DoDefault); + +typedef void __fastcall (__closure *TRVStyleHoverSensitiveEvent)(TRVStyle* Sender, int StyleNo, bool &Sensitive); + +typedef void __fastcall (__closure *TRVDrawCheckpointEvent)(TRVStyle* Sender, Graphics::TCanvas* Canvas, int X, int Y, int ItemNo, int XShift, bool RaiseEvent, Controls::TControl* Control, bool &DoDefault); + +typedef void __fastcall (__closure *TRVDrawPageBreakEvent)(TRVStyle* Sender, Graphics::TCanvas* Canvas, int Y, int XShift, TRVPageBreakType PageBreakType, Controls::TControl* Control, bool &DoDefault); + +typedef void __fastcall (__closure *TRVDrawParaRectEvent)(TRVStyle* Sender, Graphics::TCanvas* Canvas, int ParaNo, const Types::TRect &ARect, bool &DoDefault); + +class DELPHICLASS TCustomRVInfo; +class PASCALIMPLEMENTATION TCustomRVInfo : public Classes::TCollectionItem +{ + typedef Classes::TCollectionItem inherited; + +private: + int FBaseStyleNo; + AnsiString FName; + bool FStandard; + TRVStyleTemplateId FStyleTemplateId; + +protected: + DYNAMIC bool __fastcall IsSimpleEqual(TCustomRVInfo* Value, bool IgnoreReferences, bool IgnoreID = true); + DYNAMIC bool __fastcall IsSimpleEqualEx(TCustomRVInfo* Value, Rvclasses::TRVIntegerList* Mapping); + DYNAMIC int __fastcall SimilarityValue(TCustomRVInfo* Value); + +public: + __fastcall virtual TCustomRVInfo(Classes::TCollection* Collection); + virtual void __fastcall Assign(Classes::TPersistent* Source); + virtual AnsiString __fastcall GetDisplayName(); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs, const AnsiString DefName); + +__published: + __property int BaseStyleNo = {read=FBaseStyleNo, write=FBaseStyleNo, default=-1}; + __property AnsiString StyleName = {read=FName, write=FName}; + __property bool Standard = {read=FStandard, write=FStandard, default=1}; + __property TRVStyleTemplateId StyleTemplateId = {read=FStyleTemplateId, write=FStyleTemplateId, default=-1}; +public: + #pragma option push -w-inl + /* TCollectionItem.Destroy */ inline __fastcall virtual ~TCustomRVInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCustomRVFontInfo; +class PASCALIMPLEMENTATION TCustomRVFontInfo : public TCustomRVInfo +{ + typedef TCustomRVInfo inherited; + +private: + Rvscroll::TRVBiDiMode FBiDiMode; + bool FJump; + Controls::TCursor FJumpCursor; + AnsiString FFontName; + int FSize; + Graphics::TColor FColor; + Graphics::TColor FBackColor; + Graphics::TColor FHoverColor; + Graphics::TColor FHoverBackColor; + Graphics::TColor FUnderlineColor; + Graphics::TColor FHoverUnderlineColor; + TRVUnderlineType FUnderlineType; + TRVHoverEffects FHoverEffects; + Graphics::TFontStyles FStyle; + TRVFontStyles FStyleEx; + int FVShift; + Graphics::TFontCharset FCharset; + TRVProtectOptions FProtection; + TRVTextOptions FOptions; + int FCharScale; + int FCharSpacing; + TRVSubSuperScriptType FSubSuperScriptType; + void __fastcall SingleSymbolsReader(Classes::TReader* reader); + +protected: + virtual void __fastcall DefineProperties(Classes::TFiler* Filer); + DYNAMIC bool __fastcall IsSimpleEqual(TCustomRVInfo* Value, bool IgnoreReferences, bool IgnoreID = true); + DYNAMIC int __fastcall SimilarityValue(TCustomRVInfo* Value); + int __fastcall GetScriptHeight(Graphics::TCanvas* Canvas); + +public: + __fastcall virtual TCustomRVFontInfo(Classes::TCollection* Collection); + virtual void __fastcall Assign(Classes::TPersistent* Source); + virtual void __fastcall AssignTo(Classes::TPersistent* Dest); + void __fastcall AssignSelectedProperties(TCustomRVFontInfo* Source, TRVFontInfoProperties Props); + void __fastcall AssignToLogFont(tagLOGFONTA &LogFont, Graphics::TCanvas* Canvas, bool CanUseCustomPPI, bool ExcludeUnderline, bool ToFormatCanvas); + void __fastcall Apply(Graphics::TCanvas* Canvas, Rvscroll::TRVBiDiMode DefBiDiMode, bool CanUseCustomPPI, PRVExtraFontInfo ExtraFontInfo, bool IgnoreSubSuperScript, bool ToFormatCanvas); + void __fastcall ApplyBiDiMode(Graphics::TCanvas* Canvas, Rvscroll::TRVBiDiMode DefBiDiMode, bool ToFormatCanvas); + void __fastcall ApplyColor(Graphics::TCanvas* Canvas, TRVStyle* RVStyle, TRVTextDrawStates DrawState, bool Printing, TRVColorMode ColorMode); + DYNAMIC bool __fastcall IsEqual(TCustomRVFontInfo* Value, TRVFontInfoProperties IgnoreList); + HIDESBASEDYNAMIC void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + HIDESBASEDYNAMIC void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs, bool JumpByDefault, Controls::TCursor DefJumpCursor); + void __fastcall SaveCSSToStream(Classes::TStream* Stream, TCustomRVFontInfo* BaseStyle, bool Multiline, bool UTF8); + void __fastcall SaveRTFToStream(Classes::TStream* Stream, int StyleNo, double TwipsPerPixel, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ColorTable); + +__published: + __property Graphics::TFontCharset Charset = {read=FCharset, write=FCharset, default=1}; + __property AnsiString FontName = {read=FFontName, write=FFontName}; + __property int Size = {read=FSize, write=FSize, default=10}; + __property Graphics::TFontStyles Style = {read=FStyle, write=FStyle, default=0}; + __property int VShift = {read=FVShift, write=FVShift, default=0}; + __property Graphics::TColor Color = {read=FColor, write=FColor, default=-16777208}; + __property Graphics::TColor BackColor = {read=FBackColor, write=FBackColor, default=536870911}; + __property Graphics::TColor HoverBackColor = {read=FHoverBackColor, write=FHoverBackColor, default=536870911}; + __property Graphics::TColor HoverColor = {read=FHoverColor, write=FHoverColor, default=536870911}; + __property TRVHoverEffects HoverEffects = {read=FHoverEffects, write=FHoverEffects, default=0}; + __property TRVFontStyles StyleEx = {read=FStyleEx, write=FStyleEx, default=0}; + __property bool Jump = {read=FJump, write=FJump, default=0}; + __property Controls::TCursor JumpCursor = {read=FJumpCursor, write=FJumpCursor, default=101}; + __property int CharScale = {read=FCharScale, write=FCharScale, default=100}; + __property int CharSpacing = {read=FCharSpacing, write=FCharSpacing, default=0}; + __property Rvscroll::TRVBiDiMode BiDiMode = {read=FBiDiMode, write=FBiDiMode, default=0}; + __property TRVSubSuperScriptType SubSuperScriptType = {read=FSubSuperScriptType, write=FSubSuperScriptType, default=0}; + __property TRVProtectOptions Protection = {read=FProtection, write=FProtection, default=0}; + __property TRVTextOptions Options = {read=FOptions, write=FOptions, default=0}; + __property TRVUnderlineType UnderlineType = {read=FUnderlineType, write=FUnderlineType, default=0}; + __property Graphics::TColor UnderlineColor = {read=FUnderlineColor, write=FUnderlineColor, default=536870911}; + __property Graphics::TColor HoverUnderlineColor = {read=FHoverUnderlineColor, write=FHoverUnderlineColor, default=536870911}; +public: + #pragma option push -w-inl + /* TCollectionItem.Destroy */ inline __fastcall virtual ~TCustomRVFontInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TFontInfo; +class PASCALIMPLEMENTATION TFontInfo : public TCustomRVFontInfo +{ + typedef TCustomRVFontInfo inherited; + +private: + bool FUnicode; + int FNextStyleNo; + TRVFontInfoProperties FModifiedProperties; + +protected: + DYNAMIC bool __fastcall IsSimpleEqualEx(TCustomRVInfo* Value, Rvclasses::TRVIntegerList* Mapping); + DYNAMIC bool __fastcall IsSimpleEqual(TCustomRVInfo* Value, bool IgnoreReferences, bool IgnoreID = true); + void __fastcall ExcludeUnmodifiedProperties(TCustomRVFontInfo* Source, TRVFontInfoProperties PossibleProps); + +public: + __fastcall virtual TFontInfo(Classes::TCollection* Collection); + virtual void __fastcall Assign(Classes::TPersistent* Source); + DYNAMIC bool __fastcall IsEqual(TCustomRVFontInfo* Value, TRVFontInfoProperties IgnoreList); + void __fastcall Draw(const AnsiString s, Graphics::TCanvas* Canvas, int ThisStyleNo, int SpaceBefore, int Left, int Top, int Width, int Height, int BaseLine, TRVStyle* RVStyle, TRVTextDrawStates DrawState, bool Printing, bool PreviewCorrection, TRVColorMode ColorMode, Rvscroll::TRVBiDiMode DefBiDiMode, Graphics::TCanvas* RefCanvas); + void __fastcall DrawVertical(const AnsiString s, Graphics::TCanvas* Canvas, int ThisStyleNo, int SpaceBefore, int Left, int Top, int Width, int Height, TRVStyle* RVStyle, TRVTextDrawStates DrawState); + DYNAMIC void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + DYNAMIC void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs, bool JumpByDefault, Controls::TCursor DefJumpCursor); + +__published: + __property int NextStyleNo = {read=FNextStyleNo, write=FNextStyleNo, default=-1}; + __property bool Unicode = {read=FUnicode, write=FUnicode, default=0}; + __property TRVFontInfoProperties ModifiedProperties = {read=FModifiedProperties, write=FModifiedProperties, default=0}; +public: + #pragma option push -w-inl + /* TCollectionItem.Destroy */ inline __fastcall virtual ~TFontInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCustomRVInfos; +class PASCALIMPLEMENTATION TCustomRVInfos : public Classes::TCollection +{ + typedef Classes::TCollection inherited; + +protected: + Classes::TPersistent* FOwner; + +public: + __fastcall TCustomRVInfos(TMetaClass* ItemClass, Classes::TPersistent* Owner); + DYNAMIC Classes::TPersistent* __fastcall GetOwner(void); + virtual void __fastcall AssignTo(Classes::TPersistent* Dest); + void __fastcall MergeWith(TCustomRVInfos* Styles, TRVStyleMergeMode Mode, Rvclasses::TRVIntegerList* Mapping, Rvclasses::TRVIntegerList* TextStyleMapping, Classes::TPersistent* RVData = (Classes::TPersistent*)(0x0)); +public: + #pragma option push -w-inl + /* TCollection.Destroy */ inline __fastcall virtual ~TCustomRVInfos(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TFontInfos; +class PASCALIMPLEMENTATION TFontInfos : public TCustomRVInfos +{ + typedef TCustomRVInfos inherited; + +public: + TFontInfo* operator[](int Index) { return Items[Index]; } + +private: + TFontInfo* FInvalidItem; + HIDESBASE TFontInfo* __fastcall GetItem(int Index); + HIDESBASE void __fastcall SetItem(int Index, TFontInfo* Value); + TFontInfo* __fastcall GetInvalidItem(void); + void __fastcall SetInvalidItem(const TFontInfo* Value); + +public: + int PixelsPerInch; + __fastcall virtual ~TFontInfos(void); + int __fastcall FindStyleWithCharset(int BaseStyle, Graphics::TFontCharset Charset); + int __fastcall FindStyleWithFontStyle(int BaseStyle, Graphics::TFontStyles Value, Graphics::TFontStyles Mask); + int __fastcall FindStyleWithFontSize(int BaseStyle, int Size); + int __fastcall FindStyleWithColor(int BaseStyle, Graphics::TColor Color, Graphics::TColor BackColor); + int __fastcall FindStyleWithFontName(int BaseStyle, const AnsiString FontName); + int __fastcall FindSuchStyle(int BaseStyle, TFontInfo* Style, TRVFontInfoProperties Mask); + int __fastcall FindStyleWithFont(int BaseStyle, Graphics::TFont* Font); + HIDESBASE TFontInfo* __fastcall Add(void); + TFontInfo* __fastcall AddFont(AnsiString Name, int Size, Graphics::TColor Color, Graphics::TColor BackColor, Graphics::TFontStyles Style); + TFontInfo* __fastcall AddFontEx(AnsiString Name, int Size, Graphics::TColor Color, Graphics::TColor BackColor, Graphics::TFontStyles Style, Graphics::TFontCharset Charset); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, Controls::TCursor DefJumpCursor); + __property TFontInfo* Items[int Index] = {read=GetItem, write=SetItem/*, default*/}; + __property TFontInfo* InvalidItem = {read=GetInvalidItem, write=SetInvalidItem}; +public: + #pragma option push -w-inl + /* TCustomRVInfos.Create */ inline __fastcall TFontInfos(TMetaClass* ItemClass, Classes::TPersistent* Owner) : TCustomRVInfos(ItemClass, Owner) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRect; +class PASCALIMPLEMENTATION TRVRect : public Classes::TPersistent +{ + typedef Classes::TPersistent inherited; + +private: + int FTop; + int FLeft; + int FRight; + int FBottom; + bool __fastcall IsEqualEx(TRVRect* Value, bool IgnL, bool IgnT, bool IgnR, bool IgnB); + int __fastcall SimilarityValue(TRVRect* Value, int Weight); + +public: + virtual void __fastcall Assign(Classes::TPersistent* Source); + void __fastcall AssignValidProperties(TRVRect* Source, bool ValL, bool ValT, bool ValR, bool ValB); + void __fastcall SetAll(int Value); + void __fastcall InflateRect(Types::TRect &Rect); + void __fastcall InflateRectSaD(Types::TRect &Rect, const TRVScreenAndDevice &sad); + void __fastcall AssignToRect(Types::TRect &Rect); + void __fastcall AssignToRectIfGreater(Types::TRect &Rect); + bool __fastcall IsEqual(TRVRect* Value); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + +__published: + __property int Left = {read=FLeft, write=FLeft, default=0}; + __property int Right = {read=FRight, write=FRight, default=0}; + __property int Top = {read=FTop, write=FTop, default=0}; + __property int Bottom = {read=FBottom, write=FBottom, default=0}; +public: + #pragma option push -w-inl + /* TPersistent.Destroy */ inline __fastcall virtual ~TRVRect(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRect(void) : Classes::TPersistent() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVBooleanRect; +class PASCALIMPLEMENTATION TRVBooleanRect : public Classes::TPersistent +{ + typedef Classes::TPersistent inherited; + +private: + bool FTop; + bool FLeft; + bool FRight; + bool FBottom; + bool __fastcall IsEqualEx(TRVBooleanRect* Value, bool IgnL, bool IgnT, bool IgnR, bool IgnB); + +public: + __fastcall TRVBooleanRect(bool DefValue); + void __fastcall SetAll(bool Value); + void __fastcall SetValues(bool ALeft, bool ATop, bool ARight, bool ABottom); + virtual void __fastcall Assign(Classes::TPersistent* Source); + void __fastcall AssignValidProperties(TRVBooleanRect* Source, bool ValL, bool ValT, bool ValR, bool ValB); + bool __fastcall IsEqual(TRVBooleanRect* Value); + bool __fastcall IsEqual2(bool ALeft, bool ATop, bool ARight, bool ABottom); + bool __fastcall IsAllEqual(bool Value); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + +__published: + __property bool Left = {read=FLeft, write=FLeft, default=1}; + __property bool Right = {read=FRight, write=FRight, default=1}; + __property bool Top = {read=FTop, write=FTop, default=1}; + __property bool Bottom = {read=FBottom, write=FBottom, default=1}; +public: + #pragma option push -w-inl + /* TPersistent.Destroy */ inline __fastcall virtual ~TRVBooleanRect(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVBorder; +class PASCALIMPLEMENTATION TRVBorder : public Classes::TPersistent +{ + typedef Classes::TPersistent inherited; + +private: + Graphics::TColor FColor; + TRVBorderStyle FStyle; + int FWidth; + int FInternalWidth; + TRVBooleanRect* FVisibleBorders; + TRVRect* FBorderOffsets; + void __fastcall SetBorderOffsets(const TRVRect* Value); + void __fastcall SetVisibleBorders(const TRVBooleanRect* Value); + int __fastcall SimilarityValue(TRVBorder* Value); + +protected: + void __fastcall DoDraw(const Types::TRect &Rect, Graphics::TCanvas* Canvas, int Width, int InternalWidth, int OnePixelWidth, TRVColorMode ColorMode); + +public: + __fastcall TRVBorder(void); + __fastcall virtual ~TRVBorder(void); + void __fastcall Draw(const Types::TRect &Rect, Graphics::TCanvas* Canvas); + void __fastcall DrawSaD(const Types::TRect &Rect, Graphics::TCanvas* Canvas, const TRVScreenAndDevice &sad, TRVColorMode ColorMode); + virtual void __fastcall Assign(Classes::TPersistent* Source); + bool __fastcall IsEqual(TRVBorder* Value); + bool __fastcall IsEqual_Para(TRVBorder* Value, const TRVParaInfoProperties &IgnoreList); + void __fastcall AssignValidProperties(TRVBorder* Source, TRVParaInfoProperties1 ValidProperties); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + int __fastcall GetTotalWidth(void); + +__published: + __property int Width = {read=FWidth, write=FWidth, default=1}; + __property int InternalWidth = {read=FInternalWidth, write=FInternalWidth, default=1}; + __property Graphics::TColor Color = {read=FColor, write=FColor, default=-16777208}; + __property TRVBorderStyle Style = {read=FStyle, write=FStyle, default=0}; + __property TRVBooleanRect* VisibleBorders = {read=FVisibleBorders, write=SetVisibleBorders}; + __property TRVRect* BorderOffsets = {read=FBorderOffsets, write=SetBorderOffsets}; +}; + + +class DELPHICLASS TRVBackgroundRect; +class PASCALIMPLEMENTATION TRVBackgroundRect : public Classes::TPersistent +{ + typedef Classes::TPersistent inherited; + +private: + TRVRect* FBorderOffsets; + Graphics::TColor FColor; + void __fastcall SetBorderOffsets(const TRVRect* Value); + int __fastcall SimilarityValue(TRVBackgroundRect* Value); + +public: + __fastcall TRVBackgroundRect(void); + __fastcall virtual ~TRVBackgroundRect(void); + virtual void __fastcall Assign(Classes::TPersistent* Source); + void __fastcall PrepareDraw(Types::TRect &Rect); + void __fastcall PrepareDrawSaD(Types::TRect &Rect, const TRVScreenAndDevice &sad); + void __fastcall Draw(const Types::TRect &Rect, Graphics::TCanvas* Canvas, bool Printing, TRVColorMode ColorMode); + bool __fastcall IsEqual(TRVBackgroundRect* Value); + bool __fastcall IsEqual_Para(TRVBackgroundRect* Value, const TRVParaInfoProperties &IgnoreList); + void __fastcall AssignValidProperties(TRVBackgroundRect* Source, TRVParaInfoProperties1 ValidProperties); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + +__published: + __property Graphics::TColor Color = {read=FColor, write=FColor, default=536870911}; + __property TRVRect* BorderOffsets = {read=FBorderOffsets, write=SetBorderOffsets}; +}; + + +class DELPHICLASS TRVTabInfo; +class PASCALIMPLEMENTATION TRVTabInfo : public Classes::TCollectionItem +{ + typedef Classes::TCollectionItem inherited; + +private: + int FPosition; + AnsiString FLeader; + TRVTabAlign FAlign; + bool __fastcall StoreLeader(void); + void __fastcall SetPosition(const int Value); + +protected: + virtual AnsiString __fastcall GetDisplayName(); + +public: + bool __fastcall IsEqual(TRVTabInfo* Value); + int __fastcall SimilarityValue(TRVTabInfo* Value); + virtual void __fastcall Assign(Classes::TPersistent* Source); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + +__published: + __property TRVTabAlign Align = {read=FAlign, write=FAlign, default=0}; + __property int Position = {read=FPosition, write=SetPosition, nodefault}; + __property AnsiString Leader = {read=FLeader, write=FLeader, stored=StoreLeader}; +public: + #pragma option push -w-inl + /* TCollectionItem.Create */ inline __fastcall virtual TRVTabInfo(Classes::TCollection* Collection) : Classes::TCollectionItem(Collection) { } + #pragma option pop + #pragma option push -w-inl + /* TCollectionItem.Destroy */ inline __fastcall virtual ~TRVTabInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVTabInfos; +class PASCALIMPLEMENTATION TRVTabInfos : public Classes::TCollection +{ + typedef Classes::TCollection inherited; + +public: + TRVTabInfo* operator[](int Index) { return Items[Index]; } + +private: + Classes::TPersistent* FOwner; + HIDESBASE TRVTabInfo* __fastcall GetItem(int Index); + HIDESBASE void __fastcall SetItem(int Index, TRVTabInfo* Value); + +public: + __fastcall TRVTabInfos(Classes::TPersistent* Owner); + DYNAMIC Classes::TPersistent* __fastcall GetOwner(void); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + HIDESBASE TRVTabInfo* __fastcall Add(void); + void __fastcall SortTabs(void); + bool __fastcall IsEqual(TRVTabInfos* Value); + int __fastcall Find(int Position); + int __fastcall SimilarityValue(TRVTabInfos* Value); + void __fastcall Intersect(TRVTabInfos* Value); + void __fastcall AddFrom(TRVTabInfos* Source); + void __fastcall DeleteList(Rvclasses::TRVIntegerList* Positions); + __property TRVTabInfo* Items[int Index] = {read=GetItem, write=SetItem/*, default*/}; +public: + #pragma option push -w-inl + /* TCollection.Destroy */ inline __fastcall virtual ~TRVTabInfos(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TCustomRVParaInfo; +class DELPHICLASS TParaInfo; +class PASCALIMPLEMENTATION TCustomRVParaInfo : public TCustomRVInfo +{ + typedef TCustomRVInfo inherited; + +private: + int FFirstIndent; + int FLeftIndent; + int FRightIndent; + int FSpaceBefore; + int FSpaceAfter; + int FLineSpacing; + TRVLineSpacingType FLineSpacingType; + TRVAlignment FAlignment; + TRVBorder* FBorder; + TRVBackgroundRect* FBackground; + TRVParaOptions FOptions; + Rvscroll::TRVBiDiMode FBiDiMode; + int FOutlineLevel; + TRVTabInfos* FTabs; + void __fastcall SetBorder(const TRVBorder* Value); + void __fastcall SetBackground(const TRVBackgroundRect* Value); + bool __fastcall ExtraLineSpacing(void); + void __fastcall SetTabs(const TRVTabInfos* Value); + +protected: + DYNAMIC bool __fastcall IsSimpleEqual(TCustomRVInfo* Value, bool IgnoreReferences, bool IgnoreID = true); + DYNAMIC int __fastcall SimilarityValue(TCustomRVInfo* Value); + +public: + __fastcall virtual TCustomRVParaInfo(Classes::TCollection* Collection); + __fastcall virtual ~TCustomRVParaInfo(void); + virtual void __fastcall Assign(Classes::TPersistent* Source); + void __fastcall AssignSelectedProperties(TCustomRVParaInfo* Source, const TRVParaInfoProperties &Props); + HIDESBASEDYNAMIC void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + HIDESBASEDYNAMIC void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + DYNAMIC bool __fastcall IsEqual(TCustomRVParaInfo* Value, const TRVParaInfoProperties &IgnoreList); + void __fastcall SaveCSSToStream(Classes::TStream* Stream, TParaInfo* BaseStyle, bool Multiline, bool IgnoreLeftAlignment, bool IgnoreLeftIndents); + +__published: + __property int FirstIndent = {read=FFirstIndent, write=FFirstIndent, default=0}; + __property int LeftIndent = {read=FLeftIndent, write=FLeftIndent, default=0}; + __property int RightIndent = {read=FRightIndent, write=FRightIndent, default=0}; + __property int SpaceBefore = {read=FSpaceBefore, write=FSpaceBefore, default=0}; + __property int SpaceAfter = {read=FSpaceAfter, write=FSpaceAfter, default=0}; + __property TRVAlignment Alignment = {read=FAlignment, write=FAlignment, default=0}; + __property TRVBorder* Border = {read=FBorder, write=SetBorder}; + __property TRVBackgroundRect* Background = {read=FBackground, write=SetBackground}; + __property int LineSpacing = {read=FLineSpacing, write=FLineSpacing, default=100}; + __property TRVLineSpacingType LineSpacingType = {read=FLineSpacingType, write=FLineSpacingType, default=0}; + __property TRVParaOptions Options = {read=FOptions, write=FOptions, default=0}; + __property Rvscroll::TRVBiDiMode BiDiMode = {read=FBiDiMode, write=FBiDiMode, default=0}; + __property int OutlineLevel = {read=FOutlineLevel, write=FOutlineLevel, default=0}; + __property TRVTabInfos* Tabs = {read=FTabs, write=SetTabs}; +}; + + +class PASCALIMPLEMENTATION TParaInfo : public TCustomRVParaInfo +{ + typedef TCustomRVParaInfo inherited; + +private: + int FNextParaNo; + int FDefStyleNo; + TRVParaInfoProperties1 FModifiedProperties1; + TRVParaInfoProperties2 FModifiedProperties2; + +protected: + DYNAMIC bool __fastcall IsSimpleEqualEx(TCustomRVInfo* Value, Rvclasses::TRVIntegerList* Mapping); + DYNAMIC bool __fastcall IsSimpleEqual(TCustomRVInfo* Value, bool IgnoreReferences, bool IgnoreID = true); + void __fastcall ExcludeUnmodifiedProperties(TCustomRVParaInfo* Source, const TRVParaInfoProperties &PossibleProps); + +public: + __fastcall virtual TParaInfo(Classes::TCollection* Collection); + virtual void __fastcall Assign(Classes::TPersistent* Source); + DYNAMIC bool __fastcall IsEqual(TCustomRVParaInfo* Value, const TRVParaInfoProperties &IgnoreList); + DYNAMIC void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + DYNAMIC void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + bool __fastcall IsHeading(int MaxLevel); + +__published: + __property int NextParaNo = {read=FNextParaNo, write=FNextParaNo, default=-1}; + __property int DefStyleNo = {read=FDefStyleNo, write=FDefStyleNo, default=-1}; + __property TRVParaInfoProperties1 ModifiedProperties1 = {read=FModifiedProperties1, write=FModifiedProperties1, default=0}; + __property TRVParaInfoProperties2 ModifiedProperties2 = {read=FModifiedProperties2, write=FModifiedProperties2, default=0}; +public: + #pragma option push -w-inl + /* TCustomRVParaInfo.Destroy */ inline __fastcall virtual ~TParaInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TParaInfos; +class PASCALIMPLEMENTATION TParaInfos : public TCustomRVInfos +{ + typedef TCustomRVInfos inherited; + +public: + TParaInfo* operator[](int Index) { return Items[Index]; } + +private: + TParaInfo* FInvalidItem; + HIDESBASE TParaInfo* __fastcall GetItem(int Index); + HIDESBASE void __fastcall SetItem(int Index, TParaInfo* Value); + TParaInfo* __fastcall GetInvalidItem(void); + void __fastcall SetInvalidItem(const TParaInfo* Value); + +public: + HIDESBASE TParaInfo* __fastcall Add(void); + virtual void __fastcall AssignTo(Classes::TPersistent* Dest); + __fastcall virtual ~TParaInfos(void); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section); + int __fastcall FindSuchStyle(int BaseStyle, TParaInfo* Style, const TRVParaInfoProperties &Mask); + int __fastcall FindStyleWithAlignment(int BaseStyle, TRVAlignment Alignment); + __property TParaInfo* Items[int Index] = {read=GetItem, write=SetItem/*, default*/}; + __property TParaInfo* InvalidItem = {read=GetInvalidItem, write=SetInvalidItem}; +public: + #pragma option push -w-inl + /* TCustomRVInfos.Create */ inline __fastcall TParaInfos(TMetaClass* ItemClass, Classes::TPersistent* Owner) : TCustomRVInfos(ItemClass, Owner) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVMarkerFont; +class PASCALIMPLEMENTATION TRVMarkerFont : public Graphics::TFont +{ + typedef Graphics::TFont inherited; + +private: + bool __fastcall StoreName(void); + bool __fastcall StoreHeight(void); + +public: + __fastcall TRVMarkerFont(void); + bool __fastcall IsEqual(Graphics::TFont* Font); + bool __fastcall IsDefault(void); + +__published: + __property Charset = {default=1}; + __property Color = {default=-16777208}; + __property Name = {stored=StoreName}; + __property Style = {default=0}; + __property Height = {stored=StoreHeight}; +public: + #pragma option push -w-inl + /* TFont.Destroy */ inline __fastcall virtual ~TRVMarkerFont(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVListLevel; +class PASCALIMPLEMENTATION TRVListLevel : public Classes::TCollectionItem +{ + typedef Classes::TCollectionItem inherited; + +private: + TRVListType FListType; + Graphics::TPicture* FPicture; + Imglist::TCustomImageList* FImageList; + int FImageIndex; + AnsiString FFormatString; + WideString FFormatStringW; + int FLeftIndent; + int FFirstIndent; + int FMarkerIndent; + TRVMarkerAlignment FMarkerAlignment; + TRVMarkerFont* FFont; + TRVListLevelOptions FOptions; + int FStartFrom; + Graphics::TPicture* __fastcall GetPicture(void); + void __fastcall SetPicture(const Graphics::TPicture* Value); + TRVMarkerFont* __fastcall GetFont(void); + void __fastcall SetFont(const TRVMarkerFont* Value); + bool __fastcall StoreFont(void); + bool __fastcall StorePicture(void); + void __fastcall ImageListTagWriter(Classes::TWriter* Writer); + void __fastcall ImageListTagReader(Classes::TReader* Reader); + void __fastcall FormatStringWCodeWriter(Classes::TWriter* Writer); + void __fastcall FormatStringWCodeReader(Classes::TReader* Reader); + void __fastcall FormatStringCodeWriter(Classes::TWriter* Writer); + void __fastcall FormatStringCodeReader(Classes::TReader* Reader); + void __fastcall FormatStringCodeWReader(Classes::TReader* Reader); + bool __fastcall StoreImageList(void); + Classes::TPersistent* __fastcall GetRVFRVData(void); + +protected: + virtual AnsiString __fastcall GetDisplayName(); + bool __fastcall IsSimpleEqual(TRVListLevel* Value); + virtual void __fastcall DefineProperties(Classes::TFiler* Filer); + int __fastcall SimilarityValue(TRVListLevel* Value); + +public: + __fastcall virtual TRVListLevel(Classes::TCollection* Collection); + __fastcall virtual ~TRVListLevel(void); + virtual void __fastcall Assign(Classes::TPersistent* Source); + AnsiString __fastcall GetHTMLOpenTagForCSS(); + AnsiString __fastcall GetIndentCSSForTextVersion(); + void __fastcall HTMLOpenTag(Classes::TStream* Stream, bool UseCSS); + void __fastcall HTMLCloseTag(Classes::TStream* Stream, bool UseCSS); + bool __fastcall HasPicture(void); + bool __fastcall UsesFont(void); + bool __fastcall HasNumbering(void); + bool __fastcall HasVariableWidth(void); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + +__published: + __property TRVListType ListType = {read=FListType, write=FListType, default=0}; + __property int StartFrom = {read=FStartFrom, write=FStartFrom, default=1}; + __property Imglist::TCustomImageList* ImageList = {read=FImageList, write=FImageList, stored=StoreImageList}; + __property int ImageIndex = {read=FImageIndex, write=FImageIndex, default=0}; + __property AnsiString FormatString = {read=FFormatString, write=FFormatString, stored=false}; + __property WideString FormatStringW = {read=FFormatStringW, write=FFormatStringW, stored=false}; + __property int LeftIndent = {read=FLeftIndent, write=FLeftIndent, default=0}; + __property int FirstIndent = {read=FFirstIndent, write=FFirstIndent, default=10}; + __property int MarkerIndent = {read=FMarkerIndent, write=FMarkerIndent, default=0}; + __property TRVMarkerAlignment MarkerAlignment = {read=FMarkerAlignment, write=FMarkerAlignment, default=0}; + __property Graphics::TPicture* Picture = {read=GetPicture, write=SetPicture, stored=StorePicture}; + __property TRVMarkerFont* Font = {read=GetFont, write=SetFont, stored=StoreFont}; + __property TRVListLevelOptions Options = {read=FOptions, write=FOptions, default=3}; +}; + + +class DELPHICLASS TRVListLevelCollection; +class PASCALIMPLEMENTATION TRVListLevelCollection : public Classes::TCollection +{ + typedef Classes::TCollection inherited; + +public: + TRVListLevel* operator[](int Index) { return Items[Index]; } + +private: + Classes::TPersistent* FOwner; + HIDESBASE TRVListLevel* __fastcall GetItem(int Index); + HIDESBASE void __fastcall SetItem(int Index, const TRVListLevel* Value); + +public: + __fastcall TRVListLevelCollection(Classes::TPersistent* Owner); + DYNAMIC Classes::TPersistent* __fastcall GetOwner(void); + HIDESBASE TRVListLevel* __fastcall Add(void); + HIDESBASE TRVListLevel* __fastcall Insert(int Index); + bool __fastcall IsSimpleEqual(TRVListLevelCollection* Value); + __property TRVListLevel* Items[int Index] = {read=GetItem, write=SetItem/*, default*/}; +public: + #pragma option push -w-inl + /* TCollection.Destroy */ inline __fastcall virtual ~TRVListLevelCollection(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVListInfo; +class PASCALIMPLEMENTATION TRVListInfo : public TCustomRVInfo +{ + typedef TCustomRVInfo inherited; + +private: + TRVListLevelCollection* FLevels; + bool FOneLevelPreview; + int FListID; + void __fastcall SetLevels(const TRVListLevelCollection* Value); + int __fastcall GetListID(void); + void __fastcall ReadListID(Classes::TReader* Reader); + void __fastcall WriteListID(Classes::TWriter* Writer); + +protected: + DYNAMIC int __fastcall SimilarityValue(TCustomRVInfo* Value); + virtual void __fastcall DefineProperties(Classes::TFiler* Filer); + +public: + DYNAMIC bool __fastcall IsSimpleEqual(TCustomRVInfo* Value, bool IgnoreReferences, bool IgnoreID = true); + DYNAMIC bool __fastcall IsSimpleEqualEx(TCustomRVInfo* Value, Rvclasses::TRVIntegerList* Mapping); + __fastcall virtual TRVListInfo(Classes::TCollection* Collection); + __fastcall virtual ~TRVListInfo(void); + virtual void __fastcall Assign(Classes::TPersistent* Source); + HIDESBASEDYNAMIC void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + HIDESBASEDYNAMIC void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section, const AnsiString fs); + bool __fastcall HasNumbering(void); + bool __fastcall AllNumbered(void); + bool __fastcall HasVariableWidth(void); + __property int ListID = {read=GetListID, nodefault}; + +__published: + __property TRVListLevelCollection* Levels = {read=FLevels, write=SetLevels}; + __property bool OneLevelPreview = {read=FOneLevelPreview, write=FOneLevelPreview, default=0}; +}; + + +class DELPHICLASS TRVListInfos; +class PASCALIMPLEMENTATION TRVListInfos : public TCustomRVInfos +{ + typedef TCustomRVInfos inherited; + +public: + TRVListInfo* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVListInfo* __fastcall GetItem(int Index); + HIDESBASE void __fastcall SetItem(int Index, const TRVListInfo* Value); + void __fastcall RemoveImageList(Imglist::TCustomImageList* ImageList); + +public: + Classes::TPersistent* FRVData; + bool FRichViewAllowAssignListID; + HIDESBASE TRVListInfo* __fastcall Add(void); + HIDESBASE TRVListInfo* __fastcall Insert(int Index); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, const AnsiString Section); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, const AnsiString Section); + int __fastcall FindSuchStyle(TRVListInfo* Style, bool AddIfNotFound); + int __fastcall FindStyleWithLevels(TRVListLevelCollection* Levels, const AnsiString StyleNameForAdding, bool AddIfNotFound); + __property TRVListInfo* Items[int Index] = {read=GetItem, write=SetItem/*, default*/}; +public: + #pragma option push -w-inl + /* TCustomRVInfos.Create */ inline __fastcall TRVListInfos(TMetaClass* ItemClass, Classes::TPersistent* Owner) : TCustomRVInfos(ItemClass, Owner) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCollection.Destroy */ inline __fastcall virtual ~TRVListInfos(void) { } + #pragma option pop + +}; + + +typedef TMetaClass* TRVFontInfoClass; + +typedef TMetaClass* TRVParaInfoClass; + +typedef TMetaClass* TRVListInfoClass; + +class DELPHICLASS TRVSTFontInfo; +class PASCALIMPLEMENTATION TRVSTFontInfo : public TCustomRVFontInfo +{ + typedef TCustomRVFontInfo inherited; + +private: + Classes::TPersistent* FOwner; + void __fastcall SetNoProp(const int Value); + +public: + DYNAMIC Classes::TPersistent* __fastcall GetOwner(void); + +__published: + __property int StyleTemplateId = {write=SetNoProp, nodefault}; + __property int StyleName = {write=SetNoProp, nodefault}; + __property int Standard = {write=SetNoProp, nodefault}; + __property int BaseStyleNo = {write=SetNoProp, nodefault}; +public: + #pragma option push -w-inl + /* TCustomRVFontInfo.Create */ inline __fastcall virtual TRVSTFontInfo(Classes::TCollection* Collection) : TCustomRVFontInfo(Collection) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCollectionItem.Destroy */ inline __fastcall virtual ~TRVSTFontInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVSTParaInfo; +class PASCALIMPLEMENTATION TRVSTParaInfo : public TCustomRVParaInfo +{ + typedef TCustomRVParaInfo inherited; + +private: + Classes::TPersistent* FOwner; + void __fastcall SetNoProp(const int Value); + +public: + DYNAMIC Classes::TPersistent* __fastcall GetOwner(void); + +__published: + __property int StyleTemplateId = {write=SetNoProp, nodefault}; + __property int StyleName = {write=SetNoProp, nodefault}; + __property int Standard = {write=SetNoProp, nodefault}; + __property int BaseStyleNo = {write=SetNoProp, nodefault}; +public: + #pragma option push -w-inl + /* TCustomRVParaInfo.Create */ inline __fastcall virtual TRVSTParaInfo(Classes::TCollection* Collection) : TCustomRVParaInfo(Collection) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomRVParaInfo.Destroy */ inline __fastcall virtual ~TRVSTParaInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVSTListInfo; +class PASCALIMPLEMENTATION TRVSTListInfo : public TRVListInfo +{ + typedef TRVListInfo inherited; + +private: + Classes::TPersistent* FOwner; + void __fastcall SetNoProp(const int Value); + +public: + DYNAMIC Classes::TPersistent* __fastcall GetOwner(void); + +__published: + __property int StyleTemplateId = {write=SetNoProp, nodefault}; + __property int StyleName = {write=SetNoProp, nodefault}; + __property int Standard = {write=SetNoProp, nodefault}; + __property int BaseStyleNo = {write=SetNoProp, nodefault}; +public: + #pragma option push -w-inl + /* TRVListInfo.Create */ inline __fastcall virtual TRVSTListInfo(Classes::TCollection* Collection) : TRVListInfo(Collection) { } + #pragma option pop + #pragma option push -w-inl + /* TRVListInfo.Destroy */ inline __fastcall virtual ~TRVSTListInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVStyleTemplate; +class PASCALIMPLEMENTATION TRVStyleTemplate : public Classes::TCollectionItem +{ + typedef Classes::TCollectionItem inherited; + +private: + AnsiString FName; + TRVStyleTemplateId FId; + TRVStyleTemplateId FParentId; + TRVSTFontInfo* FTextStyle; + TRVSTParaInfo* FParaStyle; + TRVSTListInfo* FListStyle; + TRVFontInfoProperties FValidTextProperties; + TRVParaInfoProperties1 FValidParaProperties1; + TRVParaInfoProperties2 FValidParaProperties2; + TRVStyleTemplate* FParent; + Classes::TList* FChildren; + TRVStyleTemplateId __fastcall GetId(void); + void __fastcall SetTextStyle(const TRVSTFontInfo* Value); + void __fastcall SetParaStyle(const TRVSTParaInfo* Value); + void __fastcall ReadID(Classes::TReader* Reader); + void __fastcall WriteID(Classes::TWriter* Writer); + void __fastcall AddChild(TRVStyleTemplate* Child); + void __fastcall RemoveChild(TRVStyleTemplate* Child); + void __fastcall SetParentId(const TRVStyleTemplateId Value); + void __fastcall UpdateParentReference(void); + void __fastcall SetName(const AnsiString Value); + +protected: + virtual void __fastcall DefineProperties(Classes::TFiler* Filer); + TRVFontInfoProperties __fastcall AssignToTextStyle(TCustomRVFontInfo* ATextStyle, TRVFontInfoProperties AllowedProps); + TRVParaInfoProperties __fastcall AssignToParaStyle(TCustomRVParaInfo* AParaStyle, const TRVParaInfoProperties &AllowedProps); + virtual void __fastcall AssignTo(Classes::TPersistent* Dest); + +public: + __fastcall virtual TRVStyleTemplate(Classes::TCollection* Collection); + __fastcall virtual ~TRVStyleTemplate(void); + virtual AnsiString __fastcall GetDisplayName(); + virtual void __fastcall Assign(Classes::TPersistent* Source); + bool __fastcall IsAncestorFor(TRVStyleTemplate* StyleTemplate); + void __fastcall ExcludeUnmodifiedTextStyleProperties(TFontInfo* ATextStyle, TRVFontInfoProperties PossibleProps); + void __fastcall ExcludeUnmodifiedParaStyleProperties(TParaInfo* AParaStyle, const TRVParaInfoProperties &PossibleProps); + void __fastcall ApplyToTextStyle(TCustomRVFontInfo* ATextStyle, TCustomRVParaInfo* AParaStyle, bool OverrideModifiedProperties); + void __fastcall ApplyToParaStyle(TCustomRVParaInfo* AParaStyle, bool OverrideModifiedProperties); + +__published: + __property TRVSTFontInfo* TextStyle = {read=FTextStyle, write=SetTextStyle}; + __property TRVSTParaInfo* ParaStyle = {read=FParaStyle, write=SetParaStyle}; + __property TRVFontInfoProperties ValidTextProperties = {read=FValidTextProperties, write=FValidTextProperties, default=0}; + __property TRVParaInfoProperties1 ValidParaProperties1 = {read=FValidParaProperties1, write=FValidParaProperties1, default=0}; + __property TRVParaInfoProperties2 ValidParaProperties2 = {read=FValidParaProperties2, write=FValidParaProperties2, default=0}; + __property AnsiString Name = {read=FName, write=SetName}; + __property TRVStyleTemplateId Id = {read=GetId, nodefault}; + __property TRVStyleTemplateId ParentId = {read=FParentId, write=SetParentId, default=-1}; +}; + + +class DELPHICLASS TRVStyleTemplateCollection; +class PASCALIMPLEMENTATION TRVStyleTemplateCollection : public Classes::TCollection +{ + typedef Classes::TCollection inherited; + +public: + TRVStyleTemplate* operator[](int Index) { return Items[Index]; } + +private: + int FNameCounter; + AnsiString FDefStyleName; + TRVStyleTemplate* FNormalStyleTemplate; + HIDESBASE TRVStyleTemplate* __fastcall GetItem(int Index); + HIDESBASE void __fastcall SetItem(int Index, const TRVStyleTemplate* Value); + void __fastcall AssignUniqueNameTo(TRVStyleTemplate* Item); + bool __fastcall StoreDefStyleName(void); + void __fastcall UpdateParentReferences(void); + +protected: + Classes::TPersistent* FOwner; + +public: + __fastcall TRVStyleTemplateCollection(Classes::TPersistent* Owner); + void __fastcall ResetNameCounter(void); + void __fastcall Sort(void); + int __fastcall FindById(TRVStyleTemplateId Id); + int __fastcall FindByName(const AnsiString Name); + TRVStyleTemplate* __fastcall GetNormalStyleTemplate(void); + void __fastcall AssignToStrings(Classes::TStrings* Strings, bool AssignObjects); + virtual void __fastcall Assign(Classes::TPersistent* Source); + void __fastcall AssignStyleTemplates(TRVStyleTemplateCollection* Source, bool CopyIds); + void __fastcall ClearParaFormat(TCustomRVParaInfo* AParaStyle); + void __fastcall ClearTextFormat(TCustomRVFontInfo* ATextStyle, TCustomRVParaInfo* AParaStyle); + DYNAMIC Classes::TPersistent* __fastcall GetOwner(void); + __property TRVStyleTemplate* Items[int Index] = {read=GetItem, write=SetItem/*, default*/}; + +__published: + __property AnsiString DefStyleName = {read=FDefStyleName, write=FDefStyleName, stored=StoreDefStyleName}; +public: + #pragma option push -w-inl + /* TCollection.Destroy */ inline __fastcall virtual ~TRVStyleTemplateCollection(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVStyle : public Classes::TComponent +{ + typedef Classes::TComponent inherited; + +private: + Graphics::TPicture* FInvalidPicture; + Graphics::TColor FColor; + Graphics::TColor FHoverColor; + Graphics::TColor FCurrentItemColor; + Graphics::TColor FSelColor; + Graphics::TColor FSelTextColor; + Graphics::TColor FInactiveSelColor; + Graphics::TColor FInactiveSelTextColor; + Graphics::TColor FCheckpointColor; + Graphics::TColor FCheckpointEvColor; + Controls::TCursor FJumpCursor; + TFontInfos* FTextStyles; + TParaInfos* FParaStyles; + TRVListInfos* FListStyles; + bool FFullRedraw; + int FSpacesInTab; + int FDefTabWidth; + Graphics::TColor FPageBreakColor; + Graphics::TColor FSoftPageBreakColor; + Graphics::TColor FLiveSpellingColor; + TRVApplyStyleColorEvent FOnApplyStyleColor; + TRVApplyStyleEvent FOnApplyStyle; + TRVAfterApplyStyleEvent FOnAfterApplyStyle; + TRVDrawStyleTextEvent FOnDrawStyleText; + TRVStyleHoverSensitiveEvent FOnStyleHoverSensitive; + TRVDrawTextBackEvent FOnDrawTextBack; + TRVDrawCheckpointEvent FOnDrawCheckpoint; + TRVDrawPageBreakEvent FOnDrawPageBreak; + TRVDrawParaRectEvent FOnDrawParaBack; + Graphics::TColor FFieldHighlightColor; + TRVFieldHighlightType FFieldHighlightType; + TRVSeqType FFootnoteNumbering; + TRVSeqType FEndnoteNumbering; + bool FFootnotePageReset; + bool FDefaultUnicodeStyles; + int FDefUnicodeStyle; + TRVCodePage FDefCodePage; + bool FUseSound; + TRVSelectionMode FSelectionMode; + TRVSelectionStyle FSelectionStyle; + Controls::TCursor FLineSelectCursor; + Graphics::TColor FFloatingLineColor; + Graphics::TColor FSpecialCharactersColor; + TRVStyleTemplateCollection* FStyleTemplates; + void __fastcall SetTextStyles(TFontInfos* Value); + void __fastcall SetParaStyles(TParaInfos* Value); + void __fastcall SetListStyles(TRVListInfos* Value); + Graphics::TColor __fastcall GetHoverColorByColor(Graphics::TColor Color); + Graphics::TPicture* __fastcall GetInvalidPicture(void); + void __fastcall SetInvalidPicture(const Graphics::TPicture* Value); + void __fastcall SetStyleTemplates(const TRVStyleTemplateCollection* Value); + +protected: + virtual void __fastcall ReadState(Classes::TReader* Reader); + virtual void __fastcall Notification(Classes::TComponent* AComponent, Classes::TOperation Operation); + virtual void __fastcall Loaded(void); + +public: + int ItemNo; + int OffsetInItem; + Classes::TPersistent* RVData; + void __fastcall ResetTextStyles(void); + void __fastcall ResetParaStyles(void); + __fastcall virtual TRVStyle(Classes::TComponent* AOwner); + __fastcall virtual ~TRVStyle(void); + virtual TMetaClass* __fastcall GetTextStyleClass(void); + virtual TMetaClass* __fastcall GetParaStyleClass(void); + virtual TMetaClass* __fastcall GetListStyleClass(void); + void __fastcall GetNextTab(int ParaNo, int X, const TRVScreenAndDevice &sad, int &Position, AnsiString &Leader, TRVTabAlign &Align, Rvscroll::TRVBiDiMode DefBiDiMode, int LeftIndent, int RightIndent); + int __fastcall AddTextStyle(void); + void __fastcall DeleteTextStyle(int Index); + void __fastcall SaveINI(const AnsiString FileName, const AnsiString Section); + void __fastcall LoadINI(const AnsiString FileName, const AnsiString Section); + void __fastcall SaveToINI(Inifiles::TCustomIniFile* ini, AnsiString Section); + void __fastcall LoadFromINI(Inifiles::TCustomIniFile* ini, AnsiString Section); + void __fastcall SaveReg(const AnsiString BaseKey); + void __fastcall LoadReg(const AnsiString BaseKey); + void __fastcall SaveCSSToStream(Classes::TStream* Stream, TRVSaveCSSOptions AOptions); + bool __fastcall SaveCSS(const AnsiString FileName, TRVSaveCSSOptions AOptions); + Graphics::TColor __fastcall GetHoverColor(int StyleNo); + void __fastcall DrawTextBack(Graphics::TCanvas* Canvas, int ItemNo, int StyleNo, Classes::TPersistent* RVData, int Left, int Top, int Width, int Height, TRVTextDrawStates DrawState); + void __fastcall ApplyStyle(Graphics::TCanvas* Canvas, int StyleNo, Rvscroll::TRVBiDiMode DefBiDiMode, bool CanUseCustomPPI, PRVExtraFontInfo ExtraFontInfo, bool IgnoreSubSuperScript, bool ToFormatCanvas); + void __fastcall ApplyStyleColor(Graphics::TCanvas* Canvas, int StyleNo, TRVTextDrawStates DrawState, bool Printing, TRVColorMode ColorMode); + void __fastcall DrawStyleText(const AnsiString s, Graphics::TCanvas* Canvas, int ItemNo, int OffsetInItem, int StyleNo, Classes::TPersistent* RVData, int SpaceBefore, int Left, int Top, int Width, int Height, int BaseLine, TRVTextDrawStates DrawState, bool Printing, bool PreviewCorrection, TRVColorMode ColorMode, Rvscroll::TRVBiDiMode DefBiDiMode, Graphics::TCanvas* RefCanvas); + void __fastcall DrawCheckpoint(Graphics::TCanvas* Canvas, int X, int Y, int AreaLeft, int Width, Classes::TPersistent* RVData, int ItemNo, int XShift, bool RaiseEvent, Controls::TControl* Control); + void __fastcall DrawPageBreak(Graphics::TCanvas* Canvas, int Y, int XShift, TRVPageBreakType PageBreakType, Controls::TControl* Control, Classes::TPersistent* RVData, int ItemNo); + void __fastcall DrawParaBack(Graphics::TCanvas* Canvas, int ParaNo, const Types::TRect &Rect, bool Printing, TRVColorMode ColorMode); + bool __fastcall StyleHoverSensitive(int StyleNo); + __property bool DefaultUnicodeStyles = {read=FDefaultUnicodeStyles, write=FDefaultUnicodeStyles, nodefault}; + +__published: + __property TFontInfos* TextStyles = {read=FTextStyles, write=SetTextStyles}; + __property TParaInfos* ParaStyles = {read=FParaStyles, write=SetParaStyles}; + __property TRVListInfos* ListStyles = {read=FListStyles, write=SetListStyles}; + __property int SpacesInTab = {read=FSpacesInTab, write=FSpacesInTab, default=0}; + __property int DefTabWidth = {read=FDefTabWidth, write=FDefTabWidth, default=48}; + __property Controls::TCursor JumpCursor = {read=FJumpCursor, write=FJumpCursor, default=101}; + __property Controls::TCursor LineSelectCursor = {read=FLineSelectCursor, write=FLineSelectCursor, default=106}; + __property bool FullRedraw = {read=FFullRedraw, write=FFullRedraw, default=0}; + __property bool UseSound = {read=FUseSound, write=FUseSound, default=1}; + __property Graphics::TColor Color = {read=FColor, write=FColor, default=-16777211}; + __property Graphics::TColor HoverColor = {read=FHoverColor, write=FHoverColor, default=536870911}; + __property Graphics::TColor CurrentItemColor = {read=FCurrentItemColor, write=FCurrentItemColor, default=536870911}; + __property Graphics::TColor SelColor = {read=FSelColor, write=FSelColor, default=-16777203}; + __property Graphics::TColor SelTextColor = {read=FSelTextColor, write=FSelTextColor, default=-16777202}; + __property Graphics::TColor InactiveSelColor = {read=FInactiveSelColor, write=FInactiveSelColor, default=-16777203}; + __property Graphics::TColor InactiveSelTextColor = {read=FInactiveSelTextColor, write=FInactiveSelTextColor, default=-16777202}; + __property Graphics::TColor CheckpointColor = {read=FCheckpointColor, write=FCheckpointColor, default=32768}; + __property Graphics::TColor CheckpointEvColor = {read=FCheckpointEvColor, write=FCheckpointEvColor, default=65280}; + __property Graphics::TColor PageBreakColor = {read=FPageBreakColor, write=FPageBreakColor, default=-16777200}; + __property Graphics::TColor SoftPageBreakColor = {read=FSoftPageBreakColor, write=FSoftPageBreakColor, default=-16777201}; + __property Graphics::TColor LiveSpellingColor = {read=FLiveSpellingColor, write=FLiveSpellingColor, default=255}; + __property Graphics::TColor FloatingLineColor = {read=FFloatingLineColor, write=FFloatingLineColor, default=12427914}; + __property Graphics::TColor SpecialCharactersColor = {read=FSpecialCharactersColor, write=FSpecialCharactersColor, default=536870911}; + __property TRVSelectionMode SelectionMode = {read=FSelectionMode, write=FSelectionMode, default=1}; + __property TRVSelectionStyle SelectionStyle = {read=FSelectionStyle, write=FSelectionStyle, default=0}; + __property Graphics::TColor FieldHighlightColor = {read=FFieldHighlightColor, write=FFieldHighlightColor, default=-16777201}; + __property TRVFieldHighlightType FieldHighlightType = {read=FFieldHighlightType, write=FFieldHighlightType, default=1}; + __property TRVSeqType FootnoteNumbering = {read=FFootnoteNumbering, write=FFootnoteNumbering, default=0}; + __property TRVSeqType EndnoteNumbering = {read=FEndnoteNumbering, write=FEndnoteNumbering, default=3}; + __property bool FootnotePageReset = {read=FFootnotePageReset, write=FFootnotePageReset, default=1}; + __property int DefUnicodeStyle = {read=FDefUnicodeStyle, write=FDefUnicodeStyle, default=-1}; + __property TRVCodePage DefCodePage = {read=FDefCodePage, write=FDefCodePage, default=0}; + __property Graphics::TPicture* InvalidPicture = {read=GetInvalidPicture, write=SetInvalidPicture}; + __property TRVApplyStyleEvent OnApplyStyle = {read=FOnApplyStyle, write=FOnApplyStyle}; + __property TRVAfterApplyStyleEvent OnAfterApplyStyle = {read=FOnAfterApplyStyle, write=FOnAfterApplyStyle}; + __property TRVApplyStyleColorEvent OnApplyStyleColor = {read=FOnApplyStyleColor, write=FOnApplyStyleColor}; + __property TRVDrawStyleTextEvent OnDrawStyleText = {read=FOnDrawStyleText, write=FOnDrawStyleText}; + __property TRVStyleHoverSensitiveEvent OnStyleHoverSensitive = {read=FOnStyleHoverSensitive, write=FOnStyleHoverSensitive}; + __property TRVDrawTextBackEvent OnDrawTextBack = {read=FOnDrawTextBack, write=FOnDrawTextBack}; + __property TRVDrawCheckpointEvent OnDrawCheckpoint = {read=FOnDrawCheckpoint, write=FOnDrawCheckpoint}; + __property TRVDrawPageBreakEvent OnDrawPageBreak = {read=FOnDrawPageBreak, write=FOnDrawPageBreak}; + __property TRVDrawParaRectEvent OnDrawParaBack = {read=FOnDrawParaBack, write=FOnDrawParaBack}; + __property TRVStyleTemplateCollection* StyleTemplates = {read=FStyleTemplates, write=SetStyleTemplates}; +}; + + +//-- var, const, procedure --------------------------------------------------- +static const Shortint crJump = 0x65; +static const Shortint crRVFlipArrow = 0x6a; +static const Shortint rvsNormal = 0x0; +static const Shortint rvsHeading = 0x1; +static const Shortint rvsSubheading = 0x2; +static const Shortint rvsKeyword = 0x3; +static const Shortint rvsJump1 = 0x4; +static const Shortint rvsJump2 = 0x5; +static const Shortint rvsBreak = -1; +static const Shortint rvsCheckpoint = -2; +static const Shortint rvsPicture = -3; +static const Shortint rvsHotspot = -4; +static const Shortint rvsComponent = -5; +static const Shortint rvsBullet = -6; +static const Shortint rvsBack = -7; +static const Shortint rvsVersionInfo = -8; +static const Shortint rvsDocProperty = -9; +static const Shortint rvsHotPicture = -10; +static const Shortint rvsListMarker = -11; +static const Shortint rvsTab = -12; +static const Shortint LAST_DEFAULT_STYLE_NO = 0x5; +static const int rvsDefStyle = 2147483647; +static const int DEFAULT_FLOATINGLINECOLOR = 0xbda28a; +extern PACKAGE TRVRTFOptions rvrtfDefault; +extern PACKAGE TRVFontInfoProperties RVAllFontInfoProperties; +extern PACKAGE TRVParaInfoProperties RVAllParaInfoProperties; +extern PACKAGE TRVParaInfoProperties RVAllParaInfoProperties1; +extern PACKAGE TRVParaInfoProperties RVAllParaInfoProperties2; +extern PACKAGE TRVParaInfoProperties RVAllParaBackgroundProperties; +extern PACKAGE TRVParaInfoProperties RVAllParaBorderProperties; +extern PACKAGE bool RichViewResetStandardFlag; +extern PACKAGE bool RVNoLstIDProperty; +extern PACKAGE bool RichViewCompareStyleNames; +extern PACKAGE TRVSpecialCharacters RVVisibleSpecialCharacters; +extern PACKAGE int RVFORMATCANVASFACTOR; +extern PACKAGE int RVFORMATCANVASRESOLUTION; +extern PACKAGE bool ScaleRichViewTextDrawAlwaysUseGlyphs; +extern PACKAGE int __fastcall RVConvertFromFormatCanvas(int V, bool UseFormatCanvas); +extern PACKAGE int __fastcall RVConvertToFormatCanvas(int V, bool UseFormatCanvas); +extern PACKAGE void __fastcall RVDrawUnderline(Graphics::TCanvas* Canvas, TRVUnderlineType UnderlineType, Graphics::TColor Color, int Left, int Right, int Y, int BaseLineWidth); +extern PACKAGE void __fastcall RVWrite(Classes::TStream* Stream, const AnsiString s); +extern PACKAGE void __fastcall RVWriteLn(Classes::TStream* Stream, const AnsiString s); +extern PACKAGE void __fastcall RVWriteX(Classes::TStream* Stream, const AnsiString s, bool Multiline); + +} /* namespace Rvstyle */ +using namespace Rvstyle; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvstyle diff --git a/12.0.4/Units/D2006/RVStyle.res b/12.0.4/Units/D2006/RVStyle.res new file mode 100644 index 0000000..8a5d879 Binary files /dev/null and b/12.0.4/Units/D2006/RVStyle.res differ diff --git a/12.0.4/Units/D2006/RVSubData.dcu b/12.0.4/Units/D2006/RVSubData.dcu new file mode 100644 index 0000000..358c098 Binary files /dev/null and b/12.0.4/Units/D2006/RVSubData.dcu differ diff --git a/12.0.4/Units/D2006/RVSubData.hpp b/12.0.4/Units/D2006/RVSubData.hpp new file mode 100644 index 0000000..e301237 --- /dev/null +++ b/12.0.4/Units/D2006/RVSubData.hpp @@ -0,0 +1,92 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvsubdata.pas' rev: 10.00 + +#ifndef RvsubdataHPP +#define RvsubdataHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvsubdata +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVSubData; +class PASCALIMPLEMENTATION TRVSubData : public Crvdata::TCustomRVData +{ + typedef Crvdata::TCustomRVData inherited; + +private: + Crvdata::TRVFlags FFlags; + Rvitem::TCustomRVItemInfo* FOwner; + +protected: + Rvseqitem::TRVSeqList* FSeqList; + Rvmarker::TRVMarkerList* FMarkers; + DYNAMIC void __fastcall DestroyMarkers(void); + DYNAMIC void __fastcall DestroySeqList(void); + DYNAMIC AnsiString __fastcall GetURL(int id); + virtual Crvdata::TRVFlags __fastcall GetFlags(void); + virtual void __fastcall SetFlags(const Crvdata::TRVFlags Value); + +public: + Crvdata::TCustomRVData* MainRVData; + __fastcall TRVSubData(Rvitem::TCustomRVItemInfo* AOwner, Crvdata::TCustomRVData* AMainRVData); + DYNAMIC void __fastcall ControlAction2(Crvdata::TCustomRVData* RVData, Rvstyle::TRVControlAction ControlAction, int ItemNo, Controls::TControl* &Control); + virtual Crvdata::TCustomRVData* __fastcall GetParentData(void); + virtual Crvdata::TCustomRVData* __fastcall GetRootData(void); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteParentData(void); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteRootData(void); + void __fastcall MovingToUndoList(Rvundo::TRVUndoInfo* AContainerUndoItem); + void __fastcall MovingFromUndoList(void); + DYNAMIC Rvseqitem::TRVSeqList* __fastcall GetSeqList(bool AllowCreate); + DYNAMIC Rvmarker::TRVMarkerList* __fastcall GetMarkers(bool AllowCreate); + HIDESBASE bool __fastcall LoadRTFFromStream(Classes::TStream* Stream); + HIDESBASE bool __fastcall LoadRTF(const AnsiString FileName); + HIDESBASE bool __fastcall SaveRTFToStream(Classes::TStream* Stream, const AnsiString Path); + HIDESBASE bool __fastcall SaveRTF(const AnsiString FileName); + HIDESBASE bool __fastcall LoadRVFFromStream(Classes::TStream* Stream); + HIDESBASE bool __fastcall LoadRVF(const AnsiString FileName); + HIDESBASE bool __fastcall SaveRVFToStream(Classes::TStream* Stream); + HIDESBASE bool __fastcall SaveRVF(const AnsiString FileName); + HIDESBASE bool __fastcall AppendRVFFromStream(Classes::TStream* Stream, int ParaNo); + DYNAMIC void __fastcall DoneStyleMappings(Crvdata::PRVIntegerList PTextStylesMapping, Crvdata::PRVIntegerList PParaStylesMapping, Crvdata::PRVIntegerList PListStylesMapping, bool AsSubDoc); + __property Rvitem::TCustomRVItemInfo* Owner = {read=FOwner}; +public: + #pragma option push -w-inl + /* TCustomRVData.Destroy */ inline __fastcall virtual ~TRVSubData(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvsubdata */ +using namespace Rvsubdata; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvsubdata diff --git a/12.0.4/Units/D2006/RVTInplace.dcu b/12.0.4/Units/D2006/RVTInplace.dcu new file mode 100644 index 0000000..4753816 Binary files /dev/null and b/12.0.4/Units/D2006/RVTInplace.dcu differ diff --git a/12.0.4/Units/D2006/RVTInplace.hpp b/12.0.4/Units/D2006/RVTInplace.hpp new file mode 100644 index 0000000..5b07809 --- /dev/null +++ b/12.0.4/Units/D2006/RVTInplace.hpp @@ -0,0 +1,184 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvtinplace.pas' rev: 10.00 + +#ifndef RvtinplaceHPP +#define RvtinplaceHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvtinplace +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVTableInplaceRVData; +class PASCALIMPLEMENTATION TRVTableInplaceRVData : public Rvervdata::TRVEditRVData +{ + typedef Rvervdata::TRVEditRVData inherited; + +private: + bool resized; + +protected: + DYNAMIC void __fastcall Formatted(int FirstItemNo, int LastItemNo, bool Partial); + virtual Crvfdata::TRVSoftPageBreakList* __fastcall GetSoftPageBreaks(void); + +public: + bool DrawOnParentMode; + virtual Rvback::TRVBackground* __fastcall GetBackground(void); + virtual void __fastcall DrawBackground(Graphics::TCanvas* Canvas, const Types::TRect &r); + DYNAMIC void __fastcall GetParentInfo(int &ParentItemNo, Rvitem::TRVStoreSubRVData* &Location); + DYNAMIC bool __fastcall CanLoadLayout(void); + virtual Crvdata::TCustomRVData* __fastcall GetSourceRVData(void); + DYNAMIC void __fastcall ShowRectangle(int Left, int Top, int Width, int Height); + virtual void __fastcall SetDocumentAreaSize(int Width, int Height, bool UpdateH); + DYNAMIC int __fastcall BuildJumpsCoords(bool IgnoreReadOnly); + int __fastcall ReallyBuildJumpsCoords(void); + DYNAMIC void __fastcall ClearJumpsCoords(void); + DYNAMIC void __fastcall GetOriginEx(int &ALeft, int &ATop); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteParentData(void); + virtual Crvdata::TCustomRVData* __fastcall GetAbsoluteRootData(void); + DYNAMIC void __fastcall DoRVDblClick(const AnsiString ClickedWord, int StyleNo); + DYNAMIC void __fastcall DoJump(int id); + virtual void __fastcall GetItemBackground(int ItemNo, const Types::TRect &r, bool MakeImageRect, Graphics::TColor &Color, Graphics::TBitmap* &bmp, bool &UseBitmap); + DYNAMIC AnsiString __fastcall GetItemHint(Crvdata::TCustomRVData* RVData, int ItemNo, const AnsiString UpperRVDataHint); + virtual int __fastcall GetHOffs(void); + virtual int __fastcall GetVOffs(void); +public: + #pragma option push -w-inl + /* TRVEditRVData.Create */ inline __fastcall virtual TRVTableInplaceRVData(Rvscroll::TRVScroller* RichView) : Rvervdata::TRVEditRVData(RichView) { } + #pragma option pop + #pragma option push -w-inl + /* TRVEditRVData.Destroy */ inline __fastcall virtual ~TRVTableInplaceRVData(void) { } + #pragma option pop + +}; + + +typedef void __fastcall (__closure *TRVTableInplaceChangeEvent)(Rvedit::TCustomRichViewEdit* Sender, bool ClearRedo); + +class DELPHICLASS TRVTableInplaceEdit; +class PASCALIMPLEMENTATION TRVTableInplaceEdit : public Rvedit::TRichViewEdit +{ + typedef Rvedit::TRichViewEdit inherited; + +private: + Crvfdata::TCustomRVFormattedData* FRVData; + Rvtable::TRVTableItemInfo* FTable; + bool FClearing; + Classes::TNotifyEvent FOnFormat; + Graphics::TColor FColor; + bool FBusy; + TRVTableInplaceChangeEvent FOnChangeEx; + bool FTransparent; + MESSAGE void __fastcall CMRelease(Messages::TMessage &Message); + MESSAGE void __fastcall WMMoveEditor(Messages::TMessage &Message); + MESSAGE void __fastcall WMExpandSel(Messages::TMessage &Message); + MESSAGE void __fastcall WMInplaceUndo(Messages::TMessage &Message); + MESSAGE void __fastcall WMInplaceRedo(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall WMUndo(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall EMUndo(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall EMRedo(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall EMCanUndo(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall EMCanRedo(Messages::TMessage &Message); + +protected: + virtual TMetaClass* __fastcall GetDataClass(void); + DYNAMIC void __fastcall KeyPress(char &Key); + DYNAMIC void __fastcall KeyDown(Word &Key, Classes::TShiftState Shift); + virtual Rvrtfprops::TRVRTFReaderProperties* __fastcall GetRTFReadProperties(void); + virtual Rvdocparams::TRVDocParameters* __fastcall GetDocParameters(void); + virtual void __fastcall WndProc(Messages::TMessage &Message); + virtual void __fastcall SetReadOnly(const bool Value); + virtual bool __fastcall GetReadOnly(void); + virtual void __fastcall InplaceRedrawing(bool AllowRedrawItself); + virtual void __fastcall Paint(void); + +public: + int FClickTime; + int FTableItemNo; + Rvtable::TRVTableCellData* FCell; + int FRow; + int FCol; + bool NormalScrolling; + __fastcall virtual TRVTableInplaceEdit(Classes::TComponent* AOwner); + __fastcall virtual ~TRVTableInplaceEdit(void); + DYNAMIC bool __fastcall RTFReaderAssigned(void); + DYNAMIC bool __fastcall DocParametersAssigned(void); + DYNAMIC void __fastcall DoChange(bool ClearRedo); + void __fastcall SetParentRVData(Crvfdata::TCustomRVFormattedData* RVData); + void __fastcall SetCell(int Row, int Col, Rvtable::TRVTableItemInfo* Table, int CellHPadding, int CellVPadding); + virtual void __fastcall SetVPos(int p, bool Redraw); + virtual void __fastcall SetHPos(int p); + void __fastcall SetClearingState(void); + DYNAMIC void __fastcall MouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + DYNAMIC void __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y); + DYNAMIC void __fastcall MouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + void __fastcall SelectCompletely(bool Select); + virtual bool __fastcall BeforeChange(bool FromOutside); + bool __fastcall Resized(void); + DYNAMIC void __fastcall Undo(void); + DYNAMIC void __fastcall Redo(void); + DYNAMIC void __fastcall Click(void); + DYNAMIC void __fastcall DragDrop(System::TObject* Source, int X, int Y); + DYNAMIC void __fastcall DoEndDrag(System::TObject* Target, int X, int Y); + __property Classes::TNotifyEvent OnFormat = {read=FOnFormat, write=FOnFormat}; + __property bool Busy = {read=FBusy, nodefault}; + __property TRVTableInplaceChangeEvent OnChangeEx = {read=FOnChangeEx, write=FOnChangeEx}; + __property bool ReadOnly = {read=GetReadOnly, write=SetReadOnly, nodefault}; + __property bool Transparent = {read=FTransparent, write=FTransparent, nodefault}; + __property Rvtable::TRVTableItemInfo* Table = {read=FTable}; +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TRVTableInplaceEdit(HWND ParentWindow) : Rvedit::TRichViewEdit(ParentWindow) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const Word WM_RVMOVEEDITOR = 0x40a; +static const Word WM_RVINPLACEUNDO = 0x40b; +static const Word WM_RVINPLACEREDO = 0x40c; +static const Word WM_RVEXPANDSEL = 0x40d; + +} /* namespace Rvtinplace */ +using namespace Rvtinplace; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvtinplace diff --git a/12.0.4/Units/D2006/RVTable.dcu b/12.0.4/Units/D2006/RVTable.dcu new file mode 100644 index 0000000..830d16a Binary files /dev/null and b/12.0.4/Units/D2006/RVTable.dcu differ diff --git a/12.0.4/Units/D2006/RVTable.hpp b/12.0.4/Units/D2006/RVTable.hpp new file mode 100644 index 0000000..dfa9bc0 --- /dev/null +++ b/12.0.4/Units/D2006/RVTable.hpp @@ -0,0 +1,954 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvtable.pas' rev: 10.00 + +#ifndef RvtableHPP +#define RvtableHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvtable +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVCellHAlign { rvcLeft, rvcCenter, rvcRight }; +#pragma option pop + +#pragma option push -b- +enum TRVCellVAlign { rvcTop, rvcMiddle, rvcBottom, rvcVDefault }; +#pragma option pop + +#pragma option push -b- +enum TRVTableOption { rvtoEditing, rvtoRowSizing, rvtoColSizing, rvtoRowSelect, rvtoColSelect, rvtoNoCellSelect, rvtoRTFSaveCellPixelBestWidth, rvtoRTFAllowAutofit, rvtoHideGridLines, rvtoOverlappingCorners, rvtoCellBelowBorders, rvtoIgnoreContentWidth, rvtoIgnoreContentHeight }; +#pragma option pop + +typedef Set TRVTableOptions; + +#pragma option push -b- +enum TRVTablePrintOption { rvtoHalftoneBorders, rvtoRowsSplit, rvtoWhiteBackground }; +#pragma option pop + +typedef Set TRVTablePrintOptions; + +#pragma option push -b- +enum TRVTableBorderStyle { rvtbRaised, rvtbLowered, rvtbColor, rvtbRaisedColor, rvtbLoweredColor }; +#pragma option pop + +typedef int TRVHTMLLength; + +class DELPHICLASS TRVTableItemInfo; +typedef void __fastcall (__closure *TRVCellEditingEvent)(TRVTableItemInfo* Sender, int Row, int Col, bool Automatic, bool &AllowEdit); + +typedef void __fastcall (__closure *TRVCellEndEditEvent)(TRVTableItemInfo* Sender, int Row, int Col, bool Clearing); + +class DELPHICLASS TRVTableCellData; +class DELPHICLASS TRVTableRow; +class PASCALIMPLEMENTATION TRVTableCellData : public Rvdatalist::TRVItemFormattedData +{ + typedef Rvdatalist::TRVItemFormattedData inherited; + +private: + Graphics::TColor FColor; + TRVCellVAlign FVAlign; + TRVHTMLLength FBestWidth; + int FBestHeight; + int FRowSpan; + int FColSpan; + int FLeft; + int FTop; + int FWidth; + int FHeight; + Rvstyle::TRVBooleanRect* FVisibleBorders; + Crvfdata::TCustomRVFormattedData* FChosenRVData; + Rvitem::TCustomRVItemInfo* FChosenItem; + Rvundo::TRVUndoInfo* ContainerUndoItem; + Graphics::TColor FBorderColor; + Graphics::TColor FBorderLightColor; + Rvback::TRVBackground* FBackground; + AnsiString FBackgroundImageFileName; + AnsiString FHint; + void __fastcall SetBestHeight(const int Value); + void __fastcall SetBestWidth(const TRVHTMLLength Value); + void __fastcall SetVisibleBorders(const Rvstyle::TRVBooleanRect* Value); + bool __fastcall CanClear(void); + void __fastcall SetColor(const Graphics::TColor Value); + Graphics::TGraphic* __fastcall GetBackgroundImage(void); + Rvstyle::TRVItemBackgroundStyle __fastcall GetBackgroundStyle(void); + void __fastcall SetBackgroundImage_(const Graphics::TGraphic* Value, bool Copy); + void __fastcall SetBackgroundImage(const Graphics::TGraphic* Value); + void __fastcall SetBackgroundStyle(const Rvstyle::TRVItemBackgroundStyle Value); + void __fastcall BackgroundImageWriter(Classes::TStream* Stream); + void __fastcall BackgroundImageReader(Classes::TStream* Stream); + bool __fastcall StoreVisibleBorders(void); + +protected: + virtual void __fastcall DefineProperties(Classes::TFiler* Filer); + void __fastcall AssignSizeFrom(TRVTableCellData* Cell); + TRVCellVAlign __fastcall GetRealVAlign(void); + DYNAMIC bool __fastcall SupportsPageBreaks(void); + virtual Rvscroll::TRVOptions __fastcall GetOptions(void); + DYNAMIC void __fastcall DataWriter(Classes::TStream* Stream); + +public: + virtual void __fastcall GetItemBackground(int ItemNo, const Types::TRect &r, bool MakeImageRect, Graphics::TColor &Color, Graphics::TBitmap* &bmp, bool &UseBitmap); + DYNAMIC void __fastcall ResetSubCoords(void); + virtual Rvback::TRVBackground* __fastcall GetBackground(void); + int __fastcall GetExtraVOffs(void); + bool __fastcall IsTransparent(void); + DYNAMIC void __fastcall GetParentInfo(int &ParentItemNo, Rvitem::TRVStoreSubRVData* &Location); + TRVTableItemInfo* __fastcall GetTable(void); + DYNAMIC AnsiString __fastcall GetItemHint(Crvdata::TCustomRVData* RVData, int ItemNo, const AnsiString UpperRVDataHint); + void __fastcall AssignAttributesFrom(TRVTableCellData* Cell, bool IncludeSize, int DivColSpan, int DivRowSpan); + DYNAMIC void __fastcall Deselect(Rvitem::TCustomRVItemInfo* NewPartiallySelected, bool MakeEvent); + DYNAMIC Controls::TWinControl* __fastcall GetEditor(void); + virtual void __fastcall GetOrigin(int &ALeft, int &ATop); + DYNAMIC void __fastcall GetOriginEx(int &ALeft, int &ATop); + virtual int __fastcall GetWidth(void); + virtual int __fastcall GetHeight(void); + virtual Graphics::TColor __fastcall GetColor(void); + virtual int __fastcall GetHOffs(void); + virtual int __fastcall GetVOffs(void); + virtual int __fastcall GetAreaWidth(void); + DYNAMIC void __fastcall AssignChosenRVData(Crvfdata::TCustomRVFormattedData* RVData, Rvitem::TCustomRVItemInfo* Item); + DYNAMIC void __fastcall UnassignChosenRVData(Crvdata::TCustomRVData* RVData); + DYNAMIC Crvdata::TCustomRVData* __fastcall GetChosenRVData(void); + DYNAMIC Rvitem::TCustomRVItemInfo* __fastcall GetChosenItem(void); + void __fastcall MovingToUndoList(Rvundo::TRVUndoInfo* AContainerUndoItem); + void __fastcall MovingFromUndoList(void); + int __fastcall GetCellHeight(bool IgnoreContentHeight); + int __fastcall GetMinWidth(Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas); + bool __fastcall HasData(bool CheckStyles); + virtual Crvdata::TCustomRVData* __fastcall GetRVData(void); + DYNAMIC void __fastcall DoSelect(void); + DYNAMIC void __fastcall ControlAction(Crvdata::TCustomRVData* RVData, Rvstyle::TRVControlAction ControlAction, int ItemNo, Rvitem::TCustomRVItemInfo* Item); + DYNAMIC void __fastcall ControlAction2(Crvdata::TCustomRVData* RVData, Rvstyle::TRVControlAction ControlAction, int ItemNo, Controls::TControl* &Control); + virtual void __fastcall ItemAction(Rvstyle::TRVItemAction ItemAction, Rvitem::TCustomRVItemInfo* Item, AnsiString &Text, Crvdata::TCustomRVData* RVData); + DYNAMIC void __fastcall AdjustFocus(int NewFocusedItemNo, Classes::TPersistent* TopLevelRVData, int TopLevelItemNo); + __fastcall TRVTableCellData(TRVTableRow* ARow); + __fastcall virtual ~TRVTableCellData(void); + DYNAMIC Rvmarker::TRVMarkerList* __fastcall GetMarkers(bool AllowCreate); + DYNAMIC Rvseqitem::TRVSeqList* __fastcall GetSeqList(bool AllowCreate); + DYNAMIC Crvdata::TCustomRVData* __fastcall Edit(void); + __property int Left = {read=FLeft, nodefault}; + __property int Top = {read=FTop, nodefault}; + __property int Height = {read=FHeight, nodefault}; + __property int Width = {read=FWidth, nodefault}; + __property int ColSpan = {read=FColSpan, nodefault}; + __property int RowSpan = {read=FRowSpan, nodefault}; + +__published: + __property Graphics::TColor Color = {read=FColor, write=SetColor, default=536870911}; + __property Graphics::TColor BorderColor = {read=FBorderColor, write=FBorderColor, default=536870911}; + __property Graphics::TColor BorderLightColor = {read=FBorderLightColor, write=FBorderLightColor, default=536870911}; + __property TRVHTMLLength BestWidth = {read=FBestWidth, write=SetBestWidth, default=0}; + __property int BestHeight = {read=FBestHeight, write=SetBestHeight, default=0}; + __property Rvstyle::TRVBooleanRect* VisibleBorders = {read=FVisibleBorders, write=SetVisibleBorders, stored=StoreVisibleBorders}; + __property TRVCellVAlign VAlign = {read=FVAlign, write=FVAlign, default=3}; + __property Graphics::TGraphic* BackgroundImage = {read=GetBackgroundImage, write=SetBackgroundImage, stored=false}; + __property Rvstyle::TRVItemBackgroundStyle BackgroundStyle = {read=GetBackgroundStyle, write=SetBackgroundStyle, default=0}; + __property AnsiString BackgroundImageFileName = {read=FBackgroundImageFileName, write=FBackgroundImageFileName}; + __property AnsiString Hint = {read=FHint, write=FHint}; +}; + + +class DELPHICLASS TRVTableRows; +class PASCALIMPLEMENTATION TRVTableRows : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVTableRow* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVTableRow* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVTableRow* Value); + int __fastcall GetMinColWidth(int Col, Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas); + int __fastcall GetPercentColWidth(int Col, int TableWidth); + bool __fastcall IsPercentWidthColumn(int Col); + int __fastcall GetPixelColWidth(int Col); + bool __fastcall StartMergeCells(int TopRow, int LeftCol, int &ColSpan, int &RowSpan); + +protected: + Crvdata::TCustomRVData* FMainRVData; + TRVTableItemInfo* FTable; + int __fastcall GetColCount(void); + bool __fastcall IsEmptyRows(int TopRow, int LeftCol, int ColSpan, int RowSpan, int TopRow2, int RowSpan2); + bool __fastcall IsEmptyCols(int TopRow, int LeftCol, int ColSpan, int RowSpan, int LeftCol2, int ColSpan2); + int __fastcall GetBestWidth(int TopRow, int LeftCol, int ColSpan, int RowSpan); + void __fastcall UnmergeCell(int Row, int Col, bool UnmergeRows, bool UnmergeCols); + void __fastcall UnmergeCells(int TopRow, int LeftCol, int ColSpan, int RowSpan, bool UnmergeRows, bool UnmergeCols); + void __fastcall InsertRows(int Index, int Count, int CopyIndex, bool DivideHeights); + void __fastcall InsertCols(int Index, int Count, int CopyIndex, bool DivideWidths); + void __fastcall DeleteRows(int Index, int Count, bool DecreaseHeight); + void __fastcall DeleteCols(int Index, int Count, bool DecreaseWidth); + int __fastcall SplitCellVertically(int Row, int Col, int ColCount); + int __fastcall SplitCellsVertically(int TopRow, int LeftCol, int ColSpan, int RowSpan, int ColCount); + int __fastcall SplitCellHorizontally(int Row, int Col, int RowCount); + int __fastcall SplitCellsHorizontally(int TopRow, int LeftCol, int ColSpan, int RowSpan, int RowCount); + void __fastcall MovingToUndoList(int Row, int Col, int ColSpan, int RowSpan, Rvundo::TRVUndoInfo* AContainerUndoItem); + void __fastcall MovingFromUndoList(int Row, int Col, int ColSpan, int RowSpan); + void __fastcall Do_BeforeInsertRows(int ItemNo, int Row, int Count); + void __fastcall Do_InsertRows(int Row, int Count); + void __fastcall Do_UnInsertRows(int Row, int Count); + void __fastcall Do_BeforeInsertCell(int ItemNo, int Row, int Col); + void __fastcall Do_BeforeSpreadOverEmptyCells(int ItemNo, int Row, int Col, int ColSpan); + void __fastcall Do_SpreadOverEmptyCells(int Row, int Col, int ColSpan); + void __fastcall Do_UnSpreadOverEmptyCells(int Row, int Col, int ColSpan); + void __fastcall Do_SetSpan(int ItemNo, int Row, int Col, int Span, bool IsColSpan); + void __fastcall Do_BeforeFreeEmptyCells(int ItemNo, int Row, int Col, int ColSpan, int RowSpan); + void __fastcall Do_FreeEmptyCells(int Row, int Col, int ColSpan, int RowSpan); + void __fastcall Do_UnFreeEmptyCells(int Row, int Col, int ColSpan, int RowSpan); + void __fastcall Do_ChangeEmptyCellStyles(int ItemNo, int Row, int Col, int StyleNo, int ParaNo); + void __fastcall Do_BeforeInsertEmptyCells(int ItemNo, int Row, int Col, int ColCount, int RowCount); + void __fastcall Do_InsertEmptyCells(int Row, int Col, int ColCount, int RowCount); + void __fastcall Do_UnInsertEmptyCells(int Row, int Col, int ColCount, int RowCount); + void __fastcall Do_BeforeSplitCellHorz(int ItemNo, int Row, int Col, int Row2, bool DecreaseHeight); + void __fastcall Do_SplitCellHorz(int Row, int Col, int Row2, bool DecreaseHeight); + void __fastcall Do_UnSplitCellHorz(int Row, int Col, int Row2, int OldBestHeight); + void __fastcall Do_BeforeSplitCellVert(int ItemNo, int Row, int Col, int Col2, bool DecreaseWidth); + void __fastcall Do_SplitCellVert(int Row, int Col, int Col2, bool DecreaseWidth); + void __fastcall Do_UnSplitCellVert(int Row, int Col, int Col2, int OldBestWidth); + Rvundo::TRVUndoInfo* __fastcall Do_BeforeDeleteRows(int ItemNo, int Row, int Count); + void __fastcall Do_DeleteRows(int ItemNo, int Row, int Count, Rvundo::TRVUndoInfo* ui); + void __fastcall Do_UnDeleteRows(int Row, Classes::TList* RowList); + Rvundo::TRVUndoInfo* __fastcall Do_BeforeDeleteCols(int ItemNo, int Col, int Count); + void __fastcall Do_DeleteCols(int ItemNo, int Col, int Count, Rvundo::TRVUndoInfo* ui); + void __fastcall Do_UnDeleteCols(int Col, Classes::TList* CellList); + Rvundo::TRVUndoInfo* __fastcall Do_BeforeMergeCells(int ItemNo, int Row, int Col, int ColSpan, int RowSpan); + void __fastcall Do_MergeCells(int ItemNo, int Row, int Col, int ColSpan, int RowSpan, Rvundo::TRVUndoInfo* ui, bool ChangeBestWidth); + void __fastcall Do_UndoMergeCells(int ItemNo, int Row, int Col, int OldColSpan, int OldRowSpan, Rvclasses::TRVList* MergedItemsList, TRVHTMLLength OldBestWidth); + void __fastcall Do_BeforeUnmergeCell(int ItemNo, int Row, int Col, bool UnmergeRows, bool UnmergeCols); + void __fastcall Do_UnmergeCell(int ItemNo, int Row, int Col, bool UnmergeRows, bool UnmergeCols); + void __fastcall Do_UndoUnmergeCell(int ItemNo, int Row, int Col, int OldColSpan, int OldRowSpan, TRVHTMLLength OldBestWidth, int OldBestHeight); + Rvundo::TRVUndoInfo* __fastcall Do_BeforeClearCells(int ItemNo, Rvclasses::TRVIntegerList* RowList, Rvclasses::TRVIntegerList* ColList, Classes::TList* &CellsList); + void __fastcall Do_AfterFillingCells(Classes::TList* CellsList, Rvclasses::TRVIntegerList* RowList, Rvclasses::TRVIntegerList* ColList, Rvundo::TRVUndoInfo* ui); + void __fastcall Do_ClearCells(Classes::TList* CellsList, Rvclasses::TRVIntegerList* RowList, Rvclasses::TRVIntegerList* ColList, Rvundo::TRVUndoInfo* ui); + void __fastcall Do_UnClearCells(Classes::TList* CellsList, Rvclasses::TRVIntegerList* RowList, Rvclasses::TRVIntegerList* ColList); + void __fastcall InsertPointer(int Index, TRVTableRow* Item); + +public: + __fastcall TRVTableRows(int nRows, int nCols, Crvdata::TCustomRVData* AMainRVData, TRVTableItemInfo* ATable); + __fastcall virtual ~TRVTableRows(void); + void __fastcall MergeCells(int TopRow, int LeftCol, int ColSpan, int RowSpan, bool AllowMergeRC, bool ChangeBestWidth); + bool __fastcall Empty(void); + HIDESBASE TRVTableRow* __fastcall Add(int nCols); + TRVTableCellData* __fastcall GetMainCell(int ARow, int ACol, int &MRow, int &MCol); + HIDESBASE TRVTableRow* __fastcall Insert(int Index, int nCols); + void __fastcall Reset(int nRows, int nCols); + bool __fastcall CanMergeCells(int TopRow, int LeftCol, int ColSpan, int RowSpan, bool AllowMergeRC); + __property TRVTableRow* Items[int Index] = {read=Get, write=Put/*, default*/}; +}; + + +class PASCALIMPLEMENTATION TRVTableRow : public Rvdatalist::TRVDataList +{ + typedef Rvdatalist::TRVDataList inherited; + +public: + TRVTableCellData* operator[](int Index) { return Items[Index]; } + +private: + TRVCellVAlign FVAlign; + bool FPageBreakBefore; + HIDESBASE TRVTableCellData* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVTableCellData* Value); + void __fastcall InsertEmpty(int Index); + void __fastcall InsertPointer(int Index, TRVTableCellData* Item); + +protected: + TRVTableRows* FRows; + virtual Crvdata::TCustomRVData* __fastcall GetParentRVData(void); + bool __fastcall HasCellsInRange(int Index, int RangeStart, int Count); + +public: + __fastcall TRVTableRow(int nCols, TRVTableRows* ARows, Crvdata::TCustomRVData* MainRVData); + HIDESBASE TRVTableCellData* __fastcall Add(void); + HIDESBASE TRVTableCellData* __fastcall Insert(int Index); + int __fastcall GetHeight(bool IgnoreContentHeight); + int __fastcall GetBestHeight(void); + __property TRVCellVAlign VAlign = {read=FVAlign, write=FVAlign, default=0}; + __property bool PageBreakBefore = {read=FPageBreakBefore, write=FPageBreakBefore, default=0}; + __property TRVTableCellData* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVTableRow(void) { } + #pragma option pop + +}; + + +struct TRVTableInplaceParamStorage +{ + +public: + bool Stored; + int StartNo; + int EndNo; + int StartOffs; + int EndOffs; + int Row; + int Col; + Rvitem::TCustomRVItemInfo* PartialSelected; +} ; + +class DELPHICLASS TRVTableItemFormattingInfo; +class PASCALIMPLEMENTATION TRVTableItemFormattingInfo : public System::TObject +{ + typedef System::TObject inherited; + +private: + Rvclasses::TRVIntegerList* ColWidths; + Rvclasses::TRVIntegerList* RowHeights; + Rvclasses::TRVIntegerList* ColStarts; + Rvclasses::TRVIntegerList* RowStarts; + int FWidth; + int FHeight; + +public: + Rvclasses::TRVList* Rows; + __fastcall TRVTableItemFormattingInfo(bool CreateRows); + __fastcall virtual ~TRVTableItemFormattingInfo(void); + void __fastcall Clear(void); + void __fastcall QuickClear(void); +}; + + +#pragma option push -b- +enum TRVCellDirection { rvcdLeft, rvcdUp, rvcdRight, rvcdDown, rvcdDocTop, rvcdDocBottom, rvcdNext, rvcdPrev }; +#pragma option pop + +typedef void __fastcall (__closure *TRVTableDrawBorderEvent)(TRVTableItemInfo* Sender, Graphics::TCanvas* Canvas, int Left, int Top, int Right, int Bottom, int Width, Graphics::TColor LightColor, Graphics::TColor Color, Graphics::TColor BackgroundColor, TRVTableBorderStyle Style, bool Printing, Rvstyle::TRVBooleanRect* VisibleBorders, int Row, int Col, bool &DoDefault); + +#pragma option push -b- +enum TRVTableState { rvtsInserted, rvtsEditMode, rvtsModified, rvtsFormatInplace, rvtsVerticalDraggedRule, rvtsDRChangeTableWidth, rvtsJustCreated, rvtsInplaceIsReformatting, rvtsSelExists }; +#pragma option pop + +typedef Set TRVTableStates; + +class DELPHICLASS TRVTableStreamSaveInfo; +class DELPHICLASS TRVTablePrintPart; +class PASCALIMPLEMENTATION TRVTablePrintPart : public Rvitem::TRVMultiDrawItemPart +{ + typedef Rvitem::TRVMultiDrawItemPart inherited; + +public: + Rvclasses::TRVIntegerList* FTableTopCutLine; + Rvclasses::TRVIntegerList* FTableBottomCutLine; + Rvclasses::TRVIntegerList* FRowStarts; + Rvclasses::TRVIntegerList* FRowIndices; + bool FRowFinished; + int FHeadingHeight; + TRVTableItemFormattingInfo* FFmtRef; + DYNAMIC int __fastcall GetSoftPageBreakInfo(void); + DYNAMIC bool __fastcall IsComplexSoftPageBreak(Dlines::TRVDrawLineInfo* DrawItem); + DYNAMIC void __fastcall AssignSoftPageBreaksToItem(Dlines::TRVDrawLineInfo* DrawItem, Rvitem::TCustomRVItemInfo* Item); + __fastcall TRVTablePrintPart(TRVTableItemInfo* ATable); + __fastcall virtual ~TRVTablePrintPart(void); + void __fastcall UpdateRowStarts(int Index, int RowSpan, int Height); +}; + + +class DELPHICLASS TCellPtblRVData; +struct TRVPageFormatSaveRec +{ + +public: + int DrawItemNo; + int StartAt; + int StartY; + int Y; + int EndAt; + int PagesCount; + bool Splitting; +} ; + +class PASCALIMPLEMENTATION TCellPtblRVData : public Ptrvdata::TRectPtblRVData +{ + typedef Ptrvdata::TRectPtblRVData inherited; + +private: + int DrawItemNo; + int StartAt; + int StartY; + int Y; + int CurPageNo; + int EndAt; + bool Splitting; + TRVPageFormatSaveRec PrevPageInfo; + void __fastcall ResetDrawItems(int StartDItemNo, Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, bool ResetAll, bool InHeader, int &ReleasedHeightAfterFootnotes, bool FootnotesChangeHeight); + +protected: + DYNAMIC void __fastcall SetEndAt(int Value); + +public: + virtual Rvstyle::TRVStyle* __fastcall GetRVStyle(void); + HIDESBASE bool __fastcall FormatNextPage(int &AMaxHeight, Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, bool FootnotesChangeHeight); + void __fastcall UnformatLastPage(Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, int &ReleasedHeightAfterFootnotes, bool FootnotesChangeHeight); + void __fastcall ResetPages(Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, int &ReleasedHeightAfterFootnotes, bool FootnotesChangeHeight, bool InHeader); + bool __fastcall Finished(void); +public: + #pragma option push -w-inl + /* TRectPtblRVData.Create */ inline __fastcall TCellPtblRVData(Rvscroll::TRVScroller* RichView, Crvdata::TCustomRVData* SourceDataForPrinting, Ptrvdata::TCustomPrintableRVData* ParentPrintData) : Ptrvdata::TRectPtblRVData(RichView, SourceDataForPrinting, ParentPrintData) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TCustomMultiPagePtblRVData.Destroy */ inline __fastcall virtual ~TCellPtblRVData(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVTableStreamSaveInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + TRVTablePrintPart* Part; + int CellPage; + TCellPtblRVData* CellPtblRVData; + int TopRow; + int LeftCol; + int RowCount; + int ColCount; + bool SaveHeadingRows; + bool SelectionOnly; + __fastcall TRVTableStreamSaveInfo(TRVTableItemInfo* table); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVTableStreamSaveInfo(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVTableItemInfo : public Rvitem::TRVFullLineItemInfo +{ + typedef Rvitem::TRVFullLineItemInfo inherited; + +private: + TRVTableCellData* FPrintCell; + #pragma pack(push,1) + Types::TRect FPrintCellRect; + #pragma pack(pop) + TRVCellEditingEvent FOnCellEditing; + TRVCellEndEditEvent FOnCellEndEdit; + TRVTableStates FState; + int CachedItemNo; + int MyTop; + int MyLeft; + int MyClientTop; + int MyClientLeft; + int MouseRow; + int MouseCol; + int DRMin; + int DRMax; + int DRNo; + int DRCoord; + int DRDelta; + TRVTableRows* FRows; + int FCellVSpacing; + int FCellHSpacing; + int FCellHPadding; + int FCellVPadding; + TRVHTMLLength FBestWidth; + int FBorderWidth; + Graphics::TColor FBorderColor; + Graphics::TColor FColor; + int FCellBorderWidth; + int FHRuleWidth; + int FVRuleWidth; + Graphics::TColor FHRuleColor; + Graphics::TColor FCellBorderColor; + Graphics::TColor FVRuleColor; + TRVTableBorderStyle FBorderStyle; + TRVTableBorderStyle FCellBorderStyle; + int FBorderHSpacing; + int FBorderVSpacing; + bool FHOutermostRule; + bool FVOutermostRule; + Graphics::TColor FCellBorderLightColor; + Graphics::TColor FBorderLightColor; + int FSelStartCol; + int FSelStartRow; + int FSelColOffs; + int FSelRowOffs; + int BusyCount; + TRVTableOptions FOptions; + TRVTablePrintOptions FPrintOptions; + TRVTableInplaceParamStorage FStoredInplace; + int FMinWidthPlus; + int FInplaceMinWidthPlus; + AnsiString FTextRowSeparator; + AnsiString FTextColSeparator; + int FocusedCellRow; + int FocusedCellCol; + int ChosenCellRow; + int ChosenCellCol; + TRVTableDrawBorderEvent FOnDrawBorder; + int FHeadingRowCount; + Rvback::TRVBackground* FBackground; + AnsiString FBackgroundImageFileName; + Rvstyle::TRVBooleanRect* FVisibleBorders; + TRVTableStreamSaveInfo* FStreamSaveInfo; + bool __fastcall StoreCellPadding(void); + bool __fastcall StoreCellHPadding(void); + bool __fastcall StoreCellVPadding(void); + int __fastcall GetItemNoInRootDocument(void); + TRVTableCellData* __fastcall GetCells(int Row, int Col); + void __fastcall SetCells(int Row, int Col, const TRVTableCellData* Value); + void __fastcall SetBestWidth(const TRVHTMLLength Value); + int __fastcall GetVerticalRuleNo(int X, int &MinX, int &ZeroChangeX); + int __fastcall GetHorizontalRuleNo(int Y, int &MinY, int &ZeroChangeY); + int __fastcall GetColNo(int X); + int __fastcall GetRowNo(int Y); + int __fastcall GetCrossed(int Coord, Rvclasses::TRVIntegerList* List); + void __fastcall UpdateCellXCoords(TRVTableItemFormattingInfo* Fmt, bool NoCaching, bool Reformatting); + void __fastcall UpdateCellYCoords(TRVTableItemFormattingInfo* Fmt); + int __fastcall GetHorzExtra(void); + void __fastcall InplaceEditorChange(Rvedit::TCustomRichViewEdit* Sender, bool ClearRedo); + void __fastcall InplaceEditorCaretGetout(Rvedit::TCustomRichViewEdit* Sender, Rvedit::TRVGetOutDirection Direction); + void __fastcall InplaceEditorMouseDown(Richview::TCustomRichView* Sender, Controls::TMouseButton Button, Classes::TShiftState Shift, int ItemNo, int X, int Y); + void __fastcall InplaceEditorMouseUp(Richview::TCustomRichView* Sender, Controls::TMouseButton Button, Classes::TShiftState Shift, int ItemNo, int X, int Y); + void __fastcall InplaceEditorMouseMove(System::TObject* Sender, Classes::TShiftState Shift, int X, int Y); + void __fastcall InplaceEditorDragOver(System::TObject* Sender, System::TObject* Source, int X, int Y, Controls::TDragState State, bool &Accept); + void __fastcall InplaceEditorDragDrop(System::TObject* Sender, System::TObject* Source, int X, int Y); + void __fastcall DestroyInplace(bool ReformatCell); + void __fastcall StoreRVSelection(Crvfdata::TCustomRVFormattedData* RVData, TRVTableInplaceParamStorage &storage); + void __fastcall RestoreRVSelection(Crvfdata::TCustomRVFormattedData* RVData, const TRVTableInplaceParamStorage &storage); + void __fastcall Init(int nRows, int nCols, Crvdata::TCustomRVData* AMainRVData); + void __fastcall CellsWriter(Classes::TWriter* Writer); + void __fastcall CellsReader(Classes::TReader* Reader); + void __fastcall ClearTemporal(void); + void __fastcall SetBorderColor(const Graphics::TColor Value); + void __fastcall SetBorderHSpacing(const int Value); + void __fastcall SetBorderLightColor(const Graphics::TColor Value); + void __fastcall SetBorderStyle(const TRVTableBorderStyle Value); + void __fastcall SetBorderVSpacing(const int Value); + void __fastcall SetBorderWidth(const int Value); + void __fastcall SetCellBorderColorProp(const Graphics::TColor Value); + void __fastcall SetCellBorderLightColorProp(const Graphics::TColor Value); + void __fastcall SetCellBorderWidth(const int Value); + void __fastcall SetCellHSpacing(const int Value); + void __fastcall SetCellHPadding(const int Value); + void __fastcall SetCellVPadding(const int Value); + void __fastcall SetCellPadding(const int Value); + void __fastcall SetCellVSpacing(const int Value); + void __fastcall SetColor(const Graphics::TColor Value); + void __fastcall SetHOutermostRule(const bool Value); + void __fastcall SetHRuleColor(const Graphics::TColor Value); + void __fastcall SetHRuleWidth(const int Value); + void __fastcall SetVOutermostRule(const bool Value); + void __fastcall SetVRuleColor(const Graphics::TColor Value); + void __fastcall SetVRuleWidth(const int Value); + void __fastcall SetCellBorderStyle(const TRVTableBorderStyle Value); + void __fastcall SetIntProperty(const AnsiString PropertyName, int Value, bool AffectSize, bool AffectWidth); + void __fastcall SetCellIntProperty(int ItemNo, const AnsiString PropertyName, int Value, int Row, int Col, bool AffectSize, bool AffectWidth); + void __fastcall SetCellStrProperty(int ItemNo, const AnsiString PropertyName, const AnsiString Value, int Row, int Col); + bool __fastcall IsFixedWidthTable(void); + bool __fastcall CompletelySelected(void); + void __fastcall UnAssignActiveCell(void); + bool __fastcall DoOnCellEditing(int Row, int Col, bool Automatic); + bool __fastcall IsInEditor(void); + void __fastcall SetHeadingRowCount(const int Value); + Graphics::TGraphic* __fastcall GetBackgroundImage(void); + void __fastcall SetBackgroundImage_(const Graphics::TGraphic* Value, bool Copy); + void __fastcall SetBackgroundImage(const Graphics::TGraphic* Value); + Rvstyle::TRVItemBackgroundStyle __fastcall GetBackgroundStyle(void); + void __fastcall SetBackgroundStyle(const Rvstyle::TRVItemBackgroundStyle Value); + void __fastcall BackgroundImageWriter(Classes::TStream* Stream); + void __fastcall BackgroundImageReader(Classes::TStream* Stream); + void __fastcall ResetLiveSpell(void); + void __fastcall SetVisibleBorders(const Rvstyle::TRVBooleanRect* Value); + bool __fastcall StoreVisibleBorders(void); + void __fastcall DoSaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, Rvitem::TRVMultiDrawItemPart* Part, bool ForceSameAsPrev, bool SelectionOnly); + int __fastcall GetColCount(void); + int __fastcall GetRowCount(void); + int __fastcall GetCellPadding(void); + +protected: + TRVTableItemFormattingInfo* Fmt; + Rvstyle::TRVScreenAndDevice *cursad; + void __fastcall XorDrawing(System::TObject* Sender, Classes::TShiftState Shift, int X, int Y); + virtual void __fastcall DefineProperties(Classes::TFiler* Filer); + virtual int __fastcall GetHeight(void); + virtual int __fastcall GetWidth(void); + void __fastcall DrawBorder(Graphics::TCanvas* Canvas, int Left, int Top, int Right, int Bottom, int Width, Graphics::TColor LightColor, Graphics::TColor Color, Graphics::TColor BackgroundColor, TRVTableBorderStyle Style, bool DrawEvenEmptyBorder, bool Editing, bool Printing, const Types::TRect &ClipRect, Rvstyle::TRVBooleanRect* VisibleBorders, int r, int c, Rvstyle::TRVColorMode ColorMode); + bool __fastcall GetCellAt_(int X, int Y, int &Row, int &Col); + void __fastcall UpdateCellSel(void); + void __fastcall PaintTo(int Left, int Right, int Top, Graphics::TCanvas* Canvas, Rvitem::TRVItemDrawStates State, Rvstyle::TRVStyle* Style, TRVTableItemFormattingInfo* Fmt, bool UseHeadingRowCount, const Types::TRect &ClipRect, Rvstyle::TRVColorMode ColorMode, Ptrvdata::TCustomPrintableRVData* RVData, TRVTablePrintPart* Part, int ExtraX, int ExtraY); + int __fastcall GetDevX(int x); + int __fastcall GetDevY(int y); + void __fastcall InternalOnDocWidthChange(int DocWidth, TRVTableItemFormattingInfo* Fmt, Graphics::TCanvas* Canvas, bool NoCaching, bool Reformatting, bool UseFormatCanvas); + void __fastcall Change(void); + void __fastcall ChangeEx(bool ClearRedo); + int __fastcall BeginModify(int ItemNo); + void __fastcall EndModify(int ItemNo, int Data); + Graphics::TColor __fastcall GetTableColor(bool UseParentBackground); + Graphics::TColor __fastcall GetCellColor(TRVTableCellData* Cell); + Graphics::TColor __fastcall GetCellColor2(TRVTableCellData* Cell); + bool __fastcall CanSeeBackgroundThroughCell(TRVTableCellData* Cell); + bool __fastcall CanSplitAtRow(int Row); + int __fastcall GetSplitRowBelow(int Row); + int __fastcall GetSplitRowAbove(int Row); + bool __fastcall BeforeChange(void); + bool __fastcall CanChange(void); + bool __fastcall CanChangeEx(void); + void __fastcall InitUndo(void); + void __fastcall DoneUndo(void); + void __fastcall AssignCellAttributes(int ItemNo, int Row, int Col, TRVTableCellData* SourceCell, bool IncludeSize, int DivColSpan, int DivRowSpan); + void __fastcall SetCellBestWidth_(int ItemNo, TRVHTMLLength Value, int Row, int Col); + void __fastcall SetCellBestHeight_(int ItemNo, int Value, int Row, int Col); + void __fastcall SetCellColor_(int ItemNo, Graphics::TColor Value, int Row, int Col); + void __fastcall SetCellBackgroundStyle_(int ItemNo, Rvstyle::TRVItemBackgroundStyle Value, int Row, int Col); + void __fastcall SetCellBackgroundImageFileName_(int ItemNo, const AnsiString Value, int Row, int Col); + void __fastcall SetCellHint_(int ItemNo, const AnsiString Value, int Row, int Col); + void __fastcall SetCellVisibleBorders_(int ItemNo, bool Left, bool Top, bool Right, bool Bottom, int Row, int Col); + void __fastcall SetCellBorderColor_(int ItemNo, Graphics::TColor Value, int Row, int Col); + void __fastcall SetCellBorderLightColor_(int ItemNo, Graphics::TColor Value, int Row, int Col); + void __fastcall SetCellVAlign_(int ItemNo, TRVCellVAlign Value, int Row, int Col); + void __fastcall SetRowVAlign_(int ItemNo, TRVCellVAlign Value, int Row); + int __fastcall GetEditorItemNoForUndo(void); + Rvedit::TCustomRichViewEdit* __fastcall CreateTemporalEditor(void); + void __fastcall ApplyToCells(Rvitem::TRVEStyleConversionType ConvType, int UserData, bool SelectedOnly); + void __fastcall ValidateFocused(void); + void __fastcall ValidateChosen(void); + bool __fastcall CellIsChosen(void); + void __fastcall AdjustFocus(int Row, int Col, Classes::TPersistent* TopLevelRVData, int TopLevelItemNo); + bool __fastcall UndoEnabled(void); + void __fastcall ChooseSubRVData_(int r, int c); + void __fastcall EditCell_(int Row, int Col, bool Unquestioning); + DYNAMIC int __fastcall GetRVFExtraPropertyCount(void); + DYNAMIC void __fastcall SaveRVFExtraProperties(Classes::TStream* Stream); + bool __fastcall RowsHavePageBreaksBefore(int StartRow, int EndRow); + bool __fastcall GetNormalizedSelectionBoundsEx(bool IncludeEditedCell, int &TopRow, int &LeftCol, int &ColSpan, int &RowSpan); + int __fastcall DoGetMinWidth(Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, bool UseTableWidth); + +public: + bool FMakingSelection; + Rvedit::TCustomRichViewEdit* FInplaceEditor; + bool __fastcall CanUseHeadingRowCount(void); + void __fastcall DrawBackgroundUnderCell(Graphics::TCanvas* Canvas, TRVTableCellData* Cell, const Types::TRect &Rect); + bool __fastcall IsSemiTransparentBackground(void); + DYNAMIC void __fastcall ClearSoftPageBreaks(void); + DYNAMIC int __fastcall GetSoftPageBreakDY(int Data); + int __fastcall GetMyItemNo(void); + void __fastcall SaveRowsToStream(Classes::TStream* Stream, int Index, int Count); + void __fastcall SaveRectangleToStream(Classes::TStream* Stream, int TopRow, int LeftCol, int RowCount, int ColCount, bool SelectionOnly); + DYNAMIC void __fastcall ResetSubCoords(void); + DYNAMIC Classes::TPersistent* __fastcall GetSubRVDataAt(int X, int Y); + bool __fastcall GetCellWhichOwnsControl(Controls::TControl* AControl, int &ARow, int &ACol, int &AItemNo); + DYNAMIC bool __fastcall AdjustFocusToControl(Controls::TControl* Control, Classes::TPersistent* &TopLevelRVData, int &TopLevelItemNo); + virtual void __fastcall Print(Graphics::TCanvas* Canvas, int x, int y, int x2, bool Preview, bool Correction, const Rvstyle::TRVScreenAndDevice &sad, Rvscroll::TRVScroller* RichView, Dlines::TRVDrawLineInfo* dli, int Part, Rvstyle::TRVColorMode ColorMode, Classes::TPersistent* RVData); + void __fastcall CreateInplace(int ItemNo, int Row, int Col, bool BuildJumps, bool CaretAtStart, bool CaretAtEnd, bool SetTime, bool Unquestioning); + void __fastcall SetInplaceBounds(int Left, int Top, int Width, int Height); + bool __fastcall StartSelecting(int Row, int Col, bool FromKeyboard); + DYNAMIC void __fastcall MovingToUndoList(int ItemNo, System::TObject* RVData, System::TObject* AContainerUndoItem); + DYNAMIC void __fastcall MovingFromUndoList(int ItemNo, System::TObject* RVData); + DYNAMIC void __fastcall FinalizeUndoGroup(void); + virtual void __fastcall AdjustInserted(int x, int y, bool adjusty); + DYNAMIC bool __fastcall OwnsControl(Controls::TControl* AControl); + DYNAMIC bool __fastcall OwnsInplaceEditor(Controls::TControl* AEditor); + virtual int __fastcall GetMinWidth(Rvstyle::PRVScreenAndDevice sad, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData); + virtual void __fastcall PaintFullWidth(int Left, int Right, int Top, Graphics::TCanvas* Canvas, Rvitem::TRVItemDrawStates State, Rvstyle::TRVStyle* Style, const Types::TRect &ClipRect, Dlines::TRVDrawLineInfo* dli, int ExtraX, int ExtraY); + virtual void __fastcall OnDocWidthChange(int DocWidth, Dlines::TRVDrawLineInfo* dli, bool Printing, Graphics::TCanvas* Canvas, Classes::TPersistent* RVData, Rvstyle::PRVScreenAndDevice sad, int &HShift, int &Desc, bool NoCaching, bool Reformatting, bool UseFormatCanvas); + void __fastcall ResizeRow(int Index, int Height); + void __fastcall ResizeCol(int Index, int Width, bool Shift); + DYNAMIC bool __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y, int ItemNo, System::TObject* RVData); + DYNAMIC bool __fastcall MouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y, int ItemNo, System::TObject* RVData); + DYNAMIC bool __fastcall MouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y, int ItemNo, System::TObject* RVData); + DYNAMIC void __fastcall DeselectPartial(void); + void __fastcall MergeInplaceUndo(bool DestroyLists); + void __fastcall InplaceDeleted(bool Clearing); + DYNAMIC bool __fastcall PartiallySelected(void); + DYNAMIC bool __fastcall CanDeletePartiallySelected(void); + void __fastcall DoAfterFillingRows(int Row, int Count); + DYNAMIC void __fastcall DeletePartiallySelected(void); + virtual bool __fastcall GetBoolValue(Rvitem::TRVItemBoolProperty Prop); + virtual bool __fastcall GetBoolValueEx(Rvitem::TRVItemBoolPropertyEx Prop, Rvstyle::TRVStyle* RVStyle); + DYNAMIC void __fastcall SaveRVF(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo, const AnsiString Name, Rvitem::TRVMultiDrawItemPart* Part, bool ForceSameAsPrev); + DYNAMIC void __fastcall SaveRVFSelection(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, int ParaNo); + DYNAMIC void __fastcall SaveTextSelection(Classes::TStream* Stream, Classes::TPersistent* RVData, int LineWidth, const AnsiString Path, bool TextOnly, bool Unicode); + DYNAMIC bool __fastcall ReadRVFLine(const AnsiString s, Classes::TPersistent* RVData, int ReadType, int LineNo, int LineCount, AnsiString &Name, Rvitem::TRVFReadMode &ReadMode, Rvitem::TRVFReadState &ReadState, bool UTF8Strings, bool &AssStyleNameUsed); + DYNAMIC void __fastcall BeforeLoading(Rvstyle::TRVLoadFormat FileFormat); + DYNAMIC void __fastcall AfterLoading(Rvstyle::TRVLoadFormat FileFormat); + virtual Dlines::TRVDrawLineInfo* __fastcall CreatePrintingDrawItem(System::TObject* RVData, const Rvstyle::TRVScreenAndDevice &sad); + virtual void __fastcall DrawBackgroundForPrinting(Graphics::TCanvas* Canvas, const Types::TRect &Rect, const Types::TRect &FullRect, Rvstyle::TRVColorMode ColorMode, int ItemBackgroundLayer); + void __fastcall SaveInplace(void); + void __fastcall RestoreInplace(void); + void __fastcall UpdateStoredInplaceSelection(void); + DYNAMIC void __fastcall StartExport(void); + DYNAMIC void __fastcall EndExport(void); + DYNAMIC void __fastcall MarkStylesInUse(Rvitem::TRVDeleteUnusedStylesData* Data); + DYNAMIC void __fastcall UpdateStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + virtual void __fastcall Inserting(System::TObject* RVData, AnsiString &Text, bool Safe); + virtual void __fastcall Inserted(System::TObject* RVData, int ItemNo); + DYNAMIC void __fastcall BeforeUndoChangeProperty(void); + DYNAMIC void __fastcall AfterUndoChangeProperty(void); + DYNAMIC void __fastcall ApplyStyleConversionToSubRVDatas(int UserData, bool SelectedOnly, Rvitem::TRVEStyleConversionType ConvType); + bool __fastcall GetCellTo(int Row, int Col, TRVCellDirection Dir, int &NewRow, int &NewCol, bool Quiet, bool CanAddRow); + DYNAMIC void __fastcall SaveRTF(Classes::TStream* Stream, const AnsiString Path, Classes::TPersistent* RVData, int ItemNo, double TwipsPerPixel, int Level, Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* StyleToFont, Rvclasses::TRVIntegerList* ListOverrideOffsetsList1, Rvclasses::TRVIntegerList* ListOverrideOffsetsList2, Rvclasses::TRVList* FontTable); + DYNAMIC void __fastcall FillRTFTables(Rvclasses::TRVColorList* ColorList, Rvclasses::TRVIntegerList* ListOverrideCountList, Classes::TPersistent* RVData); + DYNAMIC AnsiString __fastcall AsText(int LineWidth, Classes::TPersistent* RVData, const AnsiString Text, const AnsiString Path, bool TextOnly, bool Unicode); + DYNAMIC void __fastcall SaveToHTML(Classes::TStream* Stream, Classes::TPersistent* RVData, int ItemNo, const AnsiString Text, const AnsiString Path, const AnsiString imgSavePrefix, int &imgSaveNo, Graphics::TColor CurrentFileColor, Rvstyle::TRVSaveOptions SaveOptions, bool UseCSS, Rvclasses::TRVList* Bullets); + DYNAMIC bool __fastcall EnterItem(Rvitem::TRVEnterDirection From, int Coord); + DYNAMIC void __fastcall BuildJumps(int Left, int Top, int &StartJumpNo, Classes::TList* jumps); + DYNAMIC Classes::TPersistent* __fastcall GetSubRVData(Rvitem::TRVStoreSubRVData* &StoreState, Rvitem::TRVSubRVDataPos Position); + DYNAMIC void __fastcall ChooseSubRVData(Rvitem::TRVStoreSubRVData* StoreState); + DYNAMIC void __fastcall CleanUpChosen(void); + __fastcall virtual TRVTableItemInfo(Classes::TPersistent* RVData); + __fastcall TRVTableItemInfo(int nRows, int nCols, Crvdata::TCustomRVData* AMainRVData); + __fastcall virtual ~TRVTableItemInfo(void); + void __fastcall UnmergeCells(int TopRow, int LeftCol, int ColSpan, int RowSpan, bool UnmergeRows, bool UnmergeCols); + bool __fastcall CanMergeCells(int TopRow, int LeftCol, int ColSpan, int RowSpan, bool AllowMergeRC); + void __fastcall MergeCells(int TopRow, int LeftCol, int ColSpan, int RowSpan, bool AllowMergeRC); + void __fastcall MergeSelectedCells(bool AllowMergeRC); + bool __fastcall CanMergeSelectedCells(bool AllowMergeRC); + void __fastcall UnmergeSelectedCells(bool UnmergeRows, bool UnmergeCols); + void __fastcall SplitSelectedCellsVertically(int ColCount); + void __fastcall SplitSelectedCellsHorizontally(int RowCount); + bool __fastcall IsCellSelected(int Row, int Col); + void __fastcall InsertRows(int Index, int Count, int CopyIndex, bool Select = true); + void __fastcall InsertCols(int Index, int Count, int CopyIndex, bool Select = true); + void __fastcall InsertColsLeft(int Count); + void __fastcall InsertColsRight(int Count); + void __fastcall InsertRowsAbove(int Count); + void __fastcall InsertRowsBelow(int Count); + void __fastcall DeleteRows(int Index, int Count, bool DecreaseHeight); + void __fastcall DeleteCols(int Index, int Count, bool DecreaseWidth); + void __fastcall DeleteSelectedRows(void); + void __fastcall DeleteSelectedCols(void); + void __fastcall DeleteEmptyRows(void); + void __fastcall DeleteEmptyCols(void); + bool __fastcall GetCellAt(int X, int Y, int &Row, int &Col); + void __fastcall Select(int StartRow, int StartCol, int RowOffs, int ColOffs); + void __fastcall Deselect(void); + void __fastcall SelectRows(int StartRow, int Count); + void __fastcall SelectCols(int StartCol, int Count); + bool __fastcall GetSelectionBounds(int &StartRow, int &StartCol, int &RowOffs, int &ColOffs); + bool __fastcall GetNormalizedSelectionBounds(bool IncludeEditedCell, int &TopRow, int &LeftCol, int &ColSpan, int &RowSpan); + Rvedit::TCustomRichViewEdit* __fastcall GetEditedCell(int &Row, int &Col); + void __fastcall SaveToStream(Classes::TStream* Stream); + void __fastcall LoadFromStream(Classes::TStream* Stream); + void __fastcall LoadFromStreamEx(Classes::TStream* Stream, int StartRow); + void __fastcall EditCell(int Row, int Col); + void __fastcall Changed(void); + __property TRVTableRows* Rows = {read=FRows}; + __property TRVTableCellData* Cells[int Row][int Col] = {read=GetCells, write=SetCells}; + void __fastcall SetCellBestWidth(TRVHTMLLength Value, int Row, int Col); + void __fastcall SetCellBestHeight(int Value, int Row, int Col); + void __fastcall SetCellColor(Graphics::TColor Value, int Row, int Col); + void __fastcall SetCellBackgroundStyle(Rvstyle::TRVItemBackgroundStyle Value, int Row, int Col); + void __fastcall SetCellBackgroundImage(Graphics::TGraphic* Value, int Row, int Col); + void __fastcall SetCellBackgroundImageFileName(const AnsiString Value, int Row, int Col); + void __fastcall SetCellHint(const AnsiString Value, int Row, int Col); + void __fastcall SetCellVisibleBorders(bool Left, bool Top, bool Right, bool Bottom, int Row, int Col); + void __fastcall SetTableVisibleBorders(bool Left, bool Top, bool Right, bool Bottom); + void __fastcall SetCellBorderColor(Graphics::TColor Value, int Row, int Col); + void __fastcall SetCellBorderLightColor(Graphics::TColor Value, int Row, int Col); + void __fastcall SetCellVAlign(TRVCellVAlign Value, int Row, int Col); + void __fastcall SetRowVAlign(TRVCellVAlign Value, int Row); + DYNAMIC bool __fastcall MoveFocus(bool GoForward, Classes::TPersistent* &TopLevelRVData, int &TopLevelItemNo); + DYNAMIC void __fastcall ClearFocus(void); + void __fastcall GetCellPosition(TRVTableCellData* Cell, int &Row, int &Col); + void __fastcall AssignProperties(TRVTableItemInfo* Source); + DYNAMIC bool __fastcall SetExtraStrProperty(Rvitem::TRVExtraItemStrProperty Prop, const AnsiString Value); + DYNAMIC bool __fastcall GetExtraStrProperty(Rvitem::TRVExtraItemStrProperty Prop, AnsiString &Value); + DYNAMIC void __fastcall KeyDown(Word Key, bool Shift); + __property AnsiString BackgroundImageFileName = {read=FBackgroundImageFileName, write=FBackgroundImageFileName}; + __property int RowCount = {read=GetRowCount, nodefault}; + __property int ColCount = {read=GetColCount, nodefault}; + __property TRVTableStates State = {read=FState, nodefault}; + +__published: + __property TRVTableOptions Options = {read=FOptions, write=FOptions, default=31}; + __property TRVTablePrintOptions PrintOptions = {read=FPrintOptions, write=FPrintOptions, default=3}; + __property TRVHTMLLength BestWidth = {read=FBestWidth, write=SetBestWidth, default=0}; + __property Graphics::TColor Color = {read=FColor, write=SetColor, default=-16777211}; + __property Graphics::TGraphic* BackgroundImage = {read=GetBackgroundImage, write=SetBackgroundImage, stored=false}; + __property Rvstyle::TRVItemBackgroundStyle BackgroundStyle = {read=GetBackgroundStyle, write=SetBackgroundStyle, default=0}; + __property int HeadingRowCount = {read=FHeadingRowCount, write=SetHeadingRowCount, default=0}; + __property AnsiString TextRowSeparator = {read=FTextRowSeparator, write=FTextRowSeparator}; + __property AnsiString TextColSeparator = {read=FTextColSeparator, write=FTextColSeparator}; + __property int BorderWidth = {read=FBorderWidth, write=SetBorderWidth, default=0}; + __property Graphics::TColor BorderColor = {read=FBorderColor, write=SetBorderColor, default=-16777208}; + __property Graphics::TColor BorderLightColor = {read=FBorderLightColor, write=SetBorderLightColor, default=-16777196}; + __property TRVTableBorderStyle BorderStyle = {read=FBorderStyle, write=SetBorderStyle, default=0}; + __property int BorderVSpacing = {read=FBorderVSpacing, write=SetBorderVSpacing, default=2}; + __property int BorderHSpacing = {read=FBorderHSpacing, write=SetBorderHSpacing, default=2}; + __property Rvstyle::TRVBooleanRect* VisibleBorders = {read=FVisibleBorders, write=SetVisibleBorders, stored=StoreVisibleBorders}; + __property int CellBorderWidth = {read=FCellBorderWidth, write=SetCellBorderWidth, default=0}; + __property Graphics::TColor CellBorderColor = {read=FCellBorderColor, write=SetCellBorderColorProp, default=-16777208}; + __property Graphics::TColor CellBorderLightColor = {read=FCellBorderLightColor, write=SetCellBorderLightColorProp, default=-16777196}; + __property int CellHPadding = {read=FCellHPadding, write=SetCellHPadding, stored=StoreCellHPadding, nodefault}; + __property int CellVPadding = {read=FCellVPadding, write=SetCellVPadding, stored=StoreCellVPadding, nodefault}; + __property int CellPadding = {read=GetCellPadding, write=SetCellPadding, stored=StoreCellPadding, default=1}; + __property TRVTableBorderStyle CellBorderStyle = {read=FCellBorderStyle, write=SetCellBorderStyle, default=1}; + __property int VRuleWidth = {read=FVRuleWidth, write=SetVRuleWidth, default=0}; + __property Graphics::TColor VRuleColor = {read=FVRuleColor, write=SetVRuleColor, default=-16777208}; + __property int HRuleWidth = {read=FHRuleWidth, write=SetHRuleWidth, default=0}; + __property Graphics::TColor HRuleColor = {read=FHRuleColor, write=SetHRuleColor, default=-16777208}; + __property int CellVSpacing = {read=FCellVSpacing, write=SetCellVSpacing, default=2}; + __property int CellHSpacing = {read=FCellHSpacing, write=SetCellHSpacing, default=2}; + __property bool VOutermostRule = {read=FVOutermostRule, write=SetVOutermostRule, default=0}; + __property bool HOutermostRule = {read=FHOutermostRule, write=SetHOutermostRule, default=0}; + __property TRVCellEditingEvent OnCellEditing = {read=FOnCellEditing, write=FOnCellEditing}; + __property TRVCellEndEditEvent OnCellEndEdit = {read=FOnCellEndEdit, write=FOnCellEndEdit}; + __property TRVTableDrawBorderEvent OnDrawBorder = {read=FOnDrawBorder, write=FOnDrawBorder}; +}; + + +class DELPHICLASS TRVTableStoreSubRVData; +class PASCALIMPLEMENTATION TRVTableStoreSubRVData : public Rvitem::TRVStoreSubRVData +{ + typedef Rvitem::TRVStoreSubRVData inherited; + +public: + int Row; + int Col; + __fastcall TRVTableStoreSubRVData(int ARow, int ACol); + DYNAMIC Rvitem::TRVStoreSubRVData* __fastcall Duplicate(void); + DYNAMIC int __fastcall Compare(Rvitem::TRVStoreSubRVData* StoreSub); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVTableStoreSubRVData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVTablePrintInfo; +class PASCALIMPLEMENTATION TRVTablePrintInfo : public Ptrvdata::TRVMultiDrawItemInfo +{ + typedef Ptrvdata::TRVMultiDrawItemInfo inherited; + +private: + Rvstyle::TRVScreenAndDevice sad; + TRVTableItemInfo* FTable; + int FHeadingRowCount; + void __fastcall AddFootnotes(Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, int &Height, bool FootnotesChangeHeight, int RowCount); + void __fastcall RemoveFootnotes(Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, int &Height, bool FootnotesChangeHeight, int RowCount); + void __fastcall DecHeightByFootnotes_(int &Height, bool &ThisPageHasFootnotes, int RowCount); + +public: + TRVTableItemFormattingInfo* Fmt; + __fastcall TRVTablePrintInfo(TRVTableItemInfo* ATable); + virtual void __fastcall SetSize(int AWidth, int AHeight); + __fastcall virtual ~TRVTablePrintInfo(void); + DYNAMIC bool __fastcall InitSplit(const Rvstyle::TRVScreenAndDevice &Sad); + DYNAMIC bool __fastcall CanSplitFirst(int Y, const Rvstyle::TRVScreenAndDevice &Sad, bool FirstOnPage, bool PageHasFootnotes, bool FootnotesChangeHeight); + DYNAMIC bool __fastcall SplitAt(int Y, const Rvstyle::TRVScreenAndDevice &Sad, bool FirstOnPage, Classes::TList* &FootnoteRVDataList, int &MaxHeight, bool FootnotesChangeHeight); + DYNAMIC void __fastcall ResetPages(Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, int &ReleasedHeightAfterFootnotes, bool FootnotesChangeHeight); + DYNAMIC void __fastcall UnformatLastPage(Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, int &ReleasedHeightAfterFootnotes, bool FootnotesChangeHeight); + DYNAMIC void __fastcall AddAllFootnotes(Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, int &Height, bool FootnotesChangeHeight); + DYNAMIC void __fastcall RemoveAllFootnotes(Ptrvdata::TRVFootnoteRefList* &FootnoteRVDataList, int &Height, bool FootnotesChangeHeight); + DYNAMIC void __fastcall DecHeightByFootnotes(int &Height, bool &ThisPageHasFootnotes); +public: + #pragma option push -w-inl + /* TRVDrawLineInfo.CreateEx */ inline __fastcall TRVTablePrintInfo(int ALeft, int ATop, int AWidth, int AHeight, int AItemNo, Byte AFromNewLine) : Ptrvdata::TRVMultiDrawItemInfo(ALeft, ATop, AWidth, AHeight, AItemNo, AFromNewLine) { } + #pragma option pop + +}; + + +class DELPHICLASS ERVTableInplaceError; +class PASCALIMPLEMENTATION ERVTableInplaceError : public Sysutils::Exception +{ + typedef Sysutils::Exception inherited; + +public: + #pragma option push -w-inl + /* Exception.Create */ inline __fastcall ERVTableInplaceError(const AnsiString Msg) : Sysutils::Exception(Msg) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateFmt */ inline __fastcall ERVTableInplaceError(const AnsiString Msg, System::TVarRec const * Args, const int Args_Size) : Sysutils::Exception(Msg, Args, Args_Size) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateRes */ inline __fastcall ERVTableInplaceError(int Ident)/* overload */ : Sysutils::Exception(Ident) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateResFmt */ inline __fastcall ERVTableInplaceError(int Ident, System::TVarRec const * Args, const int Args_Size)/* overload */ : Sysutils::Exception(Ident, Args, Args_Size) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateHelp */ inline __fastcall ERVTableInplaceError(const AnsiString Msg, int AHelpContext) : Sysutils::Exception(Msg, AHelpContext) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateFmtHelp */ inline __fastcall ERVTableInplaceError(const AnsiString Msg, System::TVarRec const * Args, const int Args_Size, int AHelpContext) : Sysutils::Exception(Msg, Args, Args_Size, AHelpContext) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateResHelp */ inline __fastcall ERVTableInplaceError(int Ident, int AHelpContext)/* overload */ : Sysutils::Exception(Ident, AHelpContext) { } + #pragma option pop + #pragma option push -w-inl + /* Exception.CreateResFmtHelp */ inline __fastcall ERVTableInplaceError(System::PResStringRec ResStringRec, System::TVarRec const * Args, const int Args_Size, int AHelpContext)/* overload */ : Sysutils::Exception(ResStringRec, Args, Args_Size, AHelpContext) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~ERVTableInplaceError(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const Shortint rvsTable = -60; +static const Shortint crRVSelectRow = 0x68; +static const Shortint crRVSelectCol = 0x69; +#define RVTABLEDEFAULTOPTIONS (Set () << TRVTableOption(0) << TRVTableOption(1) << TRVTableOption(2) << TRVTableOption(3) << TRVTableOption(4) ) +#define RVTABLEDEFAULTPRINTOPTIONS (Set () << TRVTablePrintOption(0) << TRVTablePrintOption(1) ) +extern PACKAGE Graphics::TPenStyle RichViewTableGridStyle; +extern PACKAGE Graphics::TPenStyle RichViewTableGridStyle2; +extern PACKAGE Graphics::TColor RichViewTableGridColor; +extern PACKAGE bool RichViewTableDefaultRTFAutofit; +extern PACKAGE bool RichViewTableAutoAddRow; + +} /* namespace Rvtable */ +using namespace Rvtable; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvtable diff --git a/12.0.4/Units/D2006/RVTable.res b/12.0.4/Units/D2006/RVTable.res new file mode 100644 index 0000000..3aeb51c Binary files /dev/null and b/12.0.4/Units/D2006/RVTable.res differ diff --git a/12.0.4/Units/D2006/RVThread.dcu b/12.0.4/Units/D2006/RVThread.dcu new file mode 100644 index 0000000..b812b39 Binary files /dev/null and b/12.0.4/Units/D2006/RVThread.dcu differ diff --git a/12.0.4/Units/D2006/RVThread.hpp b/12.0.4/Units/D2006/RVThread.hpp new file mode 100644 index 0000000..36668ee --- /dev/null +++ b/12.0.4/Units/D2006/RVThread.hpp @@ -0,0 +1,86 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvthread.pas' rev: 10.00 + +#ifndef RvthreadHPP +#define RvthreadHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvthread +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVWordEnumThread; +class PASCALIMPLEMENTATION TRVWordEnumThread : public Classes::TThread +{ + typedef Classes::TThread inherited; + +private: + int NextItemNo; + int NextOffs; + int StopWorking; + AnsiString CurText; + char *CurTextPtr; + char *CurTextStartPtr; + Rvscroll::TRVScroller* FRichView; + int CurItemNo; + int WordOffs; + int WordLen; + bool CurItemCheckStarted; + Crvdata::TCustomRVData* NextRVData; + Crvdata::TCustomRVData* CurRVData; + bool FForceSetBack; + bool Delaying; + bool EditedWhileDelayed; + void __fastcall AddMisspelling(void); + void __fastcall SyncProc(void); + AnsiString __fastcall GetNextWord(); + void __fastcall GetMisspellingDrawItems(int &DItemNo1, int &DItemNo2); + void __fastcall SetBack(void); + +protected: + virtual void __fastcall Execute(void); + virtual void __fastcall DoTerminate(void); + +public: + bool HasModifiedWord; + bool CheckUnchecked; + __fastcall TRVWordEnumThread(void); + void __fastcall Reset(Rvscroll::TRVScroller* RichView); + void __fastcall LaterSetBackTo(Crvdata::TCustomRVData* RVData, int ItemNo, int Offs); + void __fastcall SetBackToCurItem(Crvdata::TCustomRVData* RVData, int ItemNo); + bool __fastcall IsChecked(Crvdata::TCustomRVData* RVData, int ItemNo); + void __fastcall RemoveRVData(Crvdata::TCustomRVData* RVData); + __fastcall virtual ~TRVWordEnumThread(void); + void __fastcall Stop(bool ResetNexts); + void __fastcall ContinueCheck(void); + void __fastcall Finish(void); +}; + + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE bool RichViewApostropheInWord; + +} /* namespace Rvthread */ +using namespace Rvthread; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvthread diff --git a/12.0.4/Units/D2006/RVTypes.dcu b/12.0.4/Units/D2006/RVTypes.dcu new file mode 100644 index 0000000..f2d7a01 Binary files /dev/null and b/12.0.4/Units/D2006/RVTypes.dcu differ diff --git a/12.0.4/Units/D2006/RVTypes.hpp b/12.0.4/Units/D2006/RVTypes.hpp new file mode 100644 index 0000000..bb1ae5d --- /dev/null +++ b/12.0.4/Units/D2006/RVTypes.hpp @@ -0,0 +1,56 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvtypes.pas' rev: 10.00 + +#ifndef RvtypesHPP +#define RvtypesHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvtypes +{ +//-- type declarations ------------------------------------------------------- +typedef AnsiString TRVAnsiString; + +typedef WideString TRVUnicodeString; + +typedef char TRVAnsiChar; + +typedef WideChar TRVUnicodeChar; + +typedef char *PRVAnsiChar; + +typedef WideChar *PRVUnicodeChar; + +typedef AnsiString TRVRawByteString; + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE AnsiString __fastcall RVFloatToStr(Extended Value); +extern PACKAGE Extended __fastcall RVStrToFloat(const AnsiString S); +extern PACKAGE AnsiString __fastcall RVIntToStr(int Value); +extern PACKAGE AnsiString __fastcall RVIntToHex(int Value, int Digits); +extern PACKAGE int __fastcall RVStrToInt(AnsiString Value); +extern PACKAGE int __fastcall RVStrToIntDef(AnsiString Value, int Default); +extern PACKAGE int __fastcall RVPos(const AnsiString substr, const AnsiString str); + +} /* namespace Rvtypes */ +using namespace Rvtypes; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvtypes diff --git a/12.0.4/Units/D2006/RVUndo.dcu b/12.0.4/Units/D2006/RVUndo.dcu new file mode 100644 index 0000000..7b66d2d Binary files /dev/null and b/12.0.4/Units/D2006/RVUndo.dcu differ diff --git a/12.0.4/Units/D2006/RVUndo.hpp b/12.0.4/Units/D2006/RVUndo.hpp new file mode 100644 index 0000000..107c6b8 --- /dev/null +++ b/12.0.4/Units/D2006/RVUndo.hpp @@ -0,0 +1,1032 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvundo.pas' rev: 10.00 + +#ifndef RvundoHPP +#define RvundoHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvundo +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVUndoAction { rvuMisc, rvuDeleteItem, rvuDeleteItems, rvuDeleteSubstring, rvuInsertItem, rvuInsertItems, rvuInsertSubstring, rvuNewLine, rvuBR, rvuPara, rvuPageBreak, rvuTyping, rvuTag, rvuStyleNo, rvuCheckpoint, rvuModifyItem, rvuChangeText, rvuChangeVAlign, rvuChangeListMarker }; +#pragma option pop + +class DELPHICLASS TRVUndoInfo; +class DELPHICLASS TRVUndoList; +class DELPHICLASS TRVUndoInfos; +class PASCALIMPLEMENTATION TRVUndoList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +private: + int FReformatLock; + void __fastcall Pop(void); + +public: + Crvfdata::TCustomRVFormattedData* FRVData; + int Limit; + int GroupModeCount; + __fastcall TRVUndoList(Crvfdata::TCustomRVFormattedData* ARVData); + void __fastcall PopIfEmpty(void); + bool __fastcall BeginItem(Rvedit::TRVUndoType UndoType, const AnsiString Caption, int CaretItemNo, int CaretOffs, Rvedit::TCustomRichViewEdit* Editor); + void __fastcall EndItem(void); + void __fastcall AddInfo(TRVUndoInfo* Info, Rvedit::TCustomRichViewEdit* Editor); + void __fastcall AddInfos(TRVUndoInfos* Infos, Rvedit::TCustomRichViewEdit* Editor); + void __fastcall AddTyping(int CaretItemNo, int CaretOffs, bool Unicode, Rvedit::TCustomRichViewEdit* Editor); + void __fastcall AddUntyping(const AnsiString c, int CaretItemNo, int CaretOffs, Rvedit::TCustomRichViewEdit* Editor); + void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + void __fastcall Redo(Rvrvdata::TRichViewRVData* RVData); + Rvedit::TRVUndoType __fastcall CurrentUndoType(void); + AnsiString __fastcall CurrentUndoCaption(); + void __fastcall LockRFR(void); + void __fastcall UnlockRFR(void); + void __fastcall SetUndoGroupMode(bool GroupUndo, Rvedit::TCustomRichViewEdit* Editor); +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVUndoList(void) { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVUndoInfo : public System::TObject +{ + typedef System::TObject inherited; + +public: + TRVUndoAction Action; + TRVUndoList* FUndoList; + __fastcall virtual TRVUndoInfo(void); + DYNAMIC bool __fastcall RequiresFullReformat1(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFormat(void); + DYNAMIC bool __fastcall RequiresSuperFormat(void); + DYNAMIC bool __fastcall RequiresFormattedDocBefore(void); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall SetItemsRange(int &StartItem, int &EndItem, Rvrvdata::TRichViewRVData* RVData); + DYNAMIC int __fastcall ItemsAdded(void); + Crvfdata::TCustomRVFormattedData* __fastcall GetUndoListOwnerRVData(void); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoInfo(void) { } + #pragma option pop + +}; + + +typedef TMetaClass* TRVUndoInfoClass; + +class DELPHICLASS TRVUndoItemNoInfo; +class PASCALIMPLEMENTATION TRVUndoItemNoInfo : public TRVUndoInfo +{ + typedef TRVUndoInfo inherited; + +public: + int ItemNo; + int LastAffectedItemNo; + __fastcall virtual TRVUndoItemNoInfo(void); + DYNAMIC void __fastcall SetItemsRange(int &StartItem, int &EndItem, Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoItemNoInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoReformateRange; +class PASCALIMPLEMENTATION TRVUndoReformateRange : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + bool SuperReformat; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresSuperFormat(void); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoReformateRange(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoReformateRange(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoChangeVAlignInfo; +class PASCALIMPLEMENTATION TRVUndoChangeVAlignInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + Rvstyle::TRVVAlign VAlign; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoChangeVAlignInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoChangeVAlignInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoResizeInfo; +class PASCALIMPLEMENTATION TRVUndoResizeInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +private: + int OldWidth; + +public: + int Width; + int Height; + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoResizeInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoResizeInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoRawStringInfo; +class PASCALIMPLEMENTATION TRVUndoRawStringInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + AnsiString s; +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoRawStringInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoRawStringInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoChangeTextInfo; +class PASCALIMPLEMENTATION TRVUndoChangeTextInfo : public TRVUndoRawStringInfo +{ + typedef TRVUndoRawStringInfo inherited; + +private: + int OldWidth; + +public: + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoChangeTextInfo(void) : TRVUndoRawStringInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoChangeTextInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoSubStringInfo; +class PASCALIMPLEMENTATION TRVUndoSubStringInfo : public TRVUndoRawStringInfo +{ + typedef TRVUndoRawStringInfo inherited; + +public: + int Index; +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoSubStringInfo(void) : TRVUndoRawStringInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoSubStringInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoItemInfo; +class PASCALIMPLEMENTATION TRVUndoItemInfo : public TRVUndoRawStringInfo +{ + typedef TRVUndoRawStringInfo inherited; + +public: + Rvitem::TCustomRVItemInfo* Item; + __fastcall virtual ~TRVUndoItemInfo(void); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoItemInfo(void) : TRVUndoRawStringInfo() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoReplaceItemInfo; +class PASCALIMPLEMENTATION TRVUndoReplaceItemInfo : public TRVUndoItemInfo +{ + typedef TRVUndoItemInfo inherited; + +public: + int ItemNo; + DYNAMIC bool __fastcall RequiresFormat(void); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemInfo.Destroy */ inline __fastcall virtual ~TRVUndoReplaceItemInfo(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoReplaceItemInfo(void) : TRVUndoItemInfo() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoItemListInfo; +class PASCALIMPLEMENTATION TRVUndoItemListInfo : public TRVUndoInfo +{ + typedef TRVUndoInfo inherited; + +public: + Rvitem::TRVItemList* List; + __fastcall virtual TRVUndoItemListInfo(void); + __fastcall virtual ~TRVUndoItemListInfo(void); +}; + + +class DELPHICLASS TRVUndoItemRangeInfo; +class PASCALIMPLEMENTATION TRVUndoItemRangeInfo : public TRVUndoItemListInfo +{ + typedef TRVUndoItemListInfo inherited; + +public: + int StartItemNo; + int LastAffectedItemNo; + __fastcall virtual TRVUndoItemRangeInfo(void); + DYNAMIC void __fastcall SetItemsRange(int &StartItem, int &EndItem, Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemListInfo.Destroy */ inline __fastcall virtual ~TRVUndoItemRangeInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoListInfo; +class PASCALIMPLEMENTATION TRVUndoListInfo : public TRVUndoInfo +{ + typedef TRVUndoInfo inherited; + +public: + Rvclasses::TRVIntegerList* List; + __fastcall virtual TRVUndoListInfo(void); + __fastcall virtual ~TRVUndoListInfo(void); +}; + + +class DELPHICLASS TRVUndoParaListInfo; +class PASCALIMPLEMENTATION TRVUndoParaListInfo : public TRVUndoListInfo +{ + typedef TRVUndoListInfo inherited; + +private: + bool FR; + +public: + int StartItemNo; + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall SetItemsRange(int &StartItem, int &EndItem, Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoListInfo.Create */ inline __fastcall virtual TRVUndoParaListInfo(void) : TRVUndoListInfo() { } + #pragma option pop + #pragma option push -w-inl + /* TRVUndoListInfo.Destroy */ inline __fastcall virtual ~TRVUndoParaListInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoParaInfo; +class PASCALIMPLEMENTATION TRVUndoParaInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +private: + bool FR; + +public: + int ParaNo; + int Count; + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall SetItemsRange(int &StartItem, int &EndItem, Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoParaInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoParaInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoStyleNoInfo; +class PASCALIMPLEMENTATION TRVUndoStyleNoInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +private: + int OldWidth; + +public: + int WasStyleNo; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoStyleNoInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoStyleNoInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoAssociatedTextStyleNoInfo; +class PASCALIMPLEMENTATION TRVUndoAssociatedTextStyleNoInfo : public TRVUndoStyleNoInfo +{ + typedef TRVUndoStyleNoInfo inherited; + +public: + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoAssociatedTextStyleNoInfo(void) : TRVUndoStyleNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoAssociatedTextStyleNoInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoDeleteItemInfo; +class PASCALIMPLEMENTATION TRVUndoDeleteItemInfo : public TRVUndoItemInfo +{ + typedef TRVUndoItemInfo inherited; + +private: + bool FR; + +public: + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC int __fastcall ItemsAdded(void); +public: + #pragma option push -w-inl + /* TRVUndoItemInfo.Destroy */ inline __fastcall virtual ~TRVUndoDeleteItemInfo(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoDeleteItemInfo(void) : TRVUndoItemInfo() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoModifyItemInfo; +class PASCALIMPLEMENTATION TRVUndoModifyItemInfo : public TRVUndoItemInfo +{ + typedef TRVUndoItemInfo inherited; + +public: + DYNAMIC bool __fastcall RequiresFullReformat1(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemInfo.Destroy */ inline __fastcall virtual ~TRVUndoModifyItemInfo(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoModifyItemInfo(void) : TRVUndoItemInfo() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoNewLineInfo; +class PASCALIMPLEMENTATION TRVUndoNewLineInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +private: + bool FR; + +public: + bool WasSameAsPrev; + int WasParaNo; + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoNewLineInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoNewLineInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoBRInfo; +class PASCALIMPLEMENTATION TRVUndoBRInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + bool WasBR; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoBRInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoBRInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoPageBreakInfo; +class PASCALIMPLEMENTATION TRVUndoPageBreakInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + bool WasPageBreak; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoPageBreakInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoPageBreakInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoClearTextFlowInfo; +class PASCALIMPLEMENTATION TRVUndoClearTextFlowInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + bool WasClearLeft; + bool WasClearRight; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoClearTextFlowInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoClearTextFlowInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoExtraIntProperty; +class PASCALIMPLEMENTATION TRVUndoExtraIntProperty : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +private: + int OldWidth; + +public: + int OldValue; + Rvitem::TRVExtraItemProperty Prop; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoExtraIntProperty(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoExtraIntProperty(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoExtraStrProperty; +class PASCALIMPLEMENTATION TRVUndoExtraStrProperty : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + AnsiString OldValue; + Rvitem::TRVExtraItemStrProperty Prop; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFormat(void); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoExtraStrProperty(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoExtraStrProperty(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoDeleteItemsInfo; +class PASCALIMPLEMENTATION TRVUndoDeleteItemsInfo : public TRVUndoItemRangeInfo +{ + typedef TRVUndoItemRangeInfo inherited; + +private: + int EndItemNo; + bool FR; + +public: + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC int __fastcall ItemsAdded(void); +public: + #pragma option push -w-inl + /* TRVUndoItemRangeInfo.Create */ inline __fastcall virtual TRVUndoDeleteItemsInfo(void) : TRVUndoItemRangeInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TRVUndoItemListInfo.Destroy */ inline __fastcall virtual ~TRVUndoDeleteItemsInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoDeleteSubstringInfo; +class PASCALIMPLEMENTATION TRVUndoDeleteSubstringInfo : public TRVUndoSubStringInfo +{ + typedef TRVUndoSubStringInfo inherited; + +private: + int OldWidth; + +public: + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoDeleteSubstringInfo(void) : TRVUndoSubStringInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoDeleteSubstringInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoInsertSubstringInfo; +class PASCALIMPLEMENTATION TRVUndoInsertSubstringInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +private: + int OldWidth; + +public: + int Index; + int Length; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoInsertSubstringInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoInsertSubstringInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRedoTypingInfo; +class PASCALIMPLEMENTATION TRVRedoTypingInfo : public TRVUndoSubStringInfo +{ + typedef TRVUndoSubStringInfo inherited; + +private: + int OldWidth; + +public: + bool Unicode; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVRedoTypingInfo(void) : TRVUndoSubStringInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRedoTypingInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoTypingInfo; +class PASCALIMPLEMENTATION TRVUndoTypingInfo : public TRVUndoInsertSubstringInfo +{ + typedef TRVUndoInsertSubstringInfo inherited; + +private: + int OldWidth; + +public: + bool Unicode; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoTypingInfo(void) : TRVUndoInsertSubstringInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoTypingInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoInsertItemsInfo; +class PASCALIMPLEMENTATION TRVUndoInsertItemsInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +private: + bool FR; + +public: + int Count; + DYNAMIC bool __fastcall RequiresFullReformat1(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC int __fastcall ItemsAdded(void); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoInsertItemsInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoInsertItemsInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoInsertItemInfo; +class PASCALIMPLEMENTATION TRVUndoInsertItemInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +private: + bool FR; + +public: + DYNAMIC bool __fastcall RequiresFullReformat1(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC int __fastcall ItemsAdded(void); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoInsertItemInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoInsertItemInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoTagInfo; +class PASCALIMPLEMENTATION TRVUndoTagInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + int WasTag; + bool TagsArePChars; + DYNAMIC bool __fastcall RequiresFormat(void); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + __fastcall virtual ~TRVUndoTagInfo(void); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoTagInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoAddCPInfo; +class PASCALIMPLEMENTATION TRVUndoAddCPInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoAddCPInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoAddCPInfo(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoDeleteCPInfo; +class PASCALIMPLEMENTATION TRVUndoDeleteCPInfo : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +public: + Rvitem::TRVCPInfo* Checkpoint; + bool TagsArePChars; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + __fastcall virtual ~TRVUndoDeleteCPInfo(void); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoDeleteCPInfo(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoModifyItemProps; +class PASCALIMPLEMENTATION TRVUndoModifyItemProps : public TRVUndoItemNoInfo +{ + typedef TRVUndoItemNoInfo inherited; + +private: + int OldW; + +public: + bool AffectWidth; + bool AffectSize; + System::TObject* SubObject; + virtual TMetaClass* __fastcall GetOppositeClass(void); + DYNAMIC bool __fastcall RequiresFormat(void); + DYNAMIC bool __fastcall RequiresFullReformat1(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFullReformat2(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall SetOppositeUndoInfoProps(TRVUndoModifyItemProps* UndoInfo); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoModifyItemProps(void) : TRVUndoItemNoInfo() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoModifyItemProps(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoModifyItemTerminator; +class PASCALIMPLEMENTATION TRVUndoModifyItemTerminator : public TRVUndoModifyItemProps +{ + typedef TRVUndoModifyItemProps inherited; + +public: + bool Opening; + __fastcall virtual TRVUndoModifyItemTerminator(void); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoModifyItemTerminator(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoModifyItemIntProperty; +class PASCALIMPLEMENTATION TRVUndoModifyItemIntProperty : public TRVUndoModifyItemProps +{ + typedef TRVUndoModifyItemProps inherited; + +public: + AnsiString PropertyName; + int Value; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoModifyItemIntProperty(void) : TRVUndoModifyItemProps() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoModifyItemIntProperty(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoModifyItemStrProperty; +class PASCALIMPLEMENTATION TRVUndoModifyItemStrProperty : public TRVUndoModifyItemProps +{ + typedef TRVUndoModifyItemProps inherited; + +public: + AnsiString PropertyName; + AnsiString Value; + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +public: + #pragma option push -w-inl + /* TRVUndoItemNoInfo.Create */ inline __fastcall virtual TRVUndoModifyItemStrProperty(void) : TRVUndoModifyItemProps() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVUndoModifyItemStrProperty(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVUndoModifyItemIntProperties; +class PASCALIMPLEMENTATION TRVUndoModifyItemIntProperties : public TRVUndoModifyItemProps +{ + typedef TRVUndoModifyItemProps inherited; + +public: + Classes::TStringList* PropList; + __fastcall virtual TRVUndoModifyItemIntProperties(void); + __fastcall virtual ~TRVUndoModifyItemIntProperties(void); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); +}; + + +class DELPHICLASS TRVCompositeUndo; +class PASCALIMPLEMENTATION TRVCompositeUndo : public TRVUndoInfo +{ + typedef TRVUndoInfo inherited; + +public: + int ItemNo; + bool IsRedo; + TRVUndoList* UndoList; + __fastcall virtual ~TRVCompositeUndo(void); + DYNAMIC void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData); + DYNAMIC void __fastcall SetItemsRange(int &StartItem, int &EndItem, Rvrvdata::TRichViewRVData* RVData); + DYNAMIC bool __fastcall RequiresFormat(void); +public: + #pragma option push -w-inl + /* TRVUndoInfo.Create */ inline __fastcall virtual TRVCompositeUndo(void) : TRVUndoInfo() { } + #pragma option pop + +}; + + +class PASCALIMPLEMENTATION TRVUndoInfos : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +private: + void __fastcall PerformUndo(Rvrvdata::TRichViewRVData* RVData, bool Reformat); + +public: + AnsiString Caption; + Rvedit::TRVUndoType UndoType; + int CaretItemNo; + int CaretOffs; + void __fastcall Undo(Rvrvdata::TRichViewRVData* RVData, bool Reformat); + void __fastcall Redo(Rvrvdata::TRichViewRVData* RVData, bool Reformat); + bool __fastcall CanDelete(void); + void __fastcall ChangeUndoList(TRVUndoList* UndoList); +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVUndoInfos(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVUndoInfos(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRedoList; +class PASCALIMPLEMENTATION TRVRedoList : public TRVUndoList +{ + typedef TRVUndoList inherited; + +public: + #pragma option push -w-inl + /* TRVUndoList.Create */ inline __fastcall TRVRedoList(Crvfdata::TCustomRVFormattedData* ARVData) : TRVUndoList(ARVData) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRedoList(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvundo */ +using namespace Rvundo; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvundo diff --git a/12.0.4/Units/D2006/RVUni.dcu b/12.0.4/Units/D2006/RVUni.dcu new file mode 100644 index 0000000..bdb5692 Binary files /dev/null and b/12.0.4/Units/D2006/RVUni.dcu differ diff --git a/12.0.4/Units/D2006/RVUni.hpp b/12.0.4/Units/D2006/RVUni.hpp new file mode 100644 index 0000000..1c43b77 --- /dev/null +++ b/12.0.4/Units/D2006/RVUni.hpp @@ -0,0 +1,120 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvuni.pas' rev: 10.00 + +#ifndef RvuniHPP +#define RvuniHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvuni +{ +//-- type declarations ------------------------------------------------------- +typedef int TRVIntegerArray[100001]; + +typedef TRVIntegerArray *PRVIntegerArray; + +typedef unsigned TRVUnsignedArray[100001]; + +typedef TRVUnsignedArray *PRVUnsignedArray; + +typedef Word TRVWordArray[100001]; + +typedef TRVWordArray *PRVWordArray; + +#pragma option push -b- +enum TRVUnicodeTestResult { rvutNo, rvutYes, rvutProbably, rvutEmpty, rvutError }; +#pragma option pop + +//-- var, const, procedure --------------------------------------------------- +static const Word UNI_LF = 0xa; +static const Word UNI_CR = 0xd; +static const Word UNI_LineSeparator = 0x2028; +static const Word UNI_ParagraphSeparator = 0x2029; +static const Word UNI_Tab = 0x9; +static const Word UNI_VerticalTab = 0xb; +static const Word UNI_FormFeed = 0xc; +static const Word UNI_LSB_FIRST = 0xfeff; +static const Word UNI_MSB_FIRST = 0xfffe; +static const Word UNI_FF = 0xc; +static const Word UNI_HYPHEN = 0x2d; +static const Word UNI_Space = 0x20; +static const Word UNI_ZERO_WIDTH_SPACE = 0x200b; +static const Word UNI_ZERO_WIDTH_JOINER = 0x200d; +static const Word UNI_WORD_JOINER = 0x2060; +static const Word UNI_SOFT_HYPHEN = 0xad; +static const Word UNI_NOT_SIGN = 0xac; +static const Word UNI_NON_BREAKING_HYPHEN = 0x2011; +static const char UNI_LSB_FIRST1 = '\xff'; +static const char UNI_LSB_FIRST2 = '\xfe'; +extern PACKAGE bool RVNT; +extern PACKAGE unsigned __fastcall RVMAKELCID(Word plgid); +extern PACKAGE void * __fastcall RVU_FindLineBreak(PRVWordArray Str, int Length, bool FullString); +extern PACKAGE bool __fastcall RVU_GetTextCaretPos(Graphics::TCanvas* Canvas, const AnsiString s, PRVIntegerArray PCP, Rvitem::TRVItemOptions ItemOptions, int Width, int Delta); +extern PACKAGE bool __fastcall RVU_GetTextGlyphDX(Graphics::TCanvas* Canvas, const AnsiString s, PRVIntegerArray PDx, PRVWordArray PGlyphs, Rvitem::TRVItemOptions ItemOptions, int Width, int &nGlyphs); +extern PACKAGE bool __fastcall RVU_GetTextRangeCoords(Graphics::TCanvas* Canvas, const AnsiString s, int RangeStartOffs, int RangeLength, Rvitem::TRVItemOptions ItemOptions, int Width, int Delta, int &X1, int &X2); +extern PACKAGE AnsiString __fastcall RVU_Copy(const AnsiString s, int Index, int Count, Rvitem::TRVItemOptions ItemOptions); +extern PACKAGE void __fastcall RVU_GetTextExtentPoint32W(Graphics::TCanvas* Canvas, void * str, int Len, tagSIZE &sz); +extern PACKAGE void __fastcall RVU_GetTextExtentExPoint(Graphics::TCanvas* Canvas, const AnsiString s, int MaxExtent, int &Fit, PRVIntegerArray PDx, Rvitem::TRVItemOptions ItemOptions); +extern PACKAGE void __fastcall RVU_GetTextExtentExPointPC(Graphics::TCanvas* Canvas, char * pc, int Length, int MaxExtent, int &Fit, PRVIntegerArray PDx, Rvitem::TRVItemOptions ItemOptions, tagSIZE &sz); +extern PACKAGE int __fastcall RVU_Length(const AnsiString s, Rvitem::TRVItemOptions ItemOptions); +extern PACKAGE int __fastcall RVU_TextWidth(const AnsiString s, Graphics::TCanvas* Canvas, Rvitem::TRVItemOptions ItemOptions); +extern PACKAGE bool __fastcall RVU_IsSpace(const AnsiString s, int Index, Rvitem::TRVItemOptions ItemOptions); +extern PACKAGE void __fastcall RVU_Delete(AnsiString &s, int Index, int Count, Rvitem::TRVItemOptions ItemOptions); +extern PACKAGE void __fastcall RVU_Insert(const AnsiString Source, AnsiString &s, int Index, Rvitem::TRVItemOptions ItemOptions); +extern PACKAGE int __fastcall RVU_OffsInPChar(int Offs, Rvitem::TRVItemOptions ItemOptions); +extern PACKAGE bool __fastcall RVU_DrawSelectedTextEx(int Left, int Top, int Width, const AnsiString s, Graphics::TCanvas* Canvas, Graphics::TCanvas* RefCanvas, int Index1, int Index2, Rvitem::TRVItemOptions ItemOptions, Rvscroll::TRVBiDiMode BiDiMode, bool UseRefCanvasRes); +extern PACKAGE Graphics::TFontCharset __fastcall RVU_CodePage2Charset(Rvstyle::TRVCodePage CodePage); +extern PACKAGE Rvstyle::TRVCodePage __fastcall RVU_Charset2CodePage(Graphics::TFontCharset Charset); +extern PACKAGE unsigned __fastcall RVU_Charset2Language(Graphics::TFontCharset Charset); +extern PACKAGE WideString __fastcall RVU_RawUnicodeToWideString(const AnsiString s); +extern PACKAGE AnsiString __fastcall RVU_GetRawUnicode(const WideString s); +extern PACKAGE void __fastcall RVU_SwapWordBytes(PWORD arr, int Count); +extern PACKAGE void __fastcall RVU_ProcessByteOrderMark(PWORD &arr, int Count); +extern PACKAGE AnsiString __fastcall RVU_AnsiToUnicode(Rvstyle::TRVCodePage CodePage, const AnsiString s); +extern PACKAGE AnsiString __fastcall RVU_AnsiToUTF8(Rvstyle::TRVCodePage CodePage, const AnsiString s); +extern PACKAGE AnsiString __fastcall RVU_UnicodeToAnsi(Rvstyle::TRVCodePage CodePage, const AnsiString s); +extern PACKAGE bool __fastcall RVU_CanBeConvertedToAnsi(Rvstyle::TRVCodePage CodePage, const AnsiString s); +extern PACKAGE TRVUnicodeTestResult __fastcall RV_TestStreamUnicode(Classes::TStream* Stream); +extern PACKAGE TRVUnicodeTestResult __fastcall RV_TestFileUnicode(const AnsiString FileName); +extern PACKAGE TRVUnicodeTestResult __fastcall RV_TestStringUnicode(const AnsiString s); +extern PACKAGE Rvstyle::TRVCodePage __fastcall RVU_GetKeyboardCodePage(void); +extern PACKAGE unsigned __fastcall RVU_GetKeyboardLanguage(void); +extern PACKAGE AnsiString __fastcall RVU_KeyToUnicode(const AnsiString Key); +extern PACKAGE void * __fastcall RVU_StrScanW(void * Str, Word Ch, int Length); +extern PACKAGE unsigned __fastcall RVU_StrLenW(void * Str); +extern PACKAGE void __fastcall RVU_WriteHTMLEncodedUnicode(Classes::TStream* Stream, const AnsiString s, bool NoEmptyLines, bool SpecialCode); +extern PACKAGE AnsiString __fastcall RVU_GetHTMLEncodedUnicode(const AnsiString s, bool SpecialCode); +extern PACKAGE AnsiString __fastcall RVU_UnicodeToUTF8(const AnsiString s, bool SpecialCode); +extern PACKAGE AnsiString __fastcall RV_ReturnProcessedStringEx(const AnsiString s, Rvstyle::TFontInfo* TextStyle, bool LastOnLine, bool ShowSpecialChars, bool ForDisplay, int &SelOffs1, int &SelOffs2); +extern PACKAGE AnsiString __fastcall RV_ReturnProcessedString(const AnsiString s, Rvstyle::TFontInfo* TextStyle, bool LastOnLine, bool ShowSpecialChars, bool ForDisplay); +extern PACKAGE void * __fastcall StrPosW(void * Str, void * SubStr); +extern PACKAGE AnsiString __fastcall RVU_RawByteStringToString(const AnsiString s, bool RawUnicode, Rvstyle::TRVCodePage CodePage); +extern PACKAGE AnsiString __fastcall RVU_StringToRawByteString(const AnsiString s, bool RawUnicode, Rvstyle::TRVCodePage CodePage); + +} /* namespace Rvuni */ +using namespace Rvuni; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvuni diff --git a/12.0.4/Units/D2006/RVWordPaint.dcu b/12.0.4/Units/D2006/RVWordPaint.dcu new file mode 100644 index 0000000..57b413c Binary files /dev/null and b/12.0.4/Units/D2006/RVWordPaint.dcu differ diff --git a/12.0.4/Units/D2006/RVWordPaint.hpp b/12.0.4/Units/D2006/RVWordPaint.hpp new file mode 100644 index 0000000..38dadb6 --- /dev/null +++ b/12.0.4/Units/D2006/RVWordPaint.hpp @@ -0,0 +1,103 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvwordpaint.pas' rev: 10.00 + +#ifndef RvwordpaintHPP +#define RvwordpaintHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvwordpaint +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVWordPainter; +class PASCALIMPLEMENTATION TRVWordPainter : public System::TObject +{ + typedef System::TObject inherited; + +public: + int StartOffs; + int Length; + virtual void __fastcall Draw(Graphics::TCanvas* Canvas, Dlines::TRVDrawLineInfo* ditem, Classes::TPersistent* RVData, const Types::TRect &r, int Index) = 0 ; + __fastcall TRVWordPainter(int AStartOffs, int ALength); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVWordPainter(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVWordPainterList; +class PASCALIMPLEMENTATION TRVWordPainterList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVWordPainter* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVWordPainter* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVWordPainter* Value); + +public: + __property TRVWordPainter* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVWordPainterList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVWordPainterList(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVWordMisspellPainter; +class PASCALIMPLEMENTATION TRVWordMisspellPainter : public TRVWordPainter +{ + typedef TRVWordPainter inherited; + +public: + virtual void __fastcall Draw(Graphics::TCanvas* Canvas, Dlines::TRVDrawLineInfo* ditem, Classes::TPersistent* RVData, const Types::TRect &r, int Index); +public: + #pragma option push -w-inl + /* TRVWordPainter.Create */ inline __fastcall TRVWordMisspellPainter(int AStartOffs, int ALength) : TRVWordPainter(AStartOffs, ALength) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVWordMisspellPainter(void) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvwordpaint */ +using namespace Rvwordpaint; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvwordpaint diff --git a/12.0.4/Units/D2006/RVXPTheme.dcu b/12.0.4/Units/D2006/RVXPTheme.dcu new file mode 100644 index 0000000..9215ac5 Binary files /dev/null and b/12.0.4/Units/D2006/RVXPTheme.dcu differ diff --git a/12.0.4/Units/D2006/RVXPTheme.hpp b/12.0.4/Units/D2006/RVXPTheme.hpp new file mode 100644 index 0000000..7b0a5b8 --- /dev/null +++ b/12.0.4/Units/D2006/RVXPTheme.hpp @@ -0,0 +1,101 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvxptheme.pas' rev: 10.00 + +#ifndef RvxpthemeHPP +#define RvxpthemeHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvxptheme +{ +//-- type declarations ------------------------------------------------------- +typedef unsigned HTheme; + +typedef bool __stdcall (*RV_IsThemeActiveProc)(void); + +typedef bool __stdcall (*RV_IsAppThemedProc)(void); + +typedef unsigned __stdcall (*RV_OpenThemeDataProc)(HWND hwnd, WideChar * pszClassList); + +typedef HRESULT __stdcall (*RV_CloseThemeDataProc)(unsigned Theme); + +typedef HRESULT __stdcall (*RV_DrawThemeParentBackgroundProc)(HWND hwnd, HDC hdc, Types::PRect Rect); + +typedef HRESULT __stdcall (*RV_DrawThemeEdgeProc)(unsigned Theme, HDC hdc, int iPartId, int iStateId, const Types::TRect &pDestRect, unsigned uEdge, unsigned uFlags, Types::PRect pContentRect); + +typedef HRESULT __stdcall (*RV_DrawThemeBackgroundProc)(unsigned Theme, HDC hdc, int iPartId, int iStateId, const Types::TRect &Rect, Types::PRect pClipRect); + +typedef HRESULT __stdcall (*RV_DrawThemeTextProc)(unsigned Theme, HDC hdc, int iPartId, int iStateId, WideChar * pszText, int iCharCount, unsigned dwTextFlags, unsigned dwTextFlags2, Types::TRect &Rect); + +typedef bool __stdcall (*RV_IsThemeBackgroundPartiallyTransparentProc)(unsigned hTheme, int iPartId, int iStateId); + +//-- var, const, procedure --------------------------------------------------- +extern PACKAGE RV_IsThemeActiveProc RV_IsThemeActive; +extern PACKAGE RV_IsAppThemedProc RV_IsAppThemed; +extern PACKAGE RV_OpenThemeDataProc RV_OpenThemeData; +extern PACKAGE RV_CloseThemeDataProc RV_CloseThemeData; +extern PACKAGE RV_DrawThemeParentBackgroundProc RV_DrawThemeParentBackground; +extern PACKAGE RV_DrawThemeEdgeProc RV_DrawThemeEdge; +extern PACKAGE RV_DrawThemeBackgroundProc RV_DrawThemeBackground; +extern PACKAGE RV_DrawThemeTextProc RV_DrawThemeText; +extern PACKAGE RV_IsThemeBackgroundPartiallyTransparentProc RV_IsThemeBackgroundPartiallyTransparent; +static const Shortint EP_EDITTEXT = 0x1; +static const Shortint ETS_NORMAL = 0x1; +static const Shortint ETS_HOT = 0x2; +static const Shortint ETS_SELECTED = 0x3; +static const Shortint ETS_DISABLED = 0x4; +static const Shortint ETS_FOCUSED = 0x5; +static const Shortint ETS_READONLY = 0x6; +static const Shortint ETS_ASSIST = 0x7; +static const Shortint BP_RADIOBUTTON = 0x2; +static const Shortint RBS_UNCHECKEDNORMAL = 0x1; +static const Shortint RBS_UNCHECKEDHOT = 0x2; +static const Shortint RBS_UNCHECKEDPRESSED = 0x3; +static const Shortint RBS_UNCHECKEDDISABLED = 0x4; +static const Shortint RBS_CHECKEDNORMAL = 0x5; +static const Shortint RBS_CHECKEDHOT = 0x6; +static const Shortint RBS_CHECKEDPRESSED = 0x7; +static const Shortint RBS_CHECKEDDISABLED = 0x8; +static const Shortint BP_CHECKBOX = 0x3; +static const Shortint CBS_UNCHECKEDNORMAL = 0x1; +static const Shortint CBS_UNCHECKEDHOT = 0x2; +static const Shortint CBS_UNCHECKEDPRESSED = 0x3; +static const Shortint CBS_UNCHECKEDDISABLED = 0x4; +static const Shortint CBS_CHECKEDNORMAL = 0x5; +static const Shortint CBS_CHECKEDHOT = 0x6; +static const Shortint CBS_CHECKEDPRESSED = 0x7; +static const Shortint CBS_CHECKEDDISABLED = 0x8; +static const Shortint CBS_MIXEDNORMAL = 0x9; +static const Shortint CBS_MIXEDHOT = 0xa; +static const Shortint CBS_MIXEDPRESSED = 0xb; +static const Shortint CBS_MIXEDDISABLED = 0xc; +static const Shortint BP_GROUPBOX = 0x4; +static const Shortint GBS_NORMAL = 0x1; +static const Shortint GBS_DISABLED = 0x2; +static const Shortint CP_DROPDOWNBUTTON = 0x1; +static const Shortint CBXS_NORMAL = 0x1; +static const Shortint CBXS_HOT = 0x2; +static const Shortint CBXS_PRESSED = 0x3; +static const Shortint CBXS_DISABLED = 0x4; + +} /* namespace Rvxptheme */ +using namespace Rvxptheme; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvxptheme diff --git a/12.0.4/Units/D2006/RV_Defs.inc b/12.0.4/Units/D2006/RV_Defs.inc new file mode 100644 index 0000000..15f242e --- /dev/null +++ b/12.0.4/Units/D2006/RV_Defs.inc @@ -0,0 +1,347 @@ + +{*******************************************************} +{ } +{ RichView } +{ Conditionals for RichView. } +{ This file is included in all RichView PAS-files.} +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$B-} +{$H+} +{$J+} +{$T-} + +{------------------------------------------------------------------------------} +{ Determining Delphi/C++Builder version } + +{$DEFINE RICHVIEW} + +{$IFNDEF VER80} { not Delphi 1.0 } + {$IFNDEF VER90} { not Delphi 2.0 } + {$DEFINE RICHVIEWCBDEF1} (* C++Builder 1.0+ *) + {$IFNDEF VER93} { not C++Builder 1.0 } + {$DEFINE RICHVIEWCBDEF3} (* C++Builder 3.0+ *) + {$IFNDEF VER110} { not C++Builder 3.0 } + {$DEFINE RICHVIEWDEF3} (* Delphi 3.0+, C++Builder 4.0+ *) + {$IFNDEF VER100} { not Delphi 3.0 } + {$DEFINE RICHVIEWDEF4} (* Delphi 4.0+ *) + {$IFNDEF VER120} { not Delphi 4.0 } + {$IFNDEF VER125} { not C++Builder 4.0 } + {$DEFINE RICHVIEWDEF5} (* Delphi 5.0+ *) + {$IFNDEF VER130} { not Delphi 5.0 } + {$IFNDEF VER135} { not C++Builder 5.0 } + {$DEFINE RICHVIEWDEF6}(* Delphi 6.0+ *) + {$IFNDEF VER140} { not Delphi 6.0 } + {$IFNDEF VER145} { not C++Builder 6.0 } + {$DEFINE RICHVIEWDEF7}(* Delphi 7.0+ *) + {$IFNDEF VER150} { not Delphi 7.0 } + {$DEFINE RICHVIEWDEF9} (* Delphi 2005+ *) + {$DEFINE RICHVIEWDEF2005}(* Delphi 2005+ *) + {$IFNDEF VER170} { not Delphi 2005 } + {$DEFINE RICHVIEWDEF10} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2006} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2007} (* Delphi 2007 defines both VER180 and VER185 *) + {$IFNDEF VER180} { not Delphi 2006-2007 } + {$DEFINE RICHVIEWDEF2009} + {$IFNDEF VER200} + {$DEFINE RICHVIEWDEF2010} (* Delphi 2010 defines VER210 *) + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER180}{$IFNDEF VER185} +{$UNDEF RICHVIEWDEF2007} // this is D2006, not D2007 +{$ENDIF}{$ENDIF} + + +{$IFDEF RICHVIEWDEF7} +{$WARN UNSAFE_TYPE OFF} +{$WARN UNSAFE_CODE OFF} +{$WARN UNSAFE_CAST OFF} +{$ENDIF} + +{------------------------------------------------------------------------------} +{ CONDITIONAL DEFINES. } +{ Do not modify this file, use Project|Options, Directories/Conditionals, } +{ Conditional defines instead. } +{------------------------------------------------------------------------------} + +{------------------------------------------------------------------------------} +{ Defines for shrinking exe size / improving speed and memory usage by } +{ turning off unused features. } +{------------------------------------------------------------------------------} + +{NOT$DEFINE RVDONOTUSESTYLETEMPLATES} +{ + Define if you do not want to use TRVStyle.StyleTemplates and related functions. + +{NOT$DEFINE RVDONOTUSEALLCAPS} +{NOT$DEFINE RVDONOTUSESOFTHYPHENS} +{NOT$DEFINE RVDONOTUSECHARSCALE} +{ + Define it if you do not wish to use rvfsAllCaps option, soft hyphens, + CharScale. + Some speed up of text drawing and formatting. +} + +{NOT$DEFINE RVDONOTUSESMARTPOPUP} + + +{NOT$DEFINE RVDONOTUSEANIMATION} +{ + Define if you do not wish to display animations. + Saves memory and resources. +} + +{NOT$DEFINE RVDONOTUSETABS} +{ + Define if you do not wish to use tab stops. All code for importing tabs will + be excluded. But code for processing tabs (if they appeared in document) remains. +} + +{NOT$DEFINE RVDONOTUSEJPEGIMAGE} +{ + Define it if you do not wish to use Delphi jpeg units. + This will cause saving images to HTML as bitmaps, and turning off special + support for jpegs in paletted display mode. +} + +{NOT$DEFINE RVDONOTUSEHTML} +{ + Define it to remove all HTML-related methods. +} + +{NOT$DEFINE RVDONOTUSERTF} +{ + Define it to remove all RTF-export related methods +} + +{NOT$DEFINE RVDONOTUSERTFIMPORT} +{ + Define it to remove all RTF-import related methods. +} + +{NOT$DEFINE RVDONOTUSERVF} +{ + Define it to remove all RVF-related methods. + You can do it only if you do not use TRichViewEdit. Editor requires + RVF methods. +} + +{NOT$DEFINE RVDONOTUSEJUSTIFY} +{ + Define it to remove justify alignment support. + Was not properly tested. +} + +{NOT$DEFINE RVDONOTUSEUNICODE} +{ + Define it to disable Unicode support. + Cannot be activated in Delphi/C++Builder 2009+ +} +{NOT$DEFINE RVDONOTUSECHARSPACING} +{ + Define it to disable CharSpacing. Somewhat faster +} + +{NOT$DEFINE RVDONOTUSETABLES} +{ + Define, if you do not use tables. Exe-file will be smaller. +} + +{NOT$DEFINE RVDONOTUSELISTS} +{ + Define, if you do not use bullets and numbering +} + +{NOT$DEFINE RVDONOTUSESEQ} +{ + Define, if you do not use numbered sequences and footnotes +} + +{NOT$DEFINE RVDONOTUSEINI} +{ + Define, if you do not save/load RVStyle in ini-files and the Registry +} + +{NOT$DEFINE RVDONOTUSEDRAGDROP} +{ + Define, if you do not use OLE drag&drop +} + +{NOT$DEFINE RVDONOTUSEITEMHINTS} +{ + Define, if you do not want to use item titles (popup hints). + Saves 4 bytes per item in memory +} + +{NOT$DEFINE RVDONOTUSELIVESPELL} +{ + Define, if you do not want to use live spelling. + Saves 8 bytes per item in memory, reduces exe file size +} + +{NOT$DEFINE RVDONOTUSELINEARPOSITIONS} +{ + Define, if you do not need to process EM_GETSEL, EM_GETTEXTRANGE and EM_SETSEL +} + +{NOT$DEFINE RVDONOTUSERVMEMORYSTREAM} +{ + Disables custom (more efficient for saving large data) memory stream + implementation. Reduces exe file size +} + +{NOT$DEFINE RVDONOTUSEDOCPARAMS} +{ + Define to exclude TCustomRichView.DocParameters +} + +{NOT$DEFINE RVDONOTUSEOLECONTAINER} +{ + Does nothing. Reserved. +} + +{$IFDEF RVDONOTUSETABLES} + {$DEFINE RVDONOTUSEINPLACE} +{$ENDIF} +{------------------------------------------------------------------------------} +{ Other defines } +{------------------------------------------------------------------------------} +{NOT$DEFINE RVPBEARCOMPAT} +{ + Define to make HTML output more compatible with THTMLViewer (www.pbear.com) + Some unnecessary tags will be saved. +} + +{NOT$DEFINE RVEDITIGNORESESCAPE} +{ + If defined, TRichViewEdit and TDBRichViewEdit (if IgnoreEscape=True) controls + do not receive messages when Escape is pressed. Useful when placed in modal + dialogs, so that editors do not steal Escape from a Cancel button. +} + + +{NOT$DEFINE RVLANGUAGEPROPERTY} +{ + If defined, text style has additional property - Language: Cardinal +} +{NOT$DEFINE RVLIVESPELLEXEVENT} +{ + If defined, RichView has additional event - OnSpellingCheckEx. + This event has higher priority than OnSpellingCheck. +} + +{NOT$DEFINE RVUSETEXTHOVERCOLORWITHSELECTED} +{ + Define if you wish to return behavior of v1.2-, where text hover color was + used even for selected text. +} + +{NOT$DEFINE DONOTDECVSCROLLUNITS} +{ + Define to forbid RichView to decrease vertical scrolling units automatically + when needed (if you wish to control scrolling units yourself). +} + +{NOT$DEFINE RVDONOTCORRECTWMFSCALE} +{ + There is a problem in Delphi TMetafile class (wrong size) when pasting + some metafiles from Clipboard. RichView tries to correct it. + Turn this define on, if you have troubles with metafile sizes when pasting. +} + +{$DEFINE RVALLOWCPBYCP} +{ + RichView since version 1.0 does not allow to add one checkpoint just after + another. + When defined (default), second checkpoint is ignored. + When not defined, RichView raises exception. +} + +{NOT$DEFINE RVRECHECKRTFPARA} +{ + If defined, when importing RTF file, paragraph properties are rechecked + when inserting each item (otherwise, only when inserting the first paragraph's + item). Slows reading down, but provides the same results as MS Word when + RTF file contains contradicting data for the same paragraph (buggy RTF files) +} + + +{------------------------------------------------------------------------------} +{ Addons } +{------------------------------------------------------------------------------} + +{ + Define if you use import of MS Word DOC files. +} +{NOT$DEFINE RVUSEWORDDOC} + +{------------------------------------------------------------------------------} +{ Automatical defines: } +{------------------------------------------------------------------------------} +{$IFDEF RICHVIEWCBDEF1} +{ + IME (Input Method Editor) support is disabled for Delphi 2. + D2 has required library file - Imm.pas in sources, but does not have it in library (?!). + So I think support for D2 is possible, but requires some IDE configuration... + +} + +{$IFNDEF RVDONOTUSEUNICODE} + +{$DEFINE RVUSEIME} // Using IME + +{$ENDIF} +{$ENDIF} + +{$IFNDEF RICHVIEWDEF3} +// Turning off Jpeg support for Delphi2, C++Builder 1,3 +{$DEFINE RVDONOTUSEJPEGIMAGE} + +{$ENDIF} + +{$IFNDEF RICHVIEWCBDEF3} +// Turning off D&D support for Delphi2, C++Builder 1 +{$DEFINE RVDONOTUSEDRAGDROP} +{$ENDIF} + +{$IFNDEF RVDONOTUSELISTS} + {$DEFINE RVUSELISTORSEQ} +{$ELSE} + {$IFNDEF RVDONOTUSESEQ} + {$DEFINE RVUSELISTORSEQ} + {$ENDIF} +{$ENDIF} + +{$IFDEF RICHVIEWDEF2009} + {$DEFINE RVUNICODESTR} + {$DEFINE RVUNICODEWINDOW} +{$ENDIF} + +{$DEFINE RVDEBUG} + +{.$DEFINE RVFLATSCROLLBARS} + +{.$DEFINE RVONCUT} + +{.$DEFINE RVWATERMARK} + +{.$DEFINE RVUSEBASELINE} \ No newline at end of file diff --git a/12.0.4/Units/D2006/RichView.dcu b/12.0.4/Units/D2006/RichView.dcu new file mode 100644 index 0000000..a57750a Binary files /dev/null and b/12.0.4/Units/D2006/RichView.dcu differ diff --git a/12.0.4/Units/D2006/RichView.hpp b/12.0.4/Units/D2006/RichView.hpp new file mode 100644 index 0000000..eb91e6a --- /dev/null +++ b/12.0.4/Units/D2006/RichView.hpp @@ -0,0 +1,904 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Richview.pas' rev: 10.00 + +#ifndef RichviewHPP +#define RichviewHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Richview +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVEventType { rvetRVDblClick, rvetJump, rvetRVMouseUp, rvetRVMouseDown, rvetClick, rvetDblClick, rvetMouseMove, rvetDragDrop, rvetEndDrag }; +#pragma option pop + +class DELPHICLASS TRVMessageData; +class PASCALIMPLEMENTATION TRVMessageData : public System::TObject +{ + typedef System::TObject inherited; + +public: + TRVEventType Event; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVMessageData(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVMessageData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVClickMessageData; +class PASCALIMPLEMENTATION TRVClickMessageData : public TRVMessageData +{ + typedef TRVMessageData inherited; + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVClickMessageData(void) : TRVMessageData() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVClickMessageData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVStdDblClickMessageData; +class PASCALIMPLEMENTATION TRVStdDblClickMessageData : public TRVMessageData +{ + typedef TRVMessageData inherited; + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVStdDblClickMessageData(void) : TRVMessageData() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVStdDblClickMessageData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVDblClickMessageData; +class PASCALIMPLEMENTATION TRVDblClickMessageData : public TRVMessageData +{ + typedef TRVMessageData inherited; + +public: + AnsiString ClickedWord; + int StyleNo; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVDblClickMessageData(void) : TRVMessageData() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVDblClickMessageData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVJumpMessageData; +class PASCALIMPLEMENTATION TRVJumpMessageData : public TRVMessageData +{ + typedef TRVMessageData inherited; + +public: + int id; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVJumpMessageData(void) : TRVMessageData() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVJumpMessageData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVMouseMoveMessageData; +class PASCALIMPLEMENTATION TRVMouseMoveMessageData : public TRVMessageData +{ + typedef TRVMessageData inherited; + +public: + int X; + int Y; + int ItemNo; + Classes::TShiftState Shift; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVMouseMoveMessageData(void) : TRVMessageData() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVMouseMoveMessageData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVMouseUpDownMessageData; +class PASCALIMPLEMENTATION TRVMouseUpDownMessageData : public TRVMouseMoveMessageData +{ + typedef TRVMouseMoveMessageData inherited; + +public: + Controls::TMouseButton Button; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVMouseUpDownMessageData(void) : TRVMouseMoveMessageData() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVMouseUpDownMessageData(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVDNDMessageData; +class PASCALIMPLEMENTATION TRVDNDMessageData : public TRVMessageData +{ + typedef TRVMessageData inherited; + +public: + int X; + int Y; + System::TObject* Obj; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVDNDMessageData(void) : TRVMessageData() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVDNDMessageData(void) { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVPrintingStep { rvpsStarting, rvpsProceeding, rvpsFinished }; +#pragma option pop + +#pragma option push -b- +enum TRVLiveSpellingMode { rvlspManualStart, rvlspOnChange }; +#pragma option pop + +#pragma option push -b- +enum TRVAnimationMode { rvaniDisabled, rvaniManualStart, rvaniOnFormat }; +#pragma option pop + +#pragma option push -b- +enum TRVYesNoAuto { rvynaNo, rvynaYes, rvynaAuto }; +#pragma option pop + +typedef TMetaClass* TRVWordEnumThreadClass; + +typedef TMetaClass* TRVRTFReaderPropertiesClass; + +typedef void __fastcall (__closure *TJumpEvent)(System::TObject* Sender, int id); + +class DELPHICLASS TCustomRichView; +typedef void __fastcall (__closure *TRVGetItemCursorEvent)(TCustomRichView* Sender, Crvdata::TCustomRVData* RVData, int ItemNo, Controls::TCursor &Cursor); + +typedef void __fastcall (__closure *TRVMouseMoveEvent)(System::TObject* Sender, int id); + +typedef void __fastcall (__closure *TRVMouseEvent)(TCustomRichView* Sender, Controls::TMouseButton Button, Classes::TShiftState Shift, int ItemNo, int X, int Y); + +typedef void __fastcall (__closure *TRVSaveComponentToFileEvent)(TCustomRichView* Sender, AnsiString Path, Classes::TPersistent* SaveMe, Rvstyle::TRVSaveFormat SaveFormat, AnsiString &OutStr); + +typedef void __fastcall (__closure *TRVSaveItemToFileEvent)(TCustomRichView* Sender, const AnsiString Path, Crvdata::TCustomRVData* RVData, int ItemNo, Rvstyle::TRVSaveFormat SaveFormat, bool Unicode, AnsiString &OutStr, bool &DoDefault); + +typedef void __fastcall (__closure *TRVURLNeededEvent)(TCustomRichView* Sender, int id, AnsiString &url); + +typedef void __fastcall (__closure *TRVDblClickEvent)(TCustomRichView* Sender, AnsiString ClickedWord, int Style); + +typedef void __fastcall (__closure *TRVRightClickEvent)(TCustomRichView* Sender, AnsiString ClickedWord, int Style, int X, int Y); + +typedef void __fastcall (__closure *TRVFPictureNeededEvent)(TCustomRichView* Sender, AnsiString Name, int Tag, Graphics::TGraphic* &gr); + +typedef void __fastcall (__closure *TRVFControlNeededEvent)(TCustomRichView* Sender, AnsiString Name, int Tag, Controls::TControl* &ctrl); + +typedef void __fastcall (__closure *TRVCheckpointVisibleEvent)(TCustomRichView* Sender, Rvstyle::TCheckpointData CheckpointData); + +typedef void __fastcall (__closure *TRVControlActionEvent)(TCustomRichView* Sender, Rvstyle::TRVControlAction ControlAction, int ItemNo, Controls::TControl* &ctrl); + +typedef void __fastcall (__closure *TRVItemActionEvent)(TCustomRichView* Sender, Rvstyle::TRVItemAction ItemAction, Rvitem::TCustomRVItemInfo* Item, AnsiString &Text, Crvdata::TCustomRVData* RVData); + +typedef void __fastcall (__closure *TRVFImageListNeededEvent)(TCustomRichView* Sender, int ImageListTag, Imglist::TCustomImageList* &il); + +typedef void __fastcall (__closure *TRVHTMLSaveImageEvent)(TCustomRichView* Sender, Crvdata::TCustomRVData* RVData, int ItemNo, const AnsiString Path, Graphics::TColor BackgroundColor, AnsiString &Location, bool &DoDefault); + +typedef void __fastcall (__closure *TRVSaveImageEvent2)(TCustomRichView* Sender, Graphics::TGraphic* Graphic, Rvstyle::TRVSaveFormat SaveFormat, const AnsiString Path, const AnsiString ImagePrefix, int &ImageSaveNo, AnsiString &Location, bool &DoDefault); + +typedef void __fastcall (__closure *TRVReadHyperlink)(TCustomRichView* Sender, const AnsiString Target, const AnsiString Extras, Rvstyle::TRVLoadFormat DocFormat, int &StyleNo, int &ItemTag, AnsiString &ItemName); + +typedef void __fastcall (__closure *TRVWriteHyperlink)(TCustomRichView* Sender, int id, Crvdata::TCustomRVData* RVData, int ItemNo, Rvstyle::TRVSaveFormat SaveFormat, AnsiString &Target, AnsiString &Extras); + +typedef void __fastcall (__closure *TRVSaveRTFExtraEvent)(TCustomRichView* Sender, Rvstyle::TRVRTFSaveArea Area, System::TObject* Obj, int Index1, int Index2, bool InStyleSheet, AnsiString &RTFCode); + +typedef void __fastcall (__closure *TRVSaveHTMLExtraEvent)(TCustomRichView* Sender, Rvstyle::TRVHTMLSaveArea Area, bool CSSVersion, AnsiString &HTMLCode); + +typedef void __fastcall (__closure *TRVSaveParaToHTMLEvent)(TCustomRichView* Sender, Crvdata::TCustomRVData* RVData, int ItemNo, bool ParaStart, bool CSSVersion, AnsiString &HTMLCode); + +typedef void __fastcall (__closure *TRVPaintEvent)(TCustomRichView* Sender, Graphics::TCanvas* Canvas, bool Prepaint); + +typedef void __fastcall (__closure *TRVImportPictureEvent)(TCustomRichView* Sender, const AnsiString Location, int Width, int Height, Graphics::TGraphic* &Graphic); + +typedef void __fastcall (__closure *TRVItemHintEvent)(TCustomRichView* Sender, Crvdata::TCustomRVData* RVData, int ItemNo, AnsiString &HintText); + +typedef void __fastcall (__closure *TRVProgressEvent)(TCustomRichView* Sender, Rvstyle::TRVLongOperation Operation, Rvstyle::TRVProgressStage Stage, Byte PercentDone); + +typedef void __fastcall (__closure *TRVSpellingCheckEvent)(TCustomRichView* Sender, const AnsiString AWord, int StyleNo, bool &Misspelled); + +typedef void __fastcall (__closure *TRVSpellingCheckExEvent)(TCustomRichView* Sender, const AnsiString AWord, Crvdata::TCustomRVData* RVData, int ItemNo, bool &Misspelled); + +typedef void __fastcall (__closure *TRVSmartPopupClickEvent)(TCustomRichView* Sender, Controls::TCustomControl* Button); + +typedef void __fastcall (__closure *TRVAddStyleEvent)(TCustomRichView* Sender, Rvstyle::TCustomRVInfo* StyleInfo); + +typedef void __fastcall (__closure *TRVGetFormatCanvasEvent)(TCustomRichView* Sender, Graphics::TCanvas* &Canvas); + +class PASCALIMPLEMENTATION TCustomRichView : public Rvscroll::TRVScroller +{ + typedef Rvscroll::TRVScroller inherited; + +private: + AnsiString FNoteText; + Controls::TCursor FCursor; + Rvscroll::TRVOptions FOptions; + Rvstyle::TRVRTFOptions FRTFOptions; + bool ScrollTimerActive; + AnsiString FDelimiters; + int FMaxLength; + TJumpEvent FOnJump; + TRVGetItemCursorEvent FOnGetItemCursor; + TRVMouseMoveEvent FOnRVMouseMove; + TRVSaveComponentToFileEvent FOnSaveComponentToFile; + TRVSaveItemToFileEvent FOnSaveItemToFile; + TRVURLNeededEvent FOnURLNeeded; + TRVDblClickEvent FOnRVDblClick; + TRVRightClickEvent FOnRVRightClick; + TRVMouseEvent FOnRVMouseUp; + TRVMouseEvent FOnRVMouseDown; + TRVControlActionEvent FOnControlAction; + TRVItemActionEvent FOnItemAction; + Rvscroll::TCPEventKind FCPEventKind; + TRVFPictureNeededEvent FOnRVFPictureNeeded; + TRVFControlNeededEvent FOnRVFControlNeeded; + TRVFImageListNeededEvent FOnRVFImageListNeeded; + TRVCheckpointVisibleEvent FOnCheckpointVisible; + int FMaxTextWidth; + int FMinTextWidth; + int FLeftMargin; + int FRightMargin; + int FTopMargin; + int FBottomMargin; + Rvstyle::TRVFOptions FRVFOptions; + Rvstyle::TRVFWarnings FRVFWarnings; + TRVAddStyleEvent FOnAddStyle; + bool FWordWrap; + Classes::TNotifyEvent FOnCopy; + TRVHTMLSaveImageEvent FOnHTMLSaveImage; + TRVSaveImageEvent2 FOnSaveImage2; + Rvrtfprops::TRVRTFReaderProperties* FRTFReadProperties; + Rvdocparams::TRVDocParameters* FDocParameters; + Rvpopup::TRVSmartPopupProperties* FSmartPopupProperties; + TRVSmartPopupClickEvent FOnSmartPopupClick; + Rvstyle::TRVFReaderStyleMode FRVFTextStylesReadMode; + Rvstyle::TRVFReaderStyleMode FRVFParaStylesReadMode; + TRVReadHyperlink FOnReadHyperlink; + TRVWriteHyperlink FOnWriteHyperlink; + TRVSaveRTFExtraEvent FOnSaveRTFExtra; + TRVSaveHTMLExtraEvent FOnSaveHTMLExtra; + TRVSaveParaToHTMLEvent FOnSaveParaToHTML; + TRVPaintEvent FOnPaint; + TRVImportPictureEvent FOnImportPicture; + TRVItemHintEvent FOnItemHint; + Classes::TStringList* FDocProperties; + TRVProgressEvent FOnProgress; + TRVSpellingCheckEvent FOnSpellingCheck; + TRVLiveSpellingMode FLiveSpellingMode; + TRVAnimationMode FAnimationMode; + Stdctrls::TTextLayout FVAlign; + TRVGetFormatCanvasEvent FOnGetFormatCanvas; + Classes::TNotifyEvent FOnBiDiModeChange; + HIDESBASE MESSAGE void __fastcall WMContextMenu(Messages::TWMContextMenu &Message); + HIDESBASE MESSAGE void __fastcall WMSize(Messages::TWMSize &Message); + HIDESBASE MESSAGE void __fastcall WMEraseBkgnd(Messages::TWMEraseBkgnd &Message); + HIDESBASE MESSAGE void __fastcall CMMouseLeave(Messages::TMessage &Message); + MESSAGE void __fastcall WMCopy(Messages::TWMNoParams &Message); + MESSAGE void __fastcall WMTimer(Messages::TWMTimer &Message); + HIDESBASE MESSAGE void __fastcall WMDestroy(Messages::TWMNoParams &Message); + HIDESBASE MESSAGE void __fastcall WMGetDlgCode(Messages::TWMNoParams &Message); + HIDESBASE MESSAGE void __fastcall WMSetFocus(Messages::TWMSetFocus &Message); + HIDESBASE MESSAGE void __fastcall WMKillFocus(Messages::TWMKillFocus &Message); + MESSAGE void __fastcall WMRVEvent(Messages::TMessage &Message); + MESSAGE void __fastcall WMRVDragDrop(Messages::TMessage &Message); + MESSAGE void __fastcall EMGetSel(Messages::TMessage &Message); + MESSAGE void __fastcall EMSetSel(Messages::TMessage &Message); + MESSAGE void __fastcall EMGetTextRange(Messages::TMessage &Message); + HIDESBASE MESSAGE void __fastcall CMColorChanged(Messages::TMessage &Message); + int __fastcall GetLineCount(void); + bool __fastcall GetAllowSelection(void); + bool __fastcall GetSingleClick(void); + void __fastcall SetAllowSelection(const bool Value); + void __fastcall SetSingleClick(const bool Value); + void __fastcall DoOnBackBitmapChange(System::TObject* Sender); + bool __fastcall GetPageBreaksBeforeItems(int Index); + void __fastcall SetPageBreaksBeforeItems(int Index, bool Value); + int __fastcall GetDocumentHeight(void); + int __fastcall GetFirstJumpNo(void); + void __fastcall SetFirstJumpNo(int Value); + void __fastcall SetTabNavigation(const Rvscroll::TRVTabNavigationType Value); + void __fastcall SetRTFReadProperties(const Rvrtfprops::TRVRTFReaderProperties* Value); + void __fastcall SetDocParameters(const Rvdocparams::TRVDocParameters* Value); + bool __fastcall StoreDelimiters(void); + void __fastcall SetDocProperties(const Classes::TStringList* Value); + void __fastcall DoClearLiveSpellingResults(void); + void __fastcall ClearItemLiveSpellingResults(Crvdata::TCustomRVData* RVData, int ItemNo, int &UserData1, const AnsiString UserData2, bool &ContinueEnum); + void __fastcall LiveSpellingValidateWordInItem(Crvdata::TCustomRVData* RVData, int ItemNo, int &UserData1, const AnsiString UserData2, bool &ContinueEnum); + void __fastcall FullInvalidate(void); + void __fastcall SetAnimationMode(const TRVAnimationMode Value); + void __fastcall KillAnimators(void); + Rvpopup::TRVSmartPopupProperties* __fastcall GetSmartPopupProperties(void); + void __fastcall SetSmartPopupProperties(const Rvpopup::TRVSmartPopupProperties* Value); + bool __fastcall GetSmartPopupVisible(void); + void __fastcall SetSmartPopupVisible(const bool Value); + bool __fastcall StoreDocParameters(void); + bool __fastcall GetClearLeft(int Index); + bool __fastcall GetClearRight(int Index); + void __fastcall SetClearLeft(int Index, const bool Value); + void __fastcall SetClearRight(int Index, const bool Value); + void __fastcall OutputDebug(System::TObject* Sender); + void __fastcall MouseDebug(System::TObject* Sender); + +protected: + int VScrollDelta; + int HScrollDelta; + Classes::TNotifyEvent FOnSelect; + Rvstyle::TRVStyle* FStyle; + AnsiString imgSavePrefix; + Rvstyle::TRVSaveOptions SaveOptions; + Graphics::TColor CurrentFileColor; + Rvthread::TRVWordEnumThread* FWordEnumThread; + DYNAMIC void __fastcall AdjustPopupMenuPos(Types::TPoint &pt); + virtual void __fastcall SetBiDiModeRV(const Rvscroll::TRVBiDiMode Value); + virtual void __fastcall SetVSmallStep(int Value); + virtual void __fastcall Paint(void); + Graphics::TColor __fastcall GetColor(void); + Graphics::TColor __fastcall GetHoverColor(Graphics::TColor Color); + bool __fastcall IsCopyShortcut(Classes::TShiftState Shift, Word Key); + bool __fastcall IsCutShortcut(Classes::TShiftState Shift, Word Key); + bool __fastcall IsPasteShortcut(Classes::TShiftState Shift, Word Key); + DYNAMIC void __fastcall DblClick(void); + DYNAMIC void __fastcall KeyDown(Word &Key, Classes::TShiftState Shift); + virtual void __fastcall ClearTemporal(void); + int __fastcall GetFirstItemVisible(void); + int __fastcall GetLastItemVisible(void); + Graphics::TBitmap* __fastcall GetBackBitmap(void); + void __fastcall SetBackBitmap(Graphics::TBitmap* Value); + void __fastcall SetBackgroundStyle(Rvscroll::TBackgroundStyle Value); + Rvscroll::TBackgroundStyle __fastcall GetBackgroundStyle(void); + virtual void __fastcall Notification(Classes::TComponent* AComponent, Classes::TOperation Operation); + virtual void __fastcall Loaded(void); + bool __fastcall CompareTags(int Tag1, int Tag2); + virtual void __fastcall SetStyle(Rvstyle::TRVStyle* Value); + virtual void __fastcall AfterVScroll(void); + virtual void __fastcall InplaceRedrawing(bool AllowRedrawItself); + virtual void __fastcall AfterHScroll(void); + void __fastcall GenerateMouseMove(void); + void __fastcall Format_(bool OnlyResized, bool ForceFormat, Graphics::TCanvas* Canvas, bool OnlyTail, bool NoCaching, bool Reformatting); + virtual TMetaClass* __fastcall GetDataClass(void); + Rvscroll::TRVTabNavigationType __fastcall GetTabNavigation(void); + virtual Rvrtfprops::TRVRTFReaderProperties* __fastcall GetRTFReadProperties(void); + virtual TMetaClass* __fastcall GetRTFReadPropertiesClass(void); + virtual Rvdocparams::TRVDocParameters* __fastcall GetDocParameters(void); + DYNAMIC void __fastcall AfterCreateWnd1(void); + DYNAMIC void __fastcall AfterCreateWnd2(void); + virtual void __fastcall SetName(const AnsiString NewName); + void __fastcall ResumeLiveSpelling(void); + void __fastcall ShowSmartPopup(void); + void __fastcall HideSmartPopup(void); + DYNAMIC void __fastcall SetSmartPopupTarget(void); + __property bool AllowSelection = {read=GetAllowSelection, write=SetAllowSelection, stored=false, nodefault}; + __property bool SingleClick = {read=GetSingleClick, write=SetSingleClick, stored=false, nodefault}; + __property TRVPaintEvent OnPaint = {read=FOnPaint, write=FOnPaint}; + +public: + Rvrvdata::TRichViewRVData* RVData; + Crvdata::TRVFlags Flags; + Rvback::TRVBackground* Background; + int imgSaveNo; + bool CurPictureInvalid; + __property AnsiString NoteText = {read=FNoteText, write=FNoteText}; + __property Canvas ; + DYNAMIC Graphics::TCanvas* __fastcall GetFormatCanvas(Graphics::TCanvas* DefCanvas); + void __fastcall SelectNext_(bool GoForward); + DYNAMIC void __fastcall MouseDown(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + DYNAMIC void __fastcall MouseMove(Classes::TShiftState Shift, int X, int Y); + DYNAMIC void __fastcall MouseUp(Controls::TMouseButton Button, Classes::TShiftState Shift, int X, int Y); + void __fastcall ActivateScrollTimer(bool Slow); + void __fastcall DeactivateScrollTimer(void); + DYNAMIC bool __fastcall RTFReaderAssigned(void); + DYNAMIC bool __fastcall DocParametersAssigned(void); + void __fastcall AssignEvents(TCustomRichView* Source); + __fastcall virtual TCustomRichView(Classes::TComponent* AOwner); + __fastcall virtual ~TCustomRichView(void); + DYNAMIC void __fastcall GetTabOrderList(Classes::TList* List); + void __fastcall AssignSoftPageBreaks(Classes::TComponent* RVPrint); + void __fastcall ClearSoftPageBreaks(void); + void __fastcall AddItemR(const AnsiString Text, Rvitem::TCustomRVItemInfo* Item); + void __fastcall AddItem(const AnsiString Text, Rvitem::TCustomRVItemInfo* Item); + void __fastcall AddNLR(const AnsiString s, int StyleNo, int ParaNo); + void __fastcall AddNL(const AnsiString s, int StyleNo, int ParaNo); + void __fastcall AddFmt(const AnsiString FormatStr, System::TVarRec const * Args, const int Args_Size, int StyleNo, int ParaNo); + void __fastcall AddR(const AnsiString s, int StyleNo); + void __fastcall Add(const AnsiString s, int StyleNo); + void __fastcall AddTextNLR(const AnsiString s, int StyleNo, int FirstParaNo, int OtherParaNo); + void __fastcall AddTextNL(const AnsiString s, int StyleNo, int FirstParaNo, int OtherParaNo); + void __fastcall AddTextNLA(const AnsiString s, int StyleNo, int FirstParaNo, int OtherParaNo); + void __fastcall AddTextBlockNLA(const AnsiString s, int StyleNo, int ParaNo); + void __fastcall AddTab(int TextStyleNo, int ParaNo); + void __fastcall AddBreak(void); + int __fastcall AddCheckpoint(void); + int __fastcall AddNamedCheckpoint(const AnsiString CpName); + int __fastcall AddNamedCheckpointEx(const AnsiString CpName, bool RaiseEvent); + void __fastcall AddPictureEx(const AnsiString Name, Graphics::TGraphic* gr, int ParaNo, Rvstyle::TRVVAlign VAlign); + void __fastcall AddHotPicture(const AnsiString Name, Graphics::TGraphic* gr, int ParaNo, Rvstyle::TRVVAlign VAlign); + void __fastcall AddHotspotEx(const AnsiString Name, int ImageIndex, int HotImageIndex, Imglist::TCustomImageList* ImageList, int ParaNo); + void __fastcall AddBulletEx(const AnsiString Name, int ImageIndex, Imglist::TCustomImageList* ImageList, int ParaNo); + void __fastcall AddControlEx(const AnsiString Name, Controls::TControl* ctrl, int ParaNo, Rvstyle::TRVVAlign VAlign); + void __fastcall AddBreakEx(Byte Width, Rvstyle::TRVBreakStyle Style, Graphics::TColor Color); + void * __fastcall SetDebug(void); + void __fastcall AddNLRTag(const AnsiString s, int StyleNo, int ParaNo, int Tag); + void __fastcall AddNLTag(const AnsiString s, int StyleNo, int ParaNo, int Tag); + void __fastcall AddRTag(const AnsiString s, int StyleNo, int Tag); + void __fastcall AddTag(const AnsiString s, int StyleNo, int Tag); + void __fastcall AddBreakTag(int Tag); + int __fastcall AddCheckpointTag(int Tag); + int __fastcall AddNamedCheckpointExTag(const AnsiString CpName, bool RaiseEvent, int Tag); + void __fastcall AddPictureExTag(const AnsiString Name, Graphics::TGraphic* gr, int ParaNo, Rvstyle::TRVVAlign VAlign, int Tag); + void __fastcall AddHotPictureTag(const AnsiString Name, Graphics::TGraphic* gr, int ParaNo, Rvstyle::TRVVAlign VAlign, int Tag); + void __fastcall AddHotspotExTag(const AnsiString Name, int ImageIndex, int HotImageIndex, Imglist::TCustomImageList* ImageList, int ParaNo, int Tag); + void __fastcall AddBulletExTag(const AnsiString Name, int ImageIndex, Imglist::TCustomImageList* ImageList, int ParaNo, int Tag); + void __fastcall AddControlExTag(const AnsiString Name, Controls::TControl* ctrl, int ParaNo, Rvstyle::TRVVAlign VAlign, int Tag); + void __fastcall AddBreakExTag(Byte Width, Rvstyle::TRVBreakStyle Style, Graphics::TColor Color, int Tag); + void __fastcall AddFromNewLine(const AnsiString s, int StyleNo); + void __fastcall AddCenterLine(const AnsiString s, int StyleNo); + void __fastcall AddText(const AnsiString s, int StyleNo); + void __fastcall AddTextFromNewLine(const AnsiString s, int StyleNo); + void __fastcall AddPicture(Graphics::TGraphic* gr); + void __fastcall AddHotspot(int ImageIndex, Imglist::TCustomImageList* ImageList, bool fromnewline); + void __fastcall AddBullet(int ImageIndex, Imglist::TCustomImageList* ImageList, bool fromnewline); + void __fastcall AddControl(Controls::TControl* ctrl, bool center); + int __fastcall GetCheckpointY(int no); + Rvstyle::TCheckpointData __fastcall GetFirstCheckpoint(void); + Rvstyle::TCheckpointData __fastcall GetNextCheckpoint(Rvstyle::TCheckpointData CheckpointData); + Rvstyle::TCheckpointData __fastcall GetLastCheckpoint(void); + Rvstyle::TCheckpointData __fastcall GetPrevCheckpoint(Rvstyle::TCheckpointData CheckpointData); + Rvstyle::TCheckpointData __fastcall GetItemCheckpoint(int ItemNo); + Rvstyle::TCheckpointData __fastcall FindCheckpointByName(const AnsiString Name); + Rvstyle::TCheckpointData __fastcall FindCheckpointByTag(int Tag); + Rvstyle::TCheckpointData __fastcall GetCheckpointByNo(int No); + void __fastcall GetCheckpointInfo(Rvstyle::TCheckpointData CheckpointData, int &Tag, AnsiString &Name, bool &RaiseEvent); + void __fastcall GetCheckpointXY(Rvstyle::TCheckpointData CheckpointData, int &X, int &Y); + int __fastcall GetCheckpointYEx(Rvstyle::TCheckpointData CheckpointData); + int __fastcall GetCheckpointItemNo(Rvstyle::TCheckpointData CheckpointData); + int __fastcall GetCheckpointNo(Rvstyle::TCheckpointData CheckpointData); + int __fastcall GetJumpPointY(int id); + int __fastcall GetJumpPointItemNo(int id); + void __fastcall GetJumpPointLocation(int id, Crvfdata::TCustomRVFormattedData* &RVData, int &ItemNo); + bool __fastcall GetItemCoords(int ItemNo, int &Left, int &Top); + bool __fastcall GetItemClientCoords(int ItemNo, int &Left, int &Top); + void __fastcall Clear(void); + void __fastcall Format(void); + void __fastcall Reformat(void); + void __fastcall FormatTail(void); + void __fastcall AppendFrom(TCustomRichView* Source); + bool __fastcall SaveHTMLToStreamEx(Classes::TStream* Stream, const AnsiString Path, const AnsiString Title, const AnsiString ImagesPrefix, const AnsiString ExtraStyles, const AnsiString ExternalCSS, const AnsiString CPPrefix, Rvstyle::TRVSaveOptions Options); + bool __fastcall SaveHTMLToStream(Classes::TStream* Stream, const AnsiString Path, const AnsiString Title, const AnsiString ImagesPrefix, Rvstyle::TRVSaveOptions Options); + bool __fastcall SaveHTMLEx(const AnsiString FileName, const AnsiString Title, const AnsiString ImagesPrefix, const AnsiString ExtraStyles, const AnsiString ExternalCSS, const AnsiString CPPrefix, Rvstyle::TRVSaveOptions Options); + bool __fastcall SaveHTML(const AnsiString FileName, const AnsiString Title, const AnsiString ImagesPrefix, Rvstyle::TRVSaveOptions Options); + bool __fastcall SaveText(const AnsiString FileName, int LineWidth); + bool __fastcall SaveTextToStream(const AnsiString Path, Classes::TStream* Stream, int LineWidth, bool SelectionOnly, bool TextOnly); + bool __fastcall LoadText(const AnsiString FileName, int StyleNo, int ParaNo, bool AsSingleParagraph); + bool __fastcall LoadTextFromStream(Classes::TStream* Stream, int StyleNo, int ParaNo, bool AsSingleParagraph); + Crvdata::TRVLayoutInfo* __fastcall CreateLayoutInfo(void); + DYNAMIC void __fastcall ApplyLayoutInfo(Crvdata::TRVLayoutInfo* Layout); + bool __fastcall LoadRVFFromStream(Classes::TStream* Stream); + bool __fastcall InsertRVFFromStream(Classes::TStream* Stream, int Index); + bool __fastcall AppendRVFFromStream(Classes::TStream* Stream, int ParaNo); + bool __fastcall LoadRVF(const AnsiString FileName); + bool __fastcall SaveRVFToStream(Classes::TStream* Stream, bool SelectionOnly); + bool __fastcall SaveRVF(const AnsiString FileName, bool SelectionOnly); + void __fastcall CopyRVF(void); + bool __fastcall SaveRTFToStream(Classes::TStream* Stream, bool SelectionOnly); + bool __fastcall SaveRTF(const AnsiString FileName, bool SelectionOnly); + void __fastcall CopyRTF(void); + bool __fastcall LoadRTFFromStream(Classes::TStream* Stream); + bool __fastcall LoadRTF(const AnsiString FileName); + bool __fastcall LoadFromStream(Classes::TStream* Stream, TRVYesNoAuto IsTextUnicode); + void __fastcall AddNLATag(const AnsiString s, int StyleNo, int ParaNo, int Tag); + bool __fastcall SaveTextW(const AnsiString FileName, int LineWidth); + bool __fastcall SaveTextToStreamW(const AnsiString Path, Classes::TStream* Stream, int LineWidth, bool SelectionOnly, bool TextOnly); + bool __fastcall LoadTextW(const AnsiString FileName, int StyleNo, int ParaNo, bool DefAsSingleParagraph); + bool __fastcall LoadTextFromStreamW(Classes::TStream* Stream, int StyleNo, int ParaNo, bool DefAsSingleParagraph); + void __fastcall SetItemTextA(int ItemNo, const AnsiString s); + void __fastcall AddNLWTag(const WideString s, int StyleNo, int ParaNo, int Tag); + void __fastcall AddTextNLW(const WideString s, int StyleNo, int FirstParaNo, int OtherParaNo, bool DefAsSingleParagraph); + WideString __fastcall GetSelTextW(); + WideString __fastcall GetItemTextW(int ItemNo); + void __fastcall SetItemTextW(int ItemNo, const WideString s); + AnsiString __fastcall GetItemTextA(int ItemNo); + void __fastcall DeleteSection(const AnsiString CpName); + void __fastcall DeleteItems(int FirstItemNo, int Count); + void __fastcall DeleteParas(int FirstItemNo, int LastItemNo); + void __fastcall CopyTextA(void); + void __fastcall CopyTextW(void); + void __fastcall CopyText(void); + void __fastcall CopyImage(void); + void __fastcall Copy(void); + bool __fastcall CopyDef(void); + Graphics::TGraphic* __fastcall GetSelectedImage(void); + AnsiString __fastcall GetSelTextA(); + AnsiString __fastcall GetSelText(); + bool __fastcall SelectionExists(void); + void __fastcall Deselect(void); + void __fastcall SelectAll(void); + bool __fastcall SearchTextA(const AnsiString s, Rvscroll::TRVSearchOptions SrchOptions); + bool __fastcall SearchTextW(const WideString s, Rvscroll::TRVSearchOptions SrchOptions); + bool __fastcall SearchText(const AnsiString s, Rvscroll::TRVSearchOptions SrchOptions); + int __fastcall GetItemStyle(int ItemNo); + void __fastcall GetBreakInfo(int ItemNo, Byte &AWidth, Rvstyle::TRVBreakStyle &AStyle, Graphics::TColor &AColor, int &ATag); + void __fastcall GetBulletInfo(int ItemNo, AnsiString &AName, int &AImageIndex, Imglist::TCustomImageList* &AImageList, int &ATag); + void __fastcall GetHotspotInfo(int ItemNo, AnsiString &AName, int &AImageIndex, int &AHotImageIndex, Imglist::TCustomImageList* &AImageList, int &ATag); + void __fastcall GetPictureInfo(int ItemNo, AnsiString &AName, Graphics::TGraphic* &Agr, Rvstyle::TRVVAlign &AVAlign, int &ATag); + void __fastcall GetControlInfo(int ItemNo, AnsiString &AName, Controls::TControl* &Actrl, Rvstyle::TRVVAlign &AVAlign, int &ATag); + void __fastcall GetTextInfo(int ItemNo, AnsiString &AText, int &ATag); + int __fastcall GetItemTag(int ItemNo); + Rvstyle::TRVVAlign __fastcall GetItemVAlign(int ItemNo); + void __fastcall SetItemTextR(int ItemNo, const AnsiString s); + void __fastcall SetItemText(int ItemNo, const AnsiString s); + AnsiString __fastcall GetItemTextR(int ItemNo); + AnsiString __fastcall GetItemText(int ItemNo); + bool __fastcall SetItemExtraIntProperty(int ItemNo, Rvitem::TRVExtraItemProperty Prop, int Value); + bool __fastcall GetItemExtraIntProperty(int ItemNo, Rvitem::TRVExtraItemProperty Prop, int &Value); + bool __fastcall SetItemExtraStrProperty(int ItemNo, Rvitem::TRVExtraItemStrProperty Prop, const AnsiString Value); + bool __fastcall GetItemExtraStrProperty(int ItemNo, Rvitem::TRVExtraItemStrProperty Prop, AnsiString &Value); + bool __fastcall IsParaStart(int ItemNo); + int __fastcall GetItemPara(int ItemNo); + bool __fastcall IsFromNewLine(int ItemNo); + void __fastcall SetBreakInfo(int ItemNo, Byte AWidth, Rvstyle::TRVBreakStyle AStyle, Graphics::TColor AColor, int ATag); + void __fastcall SetBulletInfo(int ItemNo, const AnsiString AName, int AImageIndex, Imglist::TCustomImageList* AImageList, int ATag); + void __fastcall SetHotspotInfo(int ItemNo, const AnsiString AName, int AImageIndex, int AHotImageIndex, Imglist::TCustomImageList* AImageList, int ATag); + bool __fastcall SetPictureInfo(int ItemNo, const AnsiString AName, Graphics::TGraphic* Agr, Rvstyle::TRVVAlign AVAlign, int ATag); + bool __fastcall SetControlInfo(int ItemNo, const AnsiString AName, Rvstyle::TRVVAlign AVAlign, int ATag); + void __fastcall SetItemTag(int ItemNo, int ATag); + void __fastcall SetItemVAlign(int ItemNo, Rvstyle::TRVVAlign VAlign); + void __fastcall SetCheckpointInfo(int ItemNo, int ATag, const AnsiString AName, bool ARaiseEvent); + bool __fastcall RemoveCheckpoint(int ItemNo); + int __fastcall FindControlItemNo(Controls::TControl* actrl); + bool __fastcall SelectControl(Controls::TControl* actrl); + void __fastcall GetSelectionBounds(int &StartItemNo, int &StartItemOffs, int &EndItemNo, int &EndItemOffs, bool Normalize); + void __fastcall SetSelectionBounds(int StartItemNo, int StartItemOffs, int EndItemNo, int EndItemOffs); + void __fastcall GetWordAt(int X, int Y, Crvfdata::TCustomRVFormattedData* &ARVData, int &AItemNo, AnsiString &AWord)/* overload */; + void __fastcall GetWordAtR(int X, int Y, Crvfdata::TCustomRVFormattedData* &ARVData, int &AItemNo, AnsiString &AWord); + AnsiString __fastcall GetWordAtA(int X, int Y); + WideString __fastcall GetWordAtW(int X, int Y); + AnsiString __fastcall GetWordAt(int X, int Y)/* overload */; + void __fastcall SelectWordAt(int X, int Y); + DYNAMIC void __fastcall UpdatePaletteInfo(void); + int __fastcall GetOffsBeforeItem(int ItemNo); + int __fastcall GetOffsAfterItem(int ItemNo); + void __fastcall SetAddParagraphMode(bool AllowNewPara); + virtual AnsiString __fastcall SavePicture(Rvstyle::TRVSaveFormat DocumentSaveFormat, const AnsiString Path, Graphics::TGraphic* gr); + Types::TRect __fastcall GetSelectionRect(); + Rvitem::TCustomRVItemInfo* __fastcall GetItem(int ItemNo); + int __fastcall GetItemNo(Rvitem::TCustomRVItemInfo* Item); + void __fastcall GetFocusedItem(Crvfdata::TCustomRVFormattedData* &ARVData, int &AItemNo); + void __fastcall MarkStylesInUse(Rvitem::TRVDeleteUnusedStylesData* Data); + void __fastcall DeleteMarkedStyles(Rvitem::TRVDeleteUnusedStylesData* Data); + void __fastcall DeleteUnusedStyles(bool TextStyles, bool ParaStyles, bool ListStyles); + void __fastcall BeginOleDrag(void); + virtual TMetaClass* __fastcall GetRVDropSourceClass(void); + int __fastcall SetListMarkerInfo(int AItemNo, int AListNo, int AListLevel, int AStartFrom, int AParaNo, bool AUseStartFrom); + void __fastcall RemoveListMarker(int ItemNo); + int __fastcall GetListMarkerInfo(int AItemNo, int &AListNo, int &AListLevel, int &AStartFrom, bool &AUseStartFrom); + void __fastcall RefreshListMarkers(void); + int __fastcall GetLineNo(int ItemNo, int ItemOffs); + bool __fastcall GetItemAt(int X, int Y, Crvfdata::TCustomRVFormattedData* &RVData, int &ItemNo, int &OffsetInItem, bool Strict); + Types::TPoint __fastcall ClientToDocument(const Types::TPoint &APoint); + void __fastcall StartLiveSpelling(void); + void __fastcall ClearLiveSpellingResults(void); + void __fastcall LiveSpellingValidateWord(const AnsiString AWord); + void __fastcall LaterSetBackLiveSpellingTo(Crvdata::TCustomRVData* RVData, int ItemNo, int Offs); + void __fastcall RemoveRVDataFromLiveSpelling(Crvdata::TCustomRVData* RVData); + void __fastcall AdjustLiveSpellingOnKeyPress(Crvdata::TCustomRVData* RVData, int ItemNo, int Index, char ch); + void __fastcall AdjustLiveSpellingOnDelete(Crvdata::TCustomRVData* RVData, int ItemNo, int Index, int Count); + void __fastcall LiveSpellingCheckCurrentItem(Crvdata::TCustomRVData* RVData, int ItemNo); + void __fastcall StartAnimation(void); + void __fastcall StopAnimation(void); + void __fastcall ResetAnimation(void); + DYNAMIC bool __fastcall ExecuteAction(Classes::TBasicAction* Action); + DYNAMIC bool __fastcall UpdateAction(Classes::TBasicAction* Action); + virtual void __fastcall Invalidate(void); + virtual void __fastcall Update(void); + __property int LineCount = {read=GetLineCount, nodefault}; + __property int ItemCount = {read=GetLineCount, nodefault}; + __property int FirstItemVisible = {read=GetFirstItemVisible, nodefault}; + __property int LastItemVisible = {read=GetLastItemVisible, nodefault}; + __property Rvstyle::TRVFWarnings RVFWarnings = {read=FRVFWarnings, write=FRVFWarnings, nodefault}; + __property int DocumentHeight = {read=GetDocumentHeight, nodefault}; + __property bool PageBreaksBeforeItems[int Index] = {read=GetPageBreaksBeforeItems, write=SetPageBreaksBeforeItems}; + __property bool ClearLeft[int Index] = {read=GetClearLeft, write=SetClearLeft}; + __property bool ClearRight[int Index] = {read=GetClearRight, write=SetClearRight}; + __property TRVAnimationMode AnimationMode = {read=FAnimationMode, write=SetAnimationMode, default=1}; + __property Graphics::TBitmap* BackgroundBitmap = {read=GetBackBitmap, write=SetBackBitmap}; + __property Rvscroll::TBackgroundStyle BackgroundStyle = {read=GetBackgroundStyle, write=SetBackgroundStyle, nodefault}; + __property int BottomMargin = {read=FBottomMargin, write=FBottomMargin, default=5}; + __property Color = {default=536870911}; + __property Rvscroll::TCPEventKind CPEventKind = {read=FCPEventKind, write=FCPEventKind, nodefault}; + __property Controls::TCursor Cursor = {read=FCursor, write=FCursor, nodefault}; + __property AnsiString Delimiters = {read=FDelimiters, write=FDelimiters, stored=StoreDelimiters}; + __property DoInPaletteMode ; + __property int FirstJumpNo = {read=GetFirstJumpNo, write=SetFirstJumpNo, default=0}; + __property FullRedraw ; + __property HScrollVisible = {default=1}; + __property HScrollMax ; + __property HScrollPos ; + __property InplaceEditor ; + __property int LeftMargin = {read=FLeftMargin, write=FLeftMargin, default=5}; + __property TRVLiveSpellingMode LiveSpellingMode = {read=FLiveSpellingMode, write=FLiveSpellingMode, default=0}; + __property int MaxLength = {read=FMaxLength, write=FMaxLength, default=0}; + __property int MaxTextWidth = {read=FMaxTextWidth, write=FMaxTextWidth, default=0}; + __property int MinTextWidth = {read=FMinTextWidth, write=FMinTextWidth, default=0}; + __property Rvscroll::TRVOptions Options = {read=FOptions, write=FOptions, default=326949}; + __property int RightMargin = {read=FRightMargin, write=FRightMargin, default=5}; + __property Rvstyle::TRVRTFOptions RTFOptions = {read=FRTFOptions, write=FRTFOptions, default=14}; + __property Rvrtfprops::TRVRTFReaderProperties* RTFReadProperties = {read=GetRTFReadProperties, write=SetRTFReadProperties}; + __property Rvdocparams::TRVDocParameters* DocParameters = {read=GetDocParameters, write=SetDocParameters, stored=StoreDocParameters}; + __property Rvstyle::TRVFOptions RVFOptions = {read=FRVFOptions, write=FRVFOptions, default=98435}; + __property Rvstyle::TRVFReaderStyleMode RVFParaStylesReadMode = {read=FRVFParaStylesReadMode, write=FRVFParaStylesReadMode, default=2}; + __property Rvstyle::TRVFReaderStyleMode RVFTextStylesReadMode = {read=FRVFTextStylesReadMode, write=FRVFTextStylesReadMode, default=2}; + __property Rvstyle::TRVStyle* Style = {read=FStyle, write=SetStyle}; + __property Rvscroll::TRVTabNavigationType TabNavigation = {read=GetTabNavigation, write=SetTabNavigation, default=1}; + __property int TopMargin = {read=FTopMargin, write=FTopMargin, default=5}; + __property Classes::TStringList* DocProperties = {read=FDocProperties, write=SetDocProperties}; + __property VScrollMax ; + __property VScrollPos ; + __property VScrollVisible = {default=1}; + __property VSmallStep ; + __property Rvpopup::TRVSmartPopupProperties* SmartPopupProperties = {read=GetSmartPopupProperties, write=SetSmartPopupProperties}; + __property bool SmartPopupVisible = {read=GetSmartPopupVisible, write=SetSmartPopupVisible, nodefault}; + __property Stdctrls::TTextLayout VAlign = {read=FVAlign, write=FVAlign, default=0}; + __property bool WordWrap = {read=FWordWrap, write=FWordWrap, default=1}; + __property TRVDblClickEvent OnRVDblClick = {read=FOnRVDblClick, write=FOnRVDblClick}; + __property TRVCheckpointVisibleEvent OnCheckpointVisible = {read=FOnCheckpointVisible, write=FOnCheckpointVisible}; + __property TRVControlActionEvent OnControlAction = {read=FOnControlAction, write=FOnControlAction}; + __property TRVItemActionEvent OnItemAction = {read=FOnItemAction, write=FOnItemAction}; + __property Classes::TNotifyEvent OnCopy = {read=FOnCopy, write=FOnCopy}; + __property TRVImportPictureEvent OnImportPicture = {read=FOnImportPicture, write=FOnImportPicture}; + __property TRVItemHintEvent OnItemHint = {read=FOnItemHint, write=FOnItemHint}; + __property TJumpEvent OnJump = {read=FOnJump, write=FOnJump}; + __property TRVGetItemCursorEvent OnGetItemCursor = {read=FOnGetItemCursor, write=FOnGetItemCursor}; + __property TRVHTMLSaveImageEvent OnHTMLSaveImage = {read=FOnHTMLSaveImage, write=FOnHTMLSaveImage}; + __property TRVSaveImageEvent2 OnSaveImage2 = {read=FOnSaveImage2, write=FOnSaveImage2}; + __property TRVReadHyperlink OnReadHyperlink = {read=FOnReadHyperlink, write=FOnReadHyperlink}; + __property TRVWriteHyperlink OnWriteHyperlink = {read=FOnWriteHyperlink, write=FOnWriteHyperlink}; + __property TRVURLNeededEvent OnURLNeeded = {read=FOnURLNeeded, write=FOnURLNeeded}; + __property TRVMouseEvent OnRVMouseDown = {read=FOnRVMouseDown, write=FOnRVMouseDown}; + __property TRVMouseMoveEvent OnRVMouseMove = {read=FOnRVMouseMove, write=FOnRVMouseMove}; + __property TRVMouseEvent OnRVMouseUp = {read=FOnRVMouseUp, write=FOnRVMouseUp}; + __property TRVRightClickEvent OnRVRightClick = {read=FOnRVRightClick, write=FOnRVRightClick}; + __property TRVFControlNeededEvent OnRVFControlNeeded = {read=FOnRVFControlNeeded, write=FOnRVFControlNeeded}; + __property TRVFImageListNeededEvent OnRVFImageListNeeded = {read=FOnRVFImageListNeeded, write=FOnRVFImageListNeeded}; + __property TRVFPictureNeededEvent OnRVFPictureNeeded = {read=FOnRVFPictureNeeded, write=FOnRVFPictureNeeded}; + __property TRVSaveComponentToFileEvent OnSaveComponentToFile = {read=FOnSaveComponentToFile, write=FOnSaveComponentToFile}; + __property TRVSaveItemToFileEvent OnSaveItemToFile = {read=FOnSaveItemToFile, write=FOnSaveItemToFile}; + __property Classes::TNotifyEvent OnSelect = {read=FOnSelect, write=FOnSelect}; + __property TRVSaveRTFExtraEvent OnSaveRTFExtra = {read=FOnSaveRTFExtra, write=FOnSaveRTFExtra}; + __property TRVSaveHTMLExtraEvent OnSaveHTMLExtra = {read=FOnSaveHTMLExtra, write=FOnSaveHTMLExtra}; + __property TRVSaveParaToHTMLEvent OnSaveParaToHTML = {read=FOnSaveParaToHTML, write=FOnSaveParaToHTML}; + __property TRVProgressEvent OnProgress = {read=FOnProgress, write=FOnProgress}; + __property TRVSpellingCheckEvent OnSpellingCheck = {read=FOnSpellingCheck, write=FOnSpellingCheck}; + __property TRVSmartPopupClickEvent OnSmartPopupClick = {read=FOnSmartPopupClick, write=FOnSmartPopupClick}; + __property TRVGetFormatCanvasEvent OnGetFormatCanvas = {read=FOnGetFormatCanvas, write=FOnGetFormatCanvas}; + __property Classes::TNotifyEvent OnBiDiModeChange = {read=FOnBiDiModeChange, write=FOnBiDiModeChange}; + __property TRVAddStyleEvent OnAddStyle = {read=FOnAddStyle, write=FOnAddStyle}; +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TCustomRichView(HWND ParentWindow) : Rvscroll::TRVScroller(ParentWindow) { } + #pragma option pop + +}; + + +class DELPHICLASS TRichView; +class PASCALIMPLEMENTATION TRichView : public TCustomRichView +{ + typedef TCustomRichView inherited; + +__published: + __property Align = {default=0}; + __property Anchors = {default=3}; + __property Constraints ; + __property Color = {default=536870911}; + __property Ctl3D ; + __property DragKind = {default=0}; + __property DragMode = {default=0}; + __property Enabled = {default=1}; + __property HelpContext = {default=0}; + __property ParentCtl3D = {default=1}; + __property ParentShowHint = {default=1}; + __property PopupMenu ; + __property ShowHint ; + __property TabOrder = {default=-1}; + __property TabStop = {default=1}; + __property UseXPThemes = {default=1}; + __property Visible = {default=1}; + __property OnClick ; + __property OnContextPopup ; + __property OnDblClick ; + __property OnDragDrop ; + __property OnDragOver ; + __property OnEndDrag ; + __property OnEnter ; + __property OnExit ; + __property OnKeyDown ; + __property OnKeyPress ; + __property OnKeyUp ; + __property OnMouseMove ; + __property OnMouseWheel ; + __property OnMouseWheelDown ; + __property OnMouseWheelUp ; + __property OnResize ; + __property OnStartDrag ; + __property AnimationMode = {default=1}; + __property BackgroundBitmap ; + __property BackgroundStyle = {default=0}; + __property BiDiMode = {default=0}; + __property BorderStyle = {default=1}; + __property BottomMargin = {default=5}; + __property CPEventKind = {default=0}; + __property Cursor = {default=0}; + __property Delimiters ; + __property DocParameters ; + __property DoInPaletteMode ; + __property FirstJumpNo = {default=0}; + __property HScrollVisible = {default=1}; + __property LeftMargin = {default=5}; + __property MaxLength = {default=0}; + __property MaxTextWidth = {default=0}; + __property MinTextWidth = {default=0}; + __property Options = {default=326949}; + __property RightMargin = {default=5}; + __property RTFOptions = {default=14}; + __property RTFReadProperties ; + __property RVFOptions = {default=98435}; + __property RVFParaStylesReadMode = {default=2}; + __property RVFTextStylesReadMode = {default=2}; + __property Style ; + __property TabNavigation = {default=1}; + __property TopMargin = {default=5}; + __property Tracking = {default=1}; + __property VAlign = {default=0}; + __property VScrollVisible = {default=1}; + __property WheelStep = {default=2}; + __property WordWrap = {default=1}; + __property OnAddStyle ; + __property OnCheckpointVisible ; + __property OnControlAction ; + __property OnCopy ; + __property OnGetItemCursor ; + __property OnImportPicture ; + __property OnItemAction ; + __property OnItemHint ; + __property OnJump ; + __property OnHScrolled ; + __property OnHTMLSaveImage ; + __property OnPaint ; + __property OnProgress ; + __property OnReadHyperlink ; + __property OnRVDblClick ; + __property OnRVFImageListNeeded ; + __property OnRVFControlNeeded ; + __property OnRVFPictureNeeded ; + __property OnRVMouseDown ; + __property OnRVMouseMove ; + __property OnRVMouseUp ; + __property OnRVRightClick ; + __property OnSaveComponentToFile ; + __property OnSaveHTMLExtra ; + __property OnSaveImage2 ; + __property OnSaveItemToFile ; + __property OnSaveRTFExtra ; + __property OnSelect ; + __property OnSpellingCheck ; + __property OnVScrolled ; + __property OnWriteHyperlink ; + __property AllowSelection ; + __property SingleClick ; + __property OnURLNeeded ; +public: + #pragma option push -w-inl + /* TCustomRichView.Create */ inline __fastcall virtual TRichView(Classes::TComponent* AOwner) : TCustomRichView(AOwner) { } + #pragma option pop + #pragma option push -w-inl + /* TCustomRichView.Destroy */ inline __fastcall virtual ~TRichView(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TRichView(HWND ParentWindow) : TCustomRichView(ParentWindow) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- +static const Word WM_RVDRAGDROP = 0x410; +static const Word WM_RVRELOAD = 0x411; +static const Word WM_RVEVENT = 0x40f; +static const Shortint RV_TIMERID_SCROLLING = 0x1; +static const Shortint RV_TIMERID_ANIMATION = 0x2; +static const Shortint RV_TIMERID_CUSTOMCARET = 0x3; +extern PACKAGE TMetaClass* RVWordEnumThreadClass; +extern PACKAGE bool RichViewLMouseScroll; + +} /* namespace Richview */ +using namespace Richview; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Richview diff --git a/12.0.4/Units/D2006/Rvpp.dcu b/12.0.4/Units/D2006/Rvpp.dcu new file mode 100644 index 0000000..492a4b7 Binary files /dev/null and b/12.0.4/Units/D2006/Rvpp.dcu differ diff --git a/12.0.4/Units/D2006/Rvpp.hpp b/12.0.4/Units/D2006/Rvpp.hpp new file mode 100644 index 0000000..27cb9d2 --- /dev/null +++ b/12.0.4/Units/D2006/Rvpp.hpp @@ -0,0 +1,133 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvpp.pas' rev: 10.00 + +#ifndef RvppHPP +#define RvppHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvpp +{ +//-- type declarations ------------------------------------------------------- +class DELPHICLASS TRVPrintPreview; +class PASCALIMPLEMENTATION TRVPrintPreview : public Crvpp::TCustomRVPrintPreview +{ + typedef Crvpp::TCustomRVPrintPreview inherited; + +private: + Ptblrv::TCustomRVPrint* FRVPrint; + int FStoredPageNo; + #pragma pack(push,1) + Types::TRect FStoredRect; + #pragma pack(pop) + int FStoredDocID; + Graphics::TMetafile* FMetafile; + bool FCachePageImage; + void __fastcall SetRVPrint(const Ptblrv::TCustomRVPrint* Value); + +protected: + virtual void __fastcall Notification(Classes::TComponent* AComponent, Classes::TOperation Operation); + DYNAMIC bool __fastcall CanDrawContents(void); + DYNAMIC void __fastcall DrawContents(Graphics::TCanvas* Canvas, const Types::TRect &R); + virtual void __fastcall DrawMargins(Graphics::TCanvas* Canvas, const Types::TRect &R, int PageNo); + DYNAMIC int __fastcall GetPreview100PercentWidth(void); + DYNAMIC int __fastcall GetPreview100PercentHeight(void); + DYNAMIC Types::TRect __fastcall GetPhysMargins(); + DYNAMIC int __fastcall GetPageCount(void); + virtual void __fastcall SetPageNo(const int Value); + virtual void __fastcall Loaded(void); + void __fastcall UpdateImage(int PageNo, const Types::TRect &R); + +public: + __fastcall virtual TRVPrintPreview(Classes::TComponent* AOwner); + __fastcall virtual ~TRVPrintPreview(void); + +__published: + __property bool CachePageImage = {read=FCachePageImage, write=FCachePageImage, default=0}; + __property Ptblrv::TCustomRVPrint* RVPrint = {read=FRVPrint, write=SetRVPrint}; + __property ZoomInCursor = {default=102}; + __property ZoomOutCursor = {default=103}; + __property OnZoomChanged ; + __property MarginsPen ; + __property PrintableAreaPen ; + __property ClickMode = {default=1}; + __property PageBorderColor = {default=-16777203}; + __property PageBorderWidth = {default=2}; + __property ShadowColor = {default=-16777195}; + __property ShadowWidth = {default=4}; + __property BackgroundMargin = {default=20}; + __property Align = {default=0}; + __property Anchors = {default=3}; + __property Constraints ; + __property Ctl3D ; + __property DragKind = {default=0}; + __property DragMode = {default=0}; + __property Enabled = {default=1}; + __property HelpContext = {default=0}; + __property ParentCtl3D = {default=1}; + __property PopupMenu ; + __property ShowHint ; + __property TabOrder = {default=-1}; + __property TabStop = {default=1}; + __property Visible = {default=1}; + __property OnClick ; + __property OnContextPopup ; + __property OnDragDrop ; + __property OnDragOver ; + __property OnEndDrag ; + __property OnEnter ; + __property OnExit ; + __property OnKeyDown ; + __property OnKeyPress ; + __property OnKeyUp ; + __property OnMouseWheel ; + __property OnMouseWheelDown ; + __property OnMouseWheelUp ; + __property OnStartDrag ; + __property BorderStyle ; + __property HScrollVisible = {default=1}; + __property Tracking = {default=1}; + __property UseXPThemes = {default=1}; + __property VScrollVisible = {default=1}; + __property WheelStep = {default=2}; +public: + #pragma option push -w-inl + /* TWinControl.CreateParented */ inline __fastcall TRVPrintPreview(HWND ParentWindow) : Crvpp::TCustomRVPrintPreview(ParentWindow) { } + #pragma option pop + +}; + + +//-- var, const, procedure --------------------------------------------------- + +} /* namespace Rvpp */ +using namespace Rvpp; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvpp diff --git a/12.0.4/Units/D2006/Rvrtf.dcu b/12.0.4/Units/D2006/Rvrtf.dcu new file mode 100644 index 0000000..5f82dbf Binary files /dev/null and b/12.0.4/Units/D2006/Rvrtf.dcu differ diff --git a/12.0.4/Units/D2006/Rvrtf.hpp b/12.0.4/Units/D2006/Rvrtf.hpp new file mode 100644 index 0000000..cd759f4 --- /dev/null +++ b/12.0.4/Units/D2006/Rvrtf.hpp @@ -0,0 +1,1350 @@ +// Borland C++ Builder +// Copyright (c) 1995, 2005 by Borland Software Corporation +// All rights reserved + +// (DO NOT EDIT: machine generated header) 'Rvrtf.pas' rev: 10.00 + +#ifndef RvrtfHPP +#define RvrtfHPP + +#pragma delphiheader begin +#pragma option push +#pragma option -w- // All warnings off +#pragma option -Vx // Zero-length empty class member functions +#pragma pack(push,8) +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit +#include // Pascal unit + +//-- user supplied ----------------------------------------------------------- + +namespace Rvrtf +{ +//-- type declarations ------------------------------------------------------- +#pragma option push -b- +enum TRVRTFHighlightConvert { rtf_hl_Ignore, rtf_hl_FixedColors, rtf_hl_ColorTable }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFTabAlign { rtf_tab_Left, rtf_tab_Right, rtf_tab_Center, rtf_tab_Decimal }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFTabLeader { rtf_tl_None, rtf_tl_Dot, rtf_tl_MiddleDot, rtf_tl_Hyphen, rtf_tl_Underline, rtf_tl_EqualSign }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFSeqType { rtf_seqDecimal, rtf_seqLowerAlpha, rtf_seqUpperAlpha, rtf_seqLowerRoman, rtf_seqUpperRoman }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFPosition { rtf_ts_ContinuePara, rtf_ts_NewLine, rtf_ts_NewPara }; +#pragma option pop + +class DELPHICLASS TRVRTFReader; +typedef void __fastcall (__closure *TRVRTFNewTextEvent)(TRVRTFReader* Sender, const AnsiString Text, TRVRTFPosition Position); + +#pragma option push -b- +enum TRVRTFHeaderFooterType { rtf_hf_MainText, rtf_hf_Header, rtf_hf_Footer }; +#pragma option pop + +typedef void __fastcall (__closure *TRVRTFHeaderFooterEvent)(TRVRTFReader* Sender, TRVRTFHeaderFooterType HFType, bool Starting, bool &Supported); + +#pragma option push -b- +enum TRVRTFNoteEventType { rtf_ne_Character, rtf_ne_Start, rtf_ne_EndNote, rtf_ne_End }; +#pragma option pop + +typedef void __fastcall (__closure *TRVRTFNoteEvent)(TRVRTFReader* Sender, TRVRTFNoteEventType What, TRVRTFPosition Position); + +typedef void __fastcall (__closure *TRVRTFImportPictureEvent)(TRVRTFReader* Sender, const AnsiString Location, Graphics::TGraphic* &Graphic, bool &Invalid); + +typedef void __fastcall (__closure *TRVRTFNewUnicodeTextEvent)(TRVRTFReader* Sender, const WideString Text, TRVRTFPosition Position); + +typedef void __fastcall (__closure *TRVRTFTranslateKeywordEvent)(TRVRTFReader* Sender, const AnsiString Keyword, int Param, bool fParam, AnsiString &Text, bool &DoDefault); + +typedef void __fastcall (__closure *TRVBookmarkEvent)(TRVRTFReader* Sender, const AnsiString BookmarkName); + +#pragma option push -b- +enum TRVRTFProgressStage { rvprtfprStarting, rvprtfprRunning, rvprtfprEnding }; +#pragma option pop + +typedef void __fastcall (__closure *TRVRTFProgressEvent)(TRVRTFReader* Sender, TRVRTFProgressStage Stage, Byte PercentDone); + +#pragma option push -b- +enum TRVRTFUnderlineType { rtf_rvut_Normal, rtf_rvut_Thick, rtf_rvut_Double, rtf_rvut_Dotted, rtf_rvut_ThickDotted, rtf_rvut_Dashed, rtf_rvut_ThickDashed, rtf_rvut_LongDashed, rtf_rvut_ThickLongDashed, rtf_rvut_DashDotted, rtf_rvut_ThickDashDotted, rtf_rvut_DashDotDotted, rtf_rvut_ThickDashDotDotted }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFParaListType { rtf_pn_Default, rtf_pn_Decimal, rtf_pn_LowerLetter, rtf_pn_UpperLetter, rtf_pn_LowerRoman, rtf_pn_UpperRoman, rtf_pn_Bullet }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFPictureType { rtf_pict_EMF, rtf_pict_PNG, rtf_pict_JPEG, rtf_pict_MacPict, rtf_pict_PmMetafile, rtf_pict_WMF, rtf_pict_DIB, rtf_pict_DDB }; +#pragma option pop + +class DELPHICLASS TRVRTFPicture; +class PASCALIMPLEMENTATION TRVRTFPicture : public System::TObject +{ + typedef System::TObject inherited; + +private: + TRVRTFPictureType FType; + int FMetafileMapMode; + int FPicW; + int FPicH; + int FPicWGoalTw; + int FPicHGoalTw; + int FPicScaleX; + int FPicScaleY; + int FWBMWidthBytes; + int FWBMBitsPixel; + int FWBMPlanes; + bool FMetafileWithBitmap; + bool FShpPict; + +public: + Classes::TMemoryStream* FData; + int SuggestedWidth; + int SuggestedHeight; + __fastcall TRVRTFPicture(void); + __fastcall virtual ~TRVRTFPicture(void); + __property int PicW = {read=FPicW, nodefault}; + __property int PicH = {read=FPicH, nodefault}; + __property int PicWGoalTw = {read=FPicWGoalTw, nodefault}; + __property int PicHGoalTw = {read=FPicHGoalTw, nodefault}; + __property int PicScaleX = {read=FPicScaleX, nodefault}; + __property int PicScaleY = {read=FPicScaleY, nodefault}; + __property TRVRTFPictureType PicType = {read=FType, nodefault}; + __property bool MetafileWithBitmap = {read=FMetafileWithBitmap, nodefault}; + __property bool ShpPict = {read=FShpPict, nodefault}; +}; + + +#pragma option push -b- +enum TRVRTFObjectType { rtf_obj_Emb, rtf_obj_Link, rtf_obj_AutLink, rtf_obj_Sub, rtf_obj_Pub, rtf_obj_ICEmb, rtf_obj_HTML, rtf_obj_OCX }; +#pragma option pop + +class DELPHICLASS TRVRTFObject; +class PASCALIMPLEMENTATION TRVRTFObject : public System::TObject +{ + typedef System::TObject inherited; + +private: + TRVRTFObjectType FType; + Classes::TMemoryStream* FData; + int FWidthTw; + int FHeightTw; + +public: + __fastcall TRVRTFObject(void); + __fastcall virtual ~TRVRTFObject(void); + __property TRVRTFObjectType ObjType = {read=FType, nodefault}; + __property Classes::TMemoryStream* Data = {read=FData}; + __property int WidthTw = {read=FWidthTw, nodefault}; + __property int HeightTw = {read=FHeightTw, nodefault}; +}; + + +#pragma option push -b- +enum TRVRTFTableEventKind { rvf_tbl_TableStart, rvf_tbl_TableEnd, rvf_tbl_TableForcedEnd, rvf_tbl_RowEnd, rvf_tbl_CellEnd }; +#pragma option pop + +typedef void __fastcall (__closure *TRVRTFTableEvent)(TRVRTFReader* Sender, TRVRTFTableEventKind WhatHappens, bool &Processed); + +typedef void __fastcall (__closure *TRVRTFNewPictureEvent)(TRVRTFReader* Sender, TRVRTFPicture* RTFPicture, Graphics::TGraphic* Graphic, TRVRTFPosition Position, const AnsiString FileName, bool &Inserted); + +typedef void __fastcall (__closure *TRVRTFNewObjectEvent)(TRVRTFReader* Sender, TRVRTFObject* RTFObject, TRVRTFPosition Position, bool &Inserted); + +typedef void __fastcall (__closure *TRVRTFNewSeqEvent)(TRVRTFReader* Sender, TRVRTFPosition Position, const AnsiString SeqName, TRVRTFSeqType NumberingType, bool Reset, int StartFrom); + +#pragma option push -b- +enum TRVRTFAlignment { rtf_al_Left, rtf_al_Right, rtf_al_Center, rtf_al_Justify }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFBiDiMode { rtf_bidi_Unspecified, rtf_bidi_LTR, rtf_bidi_RTL }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFVAlign { rtf_val_Top, rtf_val_Bottom, rtf_val_Center }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFSScriptType { rtf_ss_Normal, rtf_ss_Subscript, rtf_ss_Superscript }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFFontStyleEx { rtf_fs_AllCaps }; +#pragma option pop + +typedef Set TRVRTFFontStylesEx; + +class DELPHICLASS TRVRTFCharProperties; +class PASCALIMPLEMENTATION TRVRTFCharProperties : public System::TObject +{ + typedef System::TObject inherited; + +private: + bool FHidden; + TRVRTFBiDiMode FBiDiMode; + int FSize; + Graphics::TColor FColor; + Graphics::TColor FBackColor; + Graphics::TColor FUnderlineColor; + int FFontIndex; + Graphics::TFontStyles FStyle; + TRVRTFFontStylesEx FStyleEx; + int FCharScaleX; + TRVRTFSScriptType FSScriptType; + int FVShiftPt; + int FCharSpacingTw; + unsigned FLanguage; + AnsiString FFontName; + TRVRTFUnderlineType FUnderlineType; + int FHighlight; + +public: + __fastcall TRVRTFCharProperties(void); + void __fastcall Reset(unsigned DefLanguage, int DefFontIndex); + void __fastcall Assign(TRVRTFCharProperties* Source); + __property int Size = {read=FSize, nodefault}; + __property Graphics::TColor Color = {read=FColor, nodefault}; + __property Graphics::TColor BackColor = {read=FBackColor, nodefault}; + __property int FontIndex = {read=FFontIndex, nodefault}; + __property Graphics::TFontStyles Style = {read=FStyle, nodefault}; + __property TRVRTFFontStylesEx StyleEx = {read=FStyleEx, nodefault}; + __property int CharScaleX = {read=FCharScaleX, nodefault}; + __property TRVRTFSScriptType SScriptType = {read=FSScriptType, nodefault}; + __property int VShiftPt = {read=FVShiftPt, nodefault}; + __property int CharSpacingTw = {read=FCharSpacingTw, nodefault}; + __property bool Hidden = {read=FHidden, nodefault}; + __property AnsiString FontName = {read=FFontName}; + __property unsigned Language = {read=FLanguage, nodefault}; + __property TRVRTFUnderlineType UnderlineType = {read=FUnderlineType, nodefault}; + __property Graphics::TColor UnderlineColor = {read=FUnderlineColor, nodefault}; + __property TRVRTFBiDiMode BiDiMode = {read=FBiDiMode, nodefault}; +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFCharProperties(void) { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVRTFBorderType { rtf_brdr_None, rtf_brdr_SingleThickness, rtf_brdr_DoubleThickness, rtf_brdr_Shadow, rtf_brdr_Double, rtf_brdr_Dot, rtf_brdr_Dash, rtf_brdr_Hairline, rtf_brdr_DashSmall, rtf_brdr_DotDash, rtf_brdr_DotDotDash, rtf_brdr_Triple, rtf_brdr_ThickThinSmall, rtf_brdr_ThinThickSmall, rtf_brdr_ThinThickThinSmall, rtf_brdr_ThickThinMed, rtf_brdr_ThinThickMed, rtf_brdr_ThinThickThinMed, rtf_brdr_ThickThinLarge, rtf_brdr_ThinThickLarge, rtf_brdr_ThinThickThinLarge, rtf_brdr_Wavy, rtf_brdr_DoubleWavy, rtf_brdr_Striped, rtf_brdr_Emboss, rtf_brdr_Engrave, rtf_brdr_Inset, rtf_brdr_Outset }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFSide { rtf_side_Left, rtf_side_Top, rtf_side_Right, rtf_side_Bottom }; +#pragma option pop + +class DELPHICLASS TRVRTFBorderSide; +class PASCALIMPLEMENTATION TRVRTFBorderSide : public System::TObject +{ + typedef System::TObject inherited; + +private: + TRVRTFBorderType FBorderType; + int FWidthTw; + Graphics::TColor FColor; + int FSpaceTw; + +public: + void __fastcall Assign(TRVRTFBorderSide* Source); + __property TRVRTFBorderType BorderType = {read=FBorderType, nodefault}; + void __fastcall Reset(void); + __property int WidthTw = {read=FWidthTw, nodefault}; + __property Graphics::TColor Color = {read=FColor, nodefault}; + __property int SpaceTw = {read=FSpaceTw, nodefault}; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFBorderSide(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFBorderSide(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFParaBorder; +class PASCALIMPLEMENTATION TRVRTFParaBorder : public System::TObject +{ + typedef System::TObject inherited; + +private: + TRVRTFBorderSide* FSides[4]; + TRVRTFBorderSide* __fastcall GetSides(TRVRTFSide Index); + +public: + void __fastcall Assign(TRVRTFParaBorder* Source); + __fastcall virtual ~TRVRTFParaBorder(void); + void __fastcall Reset(void); + __property TRVRTFBorderSide* Sides[TRVRTFSide Index] = {read=GetSides}; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFParaBorder(void) : System::TObject() { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVRTFMarkerProp { rtfmp_FontIndex, rtfmp_Size, rtfmp_Color, rtfmp_Bold, rtfmp_Italic, rtfmp_Underline, rtfmp_StrikeOut }; +#pragma option pop + +typedef Set TRVRTFMarkerProps; + +class DELPHICLASS TRVRTFCustomMarkerProperties; +class PASCALIMPLEMENTATION TRVRTFCustomMarkerProperties : public System::TObject +{ + typedef System::TObject inherited; + +private: + TRVRTFParaListType FListType; + int FFontIndex; + int FIndentTw; + int FSpaceTw; + int FStart; + Graphics::TFontStyles FFontStyle; + Graphics::TColor FColor; + TRVRTFAlignment FAlignment; + TRVRTFMarkerProps FFixedProperties; + void __fastcall ChangeFontStyle(Graphics::TFontStyle fs, int Val); + +public: + int FFontSize; + __fastcall TRVRTFCustomMarkerProperties(void); + DYNAMIC void __fastcall Reset(void); + void __fastcall Assign(TRVRTFCustomMarkerProperties* Source, bool FromDefaults); + void __fastcall UpdateFrom(TRVRTFCharProperties* CharProps); + __property TRVRTFParaListType ListType = {read=FListType, nodefault}; + __property int FontIndex = {read=FFontIndex, nodefault}; + __property int FontSize = {read=FFontSize, nodefault}; + __property int IndentTw = {read=FIndentTw, nodefault}; + __property int SpaceTw = {read=FSpaceTw, nodefault}; + __property int Start = {read=FStart, nodefault}; + __property Graphics::TFontStyles FontStyle = {read=FFontStyle, nodefault}; + __property Graphics::TColor Color = {read=FColor, nodefault}; + __property TRVRTFAlignment Alignment = {read=FAlignment, nodefault}; +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFCustomMarkerProperties(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFMarkerProperties; +class PASCALIMPLEMENTATION TRVRTFMarkerProperties : public TRVRTFCustomMarkerProperties +{ + typedef TRVRTFCustomMarkerProperties inherited; + +private: + int FLevel; + bool FHanging; + AnsiString FTextAfter; + AnsiString FTextBefore; + +public: + DYNAMIC void __fastcall Reset(void); + HIDESBASE void __fastcall Assign(TRVRTFMarkerProperties* Source, bool FromDefaults); + __property int Level = {read=FLevel, nodefault}; + __property AnsiString TextAfter = {read=FTextAfter}; + __property AnsiString TextBefore = {read=FTextBefore}; + __property bool Hanging = {read=FHanging, nodefault}; +public: + #pragma option push -w-inl + /* TRVRTFCustomMarkerProperties.Create */ inline __fastcall TRVRTFMarkerProperties(void) : TRVRTFCustomMarkerProperties() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFMarkerProperties(void) { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVRTFLevelFollow97 { rtf_lf_Tab, rtf_lf_Space, rtf_lf_None }; +#pragma option pop + +class DELPHICLASS TRVRTFListLevel97; +class PASCALIMPLEMENTATION TRVRTFListLevel97 : public TRVRTFCustomMarkerProperties +{ + typedef TRVRTFCustomMarkerProperties inherited; + +private: + bool FOldStyle; + bool FLegal; + bool FNoRestart; + AnsiString FText; + AnsiString FNumbers; + WideString FTextW; + TRVRTFLevelFollow97 FFollow; + int FLeftIndentTw; + int FFirstIndentTw; + int FTabPosTw; + +public: + bool FFontSizeDefined; + bool FIndentsUpdated; + DYNAMIC void __fastcall Reset(void); + HIDESBASE void __fastcall Assign(TRVRTFListLevel97* Source); + __property bool OldStyle = {read=FOldStyle, nodefault}; + __property bool Legal = {read=FLegal, nodefault}; + __property bool NoRestart = {read=FNoRestart, nodefault}; + __property AnsiString Text = {read=FText}; + __property WideString TextW = {read=FTextW}; + __property AnsiString Numbers = {read=FNumbers}; + __property TRVRTFLevelFollow97 Follow = {read=FFollow, nodefault}; + __property int LeftIndentTw = {read=FLeftIndentTw, nodefault}; + __property int FirstIndentTw = {read=FFirstIndentTw, nodefault}; + __property int TabPosTw = {read=FTabPosTw, nodefault}; +public: + #pragma option push -w-inl + /* TRVRTFCustomMarkerProperties.Create */ inline __fastcall TRVRTFListLevel97(void) : TRVRTFCustomMarkerProperties() { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFListLevel97(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFList97; +class PASCALIMPLEMENTATION TRVRTFList97 : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVRTFListLevel97* operator[](int Index) { return Items[Index]; } + +private: + int FId; + int FTemplateId; + bool FSimple; + AnsiString FName; + HIDESBASE TRVRTFListLevel97* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVRTFListLevel97* Value); + +protected: + TRVRTFListLevel97* __fastcall GetLastLevel(void); + void __fastcall AddNew(void); + +public: + __property TRVRTFListLevel97* Items[int Index] = {read=Get, write=Put/*, default*/}; + __property int Id = {read=FId, nodefault}; + __property int TemplateId = {read=FTemplateId, nodefault}; + __property bool Simple = {read=FSimple, nodefault}; + __property AnsiString Name = {read=FName}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRTFList97(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFList97(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFListTable97; +class PASCALIMPLEMENTATION TRVRTFListTable97 : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVRTFList97* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVRTFList97* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVRTFList97* Value); + +protected: + TRVRTFList97* __fastcall GetLastList(void); + int __fastcall FindList(int ID); + void __fastcall AddNew(void); + +public: + __property TRVRTFList97* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRTFListTable97(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFListTable97(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFListOverrideLevel97; +class PASCALIMPLEMENTATION TRVRTFListOverrideLevel97 : public System::TObject +{ + typedef System::TObject inherited; + +private: + bool FUseStart; + int FStart; + +public: + bool Used; + __fastcall TRVRTFListOverrideLevel97(void); + __property int Start = {read=FStart, nodefault}; + __property bool UseStart = {read=FUseStart, nodefault}; +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFListOverrideLevel97(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFListOverride97; +class PASCALIMPLEMENTATION TRVRTFListOverride97 : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVRTFListOverrideLevel97* operator[](int Index) { return Items[Index]; } + +private: + int FListIndex; + int FNumber; + int FOverrideCount; + HIDESBASE TRVRTFListOverrideLevel97* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVRTFListOverrideLevel97* Value); + +public: + TRVRTFListOverrideLevel97* __fastcall GetLastLevel(void); + void __fastcall AddNew(void); + __property int ListIndex = {read=FListIndex, nodefault}; + __property int Number = {read=FNumber, nodefault}; + __property int OverrideCount = {read=FOverrideCount, nodefault}; + __property TRVRTFListOverrideLevel97* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRTFListOverride97(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFListOverride97(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFListOverrideTable97; +class PASCALIMPLEMENTATION TRVRTFListOverrideTable97 : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVRTFListOverride97* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVRTFListOverride97* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVRTFListOverride97* Value); + +protected: + TRVRTFListOverride97* __fastcall GetLastListOverride(void); + int __fastcall FindListOverride(int Number); + void __fastcall AddNew(void); + +public: + __property TRVRTFListOverride97* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRTFListOverrideTable97(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFListOverrideTable97(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFTab; +class PASCALIMPLEMENTATION TRVRTFTab : public System::TObject +{ + typedef System::TObject inherited; + +private: + int FPositionTW; + TRVRTFTabAlign FAlign; + TRVRTFTabLeader FLeader; + bool FIsListTab; + +public: + void __fastcall Assign(TRVRTFTab* Source); + __property int PositionTW = {read=FPositionTW, nodefault}; + __property TRVRTFTabAlign Align = {read=FAlign, nodefault}; + __property TRVRTFTabLeader Leader = {read=FLeader, nodefault}; + __property bool IsListTab = {read=FIsListTab, nodefault}; +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFTab(void) : System::TObject() { } + #pragma option pop + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFTab(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFTabList; +class PASCALIMPLEMENTATION TRVRTFTabList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVRTFTab* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVRTFTab* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVRTFTab* Value); + +protected: + void __fastcall AddNew(void); + TRVRTFTab* __fastcall GetLastTab(void); + +public: + HIDESBASE void __fastcall Assign(TRVRTFTabList* Source); + __property TRVRTFTab* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRTFTabList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFTabList(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFParaProperties; +class PASCALIMPLEMENTATION TRVRTFParaProperties : public System::TObject +{ + typedef System::TObject inherited; + +private: + int FLeftIndentTw; + int FRightIndentTw; + int FFirstIndentTw; + int FMarkerTabTw; + int FOutlineLevel; + int FSpaceBeforeTw; + int FSpaceAfterTw; + TRVRTFAlignment FAlignment; + TRVRTFBiDiMode FBiDiMode; + TRVRTFParaBorder* FBorder; + TRVRTFMarkerProperties* FMarkerProps; + TRVRTFSide FCurBorderSide; + int FLineSpacing; + bool FLineSpacingMulti; + Graphics::TColor FColor; + int FNestingLevel; + bool FInTable; + int Shading; + Graphics::TColor ForeColor; + int FListOverrideIndex; + int FListLevel; + bool FKeepLinesTogether; + bool FKeepWithNext; + bool NoTableEv; + bool NoResetLev; + TRVRTFTabList* FTabs; + bool FTabsReady; + TRVRTFTabList* __fastcall GetTabs(void); + TRVRTFParaBorder* __fastcall GetBorder(void); + TRVRTFMarkerProperties* __fastcall GetMarkerProps(void); + +public: + __fastcall TRVRTFParaProperties(void); + __fastcall virtual ~TRVRTFParaProperties(void); + void __fastcall Finalize(void); + void __fastcall Reset(void); + void __fastcall Assign(TRVRTFParaProperties* Source); + bool __fastcall HasBorder(void); + bool __fastcall HasMarker(void); + bool __fastcall HasTabs(void); + __property TRVRTFTabList* Tabs = {read=GetTabs}; + __property int LeftIndentTw = {read=FLeftIndentTw, nodefault}; + __property int RightIndentTw = {read=FRightIndentTw, nodefault}; + __property int FirstIndentTw = {read=FFirstIndentTw, nodefault}; + __property int SpaceBeforeTw = {read=FSpaceBeforeTw, nodefault}; + __property int SpaceAfterTw = {read=FSpaceAfterTw, nodefault}; + __property int MarkerTabTw = {read=FMarkerTabTw, write=FMarkerTabTw, nodefault}; + __property TRVRTFAlignment Alignment = {read=FAlignment, nodefault}; + __property TRVRTFParaBorder* Border = {read=GetBorder}; + __property TRVRTFMarkerProperties* MarkerProps = {read=GetMarkerProps}; + __property Graphics::TColor Color = {read=FColor, nodefault}; + __property int LineSpacing = {read=FLineSpacing, nodefault}; + __property bool LineSpacingMulti = {read=FLineSpacingMulti, nodefault}; + __property int NestingLevel = {read=FNestingLevel, nodefault}; + __property bool InTable = {read=FInTable, nodefault}; + __property int ListOverrideIndex = {read=FListOverrideIndex, nodefault}; + __property int ListLevel = {read=FListLevel, nodefault}; + __property bool KeepLinesTogether = {read=FKeepLinesTogether, nodefault}; + __property bool KeepWithNext = {read=FKeepWithNext, nodefault}; + __property TRVRTFBiDiMode BiDiMode = {read=FBiDiMode, nodefault}; + __property int OutlineLevel = {read=FOutlineLevel, nodefault}; +}; + + +#pragma option push -b- +enum TRVRTFCellMerge { rtf_cm_None, rtf_cm_First, rtf_cm_Merged }; +#pragma option pop + +class DELPHICLASS TRVRTFCellProperties; +class PASCALIMPLEMENTATION TRVRTFCellProperties : public System::TObject +{ + typedef System::TObject inherited; + +private: + TRVRTFCellMerge FHMerge; + TRVRTFCellMerge FVMerge; + bool InvertWidth; + int FBestWidth; + Graphics::TColor FColor; + TRVRTFVAlign FVAlign; + TRVRTFParaBorder* FBorder; + TRVRTFSide FCurBorderSide; + int FRightBoundaryTw; + Graphics::TColor ForeColor; + int Shading; + void __fastcall Finalize(void); + +public: + int BestHeight; + __fastcall TRVRTFCellProperties(void); + __fastcall virtual ~TRVRTFCellProperties(void); + void __fastcall Reset(void); + void __fastcall Assign(TRVRTFCellProperties* Source); + __property TRVRTFCellMerge HMerge = {read=FHMerge, nodefault}; + __property TRVRTFCellMerge VMerge = {read=FVMerge, nodefault}; + __property int BestWidth = {read=FBestWidth, nodefault}; + __property Graphics::TColor Color = {read=FColor, nodefault}; + __property TRVRTFVAlign VAlign = {read=FVAlign, nodefault}; + __property TRVRTFParaBorder* Border = {read=FBorder}; + __property int RightBoundaryTw = {read=FRightBoundaryTw, nodefault}; +}; + + +class DELPHICLASS TRVRTFCellPropsList; +class PASCALIMPLEMENTATION TRVRTFCellPropsList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVRTFCellProperties* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVRTFCellProperties* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVRTFCellProperties* Value); + +public: + void __fastcall AddNew(void); + void __fastcall AssignItems(TRVRTFCellPropsList* Source); + __property TRVRTFCellProperties* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRTFCellPropsList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFCellPropsList(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFRowProperties; +class PASCALIMPLEMENTATION TRVRTFRowProperties : public System::TObject +{ + typedef System::TObject inherited; + +private: + bool InvertWidth; + bool FHeading; + bool FLastRow; + int FGapHTw; + int FLeftTw; + int FHeightTw; + int FBestWidth; + TRVRTFParaBorder* FBorder; + TRVRTFSide FCurBorderSide; + TRVRTFCellPropsList* FCellProps; + bool NewCellProps; + bool AssumedLastCell; + TRVRTFAlignment FAlignment; + bool FAlignmentDefined; + int __fastcall GetPaddingTw(TRVRTFSide Index); + int __fastcall GetSpacingTw(TRVRTFSide Index); + bool __fastcall GetUsePadding(TRVRTFSide Index); + bool __fastcall GetUseSpacing(TRVRTFSide Index); + TRVRTFCellProperties* __fastcall GetLastCellProp(void); + void __fastcall Finalize(void); + +public: + bool RichViewSpecial; + int FPaddingTw[4]; + int FSpacingTw[4]; + bool FUsePadding[4]; + bool FUseSpacing[4]; + __fastcall TRVRTFRowProperties(void); + __fastcall virtual ~TRVRTFRowProperties(void); + void __fastcall Reset(void); + void __fastcall Assign(TRVRTFRowProperties* Source); + __property TRVRTFCellPropsList* CellProps = {read=FCellProps}; + __property int GapHTw = {read=FGapHTw, nodefault}; + __property int LeftTw = {read=FLeftTw, nodefault}; + __property int HeightTw = {read=FHeightTw, nodefault}; + __property int BestWidth = {read=FBestWidth, nodefault}; + __property int PaddingTw[TRVRTFSide Index] = {read=GetPaddingTw}; + __property int SpacingTw[TRVRTFSide Index] = {read=GetSpacingTw}; + __property bool UsePadding[TRVRTFSide Index] = {read=GetUsePadding}; + __property bool UseSpacing[TRVRTFSide Index] = {read=GetUseSpacing}; + __property TRVRTFParaBorder* Border = {read=FBorder}; + __property bool Heading = {read=FHeading, nodefault}; + __property bool LastRow = {read=FLastRow, nodefault}; + __property TRVRTFAlignment Alignment = {read=FAlignment, nodefault}; + __property bool AlignmentDefined = {read=FAlignmentDefined, nodefault}; +}; + + +#pragma option push -b- +enum TRVRTFSectionBreakType { rtf_sbk_None, rtf_sbk_Column, rtf_sbk_Even, rtf_sbk_Odd, rtf_sbk_Page }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFPageNumberFormat { rtf_pg_Decimal, rtf_pg_UpperRoman, rtf_pg_LowerRoman, rtf_pg_UpperLetter, rtf_pg_LowerLetter }; +#pragma option pop + +class DELPHICLASS TRVRTFSectionProperties; +class PASCALIMPLEMENTATION TRVRTFSectionProperties : public System::TObject +{ + typedef System::TObject inherited; + +private: + int FColumnCount; + TRVRTFSectionBreakType FSectionBreakType; + int FPageNumberXTw; + int FPageNumberYTw; + TRVRTFPageNumberFormat FPageNumberFormat; + int FHeaderYTw; + int FFooterYTw; + Rvclasses::TRVList* FDefMarkerPropsList; + void __fastcall InitListDefaults(void); + +public: + __fastcall TRVRTFSectionProperties(void); + void __fastcall Reset(void); + __fastcall virtual ~TRVRTFSectionProperties(void); + void __fastcall Assign(TRVRTFSectionProperties* Source); + __property int ColumnCount = {read=FColumnCount, nodefault}; + __property TRVRTFSectionBreakType SectionBreakType = {read=FSectionBreakType, nodefault}; + __property int PageNumberXTw = {read=FPageNumberXTw, nodefault}; + __property int PageNumberYTw = {read=FPageNumberYTw, nodefault}; + __property TRVRTFPageNumberFormat PageNumberFormat = {read=FPageNumberFormat, nodefault}; + __property int HeaderYTw = {read=FHeaderYTw, nodefault}; + __property int FooterYTw = {read=FFooterYTw, nodefault}; +}; + + +#pragma option push -b- +enum TRVRTFZoomKind { rtf_zk_None, rtf_zk_FullPage, rtf_zk_BestFit }; +#pragma option pop + +class DELPHICLASS TRVRTFDocProperties; +class PASCALIMPLEMENTATION TRVRTFDocProperties : public System::TObject +{ + typedef System::TObject inherited; + +private: + int FPaperWidthTw; + int FPaperHeightTw; + int FLeftMarginTw; + int FTopMarginTw; + int FRightMarginTw; + int FBottomMarginTw; + int FPageNumberStart; + bool FFacingPages; + bool FMirrorMargins; + bool FLandscape; + int FViewScale; + TRVRTFZoomKind FZoomKind; + bool FFootnotePageRestart; + +public: + __fastcall TRVRTFDocProperties(void); + void __fastcall Reset(void); + void __fastcall Assign(TRVRTFDocProperties* Source); + __property int PaperWidthTw = {read=FPaperWidthTw, nodefault}; + __property int PaperHeightTw = {read=FPaperHeightTw, nodefault}; + __property int LeftMarginTw = {read=FLeftMarginTw, nodefault}; + __property int TopMarginTw = {read=FTopMarginTw, nodefault}; + __property int RightMarginTw = {read=FRightMarginTw, nodefault}; + __property int BottomMarginTw = {read=FBottomMarginTw, nodefault}; + __property int PageNumberStart = {read=FPageNumberStart, nodefault}; + __property bool FacingPages = {read=FFacingPages, nodefault}; + __property bool MirrorMargins = {read=FMirrorMargins, nodefault}; + __property bool Landscape = {read=FLandscape, nodefault}; + __property int ViewScale = {read=FViewScale, nodefault}; + __property TRVRTFZoomKind ZoomKind = {read=FZoomKind, nodefault}; + __property bool FootnotePageRestart = {read=FFootnotePageRestart, nodefault}; +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFDocProperties(void) { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRTFrds { rdsNorm, rdsSkip, rdsFontTable, rdsStyleSheet, rdsColorTable, rdsStyleSheetEntry, rdsPict, rdsShpPict, rdsObject, rdsObjData, rdsBmkStart, rdsField, rdsFldInst, rdsPN, rdsPNTextAfter, rdsPNTextBefore, rdsPNSecLvl, rdsListTable, rdsList, rdsListLevel, rdsListName, rdsListLevelText, rdsListLevelNumbers, rdsLOTable, rdsLO, rdsLOLevel, rdsUpr }; +#pragma option pop + +#pragma option push -b- +enum TRTFris { risNorm, risBin, risHex }; +#pragma option pop + +#pragma option push -b- +enum TRTFIPROP { ipropBold, ipropItalic, ipropStrike, ipropUnderline, ipropUnderlineType, ipropUnderlineColor, ipropTextBiDi, ipropCharScaleX, ipropCharSpacing, ipropSScript, ipropVShiftUp, ipropVShiftDown, ipropAllCaps, ipropFontSize, ipropTextColor, ipropTextBackColor, ipropHighlight, ipropLanguage, ipropDefLanguage, ipropSL, ipropSLMult, ipropLeftInd, ipropRightInd, ipropFirstInd, ipropCols, ipropPgnX, ipropPgnY, ipropHeaderY, ipropFooterY, ipropXaPage, ipropYaPage, ipropXaLeft, ipropXaRight, ipropYaTop, ipropYaBottom, ipropPgnStart, ipropSbk, ipropPgnFormat, ipropFacingp, ipropMirrorMargins, ipropLandscape, ipropViewScale, ipropViewZoomKind, ipropJust, ipropParaBiDi, ipropParD, ipropPlain, ipropSectd, ipropF, ipropAF, ipropDefF, ipropSpaceBefore, ipropSpaceAfter, ipropCharBorderSide, ipropParaBorderType, ipropParaBorderSide, ipropParaBorderWidth, ipropParaBorderColor, ipropParaBorderSpace, ipropParaColor, ipropParaFColor, ipropParaShading, ipropOutLineLevel, ipropAnsiCodePage, ipropU, ipropUC, ipropPage + , ipropField, ipropFldInst, ipropFldRslt, ipropHidden, ipropKeepLinesTogether, ipropKeepWithNext, ipropTX, ipropTabAlign, ipropTabLeader, ipropListTab, ipropRed, ipropGreen, ipropBlue, ipropFontFamily, ipropFCharset, ipropS, ipropCS, ipropDS, ipropSBasedOn, irpropSNext, ipropAdditive, ipropSHidden, ipropPicW, ipropPicH, ipropPicScaleX, ipropPicScaleY, ipropPicWGoal, ipropPicHGoal, ipropWBMWidthBytes, ipropWBMBitsPixel, ipropWBMPlanes, ipropPictureType, ipropMetafile, ipropPicBmp, ipropObjType, ipropObjWidth, ipropObjHeight, ipropPNLevel, ipropPNHanging, ipropPNType, ipropPNBold, ipropPNItalic, ipropPNUnderline, ipropPNStrike, ipropPNColor, ipropPNF, ipropPNFontSize, ipropPNIndent, ipropPNSp, ipropPNAlign, ipropPNStart, ipropPNSecLvl, ipropListId, ipropListTemplateId, ipropListSimple, ipropListName, ipropLevelStartAt, ipropLevelNumberType, ipropLevelJustify, ipropLevelOld, ipropLevelIndent, ipropLevelSpace, ipropLevelFollow, ipropLevelLegal, ipropLevelNoRestart, ipropLOCount, ipropLONumber, ipropLOStart, ipropLevel + , ipropThisIsEndnote, ipropNoteCharacter, ipropFootNoteRestart, ipropRowEnd, ipropCellEnd, ipropInTbl, ipropItap, ipropLastRow, ipropTRowD, ipropRowAlign, ipropTRGapH, ipropTRLeft, ipropTRRowHeight, ipropTRHeader, ipropTRPaddL, ipropTRPaddR, ipropTRPaddT, ipropTRPaddB, ipropTRPaddFL, ipropTRPaddFR, ipropTRPaddFT, ipropTRPaddFB, ipropTRSpdL, ipropTRSpdR, ipropTRSpdT, ipropTRSpdB, ipropTRSpdFL, ipropTRSpdFR, ipropTRSpdFT, ipropTRSpdFB, ipropTRwWidth, ipropTRftsWidth, ipropCLVMerge, ipropCLHMerge, ipropCLwWidth, ipropCLftsWidth, ipropCLColor, ipropCLFColor, ipropCLShading, ipropCLVertAl, ipropCellX, ipropTRBorderSide, ipropBorderSideUnknown, ipropCLBorderSide, ipropNoTableEv, ipropNoResetLev, ipropRVCellBestWidth, ipropRVCellBestHeight, ipropRVTableBestWidth, ipropMax }; +#pragma option pop + +#pragma option push -b- +enum TRTFACTN { actnSpec, actnByte, actnWord }; +#pragma option pop + +#pragma option push -b- +enum TRTFPROPTYPE { propChp, propPap, propSep, propDop }; +#pragma option pop + +struct TRTFpropmod +{ + +public: + TRTFACTN actn; + TRTFPROPTYPE prop; + int offset; +} ; + +#pragma option push -b- +enum TRTFIPFN { ipfnBin, ipfnHex, ipfnSkipDest }; +#pragma option pop + +#pragma option push -b- +enum TRTFIDEST { idestNormal, idestShpPict, idestNonShpPict, idestPict, idestSkip, idestFontTable, idestStyleSheet, idestColorTable, idestStyleSheetParaStyle, idestStyleSheetCharStyle, idestStyleSheetSectStyle, idestBmkStart, idestField, idestFldInst, idestFldRslt, idestNestedTableProps, idestHeader, idestFooter, idestHeader2, idestFooter2, idestNote, idestPNTextAfter, idestPNTextBefore, idestPN, idestPNSecLvl, idestListTable, idestList, idestListName, idestListLevel, idestLevelText, idestLevelNumbers, idestLOTable, idestLO, idestLOLevel, idestObject, idestObjData, idestObjResult, idestUpr, idestUd }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFKeywordType { rtf_kwd_Char, rtf_kwd_WideChar, rtf_kwd_Dest, rtf_kwd_Prop, rtf_kwd_Spec }; +#pragma option pop + +#pragma option push -b- +enum TRVRTFKeywordAffect { rtf_af_None, rtf_af_CharProp, rtf_af_ParaProp, rtf_af_BothProp }; +#pragma option pop + +struct TRVRTFsymbol +{ + +public: + AnsiString Keyword; + int DefValue; + bool UseDef; + TRVRTFKeywordType Kwd; + int Idx; + TRVRTFKeywordAffect AffectTo; +} ; + +typedef TRVRTFsymbol *PRVRTFsymbol; + +#pragma option push -b- +enum TRVRTFStyleSheetType { rtf_sst_Char, rtf_sst_Par, rtf_sst_Sect }; +#pragma option pop + +class DELPHICLASS TRVRTFStyleSheetEntry; +class DELPHICLASS TRVRTFReaderState; +class PASCALIMPLEMENTATION TRVRTFStyleSheetEntry : public System::TObject +{ + typedef System::TObject inherited; + +private: + TRVRTFParaProperties* FParaProps; + TRVRTFCharProperties* FCharProps; + bool FAdditive; + bool FHidden; + int FNumber; + TRVRTFStyleSheetType FStyleType; + TRVRTFStyleSheetEntry* FBasedOn; + TRVRTFStyleSheetEntry* FNext; + AnsiString FName; + +public: + __fastcall TRVRTFStyleSheetEntry(void); + __fastcall virtual ~TRVRTFStyleSheetEntry(void); + void __fastcall Assign(TRVRTFReaderState* Source); + __property TRVRTFParaProperties* ParaProps = {read=FParaProps}; + __property TRVRTFCharProperties* CharProps = {read=FCharProps}; + __property bool Additive = {read=FAdditive, nodefault}; + __property bool Hidden = {read=FHidden, nodefault}; + __property int Number = {read=FNumber, nodefault}; + __property TRVRTFStyleSheetType StyleType = {read=FStyleType, nodefault}; + __property TRVRTFStyleSheetEntry* BasedOn = {read=FBasedOn}; + __property TRVRTFStyleSheetEntry* Next = {read=FNext}; + __property AnsiString Name = {read=FName}; +}; + + +class DELPHICLASS TRVRTFStyleSheet; +class PASCALIMPLEMENTATION TRVRTFStyleSheet : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVRTFStyleSheetEntry* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVRTFStyleSheetEntry* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVRTFStyleSheetEntry* Value); + void __fastcall AddPara(int Number); + +public: + TRVRTFStyleSheetEntry* __fastcall GetEntry(int Number); + __property TRVRTFStyleSheetEntry* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRTFStyleSheet(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFStyleSheet(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVRTFFontFamily { rtf_ff_Default, rtf_ff_Roman, rtf_ff_Swiss, rtf_ff_Modern, rtf_ff_Script, rtf_ff_Decorative, rtf_ff_Symbol, rtf_ff_BiDi }; +#pragma option pop + +class DELPHICLASS TRVRTFFont; +class PASCALIMPLEMENTATION TRVRTFFont : public System::TObject +{ + typedef System::TObject inherited; + +public: + int Number; + AnsiString Name; + TRVRTFFontFamily Family; + Graphics::TFontCharset Charset; + __fastcall TRVRTFFont(void); +public: + #pragma option push -w-inl + /* TObject.Destroy */ inline __fastcall virtual ~TRVRTFFont(void) { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFFontList; +class PASCALIMPLEMENTATION TRVRTFFontList : public Rvclasses::TRVList +{ + typedef Rvclasses::TRVList inherited; + +public: + TRVRTFFont* operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE TRVRTFFont* __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const TRVRTFFont* Value); + void __fastcall RemoveChasetFromNames(void); + +public: + int __fastcall GetFontIndex(int Number, int Default); + HIDESBASE void __fastcall Add(int Number); + __property TRVRTFFont* Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TRVList.Destroy */ inline __fastcall virtual ~TRVRTFFontList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFFontList(void) : Rvclasses::TRVList() { } + #pragma option pop + +}; + + +class DELPHICLASS TRVRTFColorList; +class PASCALIMPLEMENTATION TRVRTFColorList : public Classes::TList +{ + typedef Classes::TList inherited; + +public: + Graphics::TColor operator[](int Index) { return Items[Index]; } + +private: + HIDESBASE Graphics::TColor __fastcall Get(int Index); + HIDESBASE void __fastcall Put(int Index, const Graphics::TColor Value); + void __fastcall ResetLast(void); + void __fastcall SetLastRed(int Value); + void __fastcall SetLastGreen(int Value); + void __fastcall SetLastBlue(int Value); + void __fastcall Finalize(void); + +public: + HIDESBASE void __fastcall Add(void); + __property Graphics::TColor Items[int Index] = {read=Get, write=Put/*, default*/}; +public: + #pragma option push -w-inl + /* TList.Destroy */ inline __fastcall virtual ~TRVRTFColorList(void) { } + #pragma option pop + +public: + #pragma option push -w-inl + /* TObject.Create */ inline __fastcall TRVRTFColorList(void) : Classes::TList() { } + #pragma option pop + +}; + + +#pragma option push -b- +enum TRVRTFCurrentBorderType { rtf_bt_Char, rtf_bt_Para, rtf_bt_Row, rtf_bt_Cell, rtf_bt_Other }; +#pragma option pop + +class PASCALIMPLEMENTATION TRVRTFReaderState : public System::TObject +{ + typedef System::TObject inherited; + +private: + unsigned FDefLanguage; + TRVRTFCharProperties* FCharProps; + TRVRTFParaProperties* FParaProps; + TRVRTFSectionProperties* FSectProps; + TRVRTFDocProperties* FDocProps; + TRVRTFRowProperties* FRowProps; + bool FInNote; + TRVRTFCurrentBorderType FCurrentBorderType; + TRTFrds rds; + TRTFris ris; + AnsiString FFieldCode; + AnsiString FBmkStartName; + bool FFieldPictureIncluded; + bool FFieldInserted; + Graphics::TGraphic* FInvalidFieldPicture; + int DefFontNumber; + int DefFontIndex; + TRVRTFHeaderFooterType FHFType; + void __fastcall ChangeFontStyle(Graphics::TFontStyle fs, int Val); + void __fastcall ChangeFontStyleEx(TRVRTFFontStyleEx fs, int Val); + TRVRTFRowProperties* __fastcall GetRowProps(void); + TRVRTFBorderSide* __fastcall GetCurrentBorderSide(void); + +public: + __fastcall TRVRTFReaderState(void); + __fastcall virtual ~TRVRTFReaderState(void); + void __fastcall Assign(TRVRTFReaderState* Source); + void __fastcall Reset(void); + __property TRVRTFParaProperties* ParaProps = {read=FParaProps}; + __property TRVRTFCharProperties* CharProps = {read=FCharProps}; + __property TRVRTFSectionProperties* SectProps = {read=FSectProps}; + __property TRVRTFDocProperties* DocProps = {read=FDocProps}; + __property TRVRTFRowProperties* RowProps = {read=GetRowProps}; + __property AnsiString FieldCode = {read=FFieldCode}; + __property unsigned DefLanguage = {read=FDefLanguage, nodefault}; +}; + + +class PASCALIMPLEMENTATION TRVRTFReader : public Classes::TComponent +{ + typedef Classes::TComponent inherited; + +private: + Classes::TStream* Stream; + int StreamSize; + int InputStringIndex; + int InputStringLength; + AnsiString Text; + AnsiString InputString; + WideString TextW; + char LastChar; + bool UseLastChar; + TRVRTFNewTextEvent FOnNewText; + TRVRTFHeaderFooterEvent FOnHeaderFooter; + TRVRTFNoteEvent FOnNote; + TRVRTFImportPictureEvent FOnImportPicture; + TRVRTFNewUnicodeTextEvent FOnNewUnicodeText; + TRVRTFTranslateKeywordEvent FOnTranslateKeyword; + TRVRTFNewPictureEvent FOnNewPicture; + TRVRTFNewObjectEvent FOnNewObject; + TRVRTFNewSeqEvent FOnNewSeq; + TRVRTFTableEvent FOnTable; + TRVRTFStyleSheet* FStyleSheet; + TRVRTFFontList* FFontTable; + TRVRTFColorList* FColorTable; + TRVRTFListTable97* FListTable; + TRVRTFListOverrideTable97* FListOverrideTable; + TRVRTFReaderState* FRTFState; + TRVRTFPicture* FPicture; + TRVRTFObject* FObject; + TRVRTFMarkerProperties* FMarkerProps; + unsigned FDefCodePage; + unsigned FCodePage; + int SkipAnsiCount; + int SkipNext; + Classes::TNotifyEvent FOnRequiredPageBreak; + int CurrentNestingLevel; + TRVRTFHighlightConvert FConvertHighlight; + Classes::TNotifyEvent FOnUpdateMarker; + int FCurPNSecLvl; + AnsiString FBasePath; + TRVRTFProgressEvent FOnProgress; + bool FCallProgress; + bool ShpPictInserted; + bool ObjectInserted; + bool FExtractMetafileBitmaps; + Classes::TNotifyEvent FOnEndParsing; + int FPixelsPerInch; + bool FTabAsSeparateChar; + TRVBookmarkEvent FOnBookmarkStart; + bool FHeaderRead; + bool FFooterRead; + int __fastcall FindKeyword(const AnsiString Keyword); + Rvrtferr::TRVRTFErrorCode __fastcall AddPictureFast(const char AChar); + +protected: + bool ForceEvenEmptyNewLine; + TRVRTFPosition Position; + int cGroup; + Rvclasses::TRVList* SaveList; + int cbBin; + int lParam; + Byte PicHexVal; + bool PicHexStrt; + bool fSkipDestIfUnk; + TextFile fpIn; + Rvrtferr::TRVRTFErrorCode __fastcall EndGroupAction(TRTFrds rds, TRVRTFReaderState* SaveItem); + Rvrtferr::TRVRTFErrorCode __fastcall TranslateKeyword(const AnsiString Keyword, int param, bool fParam); + Rvrtferr::TRVRTFErrorCode __fastcall ParseSpecialProperty(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall ChangeDest(TRTFIDEST idest, int Val); + Rvrtferr::TRVRTFErrorCode __fastcall ParseSpecialKeyword(TRTFIPFN ipfn); + Rvrtferr::TRVRTFErrorCode __fastcall ApplyPropChange(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall ApplyPropChange_SSEntry(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall ApplyPropChange_Picture(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall ApplyPropChange_Object(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall ApplyPropChange_PN(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall ApplyPropChange_List(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall ApplyPropChange_ListLevel(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall ApplyPropChange_LO(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall ApplyPropChange_LOLevel(TRTFIPROP iprop, int val); + Rvrtferr::TRVRTFErrorCode __fastcall Parse(void); + Rvrtferr::TRVRTFErrorCode __fastcall PushRtfState(void); + Rvrtferr::TRVRTFErrorCode __fastcall PopRtfState(void); + Rvrtferr::TRVRTFErrorCode __fastcall ParseRtfKeyword(void); + Rvrtferr::TRVRTFErrorCode __fastcall ParseChar(char ch); + void __fastcall UpdateMarker(void); + Rvrtferr::TRVRTFErrorCode __fastcall FlushOutput(TRVRTFPosition &NextPosition); + Rvrtferr::TRVRTFErrorCode __fastcall OutputChar(char ch, bool ACheckTableEnd, bool ACheckTable); + Rvrtferr::TRVRTFErrorCode __fastcall InsertExternalPicture(void); + Rvrtferr::TRVRTFErrorCode __fastcall InsertSymbol(void); + Rvrtferr::TRVRTFErrorCode __fastcall InsertSeq(void); + Rvrtferr::TRVRTFErrorCode __fastcall OutputWideChar(WideChar ch); + void __fastcall UngetC(void); + char __fastcall GetC(void); + bool __fastcall IsEOF(void); + Rvrtferr::TRVRTFErrorCode __fastcall DoNewText(TRVRTFPosition Position, TRVRTFPosition &NextPosition); + Rvrtferr::TRVRTFErrorCode __fastcall DoNewPicture(Graphics::TGraphic* gr, bool &Inserted); + Rvrtferr::TRVRTFErrorCode __fastcall DoNewSeq(const AnsiString SeqName, TRVRTFSeqType NumberingType, bool Reset, int StartFrom, bool &Inserted); + Rvrtferr::TRVRTFErrorCode __fastcall DoNewObject(void); + bool __fastcall DoTable(TRVRTFTableEventKind WhatHappens); + void __fastcall CheckTable(bool AllowEnd); + void __fastcall CheckTableAfterNote(void); + +public: + __fastcall virtual TRVRTFReader(Classes::TComponent* AOwner); + __fastcall virtual ~TRVRTFReader(void); + AnsiString __fastcall GetFieldCommandValue(const AnsiString s); + AnsiString __fastcall GetFieldCommandValueEx(const AnsiString s, int &StartIndex, int &Len, bool IgnorePrefixes); + void __fastcall Clear(void); + Rvrtferr::TRVRTFErrorCode __fastcall ReadFromStream(Classes::TStream* AStream); + Rvrtferr::TRVRTFErrorCode __fastcall ReadFromFile(const AnsiString AFileName); + WideString __fastcall AnsiToUnicode(const AnsiString s, unsigned CodePage); + AnsiString __fastcall UnicodeToAnsi(const WideString s); + unsigned __fastcall GetCurrentCodePage(void); + __property TRVRTFStyleSheet* StyleSheet = {read=FStyleSheet}; + __property TRVRTFFontList* FontTable = {read=FFontTable}; + __property TRVRTFColorList* ColorTable = {read=FColorTable}; + __property TRVRTFListTable97* ListTable = {read=FListTable}; + __property TRVRTFListOverrideTable97* ListOverrideTable = {read=FListOverrideTable}; + __property TRVRTFReaderState* RTFState = {read=FRTFState}; + __property AnsiString BasePath = {read=FBasePath, write=FBasePath}; + __property bool TabAsSeparateChar = {read=FTabAsSeparateChar, write=FTabAsSeparateChar, nodefault}; + __property unsigned CodePage = {read=FCodePage, nodefault}; + +__published: + __property TRVRTFNewTextEvent OnNewText = {read=FOnNewText, write=FOnNewText}; + __property TRVRTFNewUnicodeTextEvent OnNewUnicodeText = {read=FOnNewUnicodeText, write=FOnNewUnicodeText}; + __property TRVRTFNewPictureEvent OnNewPicture = {read=FOnNewPicture, write=FOnNewPicture}; + __property TRVRTFNewObjectEvent OnNewObject = {read=FOnNewObject, write=FOnNewObject}; + __property Classes::TNotifyEvent OnUpdateMarker = {read=FOnUpdateMarker, write=FOnUpdateMarker}; + __property TRVRTFTableEvent OnTable = {read=FOnTable, write=FOnTable}; + __property Classes::TNotifyEvent OnRequiredPageBreak = {read=FOnRequiredPageBreak, write=FOnRequiredPageBreak}; + __property TRVRTFHeaderFooterEvent OnHeaderFooter = {read=FOnHeaderFooter, write=FOnHeaderFooter}; + __property TRVRTFNoteEvent OnNote = {read=FOnNote, write=FOnNote}; + __property TRVRTFImportPictureEvent OnImportPicture = {read=FOnImportPicture, write=FOnImportPicture}; + __property TRVRTFTranslateKeywordEvent OnTranslateKeyword = {read=FOnTranslateKeyword, write=FOnTranslateKeyword}; + __property unsigned DefCodePage = {read=FDefCodePage, write=FDefCodePage, default=0}; + __property TRVRTFHighlightConvert ConvertHighlight = {read=FConvertHighlight, write=FConvertHighlight, default=1}; + __property TRVRTFProgressEvent OnProgress = {read=FOnProgress, write=FOnProgress}; + __property bool ExtractMetafileBitmaps = {read=FExtractMetafileBitmaps, write=FExtractMetafileBitmaps, default=1}; + __property int PixelsPerInch = {read=FPixelsPerInch, write=FPixelsPerInch, default=0}; + __property Classes::TNotifyEvent OnEndParsing = {read=FOnEndParsing, write=FOnEndParsing}; + __property TRVBookmarkEvent OnBookmarkStart = {read=FOnBookmarkStart, write=FOnBookmarkStart}; + __property TRVRTFNewSeqEvent OnNewSeq = {read=FOnNewSeq, write=FOnNewSeq}; +}; + + +//-- var, const, procedure --------------------------------------------------- +static const short RV_UNDEFINED_TAB_POS = -1000; + +} /* namespace Rvrtf */ +using namespace Rvrtf; +#pragma pack(pop) +#pragma option pop + +#pragma delphiheader end. +//-- end unit ---------------------------------------------------------------- +#endif // Rvrtf diff --git a/12.0.4/Units/D2007/CRVData.dcu b/12.0.4/Units/D2007/CRVData.dcu new file mode 100644 index 0000000..c7cbafb Binary files /dev/null and b/12.0.4/Units/D2007/CRVData.dcu differ diff --git a/12.0.4/Units/D2007/CRVFData.dcu b/12.0.4/Units/D2007/CRVFData.dcu new file mode 100644 index 0000000..532863e Binary files /dev/null and b/12.0.4/Units/D2007/CRVFData.dcu differ diff --git a/12.0.4/Units/D2007/CRVPP.dcu b/12.0.4/Units/D2007/CRVPP.dcu new file mode 100644 index 0000000..0e0e2ce Binary files /dev/null and b/12.0.4/Units/D2007/CRVPP.dcu differ diff --git a/12.0.4/Units/D2007/CRVPP.res b/12.0.4/Units/D2007/CRVPP.res new file mode 100644 index 0000000..e52da72 Binary files /dev/null and b/12.0.4/Units/D2007/CRVPP.res differ diff --git a/12.0.4/Units/D2007/CtrlImg.dcu b/12.0.4/Units/D2007/CtrlImg.dcu new file mode 100644 index 0000000..ba7d526 Binary files /dev/null and b/12.0.4/Units/D2007/CtrlImg.dcu differ diff --git a/12.0.4/Units/D2007/DBRV.dcr b/12.0.4/Units/D2007/DBRV.dcr new file mode 100644 index 0000000..506c162 Binary files /dev/null and b/12.0.4/Units/D2007/DBRV.dcr differ diff --git a/12.0.4/Units/D2007/DBRV.dcu b/12.0.4/Units/D2007/DBRV.dcu new file mode 100644 index 0000000..1b1ef7e Binary files /dev/null and b/12.0.4/Units/D2007/DBRV.dcu differ diff --git a/12.0.4/Units/D2007/DBRVCool.dcr b/12.0.4/Units/D2007/DBRVCool.dcr new file mode 100644 index 0000000..b5afaca Binary files /dev/null and b/12.0.4/Units/D2007/DBRVCool.dcr differ diff --git a/12.0.4/Units/D2007/DBRVSmall.dcr b/12.0.4/Units/D2007/DBRVSmall.dcr new file mode 100644 index 0000000..a88767f Binary files /dev/null and b/12.0.4/Units/D2007/DBRVSmall.dcr differ diff --git a/12.0.4/Units/D2007/DLines.dcu b/12.0.4/Units/D2007/DLines.dcu new file mode 100644 index 0000000..f93dc0d Binary files /dev/null and b/12.0.4/Units/D2007/DLines.dcu differ diff --git a/12.0.4/Units/D2007/PtRVData.dcu b/12.0.4/Units/D2007/PtRVData.dcu new file mode 100644 index 0000000..5a26318 Binary files /dev/null and b/12.0.4/Units/D2007/PtRVData.dcu differ diff --git a/12.0.4/Units/D2007/PtblRV.dcu b/12.0.4/Units/D2007/PtblRV.dcu new file mode 100644 index 0000000..fb59df3 Binary files /dev/null and b/12.0.4/Units/D2007/PtblRV.dcu differ diff --git a/12.0.4/Units/D2007/RVAnimate.dcu b/12.0.4/Units/D2007/RVAnimate.dcu new file mode 100644 index 0000000..86e1912 Binary files /dev/null and b/12.0.4/Units/D2007/RVAnimate.dcu differ diff --git a/12.0.4/Units/D2007/RVBack.dcu b/12.0.4/Units/D2007/RVBack.dcu new file mode 100644 index 0000000..1b7ac32 Binary files /dev/null and b/12.0.4/Units/D2007/RVBack.dcu differ diff --git a/12.0.4/Units/D2007/RVClasses.dcu b/12.0.4/Units/D2007/RVClasses.dcu new file mode 100644 index 0000000..4edd3ad Binary files /dev/null and b/12.0.4/Units/D2007/RVClasses.dcu differ diff --git a/12.0.4/Units/D2007/RVCodePages.dcu b/12.0.4/Units/D2007/RVCodePages.dcu new file mode 100644 index 0000000..97e669b Binary files /dev/null and b/12.0.4/Units/D2007/RVCodePages.dcu differ diff --git a/12.0.4/Units/D2007/RVCtrlData.dcu b/12.0.4/Units/D2007/RVCtrlData.dcu new file mode 100644 index 0000000..0850c06 Binary files /dev/null and b/12.0.4/Units/D2007/RVCtrlData.dcu differ diff --git a/12.0.4/Units/D2007/RVDBDsgn.dcu b/12.0.4/Units/D2007/RVDBDsgn.dcu new file mode 100644 index 0000000..e4a4fb5 Binary files /dev/null and b/12.0.4/Units/D2007/RVDBDsgn.dcu differ diff --git a/12.0.4/Units/D2007/RVDBDsgn.dfm b/12.0.4/Units/D2007/RVDBDsgn.dfm new file mode 100644 index 0000000..4d029d5 Binary files /dev/null and b/12.0.4/Units/D2007/RVDBDsgn.dfm differ diff --git a/12.0.4/Units/D2007/RVDBPkgD2007.bpl b/12.0.4/Units/D2007/RVDBPkgD2007.bpl new file mode 100644 index 0000000..7b3865e Binary files /dev/null and b/12.0.4/Units/D2007/RVDBPkgD2007.bpl differ diff --git a/12.0.4/Units/D2007/RVDBPkgD2007.dcp b/12.0.4/Units/D2007/RVDBPkgD2007.dcp new file mode 100644 index 0000000..137ce3d Binary files /dev/null and b/12.0.4/Units/D2007/RVDBPkgD2007.dcp differ diff --git a/12.0.4/Units/D2007/RVDBPkgD2007.dcu b/12.0.4/Units/D2007/RVDBPkgD2007.dcu new file mode 100644 index 0000000..014851f Binary files /dev/null and b/12.0.4/Units/D2007/RVDBPkgD2007.dcu differ diff --git a/12.0.4/Units/D2007/RVDBPkgD2007.dpk b/12.0.4/Units/D2007/RVDBPkgD2007.dpk new file mode 100644 index 0000000..3f74409 --- /dev/null +++ b/12.0.4/Units/D2007/RVDBPkgD2007.dpk @@ -0,0 +1,47 @@ +package RVDBPkgD2007; + +{$R *.res} +{$R 'DBRVCool.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO ON} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TRichView DB for Delphi 2007'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + dbrtl, + vcldb, + designide, + vcljpg, + RVPkgD2007, + vclimg, + xmlrtl, + vclactnband, + vclx; + +contains + DBRV in 'DBRV.pas', + RVDBDsgn in 'RVDBDsgn.pas'; + +end. diff --git a/12.0.4/Units/D2007/RVDBPkgD2007.dproj b/12.0.4/Units/D2007/RVDBPkgD2007.dproj new file mode 100644 index 0000000..b5a884e --- /dev/null +++ b/12.0.4/Units/D2007/RVDBPkgD2007.dproj @@ -0,0 +1,532 @@ + + + {0c5e8300-058b-4539-bb7a-74d5f30fc569} + RVDBPkgD2007.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\RVDBPkgD2007.bpl + + + 7.0 + False + False + 0 + All + RELEASE + + + 7.0 + + + Delphi.Personality + Package + +FalseFalseTrueFalseTRichView DB for Delphi 2007FalseTrueFalseTrueFalse1000FalseFalseFalseFalseFalse104912511.0.0.01.0.0.0RVDBPkgD2007.dpk + + + + + MainSource + + + + + + + + + + + + + + + + + + + + diff --git a/12.0.4/Units/D2007/RVDBPkgD2007.res b/12.0.4/Units/D2007/RVDBPkgD2007.res new file mode 100644 index 0000000..dac75da Binary files /dev/null and b/12.0.4/Units/D2007/RVDBPkgD2007.res differ diff --git a/12.0.4/Units/D2007/RVDataList.dcu b/12.0.4/Units/D2007/RVDataList.dcu new file mode 100644 index 0000000..8e83c8c Binary files /dev/null and b/12.0.4/Units/D2007/RVDataList.dcu differ diff --git a/12.0.4/Units/D2007/RVDocParams.dcu b/12.0.4/Units/D2007/RVDocParams.dcu new file mode 100644 index 0000000..b4f5ad9 Binary files /dev/null and b/12.0.4/Units/D2007/RVDocParams.dcu differ diff --git a/12.0.4/Units/D2007/RVDragDrop.dcu b/12.0.4/Units/D2007/RVDragDrop.dcu new file mode 100644 index 0000000..e4825dc Binary files /dev/null and b/12.0.4/Units/D2007/RVDragDrop.dcu differ diff --git a/12.0.4/Units/D2007/RVDsgn.dcu b/12.0.4/Units/D2007/RVDsgn.dcu new file mode 100644 index 0000000..7397a81 Binary files /dev/null and b/12.0.4/Units/D2007/RVDsgn.dcu differ diff --git a/12.0.4/Units/D2007/RVDsgn.dfm b/12.0.4/Units/D2007/RVDsgn.dfm new file mode 100644 index 0000000..19a11ee Binary files /dev/null and b/12.0.4/Units/D2007/RVDsgn.dfm differ diff --git a/12.0.4/Units/D2007/RVERVData.dcu b/12.0.4/Units/D2007/RVERVData.dcu new file mode 100644 index 0000000..ec1c820 Binary files /dev/null and b/12.0.4/Units/D2007/RVERVData.dcu differ diff --git a/12.0.4/Units/D2007/RVEdit.dcu b/12.0.4/Units/D2007/RVEdit.dcu new file mode 100644 index 0000000..aeaba4a Binary files /dev/null and b/12.0.4/Units/D2007/RVEdit.dcu differ diff --git a/12.0.4/Units/D2007/RVFMisc.dcu b/12.0.4/Units/D2007/RVFMisc.dcu new file mode 100644 index 0000000..9ae2bba Binary files /dev/null and b/12.0.4/Units/D2007/RVFMisc.dcu differ diff --git a/12.0.4/Units/D2007/RVFuncs.dcu b/12.0.4/Units/D2007/RVFuncs.dcu new file mode 100644 index 0000000..49962b3 Binary files /dev/null and b/12.0.4/Units/D2007/RVFuncs.dcu differ diff --git a/12.0.4/Units/D2007/RVGetText.dcu b/12.0.4/Units/D2007/RVGetText.dcu new file mode 100644 index 0000000..2b331e2 Binary files /dev/null and b/12.0.4/Units/D2007/RVGetText.dcu differ diff --git a/12.0.4/Units/D2007/RVGetTextW.dcu b/12.0.4/Units/D2007/RVGetTextW.dcu new file mode 100644 index 0000000..2c3447d Binary files /dev/null and b/12.0.4/Units/D2007/RVGetTextW.dcu differ diff --git a/12.0.4/Units/D2007/RVGifAnimate2007.dcu b/12.0.4/Units/D2007/RVGifAnimate2007.dcu new file mode 100644 index 0000000..92bd90d Binary files /dev/null and b/12.0.4/Units/D2007/RVGifAnimate2007.dcu differ diff --git a/12.0.4/Units/D2007/RVItem.dcu b/12.0.4/Units/D2007/RVItem.dcu new file mode 100644 index 0000000..88e2c66 Binary files /dev/null and b/12.0.4/Units/D2007/RVItem.dcu differ diff --git a/12.0.4/Units/D2007/RVJvGifAnimate.pas b/12.0.4/Units/D2007/RVJvGifAnimate.pas new file mode 100644 index 0000000..22c5724 --- /dev/null +++ b/12.0.4/Units/D2007/RVJvGifAnimate.pas @@ -0,0 +1,284 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVJvGIFImageAnimator: displaying animation for } +{ TJvGIFImage from Project JEDI's JVCL. } +{ http://jvcl.sourceforge.net } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVJvGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, JvGif; + +type + { --------------------------------------------------------------------------- + TRVJvGifImageAnimator: displaying animations for gif images + (using TJvGIFImage from Project JEDI's JVCL) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be it's background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVJvGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVJvGifImageAnimator ========================} +{ Destructor } +destructor TRVJvGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVJvGifImageAnimator.CalcInterval; +var gif: TJvGIFImage; +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + Interval := 100; + if gif.Frames[FrameIndex].AnimateInterval > 0 then begin + Interval := gif.Frames[FrameIndex].AnimateInterval; + end; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVJvGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVJvGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +{ Draws the current frame } +procedure TRVJvGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TJvGIFImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul , + HeightDiv : integer; + WidthMul , + WidthDiv : integer; + begin + with gif.Frames[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Origin.X, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Origin.Y, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Origin.X+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Origin.Y+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if FrameIndex>0 then + case gif.Frames[FrameIndex-1].DisposalMethod of + dmRestoreBackground: + begin + r := Rect(0,0,bmp.Width,bmp.Height); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex); + gif.Frames[FrameIndex].Draw(bmp.Canvas, r, gif.Frames[FrameIndex].TransparentColor <> clNone); + end; + +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if gif.Transparent then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex clNone); +end; +{------------------------------------------------------------------------------} +{ Image size for RTF saving } +function TRVJvGifImageAnimator.GetExportImageSize: TSize; +begin + Result.cy := TJvGIFImage(TRVGraphicItemInfo(item).Image).Height; + Result.cx := TJvGIFImage(TRVGraphicItemInfo(item).Image).Width; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames in gif } +function GetGifFrameCount(gif: TJvGIFImage): Integer; +begin + Result := gif.Count; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVJvGifImageAnimator.GetFrameCount: Integer; +begin + Result := TJvGIFImage(TRVGraphicItemInfo(item).Image).Count; +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVJvGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVJvGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TJvGifImage) and + (GetGifFrameCount(TJvGIFImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVJvGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVJvGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D2007/RVLabelItem.dcu b/12.0.4/Units/D2007/RVLabelItem.dcu new file mode 100644 index 0000000..935f15f Binary files /dev/null and b/12.0.4/Units/D2007/RVLabelItem.dcu differ diff --git a/12.0.4/Units/D2007/RVLinear.dcu b/12.0.4/Units/D2007/RVLinear.dcu new file mode 100644 index 0000000..906586d Binary files /dev/null and b/12.0.4/Units/D2007/RVLinear.dcu differ diff --git a/12.0.4/Units/D2007/RVMapWht.dcu b/12.0.4/Units/D2007/RVMapWht.dcu new file mode 100644 index 0000000..975c480 Binary files /dev/null and b/12.0.4/Units/D2007/RVMapWht.dcu differ diff --git a/12.0.4/Units/D2007/RVMarker.dcu b/12.0.4/Units/D2007/RVMarker.dcu new file mode 100644 index 0000000..0af2744 Binary files /dev/null and b/12.0.4/Units/D2007/RVMarker.dcu differ diff --git a/12.0.4/Units/D2007/RVMisc.dcu b/12.0.4/Units/D2007/RVMisc.dcu new file mode 100644 index 0000000..f62eb0c Binary files /dev/null and b/12.0.4/Units/D2007/RVMisc.dcu differ diff --git a/12.0.4/Units/D2007/RVNote.dcu b/12.0.4/Units/D2007/RVNote.dcu new file mode 100644 index 0000000..58c211d Binary files /dev/null and b/12.0.4/Units/D2007/RVNote.dcu differ diff --git a/12.0.4/Units/D2007/RVOfficeCnv.dcu b/12.0.4/Units/D2007/RVOfficeCnv.dcu new file mode 100644 index 0000000..e3cdb5c Binary files /dev/null and b/12.0.4/Units/D2007/RVOfficeCnv.dcu differ diff --git a/12.0.4/Units/D2007/RVPP.dcu b/12.0.4/Units/D2007/RVPP.dcu new file mode 100644 index 0000000..a003f2d Binary files /dev/null and b/12.0.4/Units/D2007/RVPP.dcu differ diff --git a/12.0.4/Units/D2007/RVPkgD2007.bpl b/12.0.4/Units/D2007/RVPkgD2007.bpl new file mode 100644 index 0000000..8fa5c3d Binary files /dev/null and b/12.0.4/Units/D2007/RVPkgD2007.bpl differ diff --git a/12.0.4/Units/D2007/RVPkgD2007.dcp b/12.0.4/Units/D2007/RVPkgD2007.dcp new file mode 100644 index 0000000..9dc6b5f Binary files /dev/null and b/12.0.4/Units/D2007/RVPkgD2007.dcp differ diff --git a/12.0.4/Units/D2007/RVPkgD2007.dcu b/12.0.4/Units/D2007/RVPkgD2007.dcu new file mode 100644 index 0000000..b3b7b50 Binary files /dev/null and b/12.0.4/Units/D2007/RVPkgD2007.dcu differ diff --git a/12.0.4/Units/D2007/RVPkgD2007.dpk b/12.0.4/Units/D2007/RVPkgD2007.dpk new file mode 100644 index 0000000..3d16539 --- /dev/null +++ b/12.0.4/Units/D2007/RVPkgD2007.dpk @@ -0,0 +1,95 @@ +package RVPkgD2007; + +{$R *.res} +{$R 'RVRegCool.dcr'} +{$ALIGN 8} +{$ASSERTIONS OFF} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS OFF} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TRichView for Delphi 2007'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcljpg, + vcl, + designide, + vclimg; + +contains + CRVData in 'CRVData.pas', + CRVFData in 'CRVFData.pas', + Crvpp in 'Crvpp.pas', + CtrlImg in 'CtrlImg.pas', + DLines in 'DLines.pas', + PtblRV in 'PtblRV.pas', + PtRVData in 'PtRVData.pas', + RichView in 'RichView.pas', + RVAnimate in 'RVAnimate.pas', + RVBack in 'RVBack.pas', + RVClasses in 'RVClasses.pas', + RVCodePages in 'RVCodePages.pas', + RVCtrlData in 'RVCtrlData.pas', + RVDataList in 'RVDataList.pas', + RVDragDrop in 'RVDragDrop.pas', + RVDsgn in 'RVDsgn.pas', + RVEdit in 'RVEdit.pas', + RVERVData in 'RVERVData.pas', + RVFMisc in 'RVFMisc.pas', + RVFuncs in 'RVFuncs.pas', + RVGetText in 'RVGetText.pas', + RVGetTextW in 'RVGetTextW.pas', + RVItem in 'RVItem.pas', + RVLinear in 'RVLinear.pas', + RVMapWht in 'RVMapWht.pas', + RVMarker in 'RVMarker.pas', + RVMisc in 'RVMisc.pas', + RVOfficeCnv in 'RVOfficeCnv.pas', + RVPopup in 'RVPopup.pas', + Rvpp in 'Rvpp.pas', + RVReg in 'RVReg.pas', + RVReport in 'RVReport.pas', + RVResize in 'RVResize.pas', + Rvrtf in 'Rvrtf.pas', + RVRTFErr in 'RVRTFErr.pas', + RVRTFProps in 'RVRTFProps.pas', + RVRVData in 'RVRVData.pas', + RVScroll in 'RVScroll.pas', + RVSEdit in 'RVSEdit.pas', + RVSer in 'RVSer.pas', + RVStr in 'RVStr.pas', + RVStyle in 'RVStyle.pas', + RVTable in 'RVTable.pas', + RVThread in 'RVThread.pas', + RVTInplace in 'RVTInplace.pas', + RVUndo in 'RVUndo.pas', + RVUni in 'RVUni.pas', + RVWordPaint in 'RVWordPaint.pas', + RVXPTheme in 'RVXPTheme.pas', + RVLabelItem in 'RVLabelItem.pas', + RVNote in 'RVNote.pas', + RVSeqItem in 'RVSeqItem.pas', + RVSubData in 'RVSubData.pas', + RVGifAnimate2007 in 'RVGifAnimate2007.pas', + RVDocParams in 'RVDocParams.pas', + RVTypes in 'RVTypes.pas'; + +end. diff --git a/12.0.4/Units/D2007/RVPkgD2007.dproj b/12.0.4/Units/D2007/RVPkgD2007.dproj new file mode 100644 index 0000000..46d3c10 --- /dev/null +++ b/12.0.4/Units/D2007/RVPkgD2007.dproj @@ -0,0 +1,586 @@ + + + + {c3aa5764-0b4b-4c0d-9502-0e0c3ececc82} + RVPkgD2007.dpk + Debug + AnyCPU + DCC32 + C:\Documents and Settings\All Users\Documentos\RAD Studio\5.0\Bpl\RVPkgD2007.bpl + + + 7.0 + False + False + False + 0 + All + RELEASE + + + 7.0 + False + False + False + 0 + + + Delphi.Personality + Package + +FalseFalseTrueFalseTRichView for Delphi 2007FalseTrueFalseTrueFalse1000FalseFalseFalseFalseFalse104912511.0.0.01.0.0.0RVPkgD2007.dpk + + + + + MainSource + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/12.0.4/Units/D2007/RVPkgD2007.res b/12.0.4/Units/D2007/RVPkgD2007.res new file mode 100644 index 0000000..dac75da Binary files /dev/null and b/12.0.4/Units/D2007/RVPkgD2007.res differ diff --git a/12.0.4/Units/D2007/RVPopup.dcu b/12.0.4/Units/D2007/RVPopup.dcu new file mode 100644 index 0000000..64c5e51 Binary files /dev/null and b/12.0.4/Units/D2007/RVPopup.dcu differ diff --git a/12.0.4/Units/D2007/RVRTF.dcu b/12.0.4/Units/D2007/RVRTF.dcu new file mode 100644 index 0000000..afec84c Binary files /dev/null and b/12.0.4/Units/D2007/RVRTF.dcu differ diff --git a/12.0.4/Units/D2007/RVRTFErr.dcu b/12.0.4/Units/D2007/RVRTFErr.dcu new file mode 100644 index 0000000..1562fd4 Binary files /dev/null and b/12.0.4/Units/D2007/RVRTFErr.dcu differ diff --git a/12.0.4/Units/D2007/RVRTFProps.dcu b/12.0.4/Units/D2007/RVRTFProps.dcu new file mode 100644 index 0000000..e8e4b83 Binary files /dev/null and b/12.0.4/Units/D2007/RVRTFProps.dcu differ diff --git a/12.0.4/Units/D2007/RVRTFReg.dcr b/12.0.4/Units/D2007/RVRTFReg.dcr new file mode 100644 index 0000000..1d96bf6 Binary files /dev/null and b/12.0.4/Units/D2007/RVRTFReg.dcr differ diff --git a/12.0.4/Units/D2007/RVRVData.dcu b/12.0.4/Units/D2007/RVRVData.dcu new file mode 100644 index 0000000..a923fdd Binary files /dev/null and b/12.0.4/Units/D2007/RVRVData.dcu differ diff --git a/12.0.4/Units/D2007/RVReg.dcr b/12.0.4/Units/D2007/RVReg.dcr new file mode 100644 index 0000000..5ef086c Binary files /dev/null and b/12.0.4/Units/D2007/RVReg.dcr differ diff --git a/12.0.4/Units/D2007/RVReg.dcu b/12.0.4/Units/D2007/RVReg.dcu new file mode 100644 index 0000000..1f5a1b4 Binary files /dev/null and b/12.0.4/Units/D2007/RVReg.dcu differ diff --git a/12.0.4/Units/D2007/RVRegCool.dcr b/12.0.4/Units/D2007/RVRegCool.dcr new file mode 100644 index 0000000..57c6c0c Binary files /dev/null and b/12.0.4/Units/D2007/RVRegCool.dcr differ diff --git a/12.0.4/Units/D2007/RVRegSmall.dcr b/12.0.4/Units/D2007/RVRegSmall.dcr new file mode 100644 index 0000000..064018c Binary files /dev/null and b/12.0.4/Units/D2007/RVRegSmall.dcr differ diff --git a/12.0.4/Units/D2007/RVReport.dcu b/12.0.4/Units/D2007/RVReport.dcu new file mode 100644 index 0000000..dd97e93 Binary files /dev/null and b/12.0.4/Units/D2007/RVReport.dcu differ diff --git a/12.0.4/Units/D2007/RVResize.dcu b/12.0.4/Units/D2007/RVResize.dcu new file mode 100644 index 0000000..5919bb7 Binary files /dev/null and b/12.0.4/Units/D2007/RVResize.dcu differ diff --git a/12.0.4/Units/D2007/RVSEdit.dcu b/12.0.4/Units/D2007/RVSEdit.dcu new file mode 100644 index 0000000..bbcdb00 Binary files /dev/null and b/12.0.4/Units/D2007/RVSEdit.dcu differ diff --git a/12.0.4/Units/D2007/RVScroll.dcu b/12.0.4/Units/D2007/RVScroll.dcu new file mode 100644 index 0000000..62d580b Binary files /dev/null and b/12.0.4/Units/D2007/RVScroll.dcu differ diff --git a/12.0.4/Units/D2007/RVSeqItem.dcu b/12.0.4/Units/D2007/RVSeqItem.dcu new file mode 100644 index 0000000..2182088 Binary files /dev/null and b/12.0.4/Units/D2007/RVSeqItem.dcu differ diff --git a/12.0.4/Units/D2007/RVSer.dcu b/12.0.4/Units/D2007/RVSer.dcu new file mode 100644 index 0000000..8380adc Binary files /dev/null and b/12.0.4/Units/D2007/RVSer.dcu differ diff --git a/12.0.4/Units/D2007/RVStr.dcu b/12.0.4/Units/D2007/RVStr.dcu new file mode 100644 index 0000000..6e8371a Binary files /dev/null and b/12.0.4/Units/D2007/RVStr.dcu differ diff --git a/12.0.4/Units/D2007/RVStyle.dcu b/12.0.4/Units/D2007/RVStyle.dcu new file mode 100644 index 0000000..4df83c0 Binary files /dev/null and b/12.0.4/Units/D2007/RVStyle.dcu differ diff --git a/12.0.4/Units/D2007/RVStyle.res b/12.0.4/Units/D2007/RVStyle.res new file mode 100644 index 0000000..8a5d879 Binary files /dev/null and b/12.0.4/Units/D2007/RVStyle.res differ diff --git a/12.0.4/Units/D2007/RVSubData.dcu b/12.0.4/Units/D2007/RVSubData.dcu new file mode 100644 index 0000000..bcbfc59 Binary files /dev/null and b/12.0.4/Units/D2007/RVSubData.dcu differ diff --git a/12.0.4/Units/D2007/RVTInplace.dcu b/12.0.4/Units/D2007/RVTInplace.dcu new file mode 100644 index 0000000..85f99b0 Binary files /dev/null and b/12.0.4/Units/D2007/RVTInplace.dcu differ diff --git a/12.0.4/Units/D2007/RVTable.dcu b/12.0.4/Units/D2007/RVTable.dcu new file mode 100644 index 0000000..9a1e329 Binary files /dev/null and b/12.0.4/Units/D2007/RVTable.dcu differ diff --git a/12.0.4/Units/D2007/RVTable.res b/12.0.4/Units/D2007/RVTable.res new file mode 100644 index 0000000..3aeb51c Binary files /dev/null and b/12.0.4/Units/D2007/RVTable.res differ diff --git a/12.0.4/Units/D2007/RVThread.dcu b/12.0.4/Units/D2007/RVThread.dcu new file mode 100644 index 0000000..9726c73 Binary files /dev/null and b/12.0.4/Units/D2007/RVThread.dcu differ diff --git a/12.0.4/Units/D2007/RVTypes.dcu b/12.0.4/Units/D2007/RVTypes.dcu new file mode 100644 index 0000000..1365a58 Binary files /dev/null and b/12.0.4/Units/D2007/RVTypes.dcu differ diff --git a/12.0.4/Units/D2007/RVUndo.dcu b/12.0.4/Units/D2007/RVUndo.dcu new file mode 100644 index 0000000..84a86c9 Binary files /dev/null and b/12.0.4/Units/D2007/RVUndo.dcu differ diff --git a/12.0.4/Units/D2007/RVUni.dcu b/12.0.4/Units/D2007/RVUni.dcu new file mode 100644 index 0000000..b2233f4 Binary files /dev/null and b/12.0.4/Units/D2007/RVUni.dcu differ diff --git a/12.0.4/Units/D2007/RVWordPaint.dcu b/12.0.4/Units/D2007/RVWordPaint.dcu new file mode 100644 index 0000000..3e297c4 Binary files /dev/null and b/12.0.4/Units/D2007/RVWordPaint.dcu differ diff --git a/12.0.4/Units/D2007/RVXPTheme.dcu b/12.0.4/Units/D2007/RVXPTheme.dcu new file mode 100644 index 0000000..b7880a9 Binary files /dev/null and b/12.0.4/Units/D2007/RVXPTheme.dcu differ diff --git a/12.0.4/Units/D2007/RV_Defs.inc b/12.0.4/Units/D2007/RV_Defs.inc new file mode 100644 index 0000000..15f242e --- /dev/null +++ b/12.0.4/Units/D2007/RV_Defs.inc @@ -0,0 +1,347 @@ + +{*******************************************************} +{ } +{ RichView } +{ Conditionals for RichView. } +{ This file is included in all RichView PAS-files.} +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$B-} +{$H+} +{$J+} +{$T-} + +{------------------------------------------------------------------------------} +{ Determining Delphi/C++Builder version } + +{$DEFINE RICHVIEW} + +{$IFNDEF VER80} { not Delphi 1.0 } + {$IFNDEF VER90} { not Delphi 2.0 } + {$DEFINE RICHVIEWCBDEF1} (* C++Builder 1.0+ *) + {$IFNDEF VER93} { not C++Builder 1.0 } + {$DEFINE RICHVIEWCBDEF3} (* C++Builder 3.0+ *) + {$IFNDEF VER110} { not C++Builder 3.0 } + {$DEFINE RICHVIEWDEF3} (* Delphi 3.0+, C++Builder 4.0+ *) + {$IFNDEF VER100} { not Delphi 3.0 } + {$DEFINE RICHVIEWDEF4} (* Delphi 4.0+ *) + {$IFNDEF VER120} { not Delphi 4.0 } + {$IFNDEF VER125} { not C++Builder 4.0 } + {$DEFINE RICHVIEWDEF5} (* Delphi 5.0+ *) + {$IFNDEF VER130} { not Delphi 5.0 } + {$IFNDEF VER135} { not C++Builder 5.0 } + {$DEFINE RICHVIEWDEF6}(* Delphi 6.0+ *) + {$IFNDEF VER140} { not Delphi 6.0 } + {$IFNDEF VER145} { not C++Builder 6.0 } + {$DEFINE RICHVIEWDEF7}(* Delphi 7.0+ *) + {$IFNDEF VER150} { not Delphi 7.0 } + {$DEFINE RICHVIEWDEF9} (* Delphi 2005+ *) + {$DEFINE RICHVIEWDEF2005}(* Delphi 2005+ *) + {$IFNDEF VER170} { not Delphi 2005 } + {$DEFINE RICHVIEWDEF10} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2006} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2007} (* Delphi 2007 defines both VER180 and VER185 *) + {$IFNDEF VER180} { not Delphi 2006-2007 } + {$DEFINE RICHVIEWDEF2009} + {$IFNDEF VER200} + {$DEFINE RICHVIEWDEF2010} (* Delphi 2010 defines VER210 *) + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER180}{$IFNDEF VER185} +{$UNDEF RICHVIEWDEF2007} // this is D2006, not D2007 +{$ENDIF}{$ENDIF} + + +{$IFDEF RICHVIEWDEF7} +{$WARN UNSAFE_TYPE OFF} +{$WARN UNSAFE_CODE OFF} +{$WARN UNSAFE_CAST OFF} +{$ENDIF} + +{------------------------------------------------------------------------------} +{ CONDITIONAL DEFINES. } +{ Do not modify this file, use Project|Options, Directories/Conditionals, } +{ Conditional defines instead. } +{------------------------------------------------------------------------------} + +{------------------------------------------------------------------------------} +{ Defines for shrinking exe size / improving speed and memory usage by } +{ turning off unused features. } +{------------------------------------------------------------------------------} + +{NOT$DEFINE RVDONOTUSESTYLETEMPLATES} +{ + Define if you do not want to use TRVStyle.StyleTemplates and related functions. + +{NOT$DEFINE RVDONOTUSEALLCAPS} +{NOT$DEFINE RVDONOTUSESOFTHYPHENS} +{NOT$DEFINE RVDONOTUSECHARSCALE} +{ + Define it if you do not wish to use rvfsAllCaps option, soft hyphens, + CharScale. + Some speed up of text drawing and formatting. +} + +{NOT$DEFINE RVDONOTUSESMARTPOPUP} + + +{NOT$DEFINE RVDONOTUSEANIMATION} +{ + Define if you do not wish to display animations. + Saves memory and resources. +} + +{NOT$DEFINE RVDONOTUSETABS} +{ + Define if you do not wish to use tab stops. All code for importing tabs will + be excluded. But code for processing tabs (if they appeared in document) remains. +} + +{NOT$DEFINE RVDONOTUSEJPEGIMAGE} +{ + Define it if you do not wish to use Delphi jpeg units. + This will cause saving images to HTML as bitmaps, and turning off special + support for jpegs in paletted display mode. +} + +{NOT$DEFINE RVDONOTUSEHTML} +{ + Define it to remove all HTML-related methods. +} + +{NOT$DEFINE RVDONOTUSERTF} +{ + Define it to remove all RTF-export related methods +} + +{NOT$DEFINE RVDONOTUSERTFIMPORT} +{ + Define it to remove all RTF-import related methods. +} + +{NOT$DEFINE RVDONOTUSERVF} +{ + Define it to remove all RVF-related methods. + You can do it only if you do not use TRichViewEdit. Editor requires + RVF methods. +} + +{NOT$DEFINE RVDONOTUSEJUSTIFY} +{ + Define it to remove justify alignment support. + Was not properly tested. +} + +{NOT$DEFINE RVDONOTUSEUNICODE} +{ + Define it to disable Unicode support. + Cannot be activated in Delphi/C++Builder 2009+ +} +{NOT$DEFINE RVDONOTUSECHARSPACING} +{ + Define it to disable CharSpacing. Somewhat faster +} + +{NOT$DEFINE RVDONOTUSETABLES} +{ + Define, if you do not use tables. Exe-file will be smaller. +} + +{NOT$DEFINE RVDONOTUSELISTS} +{ + Define, if you do not use bullets and numbering +} + +{NOT$DEFINE RVDONOTUSESEQ} +{ + Define, if you do not use numbered sequences and footnotes +} + +{NOT$DEFINE RVDONOTUSEINI} +{ + Define, if you do not save/load RVStyle in ini-files and the Registry +} + +{NOT$DEFINE RVDONOTUSEDRAGDROP} +{ + Define, if you do not use OLE drag&drop +} + +{NOT$DEFINE RVDONOTUSEITEMHINTS} +{ + Define, if you do not want to use item titles (popup hints). + Saves 4 bytes per item in memory +} + +{NOT$DEFINE RVDONOTUSELIVESPELL} +{ + Define, if you do not want to use live spelling. + Saves 8 bytes per item in memory, reduces exe file size +} + +{NOT$DEFINE RVDONOTUSELINEARPOSITIONS} +{ + Define, if you do not need to process EM_GETSEL, EM_GETTEXTRANGE and EM_SETSEL +} + +{NOT$DEFINE RVDONOTUSERVMEMORYSTREAM} +{ + Disables custom (more efficient for saving large data) memory stream + implementation. Reduces exe file size +} + +{NOT$DEFINE RVDONOTUSEDOCPARAMS} +{ + Define to exclude TCustomRichView.DocParameters +} + +{NOT$DEFINE RVDONOTUSEOLECONTAINER} +{ + Does nothing. Reserved. +} + +{$IFDEF RVDONOTUSETABLES} + {$DEFINE RVDONOTUSEINPLACE} +{$ENDIF} +{------------------------------------------------------------------------------} +{ Other defines } +{------------------------------------------------------------------------------} +{NOT$DEFINE RVPBEARCOMPAT} +{ + Define to make HTML output more compatible with THTMLViewer (www.pbear.com) + Some unnecessary tags will be saved. +} + +{NOT$DEFINE RVEDITIGNORESESCAPE} +{ + If defined, TRichViewEdit and TDBRichViewEdit (if IgnoreEscape=True) controls + do not receive messages when Escape is pressed. Useful when placed in modal + dialogs, so that editors do not steal Escape from a Cancel button. +} + + +{NOT$DEFINE RVLANGUAGEPROPERTY} +{ + If defined, text style has additional property - Language: Cardinal +} +{NOT$DEFINE RVLIVESPELLEXEVENT} +{ + If defined, RichView has additional event - OnSpellingCheckEx. + This event has higher priority than OnSpellingCheck. +} + +{NOT$DEFINE RVUSETEXTHOVERCOLORWITHSELECTED} +{ + Define if you wish to return behavior of v1.2-, where text hover color was + used even for selected text. +} + +{NOT$DEFINE DONOTDECVSCROLLUNITS} +{ + Define to forbid RichView to decrease vertical scrolling units automatically + when needed (if you wish to control scrolling units yourself). +} + +{NOT$DEFINE RVDONOTCORRECTWMFSCALE} +{ + There is a problem in Delphi TMetafile class (wrong size) when pasting + some metafiles from Clipboard. RichView tries to correct it. + Turn this define on, if you have troubles with metafile sizes when pasting. +} + +{$DEFINE RVALLOWCPBYCP} +{ + RichView since version 1.0 does not allow to add one checkpoint just after + another. + When defined (default), second checkpoint is ignored. + When not defined, RichView raises exception. +} + +{NOT$DEFINE RVRECHECKRTFPARA} +{ + If defined, when importing RTF file, paragraph properties are rechecked + when inserting each item (otherwise, only when inserting the first paragraph's + item). Slows reading down, but provides the same results as MS Word when + RTF file contains contradicting data for the same paragraph (buggy RTF files) +} + + +{------------------------------------------------------------------------------} +{ Addons } +{------------------------------------------------------------------------------} + +{ + Define if you use import of MS Word DOC files. +} +{NOT$DEFINE RVUSEWORDDOC} + +{------------------------------------------------------------------------------} +{ Automatical defines: } +{------------------------------------------------------------------------------} +{$IFDEF RICHVIEWCBDEF1} +{ + IME (Input Method Editor) support is disabled for Delphi 2. + D2 has required library file - Imm.pas in sources, but does not have it in library (?!). + So I think support for D2 is possible, but requires some IDE configuration... + +} + +{$IFNDEF RVDONOTUSEUNICODE} + +{$DEFINE RVUSEIME} // Using IME + +{$ENDIF} +{$ENDIF} + +{$IFNDEF RICHVIEWDEF3} +// Turning off Jpeg support for Delphi2, C++Builder 1,3 +{$DEFINE RVDONOTUSEJPEGIMAGE} + +{$ENDIF} + +{$IFNDEF RICHVIEWCBDEF3} +// Turning off D&D support for Delphi2, C++Builder 1 +{$DEFINE RVDONOTUSEDRAGDROP} +{$ENDIF} + +{$IFNDEF RVDONOTUSELISTS} + {$DEFINE RVUSELISTORSEQ} +{$ELSE} + {$IFNDEF RVDONOTUSESEQ} + {$DEFINE RVUSELISTORSEQ} + {$ENDIF} +{$ENDIF} + +{$IFDEF RICHVIEWDEF2009} + {$DEFINE RVUNICODESTR} + {$DEFINE RVUNICODEWINDOW} +{$ENDIF} + +{$DEFINE RVDEBUG} + +{.$DEFINE RVFLATSCROLLBARS} + +{.$DEFINE RVONCUT} + +{.$DEFINE RVWATERMARK} + +{.$DEFINE RVUSEBASELINE} \ No newline at end of file diff --git a/12.0.4/Units/D2007/RichView.dcu b/12.0.4/Units/D2007/RichView.dcu new file mode 100644 index 0000000..9bc3a2b Binary files /dev/null and b/12.0.4/Units/D2007/RichView.dcu differ diff --git a/12.0.4/Units/D2009/CRVData.dcu b/12.0.4/Units/D2009/CRVData.dcu new file mode 100644 index 0000000..0225fc8 Binary files /dev/null and b/12.0.4/Units/D2009/CRVData.dcu differ diff --git a/12.0.4/Units/D2009/CRVFData.dcu b/12.0.4/Units/D2009/CRVFData.dcu new file mode 100644 index 0000000..fb4c10c Binary files /dev/null and b/12.0.4/Units/D2009/CRVFData.dcu differ diff --git a/12.0.4/Units/D2009/CRVPP.dcu b/12.0.4/Units/D2009/CRVPP.dcu new file mode 100644 index 0000000..ed9a013 Binary files /dev/null and b/12.0.4/Units/D2009/CRVPP.dcu differ diff --git a/12.0.4/Units/D2009/CRVPP.res b/12.0.4/Units/D2009/CRVPP.res new file mode 100644 index 0000000..e52da72 Binary files /dev/null and b/12.0.4/Units/D2009/CRVPP.res differ diff --git a/12.0.4/Units/D2009/CtrlImg.dcu b/12.0.4/Units/D2009/CtrlImg.dcu new file mode 100644 index 0000000..44cbcc6 Binary files /dev/null and b/12.0.4/Units/D2009/CtrlImg.dcu differ diff --git a/12.0.4/Units/D2009/DBRV.dcr b/12.0.4/Units/D2009/DBRV.dcr new file mode 100644 index 0000000..506c162 Binary files /dev/null and b/12.0.4/Units/D2009/DBRV.dcr differ diff --git a/12.0.4/Units/D2009/DBRV.dcu b/12.0.4/Units/D2009/DBRV.dcu new file mode 100644 index 0000000..7aa40ca Binary files /dev/null and b/12.0.4/Units/D2009/DBRV.dcu differ diff --git a/12.0.4/Units/D2009/DBRVCool.dcr b/12.0.4/Units/D2009/DBRVCool.dcr new file mode 100644 index 0000000..b5afaca Binary files /dev/null and b/12.0.4/Units/D2009/DBRVCool.dcr differ diff --git a/12.0.4/Units/D2009/DBRVSmall.dcr b/12.0.4/Units/D2009/DBRVSmall.dcr new file mode 100644 index 0000000..a88767f Binary files /dev/null and b/12.0.4/Units/D2009/DBRVSmall.dcr differ diff --git a/12.0.4/Units/D2009/DLines.dcu b/12.0.4/Units/D2009/DLines.dcu new file mode 100644 index 0000000..8a77d73 Binary files /dev/null and b/12.0.4/Units/D2009/DLines.dcu differ diff --git a/12.0.4/Units/D2009/PtRVData.dcu b/12.0.4/Units/D2009/PtRVData.dcu new file mode 100644 index 0000000..68a2794 Binary files /dev/null and b/12.0.4/Units/D2009/PtRVData.dcu differ diff --git a/12.0.4/Units/D2009/PtblRV.dcu b/12.0.4/Units/D2009/PtblRV.dcu new file mode 100644 index 0000000..b5c14d1 Binary files /dev/null and b/12.0.4/Units/D2009/PtblRV.dcu differ diff --git a/12.0.4/Units/D2009/RVAnimate.dcu b/12.0.4/Units/D2009/RVAnimate.dcu new file mode 100644 index 0000000..7ca610b Binary files /dev/null and b/12.0.4/Units/D2009/RVAnimate.dcu differ diff --git a/12.0.4/Units/D2009/RVBack.dcu b/12.0.4/Units/D2009/RVBack.dcu new file mode 100644 index 0000000..bd90a7a Binary files /dev/null and b/12.0.4/Units/D2009/RVBack.dcu differ diff --git a/12.0.4/Units/D2009/RVClasses.dcu b/12.0.4/Units/D2009/RVClasses.dcu new file mode 100644 index 0000000..a756b5f Binary files /dev/null and b/12.0.4/Units/D2009/RVClasses.dcu differ diff --git a/12.0.4/Units/D2009/RVCodePages.dcu b/12.0.4/Units/D2009/RVCodePages.dcu new file mode 100644 index 0000000..51c7522 Binary files /dev/null and b/12.0.4/Units/D2009/RVCodePages.dcu differ diff --git a/12.0.4/Units/D2009/RVCtrlData.dcu b/12.0.4/Units/D2009/RVCtrlData.dcu new file mode 100644 index 0000000..31a633c Binary files /dev/null and b/12.0.4/Units/D2009/RVCtrlData.dcu differ diff --git a/12.0.4/Units/D2009/RVDBDsgn.dcu b/12.0.4/Units/D2009/RVDBDsgn.dcu new file mode 100644 index 0000000..67fc412 Binary files /dev/null and b/12.0.4/Units/D2009/RVDBDsgn.dcu differ diff --git a/12.0.4/Units/D2009/RVDBDsgn.dfm b/12.0.4/Units/D2009/RVDBDsgn.dfm new file mode 100644 index 0000000..4d029d5 Binary files /dev/null and b/12.0.4/Units/D2009/RVDBDsgn.dfm differ diff --git a/12.0.4/Units/D2009/RVDBPkgD2009.dcu b/12.0.4/Units/D2009/RVDBPkgD2009.dcu new file mode 100644 index 0000000..90d90ce Binary files /dev/null and b/12.0.4/Units/D2009/RVDBPkgD2009.dcu differ diff --git a/12.0.4/Units/D2009/RVDBPkgD2009.dpk b/12.0.4/Units/D2009/RVDBPkgD2009.dpk new file mode 100644 index 0000000..4ad1ca3 --- /dev/null +++ b/12.0.4/Units/D2009/RVDBPkgD2009.dpk @@ -0,0 +1,45 @@ +package RVDBPkgD2009; + +{$R *.res} +{$R 'DBRVCool.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TRichView DB for Delphi 2009'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + vcldb, + RVPkgD2009, + designide, + xmlrtl, + vclactnband, + vclx, + vclimg; + +contains + DBRV in 'DBRV.pas', + RVDBDsgn in 'RVDBDsgn.pas'; + +end. diff --git a/12.0.4/Units/D2009/RVDBPkgD2009.dproj b/12.0.4/Units/D2009/RVDBPkgD2009.dproj new file mode 100644 index 0000000..c0d95fc --- /dev/null +++ b/12.0.4/Units/D2009/RVDBPkgD2009.dproj @@ -0,0 +1,125 @@ + + + {CC5FD5DA-DE1E-4458-AB67-563B966B369F} + RVDBPkgD2009.dpk + 12.0 + Release + DCC32 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + true + 0 + C:\Documents and Settings\All Users\Документы\RAD Studio\6.0\Bpl\RVDBPkgD2009.bpl + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + TRichView DB for Delphi 2009 + true + false + true + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + + + + + + + + + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + + + + + Delphi.Personality.12 + Package + + + + RVDBPkgD2009.dpk + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + D:\Richview\temp\ + + + + 12 + + diff --git a/12.0.4/Units/D2009/RVDBPkgD2009.res b/12.0.4/Units/D2009/RVDBPkgD2009.res new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/12.0.4/Units/D2009/RVDBPkgD2009.res differ diff --git a/12.0.4/Units/D2009/RVDataList.dcu b/12.0.4/Units/D2009/RVDataList.dcu new file mode 100644 index 0000000..248e98b Binary files /dev/null and b/12.0.4/Units/D2009/RVDataList.dcu differ diff --git a/12.0.4/Units/D2009/RVDocParams.dcu b/12.0.4/Units/D2009/RVDocParams.dcu new file mode 100644 index 0000000..67bb4b3 Binary files /dev/null and b/12.0.4/Units/D2009/RVDocParams.dcu differ diff --git a/12.0.4/Units/D2009/RVDragDrop.dcu b/12.0.4/Units/D2009/RVDragDrop.dcu new file mode 100644 index 0000000..f599b60 Binary files /dev/null and b/12.0.4/Units/D2009/RVDragDrop.dcu differ diff --git a/12.0.4/Units/D2009/RVDsgn.dcu b/12.0.4/Units/D2009/RVDsgn.dcu new file mode 100644 index 0000000..956f999 Binary files /dev/null and b/12.0.4/Units/D2009/RVDsgn.dcu differ diff --git a/12.0.4/Units/D2009/RVDsgn.dfm b/12.0.4/Units/D2009/RVDsgn.dfm new file mode 100644 index 0000000..19a11ee Binary files /dev/null and b/12.0.4/Units/D2009/RVDsgn.dfm differ diff --git a/12.0.4/Units/D2009/RVERVData.dcu b/12.0.4/Units/D2009/RVERVData.dcu new file mode 100644 index 0000000..c77a7b4 Binary files /dev/null and b/12.0.4/Units/D2009/RVERVData.dcu differ diff --git a/12.0.4/Units/D2009/RVEdit.dcu b/12.0.4/Units/D2009/RVEdit.dcu new file mode 100644 index 0000000..679738d Binary files /dev/null and b/12.0.4/Units/D2009/RVEdit.dcu differ diff --git a/12.0.4/Units/D2009/RVFMisc.dcu b/12.0.4/Units/D2009/RVFMisc.dcu new file mode 100644 index 0000000..b593adf Binary files /dev/null and b/12.0.4/Units/D2009/RVFMisc.dcu differ diff --git a/12.0.4/Units/D2009/RVFuncs.dcu b/12.0.4/Units/D2009/RVFuncs.dcu new file mode 100644 index 0000000..9a4f0c6 Binary files /dev/null and b/12.0.4/Units/D2009/RVFuncs.dcu differ diff --git a/12.0.4/Units/D2009/RVGetText.dcu b/12.0.4/Units/D2009/RVGetText.dcu new file mode 100644 index 0000000..4949218 Binary files /dev/null and b/12.0.4/Units/D2009/RVGetText.dcu differ diff --git a/12.0.4/Units/D2009/RVGetTextW.dcu b/12.0.4/Units/D2009/RVGetTextW.dcu new file mode 100644 index 0000000..18cc377 Binary files /dev/null and b/12.0.4/Units/D2009/RVGetTextW.dcu differ diff --git a/12.0.4/Units/D2009/RVGifAnimate2007.dcu b/12.0.4/Units/D2009/RVGifAnimate2007.dcu new file mode 100644 index 0000000..68c310b Binary files /dev/null and b/12.0.4/Units/D2009/RVGifAnimate2007.dcu differ diff --git a/12.0.4/Units/D2009/RVItem.dcu b/12.0.4/Units/D2009/RVItem.dcu new file mode 100644 index 0000000..02fb364 Binary files /dev/null and b/12.0.4/Units/D2009/RVItem.dcu differ diff --git a/12.0.4/Units/D2009/RVJvGifAnimate.pas b/12.0.4/Units/D2009/RVJvGifAnimate.pas new file mode 100644 index 0000000..22c5724 --- /dev/null +++ b/12.0.4/Units/D2009/RVJvGifAnimate.pas @@ -0,0 +1,284 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVJvGIFImageAnimator: displaying animation for } +{ TJvGIFImage from Project JEDI's JVCL. } +{ http://jvcl.sourceforge.net } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVJvGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, JvGif; + +type + { --------------------------------------------------------------------------- + TRVJvGifImageAnimator: displaying animations for gif images + (using TJvGIFImage from Project JEDI's JVCL) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be it's background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVJvGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVJvGifImageAnimator ========================} +{ Destructor } +destructor TRVJvGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVJvGifImageAnimator.CalcInterval; +var gif: TJvGIFImage; +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + Interval := 100; + if gif.Frames[FrameIndex].AnimateInterval > 0 then begin + Interval := gif.Frames[FrameIndex].AnimateInterval; + end; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVJvGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVJvGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +{ Draws the current frame } +procedure TRVJvGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TJvGIFImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul , + HeightDiv : integer; + WidthMul , + WidthDiv : integer; + begin + with gif.Frames[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Origin.X, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Origin.Y, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Origin.X+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Origin.Y+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if FrameIndex>0 then + case gif.Frames[FrameIndex-1].DisposalMethod of + dmRestoreBackground: + begin + r := Rect(0,0,bmp.Width,bmp.Height); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex); + gif.Frames[FrameIndex].Draw(bmp.Canvas, r, gif.Frames[FrameIndex].TransparentColor <> clNone); + end; + +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if gif.Transparent then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex clNone); +end; +{------------------------------------------------------------------------------} +{ Image size for RTF saving } +function TRVJvGifImageAnimator.GetExportImageSize: TSize; +begin + Result.cy := TJvGIFImage(TRVGraphicItemInfo(item).Image).Height; + Result.cx := TJvGIFImage(TRVGraphicItemInfo(item).Image).Width; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames in gif } +function GetGifFrameCount(gif: TJvGIFImage): Integer; +begin + Result := gif.Count; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVJvGifImageAnimator.GetFrameCount: Integer; +begin + Result := TJvGIFImage(TRVGraphicItemInfo(item).Image).Count; +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVJvGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVJvGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TJvGifImage) and + (GetGifFrameCount(TJvGIFImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVJvGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVJvGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D2009/RVLabelItem.dcu b/12.0.4/Units/D2009/RVLabelItem.dcu new file mode 100644 index 0000000..8f54d38 Binary files /dev/null and b/12.0.4/Units/D2009/RVLabelItem.dcu differ diff --git a/12.0.4/Units/D2009/RVLinear.dcu b/12.0.4/Units/D2009/RVLinear.dcu new file mode 100644 index 0000000..aeadebe Binary files /dev/null and b/12.0.4/Units/D2009/RVLinear.dcu differ diff --git a/12.0.4/Units/D2009/RVMapWht.dcu b/12.0.4/Units/D2009/RVMapWht.dcu new file mode 100644 index 0000000..d1fe512 Binary files /dev/null and b/12.0.4/Units/D2009/RVMapWht.dcu differ diff --git a/12.0.4/Units/D2009/RVMarker.dcu b/12.0.4/Units/D2009/RVMarker.dcu new file mode 100644 index 0000000..53175ae Binary files /dev/null and b/12.0.4/Units/D2009/RVMarker.dcu differ diff --git a/12.0.4/Units/D2009/RVMisc.dcu b/12.0.4/Units/D2009/RVMisc.dcu new file mode 100644 index 0000000..9f02035 Binary files /dev/null and b/12.0.4/Units/D2009/RVMisc.dcu differ diff --git a/12.0.4/Units/D2009/RVNote.dcu b/12.0.4/Units/D2009/RVNote.dcu new file mode 100644 index 0000000..2e2bf04 Binary files /dev/null and b/12.0.4/Units/D2009/RVNote.dcu differ diff --git a/12.0.4/Units/D2009/RVOfficeCnv.dcu b/12.0.4/Units/D2009/RVOfficeCnv.dcu new file mode 100644 index 0000000..fea20d7 Binary files /dev/null and b/12.0.4/Units/D2009/RVOfficeCnv.dcu differ diff --git a/12.0.4/Units/D2009/RVPP.dcu b/12.0.4/Units/D2009/RVPP.dcu new file mode 100644 index 0000000..0a8c557 Binary files /dev/null and b/12.0.4/Units/D2009/RVPP.dcu differ diff --git a/12.0.4/Units/D2009/RVPkgD2009.dcu b/12.0.4/Units/D2009/RVPkgD2009.dcu new file mode 100644 index 0000000..17e4f08 Binary files /dev/null and b/12.0.4/Units/D2009/RVPkgD2009.dcu differ diff --git a/12.0.4/Units/D2009/RVPkgD2009.dpk b/12.0.4/Units/D2009/RVPkgD2009.dpk new file mode 100644 index 0000000..b15fab4 --- /dev/null +++ b/12.0.4/Units/D2009/RVPkgD2009.dpk @@ -0,0 +1,94 @@ +package RVPkgD2009; + +{$R *.res} +{$R 'rvregcool.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TRichView for Delphi 2009'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + vclimg, + designide; + +contains + CRVData in 'CRVData.pas', + CRVFData in 'CRVFData.pas', + CRVPP in 'CRVPP.pas', + CtrlImg in 'CtrlImg.pas', + DLines in 'DLines.pas', + PtblRV in 'PtblRV.pas', + PtRVData in 'PtRVData.pas', + RichView in 'RichView.pas', + RVAnimate in 'RVAnimate.pas', + RVBack in 'RVBack.pas', + RVClasses in 'RVClasses.pas', + RVCodePages in 'RVCodePages.pas', + RVCtrlData in 'RVCtrlData.pas', + RVDataList in 'RVDataList.pas', + RVDocParams in 'RVDocParams.pas', + RVDragDrop in 'RVDragDrop.pas', + RVDsgn in 'RVDsgn.pas' {frmRVDesign}, + RVEdit in 'RVEdit.pas', + RVERVData in 'RVERVData.pas', + RVFMisc in 'RVFMisc.pas', + RVFuncs in 'RVFuncs.pas', + RVGetText in 'RVGetText.pas', + RVGetTextW in 'RVGetTextW.pas', + RVGifAnimate2007 in 'RVGifAnimate2007.pas', + RVItem in 'RVItem.pas', + RVLabelItem in 'RVLabelItem.pas', + RVLinear in 'RVLinear.pas', + RVMapWht in 'RVMapWht.pas', + RVMarker in 'RVMarker.pas', + RVMisc in 'RVMisc.pas', + RVNote in 'RVNote.pas', + RVOfficeCnv in 'RVOfficeCnv.pas', + RVPopup in 'RVPopup.pas', + RVPP in 'RVPP.pas', + RVReg in 'RVReg.pas', + RVReport in 'RVReport.pas', + RVResize in 'RVResize.pas', + RVRTF in 'RVRTF.pas', + RVRTFErr in 'RVRTFErr.pas', + RVRTFProps in 'RVRTFProps.pas', + RVRVData in 'RVRVData.pas', + RVScroll in 'RVScroll.pas', + RVSEdit in 'RVSEdit.pas', + RVSeqItem in 'RVSeqItem.pas', + RVSer in 'RVSer.pas', + RVStr in 'RVStr.pas', + RVStyle in 'RVStyle.pas', + RVSubData in 'RVSubData.pas', + RVTable in 'RVTable.pas', + RVThread in 'RVThread.pas', + RVTInplace in 'RVTInplace.pas', + RVTypes in 'RVTypes.pas', + RVUndo in 'RVUndo.pas', + RVUni in 'RVUni.pas', + RVWordPaint in 'RVWordPaint.pas', + RVXPTheme in 'RVXPTheme.pas'; + +end. diff --git a/12.0.4/Units/D2009/RVPkgD2009.dproj b/12.0.4/Units/D2009/RVPkgD2009.dproj new file mode 100644 index 0000000..81d94d2 --- /dev/null +++ b/12.0.4/Units/D2009/RVPkgD2009.dproj @@ -0,0 +1,175 @@ + + + {890A67C6-231F-40D2-9104-C52C364E6329} + RVPkgD2009.dpk + 12.0 + Release + DCC32 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + true + 0 + C:\Documents and Settings\All Users\Документы\RAD Studio\6.0\Bpl\RVPkgD2009.bpl + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + TRichView for Delphi 2009 + true + false + true + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + + + + + + + + + + + + + + + + + + + + + + +
frmRVDesign
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + Package + + + + RVPkgD2009.dpk + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + ..\temp\ + + + + 12 + +
diff --git a/12.0.4/Units/D2009/RVPkgD2009.res b/12.0.4/Units/D2009/RVPkgD2009.res new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/12.0.4/Units/D2009/RVPkgD2009.res differ diff --git a/12.0.4/Units/D2009/RVPopup.dcu b/12.0.4/Units/D2009/RVPopup.dcu new file mode 100644 index 0000000..54b9dfa Binary files /dev/null and b/12.0.4/Units/D2009/RVPopup.dcu differ diff --git a/12.0.4/Units/D2009/RVRTF.dcu b/12.0.4/Units/D2009/RVRTF.dcu new file mode 100644 index 0000000..95e0160 Binary files /dev/null and b/12.0.4/Units/D2009/RVRTF.dcu differ diff --git a/12.0.4/Units/D2009/RVRTFErr.dcu b/12.0.4/Units/D2009/RVRTFErr.dcu new file mode 100644 index 0000000..f637878 Binary files /dev/null and b/12.0.4/Units/D2009/RVRTFErr.dcu differ diff --git a/12.0.4/Units/D2009/RVRTFProps.dcu b/12.0.4/Units/D2009/RVRTFProps.dcu new file mode 100644 index 0000000..a4f13b2 Binary files /dev/null and b/12.0.4/Units/D2009/RVRTFProps.dcu differ diff --git a/12.0.4/Units/D2009/RVRTFReg.dcr b/12.0.4/Units/D2009/RVRTFReg.dcr new file mode 100644 index 0000000..1d96bf6 Binary files /dev/null and b/12.0.4/Units/D2009/RVRTFReg.dcr differ diff --git a/12.0.4/Units/D2009/RVRVData.dcu b/12.0.4/Units/D2009/RVRVData.dcu new file mode 100644 index 0000000..a4eaf7c Binary files /dev/null and b/12.0.4/Units/D2009/RVRVData.dcu differ diff --git a/12.0.4/Units/D2009/RVReg.dcr b/12.0.4/Units/D2009/RVReg.dcr new file mode 100644 index 0000000..5ef086c Binary files /dev/null and b/12.0.4/Units/D2009/RVReg.dcr differ diff --git a/12.0.4/Units/D2009/RVReg.dcu b/12.0.4/Units/D2009/RVReg.dcu new file mode 100644 index 0000000..355c618 Binary files /dev/null and b/12.0.4/Units/D2009/RVReg.dcu differ diff --git a/12.0.4/Units/D2009/RVRegCool.dcr b/12.0.4/Units/D2009/RVRegCool.dcr new file mode 100644 index 0000000..57c6c0c Binary files /dev/null and b/12.0.4/Units/D2009/RVRegCool.dcr differ diff --git a/12.0.4/Units/D2009/RVRegSmall.dcr b/12.0.4/Units/D2009/RVRegSmall.dcr new file mode 100644 index 0000000..064018c Binary files /dev/null and b/12.0.4/Units/D2009/RVRegSmall.dcr differ diff --git a/12.0.4/Units/D2009/RVReport.dcu b/12.0.4/Units/D2009/RVReport.dcu new file mode 100644 index 0000000..5bc578c Binary files /dev/null and b/12.0.4/Units/D2009/RVReport.dcu differ diff --git a/12.0.4/Units/D2009/RVResize.dcu b/12.0.4/Units/D2009/RVResize.dcu new file mode 100644 index 0000000..19addb1 Binary files /dev/null and b/12.0.4/Units/D2009/RVResize.dcu differ diff --git a/12.0.4/Units/D2009/RVSEdit.dcu b/12.0.4/Units/D2009/RVSEdit.dcu new file mode 100644 index 0000000..210773c Binary files /dev/null and b/12.0.4/Units/D2009/RVSEdit.dcu differ diff --git a/12.0.4/Units/D2009/RVScroll.dcu b/12.0.4/Units/D2009/RVScroll.dcu new file mode 100644 index 0000000..baa8c14 Binary files /dev/null and b/12.0.4/Units/D2009/RVScroll.dcu differ diff --git a/12.0.4/Units/D2009/RVSeqItem.dcu b/12.0.4/Units/D2009/RVSeqItem.dcu new file mode 100644 index 0000000..95915c5 Binary files /dev/null and b/12.0.4/Units/D2009/RVSeqItem.dcu differ diff --git a/12.0.4/Units/D2009/RVSer.dcu b/12.0.4/Units/D2009/RVSer.dcu new file mode 100644 index 0000000..8e0a90b Binary files /dev/null and b/12.0.4/Units/D2009/RVSer.dcu differ diff --git a/12.0.4/Units/D2009/RVStr.dcu b/12.0.4/Units/D2009/RVStr.dcu new file mode 100644 index 0000000..7e1b0ed Binary files /dev/null and b/12.0.4/Units/D2009/RVStr.dcu differ diff --git a/12.0.4/Units/D2009/RVStyle.dcu b/12.0.4/Units/D2009/RVStyle.dcu new file mode 100644 index 0000000..cf3c318 Binary files /dev/null and b/12.0.4/Units/D2009/RVStyle.dcu differ diff --git a/12.0.4/Units/D2009/RVStyle.res b/12.0.4/Units/D2009/RVStyle.res new file mode 100644 index 0000000..8a5d879 Binary files /dev/null and b/12.0.4/Units/D2009/RVStyle.res differ diff --git a/12.0.4/Units/D2009/RVSubData.dcu b/12.0.4/Units/D2009/RVSubData.dcu new file mode 100644 index 0000000..8f016a4 Binary files /dev/null and b/12.0.4/Units/D2009/RVSubData.dcu differ diff --git a/12.0.4/Units/D2009/RVTInplace.dcu b/12.0.4/Units/D2009/RVTInplace.dcu new file mode 100644 index 0000000..3874b10 Binary files /dev/null and b/12.0.4/Units/D2009/RVTInplace.dcu differ diff --git a/12.0.4/Units/D2009/RVTable.dcu b/12.0.4/Units/D2009/RVTable.dcu new file mode 100644 index 0000000..a371ed5 Binary files /dev/null and b/12.0.4/Units/D2009/RVTable.dcu differ diff --git a/12.0.4/Units/D2009/RVTable.res b/12.0.4/Units/D2009/RVTable.res new file mode 100644 index 0000000..3aeb51c Binary files /dev/null and b/12.0.4/Units/D2009/RVTable.res differ diff --git a/12.0.4/Units/D2009/RVThread.dcu b/12.0.4/Units/D2009/RVThread.dcu new file mode 100644 index 0000000..576b3ab Binary files /dev/null and b/12.0.4/Units/D2009/RVThread.dcu differ diff --git a/12.0.4/Units/D2009/RVTypes.dcu b/12.0.4/Units/D2009/RVTypes.dcu new file mode 100644 index 0000000..80a2c23 Binary files /dev/null and b/12.0.4/Units/D2009/RVTypes.dcu differ diff --git a/12.0.4/Units/D2009/RVUndo.dcu b/12.0.4/Units/D2009/RVUndo.dcu new file mode 100644 index 0000000..d8977d5 Binary files /dev/null and b/12.0.4/Units/D2009/RVUndo.dcu differ diff --git a/12.0.4/Units/D2009/RVUni.dcu b/12.0.4/Units/D2009/RVUni.dcu new file mode 100644 index 0000000..5602744 Binary files /dev/null and b/12.0.4/Units/D2009/RVUni.dcu differ diff --git a/12.0.4/Units/D2009/RVWordPaint.dcu b/12.0.4/Units/D2009/RVWordPaint.dcu new file mode 100644 index 0000000..6c98be1 Binary files /dev/null and b/12.0.4/Units/D2009/RVWordPaint.dcu differ diff --git a/12.0.4/Units/D2009/RVXPTheme.dcu b/12.0.4/Units/D2009/RVXPTheme.dcu new file mode 100644 index 0000000..d252fa1 Binary files /dev/null and b/12.0.4/Units/D2009/RVXPTheme.dcu differ diff --git a/12.0.4/Units/D2009/RV_Defs.inc b/12.0.4/Units/D2009/RV_Defs.inc new file mode 100644 index 0000000..15f242e --- /dev/null +++ b/12.0.4/Units/D2009/RV_Defs.inc @@ -0,0 +1,347 @@ + +{*******************************************************} +{ } +{ RichView } +{ Conditionals for RichView. } +{ This file is included in all RichView PAS-files.} +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$B-} +{$H+} +{$J+} +{$T-} + +{------------------------------------------------------------------------------} +{ Determining Delphi/C++Builder version } + +{$DEFINE RICHVIEW} + +{$IFNDEF VER80} { not Delphi 1.0 } + {$IFNDEF VER90} { not Delphi 2.0 } + {$DEFINE RICHVIEWCBDEF1} (* C++Builder 1.0+ *) + {$IFNDEF VER93} { not C++Builder 1.0 } + {$DEFINE RICHVIEWCBDEF3} (* C++Builder 3.0+ *) + {$IFNDEF VER110} { not C++Builder 3.0 } + {$DEFINE RICHVIEWDEF3} (* Delphi 3.0+, C++Builder 4.0+ *) + {$IFNDEF VER100} { not Delphi 3.0 } + {$DEFINE RICHVIEWDEF4} (* Delphi 4.0+ *) + {$IFNDEF VER120} { not Delphi 4.0 } + {$IFNDEF VER125} { not C++Builder 4.0 } + {$DEFINE RICHVIEWDEF5} (* Delphi 5.0+ *) + {$IFNDEF VER130} { not Delphi 5.0 } + {$IFNDEF VER135} { not C++Builder 5.0 } + {$DEFINE RICHVIEWDEF6}(* Delphi 6.0+ *) + {$IFNDEF VER140} { not Delphi 6.0 } + {$IFNDEF VER145} { not C++Builder 6.0 } + {$DEFINE RICHVIEWDEF7}(* Delphi 7.0+ *) + {$IFNDEF VER150} { not Delphi 7.0 } + {$DEFINE RICHVIEWDEF9} (* Delphi 2005+ *) + {$DEFINE RICHVIEWDEF2005}(* Delphi 2005+ *) + {$IFNDEF VER170} { not Delphi 2005 } + {$DEFINE RICHVIEWDEF10} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2006} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2007} (* Delphi 2007 defines both VER180 and VER185 *) + {$IFNDEF VER180} { not Delphi 2006-2007 } + {$DEFINE RICHVIEWDEF2009} + {$IFNDEF VER200} + {$DEFINE RICHVIEWDEF2010} (* Delphi 2010 defines VER210 *) + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER180}{$IFNDEF VER185} +{$UNDEF RICHVIEWDEF2007} // this is D2006, not D2007 +{$ENDIF}{$ENDIF} + + +{$IFDEF RICHVIEWDEF7} +{$WARN UNSAFE_TYPE OFF} +{$WARN UNSAFE_CODE OFF} +{$WARN UNSAFE_CAST OFF} +{$ENDIF} + +{------------------------------------------------------------------------------} +{ CONDITIONAL DEFINES. } +{ Do not modify this file, use Project|Options, Directories/Conditionals, } +{ Conditional defines instead. } +{------------------------------------------------------------------------------} + +{------------------------------------------------------------------------------} +{ Defines for shrinking exe size / improving speed and memory usage by } +{ turning off unused features. } +{------------------------------------------------------------------------------} + +{NOT$DEFINE RVDONOTUSESTYLETEMPLATES} +{ + Define if you do not want to use TRVStyle.StyleTemplates and related functions. + +{NOT$DEFINE RVDONOTUSEALLCAPS} +{NOT$DEFINE RVDONOTUSESOFTHYPHENS} +{NOT$DEFINE RVDONOTUSECHARSCALE} +{ + Define it if you do not wish to use rvfsAllCaps option, soft hyphens, + CharScale. + Some speed up of text drawing and formatting. +} + +{NOT$DEFINE RVDONOTUSESMARTPOPUP} + + +{NOT$DEFINE RVDONOTUSEANIMATION} +{ + Define if you do not wish to display animations. + Saves memory and resources. +} + +{NOT$DEFINE RVDONOTUSETABS} +{ + Define if you do not wish to use tab stops. All code for importing tabs will + be excluded. But code for processing tabs (if they appeared in document) remains. +} + +{NOT$DEFINE RVDONOTUSEJPEGIMAGE} +{ + Define it if you do not wish to use Delphi jpeg units. + This will cause saving images to HTML as bitmaps, and turning off special + support for jpegs in paletted display mode. +} + +{NOT$DEFINE RVDONOTUSEHTML} +{ + Define it to remove all HTML-related methods. +} + +{NOT$DEFINE RVDONOTUSERTF} +{ + Define it to remove all RTF-export related methods +} + +{NOT$DEFINE RVDONOTUSERTFIMPORT} +{ + Define it to remove all RTF-import related methods. +} + +{NOT$DEFINE RVDONOTUSERVF} +{ + Define it to remove all RVF-related methods. + You can do it only if you do not use TRichViewEdit. Editor requires + RVF methods. +} + +{NOT$DEFINE RVDONOTUSEJUSTIFY} +{ + Define it to remove justify alignment support. + Was not properly tested. +} + +{NOT$DEFINE RVDONOTUSEUNICODE} +{ + Define it to disable Unicode support. + Cannot be activated in Delphi/C++Builder 2009+ +} +{NOT$DEFINE RVDONOTUSECHARSPACING} +{ + Define it to disable CharSpacing. Somewhat faster +} + +{NOT$DEFINE RVDONOTUSETABLES} +{ + Define, if you do not use tables. Exe-file will be smaller. +} + +{NOT$DEFINE RVDONOTUSELISTS} +{ + Define, if you do not use bullets and numbering +} + +{NOT$DEFINE RVDONOTUSESEQ} +{ + Define, if you do not use numbered sequences and footnotes +} + +{NOT$DEFINE RVDONOTUSEINI} +{ + Define, if you do not save/load RVStyle in ini-files and the Registry +} + +{NOT$DEFINE RVDONOTUSEDRAGDROP} +{ + Define, if you do not use OLE drag&drop +} + +{NOT$DEFINE RVDONOTUSEITEMHINTS} +{ + Define, if you do not want to use item titles (popup hints). + Saves 4 bytes per item in memory +} + +{NOT$DEFINE RVDONOTUSELIVESPELL} +{ + Define, if you do not want to use live spelling. + Saves 8 bytes per item in memory, reduces exe file size +} + +{NOT$DEFINE RVDONOTUSELINEARPOSITIONS} +{ + Define, if you do not need to process EM_GETSEL, EM_GETTEXTRANGE and EM_SETSEL +} + +{NOT$DEFINE RVDONOTUSERVMEMORYSTREAM} +{ + Disables custom (more efficient for saving large data) memory stream + implementation. Reduces exe file size +} + +{NOT$DEFINE RVDONOTUSEDOCPARAMS} +{ + Define to exclude TCustomRichView.DocParameters +} + +{NOT$DEFINE RVDONOTUSEOLECONTAINER} +{ + Does nothing. Reserved. +} + +{$IFDEF RVDONOTUSETABLES} + {$DEFINE RVDONOTUSEINPLACE} +{$ENDIF} +{------------------------------------------------------------------------------} +{ Other defines } +{------------------------------------------------------------------------------} +{NOT$DEFINE RVPBEARCOMPAT} +{ + Define to make HTML output more compatible with THTMLViewer (www.pbear.com) + Some unnecessary tags will be saved. +} + +{NOT$DEFINE RVEDITIGNORESESCAPE} +{ + If defined, TRichViewEdit and TDBRichViewEdit (if IgnoreEscape=True) controls + do not receive messages when Escape is pressed. Useful when placed in modal + dialogs, so that editors do not steal Escape from a Cancel button. +} + + +{NOT$DEFINE RVLANGUAGEPROPERTY} +{ + If defined, text style has additional property - Language: Cardinal +} +{NOT$DEFINE RVLIVESPELLEXEVENT} +{ + If defined, RichView has additional event - OnSpellingCheckEx. + This event has higher priority than OnSpellingCheck. +} + +{NOT$DEFINE RVUSETEXTHOVERCOLORWITHSELECTED} +{ + Define if you wish to return behavior of v1.2-, where text hover color was + used even for selected text. +} + +{NOT$DEFINE DONOTDECVSCROLLUNITS} +{ + Define to forbid RichView to decrease vertical scrolling units automatically + when needed (if you wish to control scrolling units yourself). +} + +{NOT$DEFINE RVDONOTCORRECTWMFSCALE} +{ + There is a problem in Delphi TMetafile class (wrong size) when pasting + some metafiles from Clipboard. RichView tries to correct it. + Turn this define on, if you have troubles with metafile sizes when pasting. +} + +{$DEFINE RVALLOWCPBYCP} +{ + RichView since version 1.0 does not allow to add one checkpoint just after + another. + When defined (default), second checkpoint is ignored. + When not defined, RichView raises exception. +} + +{NOT$DEFINE RVRECHECKRTFPARA} +{ + If defined, when importing RTF file, paragraph properties are rechecked + when inserting each item (otherwise, only when inserting the first paragraph's + item). Slows reading down, but provides the same results as MS Word when + RTF file contains contradicting data for the same paragraph (buggy RTF files) +} + + +{------------------------------------------------------------------------------} +{ Addons } +{------------------------------------------------------------------------------} + +{ + Define if you use import of MS Word DOC files. +} +{NOT$DEFINE RVUSEWORDDOC} + +{------------------------------------------------------------------------------} +{ Automatical defines: } +{------------------------------------------------------------------------------} +{$IFDEF RICHVIEWCBDEF1} +{ + IME (Input Method Editor) support is disabled for Delphi 2. + D2 has required library file - Imm.pas in sources, but does not have it in library (?!). + So I think support for D2 is possible, but requires some IDE configuration... + +} + +{$IFNDEF RVDONOTUSEUNICODE} + +{$DEFINE RVUSEIME} // Using IME + +{$ENDIF} +{$ENDIF} + +{$IFNDEF RICHVIEWDEF3} +// Turning off Jpeg support for Delphi2, C++Builder 1,3 +{$DEFINE RVDONOTUSEJPEGIMAGE} + +{$ENDIF} + +{$IFNDEF RICHVIEWCBDEF3} +// Turning off D&D support for Delphi2, C++Builder 1 +{$DEFINE RVDONOTUSEDRAGDROP} +{$ENDIF} + +{$IFNDEF RVDONOTUSELISTS} + {$DEFINE RVUSELISTORSEQ} +{$ELSE} + {$IFNDEF RVDONOTUSESEQ} + {$DEFINE RVUSELISTORSEQ} + {$ENDIF} +{$ENDIF} + +{$IFDEF RICHVIEWDEF2009} + {$DEFINE RVUNICODESTR} + {$DEFINE RVUNICODEWINDOW} +{$ENDIF} + +{$DEFINE RVDEBUG} + +{.$DEFINE RVFLATSCROLLBARS} + +{.$DEFINE RVONCUT} + +{.$DEFINE RVWATERMARK} + +{.$DEFINE RVUSEBASELINE} \ No newline at end of file diff --git a/12.0.4/Units/D2009/RichView.dcu b/12.0.4/Units/D2009/RichView.dcu new file mode 100644 index 0000000..690979d Binary files /dev/null and b/12.0.4/Units/D2009/RichView.dcu differ diff --git a/12.0.4/Units/D2010/CRVData.dcu b/12.0.4/Units/D2010/CRVData.dcu new file mode 100644 index 0000000..1f497d8 Binary files /dev/null and b/12.0.4/Units/D2010/CRVData.dcu differ diff --git a/12.0.4/Units/D2010/CRVFData.dcu b/12.0.4/Units/D2010/CRVFData.dcu new file mode 100644 index 0000000..367250c Binary files /dev/null and b/12.0.4/Units/D2010/CRVFData.dcu differ diff --git a/12.0.4/Units/D2010/CRVPP.dcu b/12.0.4/Units/D2010/CRVPP.dcu new file mode 100644 index 0000000..35b23e5 Binary files /dev/null and b/12.0.4/Units/D2010/CRVPP.dcu differ diff --git a/12.0.4/Units/D2010/CRVPP.res b/12.0.4/Units/D2010/CRVPP.res new file mode 100644 index 0000000..e52da72 Binary files /dev/null and b/12.0.4/Units/D2010/CRVPP.res differ diff --git a/12.0.4/Units/D2010/CtrlImg.dcu b/12.0.4/Units/D2010/CtrlImg.dcu new file mode 100644 index 0000000..a07c92b Binary files /dev/null and b/12.0.4/Units/D2010/CtrlImg.dcu differ diff --git a/12.0.4/Units/D2010/DBRV.dcr b/12.0.4/Units/D2010/DBRV.dcr new file mode 100644 index 0000000..506c162 Binary files /dev/null and b/12.0.4/Units/D2010/DBRV.dcr differ diff --git a/12.0.4/Units/D2010/DBRV.dcu b/12.0.4/Units/D2010/DBRV.dcu new file mode 100644 index 0000000..445d172 Binary files /dev/null and b/12.0.4/Units/D2010/DBRV.dcu differ diff --git a/12.0.4/Units/D2010/DBRVCool.dcr b/12.0.4/Units/D2010/DBRVCool.dcr new file mode 100644 index 0000000..b5afaca Binary files /dev/null and b/12.0.4/Units/D2010/DBRVCool.dcr differ diff --git a/12.0.4/Units/D2010/DBRVSmall.dcr b/12.0.4/Units/D2010/DBRVSmall.dcr new file mode 100644 index 0000000..a88767f Binary files /dev/null and b/12.0.4/Units/D2010/DBRVSmall.dcr differ diff --git a/12.0.4/Units/D2010/DLines.dcu b/12.0.4/Units/D2010/DLines.dcu new file mode 100644 index 0000000..40cbf0a Binary files /dev/null and b/12.0.4/Units/D2010/DLines.dcu differ diff --git a/12.0.4/Units/D2010/PtRVData.dcu b/12.0.4/Units/D2010/PtRVData.dcu new file mode 100644 index 0000000..20f2e0e Binary files /dev/null and b/12.0.4/Units/D2010/PtRVData.dcu differ diff --git a/12.0.4/Units/D2010/PtblRV.dcu b/12.0.4/Units/D2010/PtblRV.dcu new file mode 100644 index 0000000..ec8674f Binary files /dev/null and b/12.0.4/Units/D2010/PtblRV.dcu differ diff --git a/12.0.4/Units/D2010/RVAnimate.dcu b/12.0.4/Units/D2010/RVAnimate.dcu new file mode 100644 index 0000000..d63e1f3 Binary files /dev/null and b/12.0.4/Units/D2010/RVAnimate.dcu differ diff --git a/12.0.4/Units/D2010/RVBack.dcu b/12.0.4/Units/D2010/RVBack.dcu new file mode 100644 index 0000000..5cbe6ae Binary files /dev/null and b/12.0.4/Units/D2010/RVBack.dcu differ diff --git a/12.0.4/Units/D2010/RVClasses.dcu b/12.0.4/Units/D2010/RVClasses.dcu new file mode 100644 index 0000000..525c219 Binary files /dev/null and b/12.0.4/Units/D2010/RVClasses.dcu differ diff --git a/12.0.4/Units/D2010/RVCodePages.dcu b/12.0.4/Units/D2010/RVCodePages.dcu new file mode 100644 index 0000000..712738b Binary files /dev/null and b/12.0.4/Units/D2010/RVCodePages.dcu differ diff --git a/12.0.4/Units/D2010/RVCtrlData.dcu b/12.0.4/Units/D2010/RVCtrlData.dcu new file mode 100644 index 0000000..471910f Binary files /dev/null and b/12.0.4/Units/D2010/RVCtrlData.dcu differ diff --git a/12.0.4/Units/D2010/RVDBDsgn.dcu b/12.0.4/Units/D2010/RVDBDsgn.dcu new file mode 100644 index 0000000..e5d21ca Binary files /dev/null and b/12.0.4/Units/D2010/RVDBDsgn.dcu differ diff --git a/12.0.4/Units/D2010/RVDBDsgn.dfm b/12.0.4/Units/D2010/RVDBDsgn.dfm new file mode 100644 index 0000000..4d029d5 Binary files /dev/null and b/12.0.4/Units/D2010/RVDBDsgn.dfm differ diff --git a/12.0.4/Units/D2010/RVDBPkgD2010.dcu b/12.0.4/Units/D2010/RVDBPkgD2010.dcu new file mode 100644 index 0000000..4182582 Binary files /dev/null and b/12.0.4/Units/D2010/RVDBPkgD2010.dcu differ diff --git a/12.0.4/Units/D2010/RVDBPkgD2010.dpk b/12.0.4/Units/D2010/RVDBPkgD2010.dpk new file mode 100644 index 0000000..67b9206 --- /dev/null +++ b/12.0.4/Units/D2010/RVDBPkgD2010.dpk @@ -0,0 +1,41 @@ +package RVDBPkgD2010; + +{$R *.res} +{$R 'DBRVCool.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TRichView DB for Delphi 2010'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + vcldb, + vclimg, + RVPkgD2010; + +contains + DBRV in 'DBRV.pas', + RVDBDsgn in 'RVDBDsgn.pas' {frmDBRVDesign}; + +end. diff --git a/12.0.4/Units/D2010/RVDBPkgD2010.dproj b/12.0.4/Units/D2010/RVDBPkgD2010.dproj new file mode 100644 index 0000000..1fbbbfa --- /dev/null +++ b/12.0.4/Units/D2010/RVDBPkgD2010.dproj @@ -0,0 +1,119 @@ + + + {CC5FD5DA-DE1E-4458-AB67-563B966B369F} + RVDBPkgD2010.dpk + 12.0 + Release + DCC32 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + true + 0 + C:\Documents and Settings\All Users\Документы\RAD Studio\7.0\Bpl\RVDBPkgD2010.bpl + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + TRichView DB for Delphi 2010 + true + false + true + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + + + + + + + + +
frmDBRVDesign
+
+ + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + Package + + + + RVDBPkgD2010.dpk + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + + 12 + +
diff --git a/12.0.4/Units/D2010/RVDBPkgD2010.res b/12.0.4/Units/D2010/RVDBPkgD2010.res new file mode 100644 index 0000000..9f39c57 Binary files /dev/null and b/12.0.4/Units/D2010/RVDBPkgD2010.res differ diff --git a/12.0.4/Units/D2010/RVDataList.dcu b/12.0.4/Units/D2010/RVDataList.dcu new file mode 100644 index 0000000..b79a657 Binary files /dev/null and b/12.0.4/Units/D2010/RVDataList.dcu differ diff --git a/12.0.4/Units/D2010/RVDocParams.dcu b/12.0.4/Units/D2010/RVDocParams.dcu new file mode 100644 index 0000000..3ab1055 Binary files /dev/null and b/12.0.4/Units/D2010/RVDocParams.dcu differ diff --git a/12.0.4/Units/D2010/RVDragDrop.dcu b/12.0.4/Units/D2010/RVDragDrop.dcu new file mode 100644 index 0000000..cc752ba Binary files /dev/null and b/12.0.4/Units/D2010/RVDragDrop.dcu differ diff --git a/12.0.4/Units/D2010/RVDsgn.dcu b/12.0.4/Units/D2010/RVDsgn.dcu new file mode 100644 index 0000000..941fe21 Binary files /dev/null and b/12.0.4/Units/D2010/RVDsgn.dcu differ diff --git a/12.0.4/Units/D2010/RVDsgn.dfm b/12.0.4/Units/D2010/RVDsgn.dfm new file mode 100644 index 0000000..19a11ee Binary files /dev/null and b/12.0.4/Units/D2010/RVDsgn.dfm differ diff --git a/12.0.4/Units/D2010/RVERVData.dcu b/12.0.4/Units/D2010/RVERVData.dcu new file mode 100644 index 0000000..c33d828 Binary files /dev/null and b/12.0.4/Units/D2010/RVERVData.dcu differ diff --git a/12.0.4/Units/D2010/RVEdit.dcu b/12.0.4/Units/D2010/RVEdit.dcu new file mode 100644 index 0000000..88ac432 Binary files /dev/null and b/12.0.4/Units/D2010/RVEdit.dcu differ diff --git a/12.0.4/Units/D2010/RVFMisc.dcu b/12.0.4/Units/D2010/RVFMisc.dcu new file mode 100644 index 0000000..f89d29a Binary files /dev/null and b/12.0.4/Units/D2010/RVFMisc.dcu differ diff --git a/12.0.4/Units/D2010/RVFuncs.dcu b/12.0.4/Units/D2010/RVFuncs.dcu new file mode 100644 index 0000000..43b720e Binary files /dev/null and b/12.0.4/Units/D2010/RVFuncs.dcu differ diff --git a/12.0.4/Units/D2010/RVGetText.dcu b/12.0.4/Units/D2010/RVGetText.dcu new file mode 100644 index 0000000..23530c6 Binary files /dev/null and b/12.0.4/Units/D2010/RVGetText.dcu differ diff --git a/12.0.4/Units/D2010/RVGetTextW.dcu b/12.0.4/Units/D2010/RVGetTextW.dcu new file mode 100644 index 0000000..df9010a Binary files /dev/null and b/12.0.4/Units/D2010/RVGetTextW.dcu differ diff --git a/12.0.4/Units/D2010/RVGifAnimate2007.dcu b/12.0.4/Units/D2010/RVGifAnimate2007.dcu new file mode 100644 index 0000000..c6b05d6 Binary files /dev/null and b/12.0.4/Units/D2010/RVGifAnimate2007.dcu differ diff --git a/12.0.4/Units/D2010/RVItem.dcu b/12.0.4/Units/D2010/RVItem.dcu new file mode 100644 index 0000000..300b7e8 Binary files /dev/null and b/12.0.4/Units/D2010/RVItem.dcu differ diff --git a/12.0.4/Units/D2010/RVJvGifAnimate.pas b/12.0.4/Units/D2010/RVJvGifAnimate.pas new file mode 100644 index 0000000..22c5724 --- /dev/null +++ b/12.0.4/Units/D2010/RVJvGifAnimate.pas @@ -0,0 +1,284 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVJvGIFImageAnimator: displaying animation for } +{ TJvGIFImage from Project JEDI's JVCL. } +{ http://jvcl.sourceforge.net } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVJvGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, JvGif; + +type + { --------------------------------------------------------------------------- + TRVJvGifImageAnimator: displaying animations for gif images + (using TJvGIFImage from Project JEDI's JVCL) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be it's background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVJvGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVJvGifImageAnimator ========================} +{ Destructor } +destructor TRVJvGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVJvGifImageAnimator.CalcInterval; +var gif: TJvGIFImage; +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + Interval := 100; + if gif.Frames[FrameIndex].AnimateInterval > 0 then begin + Interval := gif.Frames[FrameIndex].AnimateInterval; + end; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVJvGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVJvGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +{ Draws the current frame } +procedure TRVJvGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TJvGIFImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul , + HeightDiv : integer; + WidthMul , + WidthDiv : integer; + begin + with gif.Frames[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Origin.X, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Origin.Y, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Origin.X+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Origin.Y+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if FrameIndex>0 then + case gif.Frames[FrameIndex-1].DisposalMethod of + dmRestoreBackground: + begin + r := Rect(0,0,bmp.Width,bmp.Height); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex); + gif.Frames[FrameIndex].Draw(bmp.Canvas, r, gif.Frames[FrameIndex].TransparentColor <> clNone); + end; + +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if gif.Transparent then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex clNone); +end; +{------------------------------------------------------------------------------} +{ Image size for RTF saving } +function TRVJvGifImageAnimator.GetExportImageSize: TSize; +begin + Result.cy := TJvGIFImage(TRVGraphicItemInfo(item).Image).Height; + Result.cx := TJvGIFImage(TRVGraphicItemInfo(item).Image).Width; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames in gif } +function GetGifFrameCount(gif: TJvGIFImage): Integer; +begin + Result := gif.Count; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVJvGifImageAnimator.GetFrameCount: Integer; +begin + Result := TJvGIFImage(TRVGraphicItemInfo(item).Image).Count; +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVJvGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVJvGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TJvGifImage) and + (GetGifFrameCount(TJvGIFImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVJvGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVJvGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D2010/RVLabelItem.dcu b/12.0.4/Units/D2010/RVLabelItem.dcu new file mode 100644 index 0000000..dc4503e Binary files /dev/null and b/12.0.4/Units/D2010/RVLabelItem.dcu differ diff --git a/12.0.4/Units/D2010/RVLinear.dcu b/12.0.4/Units/D2010/RVLinear.dcu new file mode 100644 index 0000000..fc4e06f Binary files /dev/null and b/12.0.4/Units/D2010/RVLinear.dcu differ diff --git a/12.0.4/Units/D2010/RVMapWht.dcu b/12.0.4/Units/D2010/RVMapWht.dcu new file mode 100644 index 0000000..eab243b Binary files /dev/null and b/12.0.4/Units/D2010/RVMapWht.dcu differ diff --git a/12.0.4/Units/D2010/RVMarker.dcu b/12.0.4/Units/D2010/RVMarker.dcu new file mode 100644 index 0000000..f0c4163 Binary files /dev/null and b/12.0.4/Units/D2010/RVMarker.dcu differ diff --git a/12.0.4/Units/D2010/RVMisc.dcu b/12.0.4/Units/D2010/RVMisc.dcu new file mode 100644 index 0000000..ba9bc57 Binary files /dev/null and b/12.0.4/Units/D2010/RVMisc.dcu differ diff --git a/12.0.4/Units/D2010/RVNote.dcu b/12.0.4/Units/D2010/RVNote.dcu new file mode 100644 index 0000000..13e2a14 Binary files /dev/null and b/12.0.4/Units/D2010/RVNote.dcu differ diff --git a/12.0.4/Units/D2010/RVOfficeCnv.dcu b/12.0.4/Units/D2010/RVOfficeCnv.dcu new file mode 100644 index 0000000..55133d0 Binary files /dev/null and b/12.0.4/Units/D2010/RVOfficeCnv.dcu differ diff --git a/12.0.4/Units/D2010/RVPP.dcu b/12.0.4/Units/D2010/RVPP.dcu new file mode 100644 index 0000000..a8200e3 Binary files /dev/null and b/12.0.4/Units/D2010/RVPP.dcu differ diff --git a/12.0.4/Units/D2010/RVPkgD2010.dcu b/12.0.4/Units/D2010/RVPkgD2010.dcu new file mode 100644 index 0000000..054437c Binary files /dev/null and b/12.0.4/Units/D2010/RVPkgD2010.dcu differ diff --git a/12.0.4/Units/D2010/RVPkgD2010.dpk b/12.0.4/Units/D2010/RVPkgD2010.dpk new file mode 100644 index 0000000..d2ce3b0 --- /dev/null +++ b/12.0.4/Units/D2010/RVPkgD2010.dpk @@ -0,0 +1,94 @@ +package RVPkgD2010; + +{$R *.res} +{$R 'rvregcool.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST OFF} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'TRichView for Delphi 2010'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + rtl, + vcl, + vclimg, + designide; + +contains + CRVData in 'CRVData.pas', + CRVFData in 'CRVFData.pas', + CRVPP in 'CRVPP.pas', + CtrlImg in 'CtrlImg.pas', + DLines in 'DLines.pas', + PtblRV in 'PtblRV.pas', + PtRVData in 'PtRVData.pas', + RichView in 'RichView.pas', + RVAnimate in 'RVAnimate.pas', + RVBack in 'RVBack.pas', + RVClasses in 'RVClasses.pas', + RVCodePages in 'RVCodePages.pas', + RVCtrlData in 'RVCtrlData.pas', + RVDataList in 'RVDataList.pas', + RVDocParams in 'RVDocParams.pas', + RVDragDrop in 'RVDragDrop.pas', + RVDsgn in 'RVDsgn.pas' {frmRVDesign}, + RVEdit in 'RVEdit.pas', + RVERVData in 'RVERVData.pas', + RVFMisc in 'RVFMisc.pas', + RVFuncs in 'RVFuncs.pas', + RVGetText in 'RVGetText.pas', + RVGetTextW in 'RVGetTextW.pas', + RVGifAnimate2007 in 'RVGifAnimate2007.pas', + RVItem in 'RVItem.pas', + RVLabelItem in 'RVLabelItem.pas', + RVLinear in 'RVLinear.pas', + RVMapWht in 'RVMapWht.pas', + RVMarker in 'RVMarker.pas', + RVMisc in 'RVMisc.pas', + RVNote in 'RVNote.pas', + RVOfficeCnv in 'RVOfficeCnv.pas', + RVPopup in 'RVPopup.pas', + RVPP in 'RVPP.pas', + RVReg in 'RVReg.pas', + RVReport in 'RVReport.pas', + RVResize in 'RVResize.pas', + RVRTF in 'RVRTF.pas', + RVRTFErr in 'RVRTFErr.pas', + RVRTFProps in 'RVRTFProps.pas', + RVRVData in 'RVRVData.pas', + RVScroll in 'RVScroll.pas', + RVSEdit in 'RVSEdit.pas', + RVSeqItem in 'RVSeqItem.pas', + RVSer in 'RVSer.pas', + RVStr in 'RVStr.pas', + RVStyle in 'RVStyle.pas', + RVSubData in 'RVSubData.pas', + RVTable in 'RVTable.pas', + RVThread in 'RVThread.pas', + RVTInplace in 'RVTInplace.pas', + RVTypes in 'RVTypes.pas', + RVUndo in 'RVUndo.pas', + RVUni in 'RVUni.pas', + RVWordPaint in 'RVWordPaint.pas', + RVXPTheme in 'RVXPTheme.pas'; + +end. diff --git a/12.0.4/Units/D2010/RVPkgD2010.dproj b/12.0.4/Units/D2010/RVPkgD2010.dproj new file mode 100644 index 0000000..a84fc66 --- /dev/null +++ b/12.0.4/Units/D2010/RVPkgD2010.dproj @@ -0,0 +1,176 @@ + + + {890A67C6-231F-40D2-9104-C52C364E6329} + RVPkgD2010.dpk + 12.0 + Release + DCC32 + + + true + + + true + Base + true + + + true + Base + true + + + 00400000 + true + 0 + C:\Documents and Settings\All Users\Документы\RAD Studio\7.0\Bpl\RVPkgD2010.bpl + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;$(DCC_UnitAlias) + x86 + TRichView for Delphi 2010 + true + false + true + true + false + false + false + false + + + false + RELEASE;$(DCC_Define) + 0 + false + + + DEBUG;$(DCC_Define) + + + + MainSource + + + + + + + + + + + + + + + + + + + + + + + +
frmRVDesign
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Base + + + Cfg_2 + Base + + + Cfg_1 + Base + +
+ + + Delphi.Personality.12 + Package + + + + RVPkgD2010.dpk + + + False + True + False + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + D:\Richview\temp\ + + + + 12 + +
diff --git a/12.0.4/Units/D2010/RVPkgD2010.res b/12.0.4/Units/D2010/RVPkgD2010.res new file mode 100644 index 0000000..9f39c57 Binary files /dev/null and b/12.0.4/Units/D2010/RVPkgD2010.res differ diff --git a/12.0.4/Units/D2010/RVPopup.dcu b/12.0.4/Units/D2010/RVPopup.dcu new file mode 100644 index 0000000..5e8fb99 Binary files /dev/null and b/12.0.4/Units/D2010/RVPopup.dcu differ diff --git a/12.0.4/Units/D2010/RVRTF.dcu b/12.0.4/Units/D2010/RVRTF.dcu new file mode 100644 index 0000000..4f0659a Binary files /dev/null and b/12.0.4/Units/D2010/RVRTF.dcu differ diff --git a/12.0.4/Units/D2010/RVRTFErr.dcu b/12.0.4/Units/D2010/RVRTFErr.dcu new file mode 100644 index 0000000..3418f30 Binary files /dev/null and b/12.0.4/Units/D2010/RVRTFErr.dcu differ diff --git a/12.0.4/Units/D2010/RVRTFProps.dcu b/12.0.4/Units/D2010/RVRTFProps.dcu new file mode 100644 index 0000000..a255852 Binary files /dev/null and b/12.0.4/Units/D2010/RVRTFProps.dcu differ diff --git a/12.0.4/Units/D2010/RVRTFReg.dcr b/12.0.4/Units/D2010/RVRTFReg.dcr new file mode 100644 index 0000000..1d96bf6 Binary files /dev/null and b/12.0.4/Units/D2010/RVRTFReg.dcr differ diff --git a/12.0.4/Units/D2010/RVRVData.dcu b/12.0.4/Units/D2010/RVRVData.dcu new file mode 100644 index 0000000..d6ad5af Binary files /dev/null and b/12.0.4/Units/D2010/RVRVData.dcu differ diff --git a/12.0.4/Units/D2010/RVReg.dcr b/12.0.4/Units/D2010/RVReg.dcr new file mode 100644 index 0000000..5ef086c Binary files /dev/null and b/12.0.4/Units/D2010/RVReg.dcr differ diff --git a/12.0.4/Units/D2010/RVReg.dcu b/12.0.4/Units/D2010/RVReg.dcu new file mode 100644 index 0000000..5d0ba87 Binary files /dev/null and b/12.0.4/Units/D2010/RVReg.dcu differ diff --git a/12.0.4/Units/D2010/RVRegCool.dcr b/12.0.4/Units/D2010/RVRegCool.dcr new file mode 100644 index 0000000..57c6c0c Binary files /dev/null and b/12.0.4/Units/D2010/RVRegCool.dcr differ diff --git a/12.0.4/Units/D2010/RVRegSmall.dcr b/12.0.4/Units/D2010/RVRegSmall.dcr new file mode 100644 index 0000000..064018c Binary files /dev/null and b/12.0.4/Units/D2010/RVRegSmall.dcr differ diff --git a/12.0.4/Units/D2010/RVReport.dcu b/12.0.4/Units/D2010/RVReport.dcu new file mode 100644 index 0000000..1a345a5 Binary files /dev/null and b/12.0.4/Units/D2010/RVReport.dcu differ diff --git a/12.0.4/Units/D2010/RVResize.dcu b/12.0.4/Units/D2010/RVResize.dcu new file mode 100644 index 0000000..dc0b260 Binary files /dev/null and b/12.0.4/Units/D2010/RVResize.dcu differ diff --git a/12.0.4/Units/D2010/RVSEdit.dcu b/12.0.4/Units/D2010/RVSEdit.dcu new file mode 100644 index 0000000..5d3c396 Binary files /dev/null and b/12.0.4/Units/D2010/RVSEdit.dcu differ diff --git a/12.0.4/Units/D2010/RVScroll.dcu b/12.0.4/Units/D2010/RVScroll.dcu new file mode 100644 index 0000000..f0ab18f Binary files /dev/null and b/12.0.4/Units/D2010/RVScroll.dcu differ diff --git a/12.0.4/Units/D2010/RVSeqItem.dcu b/12.0.4/Units/D2010/RVSeqItem.dcu new file mode 100644 index 0000000..7ae97ec Binary files /dev/null and b/12.0.4/Units/D2010/RVSeqItem.dcu differ diff --git a/12.0.4/Units/D2010/RVSer.dcu b/12.0.4/Units/D2010/RVSer.dcu new file mode 100644 index 0000000..01b91e7 Binary files /dev/null and b/12.0.4/Units/D2010/RVSer.dcu differ diff --git a/12.0.4/Units/D2010/RVStr.dcu b/12.0.4/Units/D2010/RVStr.dcu new file mode 100644 index 0000000..de9f439 Binary files /dev/null and b/12.0.4/Units/D2010/RVStr.dcu differ diff --git a/12.0.4/Units/D2010/RVStyle.dcu b/12.0.4/Units/D2010/RVStyle.dcu new file mode 100644 index 0000000..8727714 Binary files /dev/null and b/12.0.4/Units/D2010/RVStyle.dcu differ diff --git a/12.0.4/Units/D2010/RVStyle.res b/12.0.4/Units/D2010/RVStyle.res new file mode 100644 index 0000000..8a5d879 Binary files /dev/null and b/12.0.4/Units/D2010/RVStyle.res differ diff --git a/12.0.4/Units/D2010/RVSubData.dcu b/12.0.4/Units/D2010/RVSubData.dcu new file mode 100644 index 0000000..e4b9b03 Binary files /dev/null and b/12.0.4/Units/D2010/RVSubData.dcu differ diff --git a/12.0.4/Units/D2010/RVTInplace.dcu b/12.0.4/Units/D2010/RVTInplace.dcu new file mode 100644 index 0000000..dd953ff Binary files /dev/null and b/12.0.4/Units/D2010/RVTInplace.dcu differ diff --git a/12.0.4/Units/D2010/RVTable.dcu b/12.0.4/Units/D2010/RVTable.dcu new file mode 100644 index 0000000..0b6086d Binary files /dev/null and b/12.0.4/Units/D2010/RVTable.dcu differ diff --git a/12.0.4/Units/D2010/RVTable.res b/12.0.4/Units/D2010/RVTable.res new file mode 100644 index 0000000..3aeb51c Binary files /dev/null and b/12.0.4/Units/D2010/RVTable.res differ diff --git a/12.0.4/Units/D2010/RVThread.dcu b/12.0.4/Units/D2010/RVThread.dcu new file mode 100644 index 0000000..ae470fb Binary files /dev/null and b/12.0.4/Units/D2010/RVThread.dcu differ diff --git a/12.0.4/Units/D2010/RVTypes.dcu b/12.0.4/Units/D2010/RVTypes.dcu new file mode 100644 index 0000000..35f2a53 Binary files /dev/null and b/12.0.4/Units/D2010/RVTypes.dcu differ diff --git a/12.0.4/Units/D2010/RVUndo.dcu b/12.0.4/Units/D2010/RVUndo.dcu new file mode 100644 index 0000000..9c3b73d Binary files /dev/null and b/12.0.4/Units/D2010/RVUndo.dcu differ diff --git a/12.0.4/Units/D2010/RVUni.dcu b/12.0.4/Units/D2010/RVUni.dcu new file mode 100644 index 0000000..d5fe8bd Binary files /dev/null and b/12.0.4/Units/D2010/RVUni.dcu differ diff --git a/12.0.4/Units/D2010/RVWordPaint.dcu b/12.0.4/Units/D2010/RVWordPaint.dcu new file mode 100644 index 0000000..7c2ce40 Binary files /dev/null and b/12.0.4/Units/D2010/RVWordPaint.dcu differ diff --git a/12.0.4/Units/D2010/RVXPTheme.dcu b/12.0.4/Units/D2010/RVXPTheme.dcu new file mode 100644 index 0000000..d25ef92 Binary files /dev/null and b/12.0.4/Units/D2010/RVXPTheme.dcu differ diff --git a/12.0.4/Units/D2010/RV_Defs.inc b/12.0.4/Units/D2010/RV_Defs.inc new file mode 100644 index 0000000..15f242e --- /dev/null +++ b/12.0.4/Units/D2010/RV_Defs.inc @@ -0,0 +1,347 @@ + +{*******************************************************} +{ } +{ RichView } +{ Conditionals for RichView. } +{ This file is included in all RichView PAS-files.} +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$B-} +{$H+} +{$J+} +{$T-} + +{------------------------------------------------------------------------------} +{ Determining Delphi/C++Builder version } + +{$DEFINE RICHVIEW} + +{$IFNDEF VER80} { not Delphi 1.0 } + {$IFNDEF VER90} { not Delphi 2.0 } + {$DEFINE RICHVIEWCBDEF1} (* C++Builder 1.0+ *) + {$IFNDEF VER93} { not C++Builder 1.0 } + {$DEFINE RICHVIEWCBDEF3} (* C++Builder 3.0+ *) + {$IFNDEF VER110} { not C++Builder 3.0 } + {$DEFINE RICHVIEWDEF3} (* Delphi 3.0+, C++Builder 4.0+ *) + {$IFNDEF VER100} { not Delphi 3.0 } + {$DEFINE RICHVIEWDEF4} (* Delphi 4.0+ *) + {$IFNDEF VER120} { not Delphi 4.0 } + {$IFNDEF VER125} { not C++Builder 4.0 } + {$DEFINE RICHVIEWDEF5} (* Delphi 5.0+ *) + {$IFNDEF VER130} { not Delphi 5.0 } + {$IFNDEF VER135} { not C++Builder 5.0 } + {$DEFINE RICHVIEWDEF6}(* Delphi 6.0+ *) + {$IFNDEF VER140} { not Delphi 6.0 } + {$IFNDEF VER145} { not C++Builder 6.0 } + {$DEFINE RICHVIEWDEF7}(* Delphi 7.0+ *) + {$IFNDEF VER150} { not Delphi 7.0 } + {$DEFINE RICHVIEWDEF9} (* Delphi 2005+ *) + {$DEFINE RICHVIEWDEF2005}(* Delphi 2005+ *) + {$IFNDEF VER170} { not Delphi 2005 } + {$DEFINE RICHVIEWDEF10} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2006} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2007} (* Delphi 2007 defines both VER180 and VER185 *) + {$IFNDEF VER180} { not Delphi 2006-2007 } + {$DEFINE RICHVIEWDEF2009} + {$IFNDEF VER200} + {$DEFINE RICHVIEWDEF2010} (* Delphi 2010 defines VER210 *) + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER180}{$IFNDEF VER185} +{$UNDEF RICHVIEWDEF2007} // this is D2006, not D2007 +{$ENDIF}{$ENDIF} + + +{$IFDEF RICHVIEWDEF7} +{$WARN UNSAFE_TYPE OFF} +{$WARN UNSAFE_CODE OFF} +{$WARN UNSAFE_CAST OFF} +{$ENDIF} + +{------------------------------------------------------------------------------} +{ CONDITIONAL DEFINES. } +{ Do not modify this file, use Project|Options, Directories/Conditionals, } +{ Conditional defines instead. } +{------------------------------------------------------------------------------} + +{------------------------------------------------------------------------------} +{ Defines for shrinking exe size / improving speed and memory usage by } +{ turning off unused features. } +{------------------------------------------------------------------------------} + +{NOT$DEFINE RVDONOTUSESTYLETEMPLATES} +{ + Define if you do not want to use TRVStyle.StyleTemplates and related functions. + +{NOT$DEFINE RVDONOTUSEALLCAPS} +{NOT$DEFINE RVDONOTUSESOFTHYPHENS} +{NOT$DEFINE RVDONOTUSECHARSCALE} +{ + Define it if you do not wish to use rvfsAllCaps option, soft hyphens, + CharScale. + Some speed up of text drawing and formatting. +} + +{NOT$DEFINE RVDONOTUSESMARTPOPUP} + + +{NOT$DEFINE RVDONOTUSEANIMATION} +{ + Define if you do not wish to display animations. + Saves memory and resources. +} + +{NOT$DEFINE RVDONOTUSETABS} +{ + Define if you do not wish to use tab stops. All code for importing tabs will + be excluded. But code for processing tabs (if they appeared in document) remains. +} + +{NOT$DEFINE RVDONOTUSEJPEGIMAGE} +{ + Define it if you do not wish to use Delphi jpeg units. + This will cause saving images to HTML as bitmaps, and turning off special + support for jpegs in paletted display mode. +} + +{NOT$DEFINE RVDONOTUSEHTML} +{ + Define it to remove all HTML-related methods. +} + +{NOT$DEFINE RVDONOTUSERTF} +{ + Define it to remove all RTF-export related methods +} + +{NOT$DEFINE RVDONOTUSERTFIMPORT} +{ + Define it to remove all RTF-import related methods. +} + +{NOT$DEFINE RVDONOTUSERVF} +{ + Define it to remove all RVF-related methods. + You can do it only if you do not use TRichViewEdit. Editor requires + RVF methods. +} + +{NOT$DEFINE RVDONOTUSEJUSTIFY} +{ + Define it to remove justify alignment support. + Was not properly tested. +} + +{NOT$DEFINE RVDONOTUSEUNICODE} +{ + Define it to disable Unicode support. + Cannot be activated in Delphi/C++Builder 2009+ +} +{NOT$DEFINE RVDONOTUSECHARSPACING} +{ + Define it to disable CharSpacing. Somewhat faster +} + +{NOT$DEFINE RVDONOTUSETABLES} +{ + Define, if you do not use tables. Exe-file will be smaller. +} + +{NOT$DEFINE RVDONOTUSELISTS} +{ + Define, if you do not use bullets and numbering +} + +{NOT$DEFINE RVDONOTUSESEQ} +{ + Define, if you do not use numbered sequences and footnotes +} + +{NOT$DEFINE RVDONOTUSEINI} +{ + Define, if you do not save/load RVStyle in ini-files and the Registry +} + +{NOT$DEFINE RVDONOTUSEDRAGDROP} +{ + Define, if you do not use OLE drag&drop +} + +{NOT$DEFINE RVDONOTUSEITEMHINTS} +{ + Define, if you do not want to use item titles (popup hints). + Saves 4 bytes per item in memory +} + +{NOT$DEFINE RVDONOTUSELIVESPELL} +{ + Define, if you do not want to use live spelling. + Saves 8 bytes per item in memory, reduces exe file size +} + +{NOT$DEFINE RVDONOTUSELINEARPOSITIONS} +{ + Define, if you do not need to process EM_GETSEL, EM_GETTEXTRANGE and EM_SETSEL +} + +{NOT$DEFINE RVDONOTUSERVMEMORYSTREAM} +{ + Disables custom (more efficient for saving large data) memory stream + implementation. Reduces exe file size +} + +{NOT$DEFINE RVDONOTUSEDOCPARAMS} +{ + Define to exclude TCustomRichView.DocParameters +} + +{NOT$DEFINE RVDONOTUSEOLECONTAINER} +{ + Does nothing. Reserved. +} + +{$IFDEF RVDONOTUSETABLES} + {$DEFINE RVDONOTUSEINPLACE} +{$ENDIF} +{------------------------------------------------------------------------------} +{ Other defines } +{------------------------------------------------------------------------------} +{NOT$DEFINE RVPBEARCOMPAT} +{ + Define to make HTML output more compatible with THTMLViewer (www.pbear.com) + Some unnecessary tags will be saved. +} + +{NOT$DEFINE RVEDITIGNORESESCAPE} +{ + If defined, TRichViewEdit and TDBRichViewEdit (if IgnoreEscape=True) controls + do not receive messages when Escape is pressed. Useful when placed in modal + dialogs, so that editors do not steal Escape from a Cancel button. +} + + +{NOT$DEFINE RVLANGUAGEPROPERTY} +{ + If defined, text style has additional property - Language: Cardinal +} +{NOT$DEFINE RVLIVESPELLEXEVENT} +{ + If defined, RichView has additional event - OnSpellingCheckEx. + This event has higher priority than OnSpellingCheck. +} + +{NOT$DEFINE RVUSETEXTHOVERCOLORWITHSELECTED} +{ + Define if you wish to return behavior of v1.2-, where text hover color was + used even for selected text. +} + +{NOT$DEFINE DONOTDECVSCROLLUNITS} +{ + Define to forbid RichView to decrease vertical scrolling units automatically + when needed (if you wish to control scrolling units yourself). +} + +{NOT$DEFINE RVDONOTCORRECTWMFSCALE} +{ + There is a problem in Delphi TMetafile class (wrong size) when pasting + some metafiles from Clipboard. RichView tries to correct it. + Turn this define on, if you have troubles with metafile sizes when pasting. +} + +{$DEFINE RVALLOWCPBYCP} +{ + RichView since version 1.0 does not allow to add one checkpoint just after + another. + When defined (default), second checkpoint is ignored. + When not defined, RichView raises exception. +} + +{NOT$DEFINE RVRECHECKRTFPARA} +{ + If defined, when importing RTF file, paragraph properties are rechecked + when inserting each item (otherwise, only when inserting the first paragraph's + item). Slows reading down, but provides the same results as MS Word when + RTF file contains contradicting data for the same paragraph (buggy RTF files) +} + + +{------------------------------------------------------------------------------} +{ Addons } +{------------------------------------------------------------------------------} + +{ + Define if you use import of MS Word DOC files. +} +{NOT$DEFINE RVUSEWORDDOC} + +{------------------------------------------------------------------------------} +{ Automatical defines: } +{------------------------------------------------------------------------------} +{$IFDEF RICHVIEWCBDEF1} +{ + IME (Input Method Editor) support is disabled for Delphi 2. + D2 has required library file - Imm.pas in sources, but does not have it in library (?!). + So I think support for D2 is possible, but requires some IDE configuration... + +} + +{$IFNDEF RVDONOTUSEUNICODE} + +{$DEFINE RVUSEIME} // Using IME + +{$ENDIF} +{$ENDIF} + +{$IFNDEF RICHVIEWDEF3} +// Turning off Jpeg support for Delphi2, C++Builder 1,3 +{$DEFINE RVDONOTUSEJPEGIMAGE} + +{$ENDIF} + +{$IFNDEF RICHVIEWCBDEF3} +// Turning off D&D support for Delphi2, C++Builder 1 +{$DEFINE RVDONOTUSEDRAGDROP} +{$ENDIF} + +{$IFNDEF RVDONOTUSELISTS} + {$DEFINE RVUSELISTORSEQ} +{$ELSE} + {$IFNDEF RVDONOTUSESEQ} + {$DEFINE RVUSELISTORSEQ} + {$ENDIF} +{$ENDIF} + +{$IFDEF RICHVIEWDEF2009} + {$DEFINE RVUNICODESTR} + {$DEFINE RVUNICODEWINDOW} +{$ENDIF} + +{$DEFINE RVDEBUG} + +{.$DEFINE RVFLATSCROLLBARS} + +{.$DEFINE RVONCUT} + +{.$DEFINE RVWATERMARK} + +{.$DEFINE RVUSEBASELINE} \ No newline at end of file diff --git a/12.0.4/Units/D2010/RichView.dcu b/12.0.4/Units/D2010/RichView.dcu new file mode 100644 index 0000000..cff4fde Binary files /dev/null and b/12.0.4/Units/D2010/RichView.dcu differ diff --git a/12.0.4/Units/D6/CRVData.dcu b/12.0.4/Units/D6/CRVData.dcu new file mode 100644 index 0000000..fd52004 Binary files /dev/null and b/12.0.4/Units/D6/CRVData.dcu differ diff --git a/12.0.4/Units/D6/CRVFData.dcu b/12.0.4/Units/D6/CRVFData.dcu new file mode 100644 index 0000000..9658c52 Binary files /dev/null and b/12.0.4/Units/D6/CRVFData.dcu differ diff --git a/12.0.4/Units/D6/CRVPP.dcu b/12.0.4/Units/D6/CRVPP.dcu new file mode 100644 index 0000000..d4940c6 Binary files /dev/null and b/12.0.4/Units/D6/CRVPP.dcu differ diff --git a/12.0.4/Units/D6/CRVPP.res b/12.0.4/Units/D6/CRVPP.res new file mode 100644 index 0000000..e52da72 Binary files /dev/null and b/12.0.4/Units/D6/CRVPP.res differ diff --git a/12.0.4/Units/D6/CtrlImg.dcu b/12.0.4/Units/D6/CtrlImg.dcu new file mode 100644 index 0000000..59e7ad4 Binary files /dev/null and b/12.0.4/Units/D6/CtrlImg.dcu differ diff --git a/12.0.4/Units/D6/DBRV.dcr b/12.0.4/Units/D6/DBRV.dcr new file mode 100644 index 0000000..506c162 Binary files /dev/null and b/12.0.4/Units/D6/DBRV.dcr differ diff --git a/12.0.4/Units/D6/DBRV.dcu b/12.0.4/Units/D6/DBRV.dcu new file mode 100644 index 0000000..2121cb0 Binary files /dev/null and b/12.0.4/Units/D6/DBRV.dcu differ diff --git a/12.0.4/Units/D6/DBRVCool.dcr b/12.0.4/Units/D6/DBRVCool.dcr new file mode 100644 index 0000000..b5afaca Binary files /dev/null and b/12.0.4/Units/D6/DBRVCool.dcr differ diff --git a/12.0.4/Units/D6/DBRVSmall.dcr b/12.0.4/Units/D6/DBRVSmall.dcr new file mode 100644 index 0000000..a88767f Binary files /dev/null and b/12.0.4/Units/D6/DBRVSmall.dcr differ diff --git a/12.0.4/Units/D6/DLines.dcu b/12.0.4/Units/D6/DLines.dcu new file mode 100644 index 0000000..bd79abe Binary files /dev/null and b/12.0.4/Units/D6/DLines.dcu differ diff --git a/12.0.4/Units/D6/PtRVData.dcu b/12.0.4/Units/D6/PtRVData.dcu new file mode 100644 index 0000000..7b08fe5 Binary files /dev/null and b/12.0.4/Units/D6/PtRVData.dcu differ diff --git a/12.0.4/Units/D6/PtblRV.dcu b/12.0.4/Units/D6/PtblRV.dcu new file mode 100644 index 0000000..870a8ce Binary files /dev/null and b/12.0.4/Units/D6/PtblRV.dcu differ diff --git a/12.0.4/Units/D6/RVAnimate.dcu b/12.0.4/Units/D6/RVAnimate.dcu new file mode 100644 index 0000000..20dc5d5 Binary files /dev/null and b/12.0.4/Units/D6/RVAnimate.dcu differ diff --git a/12.0.4/Units/D6/RVBack.dcu b/12.0.4/Units/D6/RVBack.dcu new file mode 100644 index 0000000..b999c04 Binary files /dev/null and b/12.0.4/Units/D6/RVBack.dcu differ diff --git a/12.0.4/Units/D6/RVClasses.dcu b/12.0.4/Units/D6/RVClasses.dcu new file mode 100644 index 0000000..ab7df69 Binary files /dev/null and b/12.0.4/Units/D6/RVClasses.dcu differ diff --git a/12.0.4/Units/D6/RVCodePages.dcu b/12.0.4/Units/D6/RVCodePages.dcu new file mode 100644 index 0000000..e219896 Binary files /dev/null and b/12.0.4/Units/D6/RVCodePages.dcu differ diff --git a/12.0.4/Units/D6/RVCtrlData.dcu b/12.0.4/Units/D6/RVCtrlData.dcu new file mode 100644 index 0000000..d52dc39 Binary files /dev/null and b/12.0.4/Units/D6/RVCtrlData.dcu differ diff --git a/12.0.4/Units/D6/RVDBDsgn.dcu b/12.0.4/Units/D6/RVDBDsgn.dcu new file mode 100644 index 0000000..243b75f Binary files /dev/null and b/12.0.4/Units/D6/RVDBDsgn.dcu differ diff --git a/12.0.4/Units/D6/RVDBDsgn.dfm b/12.0.4/Units/D6/RVDBDsgn.dfm new file mode 100644 index 0000000..4d029d5 Binary files /dev/null and b/12.0.4/Units/D6/RVDBDsgn.dfm differ diff --git a/12.0.4/Units/D6/RVDBPkgD6.dcu b/12.0.4/Units/D6/RVDBPkgD6.dcu new file mode 100644 index 0000000..8387f9a Binary files /dev/null and b/12.0.4/Units/D6/RVDBPkgD6.dcu differ diff --git a/12.0.4/Units/D6/RVDBPkgD6.dpk b/12.0.4/Units/D6/RVDBPkgD6.dpk new file mode 100644 index 0000000..a0b7740 --- /dev/null +++ b/12.0.4/Units/D6/RVDBPkgD6.dpk @@ -0,0 +1,39 @@ +package RVDBPkgD6; + +{$R *.res} +{$R 'DBRV.dcr'} +{$ALIGN 8} +{$ASSERTIONS ON} +{$BOOLEVAL OFF} +{$DEBUGINFO ON} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS ON} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION OFF} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES ON} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'RichView DataAware'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + RVPkgD6, + vcl, + vcldb; + +contains + DBRV in 'DBRV.pas', + RVDBDsgn in 'RVDBDsgn.pas' {frmDBRVDesign}; + +end. diff --git a/12.0.4/Units/D6/RVDBPkgD6.res b/12.0.4/Units/D6/RVDBPkgD6.res new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/12.0.4/Units/D6/RVDBPkgD6.res differ diff --git a/12.0.4/Units/D6/RVDataList.dcu b/12.0.4/Units/D6/RVDataList.dcu new file mode 100644 index 0000000..9b72dc8 Binary files /dev/null and b/12.0.4/Units/D6/RVDataList.dcu differ diff --git a/12.0.4/Units/D6/RVDocParams.dcu b/12.0.4/Units/D6/RVDocParams.dcu new file mode 100644 index 0000000..900dc58 Binary files /dev/null and b/12.0.4/Units/D6/RVDocParams.dcu differ diff --git a/12.0.4/Units/D6/RVDragDrop.dcu b/12.0.4/Units/D6/RVDragDrop.dcu new file mode 100644 index 0000000..2dfffac Binary files /dev/null and b/12.0.4/Units/D6/RVDragDrop.dcu differ diff --git a/12.0.4/Units/D6/RVDsgn.dcu b/12.0.4/Units/D6/RVDsgn.dcu new file mode 100644 index 0000000..5a6132d Binary files /dev/null and b/12.0.4/Units/D6/RVDsgn.dcu differ diff --git a/12.0.4/Units/D6/RVDsgn.dfm b/12.0.4/Units/D6/RVDsgn.dfm new file mode 100644 index 0000000..19a11ee Binary files /dev/null and b/12.0.4/Units/D6/RVDsgn.dfm differ diff --git a/12.0.4/Units/D6/RVERVData.dcu b/12.0.4/Units/D6/RVERVData.dcu new file mode 100644 index 0000000..cf2b2a8 Binary files /dev/null and b/12.0.4/Units/D6/RVERVData.dcu differ diff --git a/12.0.4/Units/D6/RVEdit.dcu b/12.0.4/Units/D6/RVEdit.dcu new file mode 100644 index 0000000..8dcd31a Binary files /dev/null and b/12.0.4/Units/D6/RVEdit.dcu differ diff --git a/12.0.4/Units/D6/RVFMisc.dcu b/12.0.4/Units/D6/RVFMisc.dcu new file mode 100644 index 0000000..16d203f Binary files /dev/null and b/12.0.4/Units/D6/RVFMisc.dcu differ diff --git a/12.0.4/Units/D6/RVFuncs.dcu b/12.0.4/Units/D6/RVFuncs.dcu new file mode 100644 index 0000000..d4cfc6b Binary files /dev/null and b/12.0.4/Units/D6/RVFuncs.dcu differ diff --git a/12.0.4/Units/D6/RVGetText.dcu b/12.0.4/Units/D6/RVGetText.dcu new file mode 100644 index 0000000..db630e1 Binary files /dev/null and b/12.0.4/Units/D6/RVGetText.dcu differ diff --git a/12.0.4/Units/D6/RVGetTextW.dcu b/12.0.4/Units/D6/RVGetTextW.dcu new file mode 100644 index 0000000..4f2f3a8 Binary files /dev/null and b/12.0.4/Units/D6/RVGetTextW.dcu differ diff --git a/12.0.4/Units/D6/RVGifAnimate.pas b/12.0.4/Units/D6/RVGifAnimate.pas new file mode 100644 index 0000000..3d42751 --- /dev/null +++ b/12.0.4/Units/D6/RVGifAnimate.pas @@ -0,0 +1,303 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVGifImageAnimator: displaying animation for } +{ TGifImage by Anders Melander. } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, GifImage; + +type + { --------------------------------------------------------------------------- + TRVGifImageAnimator: displaying animations for gif images + (using TGifImage by Anders Melander) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be its background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVGifImageAnimator ========================} +{ Destructor } +destructor TRVGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVGifImageAnimator.CalcInterval; +var gif: TGifImage; +begin + gif := TGifImage(TRVGraphicItemInfo(item).Image); + Interval := 10; //GIFDefaultDelay; + if gif.Images[FrameIndex].GraphicControlExtension=nil then + exit; + if gif.Images[FrameIndex].GraphicControlExtension.Delay > 0 then begin + Interval := gif.Images[FrameIndex].GraphicControlExtension.Delay; + if (Interval < GIFMinimumDelay) then + Interval := GIFMinimumDelay; + if (Interval > GIFMaximumDelay) then + Interval := GIFMaximumDelay; + end; + Interval := Interval*10; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +type + TGifSubImageHack = class (TGifSubImage) + end; + +{ Draws the current frame } +procedure TRVGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TGifImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul, HeightDiv: Integer; + WidthMul, WidthDiv: Integer; + begin + with gif.Images[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Left, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Top, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Left+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Top+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if (FrameIndex>0) and (gif.Images[FrameIndex-1].GraphicControlExtension<>nil) then + case gif.Images[FrameIndex-1].GraphicControlExtension.Disposal of + dmBackground: + begin + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex-1); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + gif.Images[FrameIndex].StretchDraw(bmp.Canvas, + ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex), + gif.Images[FrameIndex].Transparent, (goTile in gif.DrawOptions)); + gif.Images[FrameIndex].HasBitmap := False; + TGifSubImageHack(gif.Images[FrameIndex]).FreeMask; + TGifSubImageHack(gif.Images[FrameIndex]).Palette := 0; + gif.Palette := 0; + end; + +begin + gif := TGifImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if (goTransparent in gif.DrawOptions) then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex1) and gif.Images[Result-1].Empty do + dec(Result); +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVGifImageAnimator.GetFrameCount: Integer; +begin + Result := TGifImage(TRVGraphicItemInfo(item).Image).Images.Count; + while (Result>1) and + TGifImage(TRVGraphicItemInfo(item).Image).Images[Result-1].Empty do + dec(Result); +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TGifImage) and + (GetGifFrameCount(TGifImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D6/RVItem.dcu b/12.0.4/Units/D6/RVItem.dcu new file mode 100644 index 0000000..4dd28f7 Binary files /dev/null and b/12.0.4/Units/D6/RVItem.dcu differ diff --git a/12.0.4/Units/D6/RVJvGifAnimate.pas b/12.0.4/Units/D6/RVJvGifAnimate.pas new file mode 100644 index 0000000..22c5724 --- /dev/null +++ b/12.0.4/Units/D6/RVJvGifAnimate.pas @@ -0,0 +1,284 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVJvGIFImageAnimator: displaying animation for } +{ TJvGIFImage from Project JEDI's JVCL. } +{ http://jvcl.sourceforge.net } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVJvGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, JvGif; + +type + { --------------------------------------------------------------------------- + TRVJvGifImageAnimator: displaying animations for gif images + (using TJvGIFImage from Project JEDI's JVCL) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be it's background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVJvGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVJvGifImageAnimator ========================} +{ Destructor } +destructor TRVJvGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVJvGifImageAnimator.CalcInterval; +var gif: TJvGIFImage; +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + Interval := 100; + if gif.Frames[FrameIndex].AnimateInterval > 0 then begin + Interval := gif.Frames[FrameIndex].AnimateInterval; + end; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVJvGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVJvGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +{ Draws the current frame } +procedure TRVJvGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TJvGIFImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul , + HeightDiv : integer; + WidthMul , + WidthDiv : integer; + begin + with gif.Frames[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Origin.X, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Origin.Y, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Origin.X+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Origin.Y+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if FrameIndex>0 then + case gif.Frames[FrameIndex-1].DisposalMethod of + dmRestoreBackground: + begin + r := Rect(0,0,bmp.Width,bmp.Height); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex); + gif.Frames[FrameIndex].Draw(bmp.Canvas, r, gif.Frames[FrameIndex].TransparentColor <> clNone); + end; + +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if gif.Transparent then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex clNone); +end; +{------------------------------------------------------------------------------} +{ Image size for RTF saving } +function TRVJvGifImageAnimator.GetExportImageSize: TSize; +begin + Result.cy := TJvGIFImage(TRVGraphicItemInfo(item).Image).Height; + Result.cx := TJvGIFImage(TRVGraphicItemInfo(item).Image).Width; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames in gif } +function GetGifFrameCount(gif: TJvGIFImage): Integer; +begin + Result := gif.Count; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVJvGifImageAnimator.GetFrameCount: Integer; +begin + Result := TJvGIFImage(TRVGraphicItemInfo(item).Image).Count; +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVJvGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVJvGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TJvGifImage) and + (GetGifFrameCount(TJvGIFImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVJvGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVJvGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D6/RVLabelItem.dcu b/12.0.4/Units/D6/RVLabelItem.dcu new file mode 100644 index 0000000..9c700c9 Binary files /dev/null and b/12.0.4/Units/D6/RVLabelItem.dcu differ diff --git a/12.0.4/Units/D6/RVLinear.dcu b/12.0.4/Units/D6/RVLinear.dcu new file mode 100644 index 0000000..f2a96d5 Binary files /dev/null and b/12.0.4/Units/D6/RVLinear.dcu differ diff --git a/12.0.4/Units/D6/RVMapWht.dcu b/12.0.4/Units/D6/RVMapWht.dcu new file mode 100644 index 0000000..7d4b3b0 Binary files /dev/null and b/12.0.4/Units/D6/RVMapWht.dcu differ diff --git a/12.0.4/Units/D6/RVMarker.dcu b/12.0.4/Units/D6/RVMarker.dcu new file mode 100644 index 0000000..5309638 Binary files /dev/null and b/12.0.4/Units/D6/RVMarker.dcu differ diff --git a/12.0.4/Units/D6/RVMisc.dcu b/12.0.4/Units/D6/RVMisc.dcu new file mode 100644 index 0000000..88c9f4e Binary files /dev/null and b/12.0.4/Units/D6/RVMisc.dcu differ diff --git a/12.0.4/Units/D6/RVNote.dcu b/12.0.4/Units/D6/RVNote.dcu new file mode 100644 index 0000000..5aedf10 Binary files /dev/null and b/12.0.4/Units/D6/RVNote.dcu differ diff --git a/12.0.4/Units/D6/RVOfficeCnv.dcu b/12.0.4/Units/D6/RVOfficeCnv.dcu new file mode 100644 index 0000000..7fb4169 Binary files /dev/null and b/12.0.4/Units/D6/RVOfficeCnv.dcu differ diff --git a/12.0.4/Units/D6/RVPP.dcu b/12.0.4/Units/D6/RVPP.dcu new file mode 100644 index 0000000..813133c Binary files /dev/null and b/12.0.4/Units/D6/RVPP.dcu differ diff --git a/12.0.4/Units/D6/RVPkgD6.dcu b/12.0.4/Units/D6/RVPkgD6.dcu new file mode 100644 index 0000000..a872a45 Binary files /dev/null and b/12.0.4/Units/D6/RVPkgD6.dcu differ diff --git a/12.0.4/Units/D6/RVPkgD6.dpk b/12.0.4/Units/D6/RVPkgD6.dpk new file mode 100644 index 0000000..29f2452 --- /dev/null +++ b/12.0.4/Units/D6/RVPkgD6.dpk @@ -0,0 +1,92 @@ +package RVPkgD6; + +{$R *.res} +{$R 'RVReg.dcr'} +{$ALIGN 8} +{$ASSERTIONS OFF} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS OFF} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'RichView'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + designide, + vcljpg, + vcl; + +contains + RVStyle in 'RVStyle.pas', + DLines in 'DLines.pas', + PtblRV in 'PtblRV.pas', + RichView in 'RichView.pas', + RVEdit in 'RVEdit.pas', + RVPP in 'RVPP.pas', + RVScroll in 'RVScroll.pas', + RVSEdit in 'RVSEdit.pas', + CRVPP in 'CRVPP.pas', + CRVData in 'CRVData.pas', + CRVFData in 'CRVFData.pas', + PtRVData in 'PtRVData.pas', + RVBack in 'RVBack.pas', + RVERVData in 'RVERVData.pas', + RVFMisc in 'RVFMisc.pas', + RVFuncs in 'RVFuncs.pas', + RVItem in 'RVItem.pas', + RVReg in 'RVReg.pas', + RVRVData in 'RVRVData.pas', + RVUndo in 'RVUndo.pas', + RVUni in 'RVUni.pas', + RVClasses in 'RVClasses.pas', + RVTable in 'RVTable.pas', + RVCodePages in 'RVCodePages.pas', + RVDataList in 'RVDataList.pas', + RVTInplace in 'RVTInplace.pas', + RVCtrlData in 'RVCtrlData.pas', + RVStr in 'RVStr.pas', + RVRTFErr in 'RVRTFErr.pas', + RVRTFProps in 'RVRTFProps.pas', + RVRTF in 'RVRTF.pas', + CtrlImg in 'CtrlImg.pas', + RVMisc in 'RVMisc.pas', + RVMapWht in 'RVMapWht.pas', + RVReport in 'RVReport.pas', + RVDsgn in 'RVDsgn.pas' {frmRVDesign}, + RVSer in 'RVSer.pas', + RVOfficeCnv in 'RVOfficeCnv.pas', + RVMarker in 'RVMarker.pas', + RVXPTheme in 'RVXPTheme.pas', + RVResize in 'RVResize.pas', + RVDragDrop in 'RVDragDrop.pas', + RVThread in 'RVThread.pas', + RVWordPaint in 'RVWordPaint.pas', + RVGetText in 'RVGetText.pas', + RVLinear in 'RVLinear.pas', + RVGetTextW in 'RVGetTextW.pas', + RVAnimate in 'RVAnimate.pas', + RVPopup in 'RVPopup.pas', + RVLabelItem in 'RVLabelItem.pas', + RVSeqItem in 'RVSeqItem.pas', + RVNote in 'RVNote.pas', + RVSubData in 'RVSubData.pas', + RVDocParams in 'RVDocParams.pas', + RVTypes in 'RVTypes.pas'; + +end. diff --git a/12.0.4/Units/D6/RVPkgD6.res b/12.0.4/Units/D6/RVPkgD6.res new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/12.0.4/Units/D6/RVPkgD6.res differ diff --git a/12.0.4/Units/D6/RVPopup.dcu b/12.0.4/Units/D6/RVPopup.dcu new file mode 100644 index 0000000..109dd06 Binary files /dev/null and b/12.0.4/Units/D6/RVPopup.dcu differ diff --git a/12.0.4/Units/D6/RVRTF.dcu b/12.0.4/Units/D6/RVRTF.dcu new file mode 100644 index 0000000..67020cf Binary files /dev/null and b/12.0.4/Units/D6/RVRTF.dcu differ diff --git a/12.0.4/Units/D6/RVRTFErr.dcu b/12.0.4/Units/D6/RVRTFErr.dcu new file mode 100644 index 0000000..2aa2305 Binary files /dev/null and b/12.0.4/Units/D6/RVRTFErr.dcu differ diff --git a/12.0.4/Units/D6/RVRTFProps.dcu b/12.0.4/Units/D6/RVRTFProps.dcu new file mode 100644 index 0000000..b6dc975 Binary files /dev/null and b/12.0.4/Units/D6/RVRTFProps.dcu differ diff --git a/12.0.4/Units/D6/RVRTFReg.dcr b/12.0.4/Units/D6/RVRTFReg.dcr new file mode 100644 index 0000000..1d96bf6 Binary files /dev/null and b/12.0.4/Units/D6/RVRTFReg.dcr differ diff --git a/12.0.4/Units/D6/RVRVData.dcu b/12.0.4/Units/D6/RVRVData.dcu new file mode 100644 index 0000000..f5e0660 Binary files /dev/null and b/12.0.4/Units/D6/RVRVData.dcu differ diff --git a/12.0.4/Units/D6/RVReg.dcr b/12.0.4/Units/D6/RVReg.dcr new file mode 100644 index 0000000..5ef086c Binary files /dev/null and b/12.0.4/Units/D6/RVReg.dcr differ diff --git a/12.0.4/Units/D6/RVReg.dcu b/12.0.4/Units/D6/RVReg.dcu new file mode 100644 index 0000000..b31d21f Binary files /dev/null and b/12.0.4/Units/D6/RVReg.dcu differ diff --git a/12.0.4/Units/D6/RVRegCool.dcr b/12.0.4/Units/D6/RVRegCool.dcr new file mode 100644 index 0000000..57c6c0c Binary files /dev/null and b/12.0.4/Units/D6/RVRegCool.dcr differ diff --git a/12.0.4/Units/D6/RVRegSmall.dcr b/12.0.4/Units/D6/RVRegSmall.dcr new file mode 100644 index 0000000..064018c Binary files /dev/null and b/12.0.4/Units/D6/RVRegSmall.dcr differ diff --git a/12.0.4/Units/D6/RVReport.dcu b/12.0.4/Units/D6/RVReport.dcu new file mode 100644 index 0000000..3f4299f Binary files /dev/null and b/12.0.4/Units/D6/RVReport.dcu differ diff --git a/12.0.4/Units/D6/RVResize.dcu b/12.0.4/Units/D6/RVResize.dcu new file mode 100644 index 0000000..845cb97 Binary files /dev/null and b/12.0.4/Units/D6/RVResize.dcu differ diff --git a/12.0.4/Units/D6/RVSEdit.dcu b/12.0.4/Units/D6/RVSEdit.dcu new file mode 100644 index 0000000..c9c2487 Binary files /dev/null and b/12.0.4/Units/D6/RVSEdit.dcu differ diff --git a/12.0.4/Units/D6/RVScroll.dcu b/12.0.4/Units/D6/RVScroll.dcu new file mode 100644 index 0000000..9beabfe Binary files /dev/null and b/12.0.4/Units/D6/RVScroll.dcu differ diff --git a/12.0.4/Units/D6/RVSeqItem.dcu b/12.0.4/Units/D6/RVSeqItem.dcu new file mode 100644 index 0000000..39018a9 Binary files /dev/null and b/12.0.4/Units/D6/RVSeqItem.dcu differ diff --git a/12.0.4/Units/D6/RVSer.dcu b/12.0.4/Units/D6/RVSer.dcu new file mode 100644 index 0000000..a38234d Binary files /dev/null and b/12.0.4/Units/D6/RVSer.dcu differ diff --git a/12.0.4/Units/D6/RVStr.dcu b/12.0.4/Units/D6/RVStr.dcu new file mode 100644 index 0000000..7b16256 Binary files /dev/null and b/12.0.4/Units/D6/RVStr.dcu differ diff --git a/12.0.4/Units/D6/RVStyle.dcu b/12.0.4/Units/D6/RVStyle.dcu new file mode 100644 index 0000000..8535644 Binary files /dev/null and b/12.0.4/Units/D6/RVStyle.dcu differ diff --git a/12.0.4/Units/D6/RVStyle.res b/12.0.4/Units/D6/RVStyle.res new file mode 100644 index 0000000..8a5d879 Binary files /dev/null and b/12.0.4/Units/D6/RVStyle.res differ diff --git a/12.0.4/Units/D6/RVSubData.dcu b/12.0.4/Units/D6/RVSubData.dcu new file mode 100644 index 0000000..a6f3bec Binary files /dev/null and b/12.0.4/Units/D6/RVSubData.dcu differ diff --git a/12.0.4/Units/D6/RVTInplace.dcu b/12.0.4/Units/D6/RVTInplace.dcu new file mode 100644 index 0000000..937eb33 Binary files /dev/null and b/12.0.4/Units/D6/RVTInplace.dcu differ diff --git a/12.0.4/Units/D6/RVTable.dcu b/12.0.4/Units/D6/RVTable.dcu new file mode 100644 index 0000000..6aecdf0 Binary files /dev/null and b/12.0.4/Units/D6/RVTable.dcu differ diff --git a/12.0.4/Units/D6/RVTable.res b/12.0.4/Units/D6/RVTable.res new file mode 100644 index 0000000..3aeb51c Binary files /dev/null and b/12.0.4/Units/D6/RVTable.res differ diff --git a/12.0.4/Units/D6/RVThread.dcu b/12.0.4/Units/D6/RVThread.dcu new file mode 100644 index 0000000..8492205 Binary files /dev/null and b/12.0.4/Units/D6/RVThread.dcu differ diff --git a/12.0.4/Units/D6/RVTypes.dcu b/12.0.4/Units/D6/RVTypes.dcu new file mode 100644 index 0000000..977b02c Binary files /dev/null and b/12.0.4/Units/D6/RVTypes.dcu differ diff --git a/12.0.4/Units/D6/RVUndo.dcu b/12.0.4/Units/D6/RVUndo.dcu new file mode 100644 index 0000000..19af903 Binary files /dev/null and b/12.0.4/Units/D6/RVUndo.dcu differ diff --git a/12.0.4/Units/D6/RVUni.dcu b/12.0.4/Units/D6/RVUni.dcu new file mode 100644 index 0000000..1ab7476 Binary files /dev/null and b/12.0.4/Units/D6/RVUni.dcu differ diff --git a/12.0.4/Units/D6/RVWordPaint.dcu b/12.0.4/Units/D6/RVWordPaint.dcu new file mode 100644 index 0000000..a74fe01 Binary files /dev/null and b/12.0.4/Units/D6/RVWordPaint.dcu differ diff --git a/12.0.4/Units/D6/RVXPTheme.dcu b/12.0.4/Units/D6/RVXPTheme.dcu new file mode 100644 index 0000000..6f94a84 Binary files /dev/null and b/12.0.4/Units/D6/RVXPTheme.dcu differ diff --git a/12.0.4/Units/D6/RV_Defs.inc b/12.0.4/Units/D6/RV_Defs.inc new file mode 100644 index 0000000..15f242e --- /dev/null +++ b/12.0.4/Units/D6/RV_Defs.inc @@ -0,0 +1,347 @@ + +{*******************************************************} +{ } +{ RichView } +{ Conditionals for RichView. } +{ This file is included in all RichView PAS-files.} +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$B-} +{$H+} +{$J+} +{$T-} + +{------------------------------------------------------------------------------} +{ Determining Delphi/C++Builder version } + +{$DEFINE RICHVIEW} + +{$IFNDEF VER80} { not Delphi 1.0 } + {$IFNDEF VER90} { not Delphi 2.0 } + {$DEFINE RICHVIEWCBDEF1} (* C++Builder 1.0+ *) + {$IFNDEF VER93} { not C++Builder 1.0 } + {$DEFINE RICHVIEWCBDEF3} (* C++Builder 3.0+ *) + {$IFNDEF VER110} { not C++Builder 3.0 } + {$DEFINE RICHVIEWDEF3} (* Delphi 3.0+, C++Builder 4.0+ *) + {$IFNDEF VER100} { not Delphi 3.0 } + {$DEFINE RICHVIEWDEF4} (* Delphi 4.0+ *) + {$IFNDEF VER120} { not Delphi 4.0 } + {$IFNDEF VER125} { not C++Builder 4.0 } + {$DEFINE RICHVIEWDEF5} (* Delphi 5.0+ *) + {$IFNDEF VER130} { not Delphi 5.0 } + {$IFNDEF VER135} { not C++Builder 5.0 } + {$DEFINE RICHVIEWDEF6}(* Delphi 6.0+ *) + {$IFNDEF VER140} { not Delphi 6.0 } + {$IFNDEF VER145} { not C++Builder 6.0 } + {$DEFINE RICHVIEWDEF7}(* Delphi 7.0+ *) + {$IFNDEF VER150} { not Delphi 7.0 } + {$DEFINE RICHVIEWDEF9} (* Delphi 2005+ *) + {$DEFINE RICHVIEWDEF2005}(* Delphi 2005+ *) + {$IFNDEF VER170} { not Delphi 2005 } + {$DEFINE RICHVIEWDEF10} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2006} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2007} (* Delphi 2007 defines both VER180 and VER185 *) + {$IFNDEF VER180} { not Delphi 2006-2007 } + {$DEFINE RICHVIEWDEF2009} + {$IFNDEF VER200} + {$DEFINE RICHVIEWDEF2010} (* Delphi 2010 defines VER210 *) + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER180}{$IFNDEF VER185} +{$UNDEF RICHVIEWDEF2007} // this is D2006, not D2007 +{$ENDIF}{$ENDIF} + + +{$IFDEF RICHVIEWDEF7} +{$WARN UNSAFE_TYPE OFF} +{$WARN UNSAFE_CODE OFF} +{$WARN UNSAFE_CAST OFF} +{$ENDIF} + +{------------------------------------------------------------------------------} +{ CONDITIONAL DEFINES. } +{ Do not modify this file, use Project|Options, Directories/Conditionals, } +{ Conditional defines instead. } +{------------------------------------------------------------------------------} + +{------------------------------------------------------------------------------} +{ Defines for shrinking exe size / improving speed and memory usage by } +{ turning off unused features. } +{------------------------------------------------------------------------------} + +{NOT$DEFINE RVDONOTUSESTYLETEMPLATES} +{ + Define if you do not want to use TRVStyle.StyleTemplates and related functions. + +{NOT$DEFINE RVDONOTUSEALLCAPS} +{NOT$DEFINE RVDONOTUSESOFTHYPHENS} +{NOT$DEFINE RVDONOTUSECHARSCALE} +{ + Define it if you do not wish to use rvfsAllCaps option, soft hyphens, + CharScale. + Some speed up of text drawing and formatting. +} + +{NOT$DEFINE RVDONOTUSESMARTPOPUP} + + +{NOT$DEFINE RVDONOTUSEANIMATION} +{ + Define if you do not wish to display animations. + Saves memory and resources. +} + +{NOT$DEFINE RVDONOTUSETABS} +{ + Define if you do not wish to use tab stops. All code for importing tabs will + be excluded. But code for processing tabs (if they appeared in document) remains. +} + +{NOT$DEFINE RVDONOTUSEJPEGIMAGE} +{ + Define it if you do not wish to use Delphi jpeg units. + This will cause saving images to HTML as bitmaps, and turning off special + support for jpegs in paletted display mode. +} + +{NOT$DEFINE RVDONOTUSEHTML} +{ + Define it to remove all HTML-related methods. +} + +{NOT$DEFINE RVDONOTUSERTF} +{ + Define it to remove all RTF-export related methods +} + +{NOT$DEFINE RVDONOTUSERTFIMPORT} +{ + Define it to remove all RTF-import related methods. +} + +{NOT$DEFINE RVDONOTUSERVF} +{ + Define it to remove all RVF-related methods. + You can do it only if you do not use TRichViewEdit. Editor requires + RVF methods. +} + +{NOT$DEFINE RVDONOTUSEJUSTIFY} +{ + Define it to remove justify alignment support. + Was not properly tested. +} + +{NOT$DEFINE RVDONOTUSEUNICODE} +{ + Define it to disable Unicode support. + Cannot be activated in Delphi/C++Builder 2009+ +} +{NOT$DEFINE RVDONOTUSECHARSPACING} +{ + Define it to disable CharSpacing. Somewhat faster +} + +{NOT$DEFINE RVDONOTUSETABLES} +{ + Define, if you do not use tables. Exe-file will be smaller. +} + +{NOT$DEFINE RVDONOTUSELISTS} +{ + Define, if you do not use bullets and numbering +} + +{NOT$DEFINE RVDONOTUSESEQ} +{ + Define, if you do not use numbered sequences and footnotes +} + +{NOT$DEFINE RVDONOTUSEINI} +{ + Define, if you do not save/load RVStyle in ini-files and the Registry +} + +{NOT$DEFINE RVDONOTUSEDRAGDROP} +{ + Define, if you do not use OLE drag&drop +} + +{NOT$DEFINE RVDONOTUSEITEMHINTS} +{ + Define, if you do not want to use item titles (popup hints). + Saves 4 bytes per item in memory +} + +{NOT$DEFINE RVDONOTUSELIVESPELL} +{ + Define, if you do not want to use live spelling. + Saves 8 bytes per item in memory, reduces exe file size +} + +{NOT$DEFINE RVDONOTUSELINEARPOSITIONS} +{ + Define, if you do not need to process EM_GETSEL, EM_GETTEXTRANGE and EM_SETSEL +} + +{NOT$DEFINE RVDONOTUSERVMEMORYSTREAM} +{ + Disables custom (more efficient for saving large data) memory stream + implementation. Reduces exe file size +} + +{NOT$DEFINE RVDONOTUSEDOCPARAMS} +{ + Define to exclude TCustomRichView.DocParameters +} + +{NOT$DEFINE RVDONOTUSEOLECONTAINER} +{ + Does nothing. Reserved. +} + +{$IFDEF RVDONOTUSETABLES} + {$DEFINE RVDONOTUSEINPLACE} +{$ENDIF} +{------------------------------------------------------------------------------} +{ Other defines } +{------------------------------------------------------------------------------} +{NOT$DEFINE RVPBEARCOMPAT} +{ + Define to make HTML output more compatible with THTMLViewer (www.pbear.com) + Some unnecessary tags will be saved. +} + +{NOT$DEFINE RVEDITIGNORESESCAPE} +{ + If defined, TRichViewEdit and TDBRichViewEdit (if IgnoreEscape=True) controls + do not receive messages when Escape is pressed. Useful when placed in modal + dialogs, so that editors do not steal Escape from a Cancel button. +} + + +{NOT$DEFINE RVLANGUAGEPROPERTY} +{ + If defined, text style has additional property - Language: Cardinal +} +{NOT$DEFINE RVLIVESPELLEXEVENT} +{ + If defined, RichView has additional event - OnSpellingCheckEx. + This event has higher priority than OnSpellingCheck. +} + +{NOT$DEFINE RVUSETEXTHOVERCOLORWITHSELECTED} +{ + Define if you wish to return behavior of v1.2-, where text hover color was + used even for selected text. +} + +{NOT$DEFINE DONOTDECVSCROLLUNITS} +{ + Define to forbid RichView to decrease vertical scrolling units automatically + when needed (if you wish to control scrolling units yourself). +} + +{NOT$DEFINE RVDONOTCORRECTWMFSCALE} +{ + There is a problem in Delphi TMetafile class (wrong size) when pasting + some metafiles from Clipboard. RichView tries to correct it. + Turn this define on, if you have troubles with metafile sizes when pasting. +} + +{$DEFINE RVALLOWCPBYCP} +{ + RichView since version 1.0 does not allow to add one checkpoint just after + another. + When defined (default), second checkpoint is ignored. + When not defined, RichView raises exception. +} + +{NOT$DEFINE RVRECHECKRTFPARA} +{ + If defined, when importing RTF file, paragraph properties are rechecked + when inserting each item (otherwise, only when inserting the first paragraph's + item). Slows reading down, but provides the same results as MS Word when + RTF file contains contradicting data for the same paragraph (buggy RTF files) +} + + +{------------------------------------------------------------------------------} +{ Addons } +{------------------------------------------------------------------------------} + +{ + Define if you use import of MS Word DOC files. +} +{NOT$DEFINE RVUSEWORDDOC} + +{------------------------------------------------------------------------------} +{ Automatical defines: } +{------------------------------------------------------------------------------} +{$IFDEF RICHVIEWCBDEF1} +{ + IME (Input Method Editor) support is disabled for Delphi 2. + D2 has required library file - Imm.pas in sources, but does not have it in library (?!). + So I think support for D2 is possible, but requires some IDE configuration... + +} + +{$IFNDEF RVDONOTUSEUNICODE} + +{$DEFINE RVUSEIME} // Using IME + +{$ENDIF} +{$ENDIF} + +{$IFNDEF RICHVIEWDEF3} +// Turning off Jpeg support for Delphi2, C++Builder 1,3 +{$DEFINE RVDONOTUSEJPEGIMAGE} + +{$ENDIF} + +{$IFNDEF RICHVIEWCBDEF3} +// Turning off D&D support for Delphi2, C++Builder 1 +{$DEFINE RVDONOTUSEDRAGDROP} +{$ENDIF} + +{$IFNDEF RVDONOTUSELISTS} + {$DEFINE RVUSELISTORSEQ} +{$ELSE} + {$IFNDEF RVDONOTUSESEQ} + {$DEFINE RVUSELISTORSEQ} + {$ENDIF} +{$ENDIF} + +{$IFDEF RICHVIEWDEF2009} + {$DEFINE RVUNICODESTR} + {$DEFINE RVUNICODEWINDOW} +{$ENDIF} + +{$DEFINE RVDEBUG} + +{.$DEFINE RVFLATSCROLLBARS} + +{.$DEFINE RVONCUT} + +{.$DEFINE RVWATERMARK} + +{.$DEFINE RVUSEBASELINE} \ No newline at end of file diff --git a/12.0.4/Units/D6/RichView.dcu b/12.0.4/Units/D6/RichView.dcu new file mode 100644 index 0000000..a47f406 Binary files /dev/null and b/12.0.4/Units/D6/RichView.dcu differ diff --git a/12.0.4/Units/D7/CRVData.dcu b/12.0.4/Units/D7/CRVData.dcu new file mode 100644 index 0000000..11b37f5 Binary files /dev/null and b/12.0.4/Units/D7/CRVData.dcu differ diff --git a/12.0.4/Units/D7/CRVFData.dcu b/12.0.4/Units/D7/CRVFData.dcu new file mode 100644 index 0000000..524e45f Binary files /dev/null and b/12.0.4/Units/D7/CRVFData.dcu differ diff --git a/12.0.4/Units/D7/CRVPP.dcu b/12.0.4/Units/D7/CRVPP.dcu new file mode 100644 index 0000000..980bdda Binary files /dev/null and b/12.0.4/Units/D7/CRVPP.dcu differ diff --git a/12.0.4/Units/D7/CRVPP.res b/12.0.4/Units/D7/CRVPP.res new file mode 100644 index 0000000..e52da72 Binary files /dev/null and b/12.0.4/Units/D7/CRVPP.res differ diff --git a/12.0.4/Units/D7/CtrlImg.dcu b/12.0.4/Units/D7/CtrlImg.dcu new file mode 100644 index 0000000..0834b99 Binary files /dev/null and b/12.0.4/Units/D7/CtrlImg.dcu differ diff --git a/12.0.4/Units/D7/DBRV.dcr b/12.0.4/Units/D7/DBRV.dcr new file mode 100644 index 0000000..506c162 Binary files /dev/null and b/12.0.4/Units/D7/DBRV.dcr differ diff --git a/12.0.4/Units/D7/DBRV.dcu b/12.0.4/Units/D7/DBRV.dcu new file mode 100644 index 0000000..a0768a8 Binary files /dev/null and b/12.0.4/Units/D7/DBRV.dcu differ diff --git a/12.0.4/Units/D7/DBRVCool.dcr b/12.0.4/Units/D7/DBRVCool.dcr new file mode 100644 index 0000000..b5afaca Binary files /dev/null and b/12.0.4/Units/D7/DBRVCool.dcr differ diff --git a/12.0.4/Units/D7/DBRVSmall.dcr b/12.0.4/Units/D7/DBRVSmall.dcr new file mode 100644 index 0000000..a88767f Binary files /dev/null and b/12.0.4/Units/D7/DBRVSmall.dcr differ diff --git a/12.0.4/Units/D7/DLines.dcu b/12.0.4/Units/D7/DLines.dcu new file mode 100644 index 0000000..d82d9a9 Binary files /dev/null and b/12.0.4/Units/D7/DLines.dcu differ diff --git a/12.0.4/Units/D7/PtRVData.dcu b/12.0.4/Units/D7/PtRVData.dcu new file mode 100644 index 0000000..3afc562 Binary files /dev/null and b/12.0.4/Units/D7/PtRVData.dcu differ diff --git a/12.0.4/Units/D7/PtblRV.dcu b/12.0.4/Units/D7/PtblRV.dcu new file mode 100644 index 0000000..51a6146 Binary files /dev/null and b/12.0.4/Units/D7/PtblRV.dcu differ diff --git a/12.0.4/Units/D7/RVAnimate.dcu b/12.0.4/Units/D7/RVAnimate.dcu new file mode 100644 index 0000000..3fbc792 Binary files /dev/null and b/12.0.4/Units/D7/RVAnimate.dcu differ diff --git a/12.0.4/Units/D7/RVBack.dcu b/12.0.4/Units/D7/RVBack.dcu new file mode 100644 index 0000000..f92be63 Binary files /dev/null and b/12.0.4/Units/D7/RVBack.dcu differ diff --git a/12.0.4/Units/D7/RVClasses.dcu b/12.0.4/Units/D7/RVClasses.dcu new file mode 100644 index 0000000..5b67942 Binary files /dev/null and b/12.0.4/Units/D7/RVClasses.dcu differ diff --git a/12.0.4/Units/D7/RVCodePages.dcu b/12.0.4/Units/D7/RVCodePages.dcu new file mode 100644 index 0000000..ae70b54 Binary files /dev/null and b/12.0.4/Units/D7/RVCodePages.dcu differ diff --git a/12.0.4/Units/D7/RVCtrlData.dcu b/12.0.4/Units/D7/RVCtrlData.dcu new file mode 100644 index 0000000..ef3f04e Binary files /dev/null and b/12.0.4/Units/D7/RVCtrlData.dcu differ diff --git a/12.0.4/Units/D7/RVDBDsgn.dcu b/12.0.4/Units/D7/RVDBDsgn.dcu new file mode 100644 index 0000000..32c29ea Binary files /dev/null and b/12.0.4/Units/D7/RVDBDsgn.dcu differ diff --git a/12.0.4/Units/D7/RVDBDsgn.dfm b/12.0.4/Units/D7/RVDBDsgn.dfm new file mode 100644 index 0000000..4d029d5 Binary files /dev/null and b/12.0.4/Units/D7/RVDBDsgn.dfm differ diff --git a/12.0.4/Units/D7/RVDBPkgD7.dcu b/12.0.4/Units/D7/RVDBPkgD7.dcu new file mode 100644 index 0000000..f640e6c Binary files /dev/null and b/12.0.4/Units/D7/RVDBPkgD7.dcu differ diff --git a/12.0.4/Units/D7/RVDBPkgD7.dpk b/12.0.4/Units/D7/RVDBPkgD7.dpk new file mode 100644 index 0000000..608372a --- /dev/null +++ b/12.0.4/Units/D7/RVDBPkgD7.dpk @@ -0,0 +1,44 @@ +package RVDBPkgD7; + +{$R *.res} +{$R 'DBRV.dcr'} +{$ALIGN 8} +{$ASSERTIONS OFF} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS OFF} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'RichView DataAware'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + vcl, + vcldb, + RVPkgD7, + rtl, + designide, + vclactnband, + vclx, + vcljpg; + +contains + DBRV in 'DBRV.pas', + RVDBDsgn in 'RVDBDsgn.pas' {frmDBRVDesign}; + +end. diff --git a/12.0.4/Units/D7/RVDBPkgD7.res b/12.0.4/Units/D7/RVDBPkgD7.res new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/12.0.4/Units/D7/RVDBPkgD7.res differ diff --git a/12.0.4/Units/D7/RVDataList.dcu b/12.0.4/Units/D7/RVDataList.dcu new file mode 100644 index 0000000..f7eaeec Binary files /dev/null and b/12.0.4/Units/D7/RVDataList.dcu differ diff --git a/12.0.4/Units/D7/RVDocParams.dcu b/12.0.4/Units/D7/RVDocParams.dcu new file mode 100644 index 0000000..58e267c Binary files /dev/null and b/12.0.4/Units/D7/RVDocParams.dcu differ diff --git a/12.0.4/Units/D7/RVDragDrop.dcu b/12.0.4/Units/D7/RVDragDrop.dcu new file mode 100644 index 0000000..b0c95f0 Binary files /dev/null and b/12.0.4/Units/D7/RVDragDrop.dcu differ diff --git a/12.0.4/Units/D7/RVDsgn.dcu b/12.0.4/Units/D7/RVDsgn.dcu new file mode 100644 index 0000000..a1c93b2 Binary files /dev/null and b/12.0.4/Units/D7/RVDsgn.dcu differ diff --git a/12.0.4/Units/D7/RVDsgn.dfm b/12.0.4/Units/D7/RVDsgn.dfm new file mode 100644 index 0000000..19a11ee Binary files /dev/null and b/12.0.4/Units/D7/RVDsgn.dfm differ diff --git a/12.0.4/Units/D7/RVERVData.dcu b/12.0.4/Units/D7/RVERVData.dcu new file mode 100644 index 0000000..d44abae Binary files /dev/null and b/12.0.4/Units/D7/RVERVData.dcu differ diff --git a/12.0.4/Units/D7/RVEdit.dcu b/12.0.4/Units/D7/RVEdit.dcu new file mode 100644 index 0000000..2cec26f Binary files /dev/null and b/12.0.4/Units/D7/RVEdit.dcu differ diff --git a/12.0.4/Units/D7/RVFMisc.dcu b/12.0.4/Units/D7/RVFMisc.dcu new file mode 100644 index 0000000..f3114e7 Binary files /dev/null and b/12.0.4/Units/D7/RVFMisc.dcu differ diff --git a/12.0.4/Units/D7/RVFuncs.dcu b/12.0.4/Units/D7/RVFuncs.dcu new file mode 100644 index 0000000..a761044 Binary files /dev/null and b/12.0.4/Units/D7/RVFuncs.dcu differ diff --git a/12.0.4/Units/D7/RVGetText.dcu b/12.0.4/Units/D7/RVGetText.dcu new file mode 100644 index 0000000..99d5fdf Binary files /dev/null and b/12.0.4/Units/D7/RVGetText.dcu differ diff --git a/12.0.4/Units/D7/RVGetTextW.dcu b/12.0.4/Units/D7/RVGetTextW.dcu new file mode 100644 index 0000000..17a5c7c Binary files /dev/null and b/12.0.4/Units/D7/RVGetTextW.dcu differ diff --git a/12.0.4/Units/D7/RVItem.dcu b/12.0.4/Units/D7/RVItem.dcu new file mode 100644 index 0000000..82b8603 Binary files /dev/null and b/12.0.4/Units/D7/RVItem.dcu differ diff --git a/12.0.4/Units/D7/RVJvGifAnimate.pas b/12.0.4/Units/D7/RVJvGifAnimate.pas new file mode 100644 index 0000000..22c5724 --- /dev/null +++ b/12.0.4/Units/D7/RVJvGifAnimate.pas @@ -0,0 +1,284 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVJvGIFImageAnimator: displaying animation for } +{ TJvGIFImage from Project JEDI's JVCL. } +{ http://jvcl.sourceforge.net } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVJvGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, JvGif; + +type + { --------------------------------------------------------------------------- + TRVJvGifImageAnimator: displaying animations for gif images + (using TJvGIFImage from Project JEDI's JVCL) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be it's background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVJvGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVJvGifImageAnimator ========================} +{ Destructor } +destructor TRVJvGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVJvGifImageAnimator.CalcInterval; +var gif: TJvGIFImage; +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + Interval := 100; + if gif.Frames[FrameIndex].AnimateInterval > 0 then begin + Interval := gif.Frames[FrameIndex].AnimateInterval; + end; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVJvGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVJvGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +{ Draws the current frame } +procedure TRVJvGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TJvGIFImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul , + HeightDiv : integer; + WidthMul , + WidthDiv : integer; + begin + with gif.Frames[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Origin.X, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Origin.Y, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Origin.X+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Origin.Y+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if FrameIndex>0 then + case gif.Frames[FrameIndex-1].DisposalMethod of + dmRestoreBackground: + begin + r := Rect(0,0,bmp.Width,bmp.Height); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex); + gif.Frames[FrameIndex].Draw(bmp.Canvas, r, gif.Frames[FrameIndex].TransparentColor <> clNone); + end; + +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if gif.Transparent then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex clNone); +end; +{------------------------------------------------------------------------------} +{ Image size for RTF saving } +function TRVJvGifImageAnimator.GetExportImageSize: TSize; +begin + Result.cy := TJvGIFImage(TRVGraphicItemInfo(item).Image).Height; + Result.cx := TJvGIFImage(TRVGraphicItemInfo(item).Image).Width; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames in gif } +function GetGifFrameCount(gif: TJvGIFImage): Integer; +begin + Result := gif.Count; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVJvGifImageAnimator.GetFrameCount: Integer; +begin + Result := TJvGIFImage(TRVGraphicItemInfo(item).Image).Count; +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVJvGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVJvGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TJvGifImage) and + (GetGifFrameCount(TJvGIFImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVJvGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVJvGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D7/RVLabelItem.dcu b/12.0.4/Units/D7/RVLabelItem.dcu new file mode 100644 index 0000000..0651b69 Binary files /dev/null and b/12.0.4/Units/D7/RVLabelItem.dcu differ diff --git a/12.0.4/Units/D7/RVLinear.dcu b/12.0.4/Units/D7/RVLinear.dcu new file mode 100644 index 0000000..e6f24de Binary files /dev/null and b/12.0.4/Units/D7/RVLinear.dcu differ diff --git a/12.0.4/Units/D7/RVMapWht.dcu b/12.0.4/Units/D7/RVMapWht.dcu new file mode 100644 index 0000000..fe15a17 Binary files /dev/null and b/12.0.4/Units/D7/RVMapWht.dcu differ diff --git a/12.0.4/Units/D7/RVMarker.dcu b/12.0.4/Units/D7/RVMarker.dcu new file mode 100644 index 0000000..031b446 Binary files /dev/null and b/12.0.4/Units/D7/RVMarker.dcu differ diff --git a/12.0.4/Units/D7/RVMisc.dcu b/12.0.4/Units/D7/RVMisc.dcu new file mode 100644 index 0000000..c9e7706 Binary files /dev/null and b/12.0.4/Units/D7/RVMisc.dcu differ diff --git a/12.0.4/Units/D7/RVNote.dcu b/12.0.4/Units/D7/RVNote.dcu new file mode 100644 index 0000000..5399118 Binary files /dev/null and b/12.0.4/Units/D7/RVNote.dcu differ diff --git a/12.0.4/Units/D7/RVOfficeCnv.dcu b/12.0.4/Units/D7/RVOfficeCnv.dcu new file mode 100644 index 0000000..c3546ac Binary files /dev/null and b/12.0.4/Units/D7/RVOfficeCnv.dcu differ diff --git a/12.0.4/Units/D7/RVPP.dcu b/12.0.4/Units/D7/RVPP.dcu new file mode 100644 index 0000000..91f3111 Binary files /dev/null and b/12.0.4/Units/D7/RVPP.dcu differ diff --git a/12.0.4/Units/D7/RVPkgD7.dcu b/12.0.4/Units/D7/RVPkgD7.dcu new file mode 100644 index 0000000..8176660 Binary files /dev/null and b/12.0.4/Units/D7/RVPkgD7.dcu differ diff --git a/12.0.4/Units/D7/RVPkgD7.dpk b/12.0.4/Units/D7/RVPkgD7.dpk new file mode 100644 index 0000000..b6ee870 --- /dev/null +++ b/12.0.4/Units/D7/RVPkgD7.dpk @@ -0,0 +1,93 @@ +package RVPkgD7; + +{$R *.res} +{$R 'RVReg.dcr'} +{$ALIGN 8} +{$ASSERTIONS OFF} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS OFF} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'RichView'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + designide, + vcljpg, + vcl, + rtl; + +contains + RVStyle in 'RVStyle.pas', + DLines in 'DLines.pas', + PtblRV in 'PtblRV.pas', + RichView in 'RichView.pas', + RVEdit in 'RVEdit.pas', + RVPP in 'RVPP.pas', + RVScroll in 'RVScroll.pas', + RVSEdit in 'RVSEdit.pas', + CRVPP in 'CRVPP.pas', + CRVData in 'CRVData.pas', + CRVFData in 'CRVFData.pas', + PtRVData in 'PtRVData.pas', + RVBack in 'RVBack.pas', + RVERVData in 'RVERVData.pas', + RVFMisc in 'RVFMisc.pas', + RVFuncs in 'RVFuncs.pas', + RVItem in 'RVItem.pas', + RVReg in 'RVReg.pas', + RVRVData in 'RVRVData.pas', + RVUndo in 'RVUndo.pas', + RVUni in 'RVUni.pas', + RVClasses in 'RVClasses.pas', + RVTable in 'RVTable.pas', + RVCodePages in 'RVCodePages.pas', + RVDataList in 'RVDataList.pas', + RVTInplace in 'RVTInplace.pas', + RVCtrlData in 'RVCtrlData.pas', + RVStr in 'RVStr.pas', + RVRTFErr in 'RVRTFErr.pas', + RVRTFProps in 'RVRTFProps.pas', + RVRTF in 'RVRTF.pas', + CtrlImg in 'CtrlImg.pas', + RVMisc in 'RVMisc.pas', + RVMapWht in 'RVMapWht.pas', + RVReport in 'RVReport.pas', + RVDsgn in 'RVDsgn.pas' {frmRVDesign}, + RVSer in 'RVSer.pas', + RVOfficeCnv in 'RVOfficeCnv.pas', + RVMarker in 'RVMarker.pas', + RVXPTheme in 'RVXPTheme.pas', + RVResize in 'RVResize.pas', + RVDragDrop in 'RVDragDrop.pas', + RVGetText in 'RVGetText.pas', + RVLinear in 'RVLinear.pas', + RVThread in 'RVThread.pas', + RVWordPaint in 'RVWordPaint.pas', + RVAnimate in 'RVAnimate.pas', + RVGetTextW in 'RVGetTextW.pas', + RVPopup in 'RVPopup.pas', + RVNote in 'RVNote.pas', + RVSeqItem in 'RVSeqItem.pas', + RVSubData in 'RVSubData.pas', + RVLabelItem in 'RVLabelItem.pas', + RVDocParams in 'RVDocParams.pas', + RVTypes in 'RVTypes.pas'; + +end. diff --git a/12.0.4/Units/D7/RVPkgD7.res b/12.0.4/Units/D7/RVPkgD7.res new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/12.0.4/Units/D7/RVPkgD7.res differ diff --git a/12.0.4/Units/D7/RVPopup.dcu b/12.0.4/Units/D7/RVPopup.dcu new file mode 100644 index 0000000..7064292 Binary files /dev/null and b/12.0.4/Units/D7/RVPopup.dcu differ diff --git a/12.0.4/Units/D7/RVRTF.dcu b/12.0.4/Units/D7/RVRTF.dcu new file mode 100644 index 0000000..7fef662 Binary files /dev/null and b/12.0.4/Units/D7/RVRTF.dcu differ diff --git a/12.0.4/Units/D7/RVRTFErr.dcu b/12.0.4/Units/D7/RVRTFErr.dcu new file mode 100644 index 0000000..45dd8ef Binary files /dev/null and b/12.0.4/Units/D7/RVRTFErr.dcu differ diff --git a/12.0.4/Units/D7/RVRTFProps.dcu b/12.0.4/Units/D7/RVRTFProps.dcu new file mode 100644 index 0000000..bfa4362 Binary files /dev/null and b/12.0.4/Units/D7/RVRTFProps.dcu differ diff --git a/12.0.4/Units/D7/RVRTFReg.dcr b/12.0.4/Units/D7/RVRTFReg.dcr new file mode 100644 index 0000000..1d96bf6 Binary files /dev/null and b/12.0.4/Units/D7/RVRTFReg.dcr differ diff --git a/12.0.4/Units/D7/RVRVData.dcu b/12.0.4/Units/D7/RVRVData.dcu new file mode 100644 index 0000000..fd2b276 Binary files /dev/null and b/12.0.4/Units/D7/RVRVData.dcu differ diff --git a/12.0.4/Units/D7/RVReg.dcr b/12.0.4/Units/D7/RVReg.dcr new file mode 100644 index 0000000..5ef086c Binary files /dev/null and b/12.0.4/Units/D7/RVReg.dcr differ diff --git a/12.0.4/Units/D7/RVReg.dcu b/12.0.4/Units/D7/RVReg.dcu new file mode 100644 index 0000000..58c3171 Binary files /dev/null and b/12.0.4/Units/D7/RVReg.dcu differ diff --git a/12.0.4/Units/D7/RVRegCool.dcr b/12.0.4/Units/D7/RVRegCool.dcr new file mode 100644 index 0000000..57c6c0c Binary files /dev/null and b/12.0.4/Units/D7/RVRegCool.dcr differ diff --git a/12.0.4/Units/D7/RVRegSmall.dcr b/12.0.4/Units/D7/RVRegSmall.dcr new file mode 100644 index 0000000..064018c Binary files /dev/null and b/12.0.4/Units/D7/RVRegSmall.dcr differ diff --git a/12.0.4/Units/D7/RVReport.dcu b/12.0.4/Units/D7/RVReport.dcu new file mode 100644 index 0000000..53439d9 Binary files /dev/null and b/12.0.4/Units/D7/RVReport.dcu differ diff --git a/12.0.4/Units/D7/RVResize.dcu b/12.0.4/Units/D7/RVResize.dcu new file mode 100644 index 0000000..3f7923b Binary files /dev/null and b/12.0.4/Units/D7/RVResize.dcu differ diff --git a/12.0.4/Units/D7/RVSEdit.dcu b/12.0.4/Units/D7/RVSEdit.dcu new file mode 100644 index 0000000..4a32330 Binary files /dev/null and b/12.0.4/Units/D7/RVSEdit.dcu differ diff --git a/12.0.4/Units/D7/RVScroll.dcu b/12.0.4/Units/D7/RVScroll.dcu new file mode 100644 index 0000000..b4b8720 Binary files /dev/null and b/12.0.4/Units/D7/RVScroll.dcu differ diff --git a/12.0.4/Units/D7/RVSeqItem.dcu b/12.0.4/Units/D7/RVSeqItem.dcu new file mode 100644 index 0000000..1133c3d Binary files /dev/null and b/12.0.4/Units/D7/RVSeqItem.dcu differ diff --git a/12.0.4/Units/D7/RVSer.dcu b/12.0.4/Units/D7/RVSer.dcu new file mode 100644 index 0000000..947a7ad Binary files /dev/null and b/12.0.4/Units/D7/RVSer.dcu differ diff --git a/12.0.4/Units/D7/RVStr.dcu b/12.0.4/Units/D7/RVStr.dcu new file mode 100644 index 0000000..dba272a Binary files /dev/null and b/12.0.4/Units/D7/RVStr.dcu differ diff --git a/12.0.4/Units/D7/RVStyle.dcu b/12.0.4/Units/D7/RVStyle.dcu new file mode 100644 index 0000000..c812400 Binary files /dev/null and b/12.0.4/Units/D7/RVStyle.dcu differ diff --git a/12.0.4/Units/D7/RVStyle.res b/12.0.4/Units/D7/RVStyle.res new file mode 100644 index 0000000..8a5d879 Binary files /dev/null and b/12.0.4/Units/D7/RVStyle.res differ diff --git a/12.0.4/Units/D7/RVSubData.dcu b/12.0.4/Units/D7/RVSubData.dcu new file mode 100644 index 0000000..ba3bbc3 Binary files /dev/null and b/12.0.4/Units/D7/RVSubData.dcu differ diff --git a/12.0.4/Units/D7/RVTInplace.dcu b/12.0.4/Units/D7/RVTInplace.dcu new file mode 100644 index 0000000..a24d306 Binary files /dev/null and b/12.0.4/Units/D7/RVTInplace.dcu differ diff --git a/12.0.4/Units/D7/RVTable.dcu b/12.0.4/Units/D7/RVTable.dcu new file mode 100644 index 0000000..ba0eb15 Binary files /dev/null and b/12.0.4/Units/D7/RVTable.dcu differ diff --git a/12.0.4/Units/D7/RVTable.res b/12.0.4/Units/D7/RVTable.res new file mode 100644 index 0000000..3aeb51c Binary files /dev/null and b/12.0.4/Units/D7/RVTable.res differ diff --git a/12.0.4/Units/D7/RVThread.dcu b/12.0.4/Units/D7/RVThread.dcu new file mode 100644 index 0000000..625a4c2 Binary files /dev/null and b/12.0.4/Units/D7/RVThread.dcu differ diff --git a/12.0.4/Units/D7/RVTypes.dcu b/12.0.4/Units/D7/RVTypes.dcu new file mode 100644 index 0000000..a4a6d4d Binary files /dev/null and b/12.0.4/Units/D7/RVTypes.dcu differ diff --git a/12.0.4/Units/D7/RVUndo.dcu b/12.0.4/Units/D7/RVUndo.dcu new file mode 100644 index 0000000..89f6bf9 Binary files /dev/null and b/12.0.4/Units/D7/RVUndo.dcu differ diff --git a/12.0.4/Units/D7/RVUni.dcu b/12.0.4/Units/D7/RVUni.dcu new file mode 100644 index 0000000..7ebb1ce Binary files /dev/null and b/12.0.4/Units/D7/RVUni.dcu differ diff --git a/12.0.4/Units/D7/RVWordPaint.dcu b/12.0.4/Units/D7/RVWordPaint.dcu new file mode 100644 index 0000000..a289664 Binary files /dev/null and b/12.0.4/Units/D7/RVWordPaint.dcu differ diff --git a/12.0.4/Units/D7/RVXPTheme.dcu b/12.0.4/Units/D7/RVXPTheme.dcu new file mode 100644 index 0000000..c4462b0 Binary files /dev/null and b/12.0.4/Units/D7/RVXPTheme.dcu differ diff --git a/12.0.4/Units/D7/RV_Defs.inc b/12.0.4/Units/D7/RV_Defs.inc new file mode 100644 index 0000000..15f242e --- /dev/null +++ b/12.0.4/Units/D7/RV_Defs.inc @@ -0,0 +1,347 @@ + +{*******************************************************} +{ } +{ RichView } +{ Conditionals for RichView. } +{ This file is included in all RichView PAS-files.} +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$B-} +{$H+} +{$J+} +{$T-} + +{------------------------------------------------------------------------------} +{ Determining Delphi/C++Builder version } + +{$DEFINE RICHVIEW} + +{$IFNDEF VER80} { not Delphi 1.0 } + {$IFNDEF VER90} { not Delphi 2.0 } + {$DEFINE RICHVIEWCBDEF1} (* C++Builder 1.0+ *) + {$IFNDEF VER93} { not C++Builder 1.0 } + {$DEFINE RICHVIEWCBDEF3} (* C++Builder 3.0+ *) + {$IFNDEF VER110} { not C++Builder 3.0 } + {$DEFINE RICHVIEWDEF3} (* Delphi 3.0+, C++Builder 4.0+ *) + {$IFNDEF VER100} { not Delphi 3.0 } + {$DEFINE RICHVIEWDEF4} (* Delphi 4.0+ *) + {$IFNDEF VER120} { not Delphi 4.0 } + {$IFNDEF VER125} { not C++Builder 4.0 } + {$DEFINE RICHVIEWDEF5} (* Delphi 5.0+ *) + {$IFNDEF VER130} { not Delphi 5.0 } + {$IFNDEF VER135} { not C++Builder 5.0 } + {$DEFINE RICHVIEWDEF6}(* Delphi 6.0+ *) + {$IFNDEF VER140} { not Delphi 6.0 } + {$IFNDEF VER145} { not C++Builder 6.0 } + {$DEFINE RICHVIEWDEF7}(* Delphi 7.0+ *) + {$IFNDEF VER150} { not Delphi 7.0 } + {$DEFINE RICHVIEWDEF9} (* Delphi 2005+ *) + {$DEFINE RICHVIEWDEF2005}(* Delphi 2005+ *) + {$IFNDEF VER170} { not Delphi 2005 } + {$DEFINE RICHVIEWDEF10} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2006} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2007} (* Delphi 2007 defines both VER180 and VER185 *) + {$IFNDEF VER180} { not Delphi 2006-2007 } + {$DEFINE RICHVIEWDEF2009} + {$IFNDEF VER200} + {$DEFINE RICHVIEWDEF2010} (* Delphi 2010 defines VER210 *) + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER180}{$IFNDEF VER185} +{$UNDEF RICHVIEWDEF2007} // this is D2006, not D2007 +{$ENDIF}{$ENDIF} + + +{$IFDEF RICHVIEWDEF7} +{$WARN UNSAFE_TYPE OFF} +{$WARN UNSAFE_CODE OFF} +{$WARN UNSAFE_CAST OFF} +{$ENDIF} + +{------------------------------------------------------------------------------} +{ CONDITIONAL DEFINES. } +{ Do not modify this file, use Project|Options, Directories/Conditionals, } +{ Conditional defines instead. } +{------------------------------------------------------------------------------} + +{------------------------------------------------------------------------------} +{ Defines for shrinking exe size / improving speed and memory usage by } +{ turning off unused features. } +{------------------------------------------------------------------------------} + +{NOT$DEFINE RVDONOTUSESTYLETEMPLATES} +{ + Define if you do not want to use TRVStyle.StyleTemplates and related functions. + +{NOT$DEFINE RVDONOTUSEALLCAPS} +{NOT$DEFINE RVDONOTUSESOFTHYPHENS} +{NOT$DEFINE RVDONOTUSECHARSCALE} +{ + Define it if you do not wish to use rvfsAllCaps option, soft hyphens, + CharScale. + Some speed up of text drawing and formatting. +} + +{NOT$DEFINE RVDONOTUSESMARTPOPUP} + + +{NOT$DEFINE RVDONOTUSEANIMATION} +{ + Define if you do not wish to display animations. + Saves memory and resources. +} + +{NOT$DEFINE RVDONOTUSETABS} +{ + Define if you do not wish to use tab stops. All code for importing tabs will + be excluded. But code for processing tabs (if they appeared in document) remains. +} + +{NOT$DEFINE RVDONOTUSEJPEGIMAGE} +{ + Define it if you do not wish to use Delphi jpeg units. + This will cause saving images to HTML as bitmaps, and turning off special + support for jpegs in paletted display mode. +} + +{NOT$DEFINE RVDONOTUSEHTML} +{ + Define it to remove all HTML-related methods. +} + +{NOT$DEFINE RVDONOTUSERTF} +{ + Define it to remove all RTF-export related methods +} + +{NOT$DEFINE RVDONOTUSERTFIMPORT} +{ + Define it to remove all RTF-import related methods. +} + +{NOT$DEFINE RVDONOTUSERVF} +{ + Define it to remove all RVF-related methods. + You can do it only if you do not use TRichViewEdit. Editor requires + RVF methods. +} + +{NOT$DEFINE RVDONOTUSEJUSTIFY} +{ + Define it to remove justify alignment support. + Was not properly tested. +} + +{NOT$DEFINE RVDONOTUSEUNICODE} +{ + Define it to disable Unicode support. + Cannot be activated in Delphi/C++Builder 2009+ +} +{NOT$DEFINE RVDONOTUSECHARSPACING} +{ + Define it to disable CharSpacing. Somewhat faster +} + +{NOT$DEFINE RVDONOTUSETABLES} +{ + Define, if you do not use tables. Exe-file will be smaller. +} + +{NOT$DEFINE RVDONOTUSELISTS} +{ + Define, if you do not use bullets and numbering +} + +{NOT$DEFINE RVDONOTUSESEQ} +{ + Define, if you do not use numbered sequences and footnotes +} + +{NOT$DEFINE RVDONOTUSEINI} +{ + Define, if you do not save/load RVStyle in ini-files and the Registry +} + +{NOT$DEFINE RVDONOTUSEDRAGDROP} +{ + Define, if you do not use OLE drag&drop +} + +{NOT$DEFINE RVDONOTUSEITEMHINTS} +{ + Define, if you do not want to use item titles (popup hints). + Saves 4 bytes per item in memory +} + +{NOT$DEFINE RVDONOTUSELIVESPELL} +{ + Define, if you do not want to use live spelling. + Saves 8 bytes per item in memory, reduces exe file size +} + +{NOT$DEFINE RVDONOTUSELINEARPOSITIONS} +{ + Define, if you do not need to process EM_GETSEL, EM_GETTEXTRANGE and EM_SETSEL +} + +{NOT$DEFINE RVDONOTUSERVMEMORYSTREAM} +{ + Disables custom (more efficient for saving large data) memory stream + implementation. Reduces exe file size +} + +{NOT$DEFINE RVDONOTUSEDOCPARAMS} +{ + Define to exclude TCustomRichView.DocParameters +} + +{NOT$DEFINE RVDONOTUSEOLECONTAINER} +{ + Does nothing. Reserved. +} + +{$IFDEF RVDONOTUSETABLES} + {$DEFINE RVDONOTUSEINPLACE} +{$ENDIF} +{------------------------------------------------------------------------------} +{ Other defines } +{------------------------------------------------------------------------------} +{NOT$DEFINE RVPBEARCOMPAT} +{ + Define to make HTML output more compatible with THTMLViewer (www.pbear.com) + Some unnecessary tags will be saved. +} + +{NOT$DEFINE RVEDITIGNORESESCAPE} +{ + If defined, TRichViewEdit and TDBRichViewEdit (if IgnoreEscape=True) controls + do not receive messages when Escape is pressed. Useful when placed in modal + dialogs, so that editors do not steal Escape from a Cancel button. +} + + +{NOT$DEFINE RVLANGUAGEPROPERTY} +{ + If defined, text style has additional property - Language: Cardinal +} +{NOT$DEFINE RVLIVESPELLEXEVENT} +{ + If defined, RichView has additional event - OnSpellingCheckEx. + This event has higher priority than OnSpellingCheck. +} + +{NOT$DEFINE RVUSETEXTHOVERCOLORWITHSELECTED} +{ + Define if you wish to return behavior of v1.2-, where text hover color was + used even for selected text. +} + +{NOT$DEFINE DONOTDECVSCROLLUNITS} +{ + Define to forbid RichView to decrease vertical scrolling units automatically + when needed (if you wish to control scrolling units yourself). +} + +{NOT$DEFINE RVDONOTCORRECTWMFSCALE} +{ + There is a problem in Delphi TMetafile class (wrong size) when pasting + some metafiles from Clipboard. RichView tries to correct it. + Turn this define on, if you have troubles with metafile sizes when pasting. +} + +{$DEFINE RVALLOWCPBYCP} +{ + RichView since version 1.0 does not allow to add one checkpoint just after + another. + When defined (default), second checkpoint is ignored. + When not defined, RichView raises exception. +} + +{NOT$DEFINE RVRECHECKRTFPARA} +{ + If defined, when importing RTF file, paragraph properties are rechecked + when inserting each item (otherwise, only when inserting the first paragraph's + item). Slows reading down, but provides the same results as MS Word when + RTF file contains contradicting data for the same paragraph (buggy RTF files) +} + + +{------------------------------------------------------------------------------} +{ Addons } +{------------------------------------------------------------------------------} + +{ + Define if you use import of MS Word DOC files. +} +{NOT$DEFINE RVUSEWORDDOC} + +{------------------------------------------------------------------------------} +{ Automatical defines: } +{------------------------------------------------------------------------------} +{$IFDEF RICHVIEWCBDEF1} +{ + IME (Input Method Editor) support is disabled for Delphi 2. + D2 has required library file - Imm.pas in sources, but does not have it in library (?!). + So I think support for D2 is possible, but requires some IDE configuration... + +} + +{$IFNDEF RVDONOTUSEUNICODE} + +{$DEFINE RVUSEIME} // Using IME + +{$ENDIF} +{$ENDIF} + +{$IFNDEF RICHVIEWDEF3} +// Turning off Jpeg support for Delphi2, C++Builder 1,3 +{$DEFINE RVDONOTUSEJPEGIMAGE} + +{$ENDIF} + +{$IFNDEF RICHVIEWCBDEF3} +// Turning off D&D support for Delphi2, C++Builder 1 +{$DEFINE RVDONOTUSEDRAGDROP} +{$ENDIF} + +{$IFNDEF RVDONOTUSELISTS} + {$DEFINE RVUSELISTORSEQ} +{$ELSE} + {$IFNDEF RVDONOTUSESEQ} + {$DEFINE RVUSELISTORSEQ} + {$ENDIF} +{$ENDIF} + +{$IFDEF RICHVIEWDEF2009} + {$DEFINE RVUNICODESTR} + {$DEFINE RVUNICODEWINDOW} +{$ENDIF} + +{$DEFINE RVDEBUG} + +{.$DEFINE RVFLATSCROLLBARS} + +{.$DEFINE RVONCUT} + +{.$DEFINE RVWATERMARK} + +{.$DEFINE RVUSEBASELINE} \ No newline at end of file diff --git a/12.0.4/Units/D7/RichView.dcu b/12.0.4/Units/D7/RichView.dcu new file mode 100644 index 0000000..21dab5c Binary files /dev/null and b/12.0.4/Units/D7/RichView.dcu differ diff --git a/12.0.4/Units/D9/CRVData.dcu b/12.0.4/Units/D9/CRVData.dcu new file mode 100644 index 0000000..4a34e84 Binary files /dev/null and b/12.0.4/Units/D9/CRVData.dcu differ diff --git a/12.0.4/Units/D9/CRVFData.dcu b/12.0.4/Units/D9/CRVFData.dcu new file mode 100644 index 0000000..c4687d3 Binary files /dev/null and b/12.0.4/Units/D9/CRVFData.dcu differ diff --git a/12.0.4/Units/D9/CRVPP.dcu b/12.0.4/Units/D9/CRVPP.dcu new file mode 100644 index 0000000..49327f4 Binary files /dev/null and b/12.0.4/Units/D9/CRVPP.dcu differ diff --git a/12.0.4/Units/D9/CRVPP.res b/12.0.4/Units/D9/CRVPP.res new file mode 100644 index 0000000..e52da72 Binary files /dev/null and b/12.0.4/Units/D9/CRVPP.res differ diff --git a/12.0.4/Units/D9/CtrlImg.dcu b/12.0.4/Units/D9/CtrlImg.dcu new file mode 100644 index 0000000..231381b Binary files /dev/null and b/12.0.4/Units/D9/CtrlImg.dcu differ diff --git a/12.0.4/Units/D9/DBRV.dcr b/12.0.4/Units/D9/DBRV.dcr new file mode 100644 index 0000000..506c162 Binary files /dev/null and b/12.0.4/Units/D9/DBRV.dcr differ diff --git a/12.0.4/Units/D9/DBRV.dcu b/12.0.4/Units/D9/DBRV.dcu new file mode 100644 index 0000000..561087f Binary files /dev/null and b/12.0.4/Units/D9/DBRV.dcu differ diff --git a/12.0.4/Units/D9/DBRVCool.dcr b/12.0.4/Units/D9/DBRVCool.dcr new file mode 100644 index 0000000..b5afaca Binary files /dev/null and b/12.0.4/Units/D9/DBRVCool.dcr differ diff --git a/12.0.4/Units/D9/DBRVSmall.dcr b/12.0.4/Units/D9/DBRVSmall.dcr new file mode 100644 index 0000000..a88767f Binary files /dev/null and b/12.0.4/Units/D9/DBRVSmall.dcr differ diff --git a/12.0.4/Units/D9/DLines.dcu b/12.0.4/Units/D9/DLines.dcu new file mode 100644 index 0000000..d25dec3 Binary files /dev/null and b/12.0.4/Units/D9/DLines.dcu differ diff --git a/12.0.4/Units/D9/PtRVData.dcu b/12.0.4/Units/D9/PtRVData.dcu new file mode 100644 index 0000000..908838c Binary files /dev/null and b/12.0.4/Units/D9/PtRVData.dcu differ diff --git a/12.0.4/Units/D9/PtblRV.dcu b/12.0.4/Units/D9/PtblRV.dcu new file mode 100644 index 0000000..a545e9f Binary files /dev/null and b/12.0.4/Units/D9/PtblRV.dcu differ diff --git a/12.0.4/Units/D9/RVAnimate.dcu b/12.0.4/Units/D9/RVAnimate.dcu new file mode 100644 index 0000000..3b38325 Binary files /dev/null and b/12.0.4/Units/D9/RVAnimate.dcu differ diff --git a/12.0.4/Units/D9/RVBack.dcu b/12.0.4/Units/D9/RVBack.dcu new file mode 100644 index 0000000..01da431 Binary files /dev/null and b/12.0.4/Units/D9/RVBack.dcu differ diff --git a/12.0.4/Units/D9/RVClasses.dcu b/12.0.4/Units/D9/RVClasses.dcu new file mode 100644 index 0000000..1b8390c Binary files /dev/null and b/12.0.4/Units/D9/RVClasses.dcu differ diff --git a/12.0.4/Units/D9/RVCodePages.dcu b/12.0.4/Units/D9/RVCodePages.dcu new file mode 100644 index 0000000..881aa8b Binary files /dev/null and b/12.0.4/Units/D9/RVCodePages.dcu differ diff --git a/12.0.4/Units/D9/RVCtrlData.dcu b/12.0.4/Units/D9/RVCtrlData.dcu new file mode 100644 index 0000000..00f1091 Binary files /dev/null and b/12.0.4/Units/D9/RVCtrlData.dcu differ diff --git a/12.0.4/Units/D9/RVDBDsgn.dcu b/12.0.4/Units/D9/RVDBDsgn.dcu new file mode 100644 index 0000000..e44ae27 Binary files /dev/null and b/12.0.4/Units/D9/RVDBDsgn.dcu differ diff --git a/12.0.4/Units/D9/RVDBDsgn.dfm b/12.0.4/Units/D9/RVDBDsgn.dfm new file mode 100644 index 0000000..4d029d5 Binary files /dev/null and b/12.0.4/Units/D9/RVDBDsgn.dfm differ diff --git a/12.0.4/Units/D9/RVDBPkgD9.bdsproj b/12.0.4/Units/D9/RVDBPkgD9.bdsproj new file mode 100644 index 0000000..96e9118 --- /dev/null +++ b/12.0.4/Units/D9/RVDBPkgD9.bdsproj @@ -0,0 +1,173 @@ + + + + + + + + + + + + RVDBPkgD9.dpk + + + 7.0 + + + 8 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + RichView DataAware + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + False + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/12.0.4/Units/D9/RVDBPkgD9.dcu b/12.0.4/Units/D9/RVDBPkgD9.dcu new file mode 100644 index 0000000..e1426ad Binary files /dev/null and b/12.0.4/Units/D9/RVDBPkgD9.dcu differ diff --git a/12.0.4/Units/D9/RVDBPkgD9.dpk b/12.0.4/Units/D9/RVDBPkgD9.dpk new file mode 100644 index 0000000..09b1d88 --- /dev/null +++ b/12.0.4/Units/D9/RVDBPkgD9.dpk @@ -0,0 +1,45 @@ +package RVDBPkgD9; + +{$R *.res} +{$R 'DBRVSmall.dcr'} +{$ALIGN 8} +{$ASSERTIONS OFF} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS OFF} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'RichView DataAware'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + vcl, + vcldb, + RVPkgD9, + rtl, + vcljpg, + designide, + xmlrtl, + vclactnband, + vclx; + +contains + DBRV in 'DBRV.pas', + RVDBDsgn in 'RVDBDsgn.pas'; + +end. diff --git a/12.0.4/Units/D9/RVDBPkgD9.res b/12.0.4/Units/D9/RVDBPkgD9.res new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/12.0.4/Units/D9/RVDBPkgD9.res differ diff --git a/12.0.4/Units/D9/RVDataList.dcu b/12.0.4/Units/D9/RVDataList.dcu new file mode 100644 index 0000000..e85e94e Binary files /dev/null and b/12.0.4/Units/D9/RVDataList.dcu differ diff --git a/12.0.4/Units/D9/RVDocParams.dcu b/12.0.4/Units/D9/RVDocParams.dcu new file mode 100644 index 0000000..d557a07 Binary files /dev/null and b/12.0.4/Units/D9/RVDocParams.dcu differ diff --git a/12.0.4/Units/D9/RVDragDrop.dcu b/12.0.4/Units/D9/RVDragDrop.dcu new file mode 100644 index 0000000..4ecd36d Binary files /dev/null and b/12.0.4/Units/D9/RVDragDrop.dcu differ diff --git a/12.0.4/Units/D9/RVDsgn.dcu b/12.0.4/Units/D9/RVDsgn.dcu new file mode 100644 index 0000000..b527b06 Binary files /dev/null and b/12.0.4/Units/D9/RVDsgn.dcu differ diff --git a/12.0.4/Units/D9/RVDsgn.dfm b/12.0.4/Units/D9/RVDsgn.dfm new file mode 100644 index 0000000..19a11ee Binary files /dev/null and b/12.0.4/Units/D9/RVDsgn.dfm differ diff --git a/12.0.4/Units/D9/RVERVData.dcu b/12.0.4/Units/D9/RVERVData.dcu new file mode 100644 index 0000000..d31f321 Binary files /dev/null and b/12.0.4/Units/D9/RVERVData.dcu differ diff --git a/12.0.4/Units/D9/RVEdit.dcu b/12.0.4/Units/D9/RVEdit.dcu new file mode 100644 index 0000000..4f3a51a Binary files /dev/null and b/12.0.4/Units/D9/RVEdit.dcu differ diff --git a/12.0.4/Units/D9/RVFMisc.dcu b/12.0.4/Units/D9/RVFMisc.dcu new file mode 100644 index 0000000..ac3776c Binary files /dev/null and b/12.0.4/Units/D9/RVFMisc.dcu differ diff --git a/12.0.4/Units/D9/RVFuncs.dcu b/12.0.4/Units/D9/RVFuncs.dcu new file mode 100644 index 0000000..f0092f5 Binary files /dev/null and b/12.0.4/Units/D9/RVFuncs.dcu differ diff --git a/12.0.4/Units/D9/RVGetText.dcu b/12.0.4/Units/D9/RVGetText.dcu new file mode 100644 index 0000000..45b4f33 Binary files /dev/null and b/12.0.4/Units/D9/RVGetText.dcu differ diff --git a/12.0.4/Units/D9/RVGetTextW.dcu b/12.0.4/Units/D9/RVGetTextW.dcu new file mode 100644 index 0000000..daf0e5a Binary files /dev/null and b/12.0.4/Units/D9/RVGetTextW.dcu differ diff --git a/12.0.4/Units/D9/RVGifAnimate.pas b/12.0.4/Units/D9/RVGifAnimate.pas new file mode 100644 index 0000000..3d42751 --- /dev/null +++ b/12.0.4/Units/D9/RVGifAnimate.pas @@ -0,0 +1,303 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVGifImageAnimator: displaying animation for } +{ TGifImage by Anders Melander. } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, GifImage; + +type + { --------------------------------------------------------------------------- + TRVGifImageAnimator: displaying animations for gif images + (using TGifImage by Anders Melander) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be its background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVGifImageAnimator ========================} +{ Destructor } +destructor TRVGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVGifImageAnimator.CalcInterval; +var gif: TGifImage; +begin + gif := TGifImage(TRVGraphicItemInfo(item).Image); + Interval := 10; //GIFDefaultDelay; + if gif.Images[FrameIndex].GraphicControlExtension=nil then + exit; + if gif.Images[FrameIndex].GraphicControlExtension.Delay > 0 then begin + Interval := gif.Images[FrameIndex].GraphicControlExtension.Delay; + if (Interval < GIFMinimumDelay) then + Interval := GIFMinimumDelay; + if (Interval > GIFMaximumDelay) then + Interval := GIFMaximumDelay; + end; + Interval := Interval*10; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +type + TGifSubImageHack = class (TGifSubImage) + end; + +{ Draws the current frame } +procedure TRVGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TGifImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul, HeightDiv: Integer; + WidthMul, WidthDiv: Integer; + begin + with gif.Images[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Left, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Top, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Left+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Top+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if (FrameIndex>0) and (gif.Images[FrameIndex-1].GraphicControlExtension<>nil) then + case gif.Images[FrameIndex-1].GraphicControlExtension.Disposal of + dmBackground: + begin + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex-1); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + gif.Images[FrameIndex].StretchDraw(bmp.Canvas, + ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex), + gif.Images[FrameIndex].Transparent, (goTile in gif.DrawOptions)); + gif.Images[FrameIndex].HasBitmap := False; + TGifSubImageHack(gif.Images[FrameIndex]).FreeMask; + TGifSubImageHack(gif.Images[FrameIndex]).Palette := 0; + gif.Palette := 0; + end; + +begin + gif := TGifImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if (goTransparent in gif.DrawOptions) then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex1) and gif.Images[Result-1].Empty do + dec(Result); +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVGifImageAnimator.GetFrameCount: Integer; +begin + Result := TGifImage(TRVGraphicItemInfo(item).Image).Images.Count; + while (Result>1) and + TGifImage(TRVGraphicItemInfo(item).Image).Images[Result-1].Empty do + dec(Result); +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TGifImage) and + (GetGifFrameCount(TGifImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D9/RVItem.dcu b/12.0.4/Units/D9/RVItem.dcu new file mode 100644 index 0000000..d82a0ac Binary files /dev/null and b/12.0.4/Units/D9/RVItem.dcu differ diff --git a/12.0.4/Units/D9/RVJvGifAnimate.pas b/12.0.4/Units/D9/RVJvGifAnimate.pas new file mode 100644 index 0000000..22c5724 --- /dev/null +++ b/12.0.4/Units/D9/RVJvGifAnimate.pas @@ -0,0 +1,284 @@ +{*******************************************************} +{ } +{ RichView } +{ TRVJvGIFImageAnimator: displaying animation for } +{ TJvGIFImage from Project JEDI's JVCL. } +{ http://jvcl.sourceforge.net } +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$I RV_Defs.inc} + +unit RVJvGifAnimate; + +interface + +{$IFNDEF RVDONOTUSEANIMATION} + +uses Windows, Classes, Graphics, DLines, + CRVFData, RVAnimate, RVItem, JvGif; + +type + { --------------------------------------------------------------------------- + TRVJvGifImageAnimator: displaying animations for gif images + (using TJvGIFImage from Project JEDI's JVCL) + Variables: + bmp: the current frame of animation + bmpsrc: background under the image (if it is not a plain color, otherwise + it's nil) + FX, FY - the stored values of image position. Used to check if the image + is moved. + FParaNo - the stored value of paragraph image. Used to check if the + paragraph is changed (may be it's background was changed?) + FLastDrawnFrameIndex - index of the frame drawn in bmp. + } + TRVJvGifImageAnimator = class (TRVAnimator) + private + bmp, bmpsrc: TBitmap; + FBackColor: TColor; + FX,FY, FParaNo, FLastDrawnFrameIndex: Integer; + procedure CalcInterval; + protected + function GetFrameCount: Integer; override; + procedure ResetBackground; override; + public + destructor Destroy; override; + procedure Reset; override; + procedure ChangeFrame; override; + procedure Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); override; + function GetExportImageSize: TSize; override; + procedure DrawForExport(Canvas: TCanvas); override; + end; + +{$ENDIF} + +implementation + +{$IFNDEF RVDONOTUSEANIMATION} +{================================= TRVJvGifImageAnimator ========================} +{ Destructor } +destructor TRVJvGifImageAnimator.Destroy; +begin + bmp.Free; + bmpsrc.Free; + inherited; +end; +{------------------------------------------------------------------------------} +{ Determines how long to display the current frame. } +procedure TRVJvGifImageAnimator.CalcInterval; +var gif: TJvGIFImage; +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + Interval := 100; + if gif.Frames[FrameIndex].AnimateInterval > 0 then begin + Interval := gif.Frames[FrameIndex].AnimateInterval; + end; +end; +{------------------------------------------------------------------------------} +{ Change frame to the next one. Updates Interval. } +procedure TRVJvGifImageAnimator.ChangeFrame; +begin + CalcNextFrameIndex; + CalcInterval; +end; +{------------------------------------------------------------------------------} +{ Clears the stored background info } +procedure TRVJvGifImageAnimator.ResetBackground; +begin + bmpsrc.Free; + bmpsrc := nil; + bmp.Free; + bmp := nil; +end; +{------------------------------------------------------------------------------} +{ Draws the current frame } +procedure TRVJvGifImageAnimator.Draw(X, Y: Integer; Canvas: TCanvas; Animation: Boolean); +var gif: TJvGIFImage; + i: Integer; + UseSrcBitmap: Boolean; + r: TRect; + + function ScaleRect(const DestRect: TRect; FrameIndex: Integer): TRect; + var + HeightMul , + HeightDiv : integer; + WidthMul , + WidthDiv : integer; + begin + with gif.Frames[FrameIndex] do begin + HeightDiv := gif.Height; + HeightMul := DestRect.Bottom-DestRect.Top; + WidthDiv := gif.Width; + WidthMul := DestRect.Right-DestRect.Left; + + Result.Left := DestRect.Left + muldiv(Origin.X, WidthMul, WidthDiv); + Result.Top := DestRect.Top + muldiv(Origin.Y, HeightMul, HeightDiv); + Result.Right := DestRect.Left + muldiv(Origin.X+Width, WidthMul, WidthDiv); + Result.Bottom := DestRect.Top + muldiv(Origin.Y+Height, HeightMul, HeightDiv); + end; + end; + + procedure MakeBitmap(FrameIndex: Integer); + var r: TRect; + begin + if FrameIndex>0 then + case gif.Frames[FrameIndex-1].DisposalMethod of + dmRestoreBackground: + begin + r := Rect(0,0,bmp.Width,bmp.Height); + if bmpsrc<>nil then + bmp.Canvas.CopyRect(r, bmpsrc.Canvas, r) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(r); + end; + end; + end + else begin + if bmpsrc<>nil then + bmp.Assign(bmpsrc) + else begin + bmp.Canvas.Brush.Color := FBackColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end; + r := ScaleRect(Rect(0, 0, item.GetImageWidth(nil), item.GetImageHeight(nil)), FrameIndex); + gif.Frames[FrameIndex].Draw(bmp.Canvas, r, gif.Frames[FrameIndex].TransparentColor <> clNone); + end; + +begin + gif := TJvGIFImage(TRVGraphicItemInfo(item).Image); + if (bmp=nil) or + (item.ParaNo<>FParaNo) or + (X<>FX) or + (Y<>FY) or + (bmp.Width<>item.GetImageWidth(nil)) or + (bmp.Height<>item.GetImageHeight(nil)) then begin + bmp.Free; + bmp := TBitmap.Create; + bmp.Width := item.GetImageWidth(nil); + bmp.Height := item.GetImageHeight(nil); + FParaNo := item.ParaNo; + FX := X; + FY := Y; + if gif.Transparent then begin + r := Rect(0,0,0,0); + RVData.GetItemBackground(RVData.DrawItems[item.DrawItemNo].ItemNo, r, True, + FBackColor, bmpsrc, UseSrcBitmap); + if not UseSrcBitmap then begin + bmp.Canvas.Brush.Color := RVData.GetColor; + bmp.Canvas.FillRect(Rect(0,0,bmp.Width,bmp.Height)); + end; + end + else begin + FBackColor := clWhite; + UseSrcBitmap := False; + end; + if not UseSrcBitmap then begin + bmpsrc.Free; + bmpsrc := nil; + end; + for i := 0 to FrameIndex-1 do + MakeBitmap(i); + end + else if (FrameIndex=FLastDrawnFrameIndex) then begin + Canvas.Draw(X,Y,bmp); + exit; + end + else if (FrameIndex>0) and (FLastDrawnFrameIndex<>FrameIndex-1) then begin + if FLastDrawnFrameIndex clNone); +end; +{------------------------------------------------------------------------------} +{ Image size for RTF saving } +function TRVJvGifImageAnimator.GetExportImageSize: TSize; +begin + Result.cy := TJvGIFImage(TRVGraphicItemInfo(item).Image).Height; + Result.cx := TJvGIFImage(TRVGraphicItemInfo(item).Image).Width; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames in gif } +function GetGifFrameCount(gif: TJvGIFImage): Integer; +begin + Result := gif.Count; +end; +{------------------------------------------------------------------------------} +{ Returns a number of frames } +function TRVJvGifImageAnimator.GetFrameCount: Integer; +begin + Result := TJvGIFImage(TRVGraphicItemInfo(item).Image).Count; +end; +{------------------------------------------------------------------------------} +{ Rewinds to the first frame. Updates Interval. } +procedure TRVJvGifImageAnimator.Reset; +begin + bmp.Free; + bmp := nil; + bmpsrc.Free; + bmpsrc := nil; + FrameIndex := 0; + FLastDrawnFrameIndex := -1; + CalcInterval; +end; +{==============================================================================} +var DefMakeAnimator: TRVMakeAnimatorProc; +{ This procedure creates an animator (anim) for the item, if it's necessary. + This procedure can create only TRVJvGifImageAnimator. + If it cannot be applied, it calls the stored value of RV_MakeAnimator. } +procedure RV_MakeAnimatorGif(item: TCustomRVItemInfo; RVData: TCustomRVFormattedData; + var anim: TRVAnimator); +begin + if (item is TRVGraphicItemInfo) and + (TRVGraphicItemInfo(item).Image is TJvGifImage) and + (GetGifFrameCount(TJvGIFImage(TRVGraphicItemInfo(item).Image))>1) then begin + if (anim<>nil) and not (anim is TRVJvGifImageAnimator) then begin + anim.Free; + anim := nil; + end; + if anim=nil then begin + anim := TRVJvGifImageAnimator.Create(RVData, Item); + RVData.InsertAnimator(TObject(anim)); + end + else if anim<>nil then begin + anim.Update(RVData, Item); + anim.Reset; + end; + exit; + end; + DefMakeAnimator(item, RVData, anim) +end; + +initialization + DefMakeAnimator := RV_MakeAnimator; + RV_MakeAnimator := RV_MakeAnimatorGif; + +{$ENDIF} + +end. diff --git a/12.0.4/Units/D9/RVLabelItem.dcu b/12.0.4/Units/D9/RVLabelItem.dcu new file mode 100644 index 0000000..0db2e2a Binary files /dev/null and b/12.0.4/Units/D9/RVLabelItem.dcu differ diff --git a/12.0.4/Units/D9/RVLinear.dcu b/12.0.4/Units/D9/RVLinear.dcu new file mode 100644 index 0000000..ec3e4ff Binary files /dev/null and b/12.0.4/Units/D9/RVLinear.dcu differ diff --git a/12.0.4/Units/D9/RVMapWht.dcu b/12.0.4/Units/D9/RVMapWht.dcu new file mode 100644 index 0000000..8159905 Binary files /dev/null and b/12.0.4/Units/D9/RVMapWht.dcu differ diff --git a/12.0.4/Units/D9/RVMarker.dcu b/12.0.4/Units/D9/RVMarker.dcu new file mode 100644 index 0000000..f5eed7b Binary files /dev/null and b/12.0.4/Units/D9/RVMarker.dcu differ diff --git a/12.0.4/Units/D9/RVMisc.dcu b/12.0.4/Units/D9/RVMisc.dcu new file mode 100644 index 0000000..711c1aa Binary files /dev/null and b/12.0.4/Units/D9/RVMisc.dcu differ diff --git a/12.0.4/Units/D9/RVNote.dcu b/12.0.4/Units/D9/RVNote.dcu new file mode 100644 index 0000000..82a7798 Binary files /dev/null and b/12.0.4/Units/D9/RVNote.dcu differ diff --git a/12.0.4/Units/D9/RVOfficeCnv.dcu b/12.0.4/Units/D9/RVOfficeCnv.dcu new file mode 100644 index 0000000..060e513 Binary files /dev/null and b/12.0.4/Units/D9/RVOfficeCnv.dcu differ diff --git a/12.0.4/Units/D9/RVPP.dcu b/12.0.4/Units/D9/RVPP.dcu new file mode 100644 index 0000000..7dc3939 Binary files /dev/null and b/12.0.4/Units/D9/RVPP.dcu differ diff --git a/12.0.4/Units/D9/RVPkgD9.bdsproj b/12.0.4/Units/D9/RVPkgD9.bdsproj new file mode 100644 index 0000000..8d83bf6 --- /dev/null +++ b/12.0.4/Units/D9/RVPkgD9.bdsproj @@ -0,0 +1,173 @@ + + + + + + + + + + + + RVPkgD9.dpk + + + 7.0 + + + 8 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 1 + 0 + 1 + True + True + WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; + + False + + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + False + False + False + True + True + True + + + 0 + 0 + 1 + False + False + False + 16384 + 1048576 + 4194304 + RichView + + + + + + + + + + + False + + + + + + False + + + + + + False + + + + $00000000 + + + + True + False + 1 + 0 + 0 + 0 + False + False + False + False + False + 1049 + 1251 + + + + + 1.0.0.0 + + + + + + 1.0.0.0 + + + + diff --git a/12.0.4/Units/D9/RVPkgD9.dcu b/12.0.4/Units/D9/RVPkgD9.dcu new file mode 100644 index 0000000..67d4046 Binary files /dev/null and b/12.0.4/Units/D9/RVPkgD9.dcu differ diff --git a/12.0.4/Units/D9/RVPkgD9.dpk b/12.0.4/Units/D9/RVPkgD9.dpk new file mode 100644 index 0000000..25f8f4a --- /dev/null +++ b/12.0.4/Units/D9/RVPkgD9.dpk @@ -0,0 +1,93 @@ +package RVPkgD9; + +{$R *.res} +{$R 'RVRegSmall.dcr'} +{$ALIGN 8} +{$ASSERTIONS OFF} +{$BOOLEVAL OFF} +{$DEBUGINFO OFF} +{$EXTENDEDSYNTAX ON} +{$IMPORTEDDATA ON} +{$IOCHECKS ON} +{$LOCALSYMBOLS OFF} +{$LONGSTRINGS ON} +{$OPENSTRINGS ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} +{$SAFEDIVIDE OFF} +{$STACKFRAMES OFF} +{$TYPEDADDRESS OFF} +{$VARSTRINGCHECKS ON} +{$WRITEABLECONST ON} +{$MINENUMSIZE 1} +{$IMAGEBASE $400000} +{$DESCRIPTION 'RichView'} +{$DESIGNONLY} +{$IMPLICITBUILD OFF} + +requires + designide, + vcljpg, + vcl, + rtl; + +contains + RVStyle in 'RVStyle.pas', + DLines in 'DLines.pas', + PtblRV in 'PtblRV.pas', + RichView in 'RichView.pas', + RVEdit in 'RVEdit.pas', + RVPP in 'RVPP.pas', + RVScroll in 'RVScroll.pas', + RVSEdit in 'RVSEdit.pas', + CRVPP in 'CRVPP.pas', + CRVData in 'CRVData.pas', + CRVFData in 'CRVFData.pas', + PtRVData in 'PtRVData.pas', + RVBack in 'RVBack.pas', + RVERVData in 'RVERVData.pas', + RVFMisc in 'RVFMisc.pas', + RVFuncs in 'RVFuncs.pas', + RVItem in 'RVItem.pas', + RVReg in 'RVReg.pas', + RVRVData in 'RVRVData.pas', + RVUndo in 'RVUndo.pas', + RVUni in 'RVUni.pas', + RVClasses in 'RVClasses.pas', + RVTable in 'RVTable.pas', + RVCodePages in 'RVCodePages.pas', + RVDataList in 'RVDataList.pas', + RVTInplace in 'RVTInplace.pas', + RVCtrlData in 'RVCtrlData.pas', + RVStr in 'RVStr.pas', + RVRTFErr in 'RVRTFErr.pas', + RVRTFProps in 'RVRTFProps.pas', + RVRTF in 'RVRTF.pas', + CtrlImg in 'CtrlImg.pas', + RVMisc in 'RVMisc.pas', + RVMapWht in 'RVMapWht.pas', + RVReport in 'RVReport.pas', + RVDsgn in 'RVDsgn.pas' {frmRVDesign}, + RVSer in 'RVSer.pas', + RVOfficeCnv in 'RVOfficeCnv.pas', + RVMarker in 'RVMarker.pas', + RVXPTheme in 'RVXPTheme.pas', + RVResize in 'RVResize.pas', + RVDragDrop in 'RVDragDrop.pas', + RVGetText in 'RVGetText.pas', + RVLinear in 'RVLinear.pas', + RVThread in 'RVThread.pas', + RVWordPaint in 'RVWordPaint.pas', + RVAnimate in 'RVAnimate.pas', + RVGetTextW in 'RVGetTextW.pas', + RVPopup in 'RVPopup.pas', + RVSeqItem in 'RVSeqItem.pas', + RVSubData in 'RVSubData.pas', + RVLabelItem in 'RVLabelItem.pas', + RVNote in 'RVNote.pas', + RVDocParams in 'RVDocParams.pas', + RVTypes in 'RVTypes.pas'; + +end. diff --git a/12.0.4/Units/D9/RVPkgD9.res b/12.0.4/Units/D9/RVPkgD9.res new file mode 100644 index 0000000..36f26e2 Binary files /dev/null and b/12.0.4/Units/D9/RVPkgD9.res differ diff --git a/12.0.4/Units/D9/RVPopup.dcu b/12.0.4/Units/D9/RVPopup.dcu new file mode 100644 index 0000000..20eede1 Binary files /dev/null and b/12.0.4/Units/D9/RVPopup.dcu differ diff --git a/12.0.4/Units/D9/RVRTF.dcu b/12.0.4/Units/D9/RVRTF.dcu new file mode 100644 index 0000000..9bfa147 Binary files /dev/null and b/12.0.4/Units/D9/RVRTF.dcu differ diff --git a/12.0.4/Units/D9/RVRTFErr.dcu b/12.0.4/Units/D9/RVRTFErr.dcu new file mode 100644 index 0000000..1077e63 Binary files /dev/null and b/12.0.4/Units/D9/RVRTFErr.dcu differ diff --git a/12.0.4/Units/D9/RVRTFProps.dcu b/12.0.4/Units/D9/RVRTFProps.dcu new file mode 100644 index 0000000..517f729 Binary files /dev/null and b/12.0.4/Units/D9/RVRTFProps.dcu differ diff --git a/12.0.4/Units/D9/RVRTFReg.dcr b/12.0.4/Units/D9/RVRTFReg.dcr new file mode 100644 index 0000000..1d96bf6 Binary files /dev/null and b/12.0.4/Units/D9/RVRTFReg.dcr differ diff --git a/12.0.4/Units/D9/RVRVData.dcu b/12.0.4/Units/D9/RVRVData.dcu new file mode 100644 index 0000000..b762579 Binary files /dev/null and b/12.0.4/Units/D9/RVRVData.dcu differ diff --git a/12.0.4/Units/D9/RVReg.dcr b/12.0.4/Units/D9/RVReg.dcr new file mode 100644 index 0000000..5ef086c Binary files /dev/null and b/12.0.4/Units/D9/RVReg.dcr differ diff --git a/12.0.4/Units/D9/RVReg.dcu b/12.0.4/Units/D9/RVReg.dcu new file mode 100644 index 0000000..66f36bc Binary files /dev/null and b/12.0.4/Units/D9/RVReg.dcu differ diff --git a/12.0.4/Units/D9/RVRegCool.dcr b/12.0.4/Units/D9/RVRegCool.dcr new file mode 100644 index 0000000..57c6c0c Binary files /dev/null and b/12.0.4/Units/D9/RVRegCool.dcr differ diff --git a/12.0.4/Units/D9/RVRegSmall.dcr b/12.0.4/Units/D9/RVRegSmall.dcr new file mode 100644 index 0000000..064018c Binary files /dev/null and b/12.0.4/Units/D9/RVRegSmall.dcr differ diff --git a/12.0.4/Units/D9/RVReport.dcu b/12.0.4/Units/D9/RVReport.dcu new file mode 100644 index 0000000..f59bd20 Binary files /dev/null and b/12.0.4/Units/D9/RVReport.dcu differ diff --git a/12.0.4/Units/D9/RVResize.dcu b/12.0.4/Units/D9/RVResize.dcu new file mode 100644 index 0000000..ca67c22 Binary files /dev/null and b/12.0.4/Units/D9/RVResize.dcu differ diff --git a/12.0.4/Units/D9/RVSEdit.dcu b/12.0.4/Units/D9/RVSEdit.dcu new file mode 100644 index 0000000..fdc6fcb Binary files /dev/null and b/12.0.4/Units/D9/RVSEdit.dcu differ diff --git a/12.0.4/Units/D9/RVScroll.dcu b/12.0.4/Units/D9/RVScroll.dcu new file mode 100644 index 0000000..a3eb0eb Binary files /dev/null and b/12.0.4/Units/D9/RVScroll.dcu differ diff --git a/12.0.4/Units/D9/RVSeqItem.dcu b/12.0.4/Units/D9/RVSeqItem.dcu new file mode 100644 index 0000000..ad9d99c Binary files /dev/null and b/12.0.4/Units/D9/RVSeqItem.dcu differ diff --git a/12.0.4/Units/D9/RVSer.dcu b/12.0.4/Units/D9/RVSer.dcu new file mode 100644 index 0000000..ab81eb4 Binary files /dev/null and b/12.0.4/Units/D9/RVSer.dcu differ diff --git a/12.0.4/Units/D9/RVStr.dcu b/12.0.4/Units/D9/RVStr.dcu new file mode 100644 index 0000000..7727d9d Binary files /dev/null and b/12.0.4/Units/D9/RVStr.dcu differ diff --git a/12.0.4/Units/D9/RVStyle.dcu b/12.0.4/Units/D9/RVStyle.dcu new file mode 100644 index 0000000..7df3f47 Binary files /dev/null and b/12.0.4/Units/D9/RVStyle.dcu differ diff --git a/12.0.4/Units/D9/RVStyle.res b/12.0.4/Units/D9/RVStyle.res new file mode 100644 index 0000000..8a5d879 Binary files /dev/null and b/12.0.4/Units/D9/RVStyle.res differ diff --git a/12.0.4/Units/D9/RVSubData.dcu b/12.0.4/Units/D9/RVSubData.dcu new file mode 100644 index 0000000..cb637a5 Binary files /dev/null and b/12.0.4/Units/D9/RVSubData.dcu differ diff --git a/12.0.4/Units/D9/RVTInplace.dcu b/12.0.4/Units/D9/RVTInplace.dcu new file mode 100644 index 0000000..be33157 Binary files /dev/null and b/12.0.4/Units/D9/RVTInplace.dcu differ diff --git a/12.0.4/Units/D9/RVTable.dcu b/12.0.4/Units/D9/RVTable.dcu new file mode 100644 index 0000000..6e6a35f Binary files /dev/null and b/12.0.4/Units/D9/RVTable.dcu differ diff --git a/12.0.4/Units/D9/RVTable.res b/12.0.4/Units/D9/RVTable.res new file mode 100644 index 0000000..3aeb51c Binary files /dev/null and b/12.0.4/Units/D9/RVTable.res differ diff --git a/12.0.4/Units/D9/RVThread.dcu b/12.0.4/Units/D9/RVThread.dcu new file mode 100644 index 0000000..37937c5 Binary files /dev/null and b/12.0.4/Units/D9/RVThread.dcu differ diff --git a/12.0.4/Units/D9/RVTypes.dcu b/12.0.4/Units/D9/RVTypes.dcu new file mode 100644 index 0000000..cfc540f Binary files /dev/null and b/12.0.4/Units/D9/RVTypes.dcu differ diff --git a/12.0.4/Units/D9/RVUndo.dcu b/12.0.4/Units/D9/RVUndo.dcu new file mode 100644 index 0000000..8152b27 Binary files /dev/null and b/12.0.4/Units/D9/RVUndo.dcu differ diff --git a/12.0.4/Units/D9/RVUni.dcu b/12.0.4/Units/D9/RVUni.dcu new file mode 100644 index 0000000..e41f1db Binary files /dev/null and b/12.0.4/Units/D9/RVUni.dcu differ diff --git a/12.0.4/Units/D9/RVWordPaint.dcu b/12.0.4/Units/D9/RVWordPaint.dcu new file mode 100644 index 0000000..4ca6dc9 Binary files /dev/null and b/12.0.4/Units/D9/RVWordPaint.dcu differ diff --git a/12.0.4/Units/D9/RVXPTheme.dcu b/12.0.4/Units/D9/RVXPTheme.dcu new file mode 100644 index 0000000..0eb53cd Binary files /dev/null and b/12.0.4/Units/D9/RVXPTheme.dcu differ diff --git a/12.0.4/Units/D9/RV_Defs.inc b/12.0.4/Units/D9/RV_Defs.inc new file mode 100644 index 0000000..15f242e --- /dev/null +++ b/12.0.4/Units/D9/RV_Defs.inc @@ -0,0 +1,347 @@ + +{*******************************************************} +{ } +{ RichView } +{ Conditionals for RichView. } +{ This file is included in all RichView PAS-files.} +{ } +{ Copyright (c) Sergey Tkachenko } +{ svt@trichview.com } +{ http://www.trichview.com } +{ } +{*******************************************************} + +{$B-} +{$H+} +{$J+} +{$T-} + +{------------------------------------------------------------------------------} +{ Determining Delphi/C++Builder version } + +{$DEFINE RICHVIEW} + +{$IFNDEF VER80} { not Delphi 1.0 } + {$IFNDEF VER90} { not Delphi 2.0 } + {$DEFINE RICHVIEWCBDEF1} (* C++Builder 1.0+ *) + {$IFNDEF VER93} { not C++Builder 1.0 } + {$DEFINE RICHVIEWCBDEF3} (* C++Builder 3.0+ *) + {$IFNDEF VER110} { not C++Builder 3.0 } + {$DEFINE RICHVIEWDEF3} (* Delphi 3.0+, C++Builder 4.0+ *) + {$IFNDEF VER100} { not Delphi 3.0 } + {$DEFINE RICHVIEWDEF4} (* Delphi 4.0+ *) + {$IFNDEF VER120} { not Delphi 4.0 } + {$IFNDEF VER125} { not C++Builder 4.0 } + {$DEFINE RICHVIEWDEF5} (* Delphi 5.0+ *) + {$IFNDEF VER130} { not Delphi 5.0 } + {$IFNDEF VER135} { not C++Builder 5.0 } + {$DEFINE RICHVIEWDEF6}(* Delphi 6.0+ *) + {$IFNDEF VER140} { not Delphi 6.0 } + {$IFNDEF VER145} { not C++Builder 6.0 } + {$DEFINE RICHVIEWDEF7}(* Delphi 7.0+ *) + {$IFNDEF VER150} { not Delphi 7.0 } + {$DEFINE RICHVIEWDEF9} (* Delphi 2005+ *) + {$DEFINE RICHVIEWDEF2005}(* Delphi 2005+ *) + {$IFNDEF VER170} { not Delphi 2005 } + {$DEFINE RICHVIEWDEF10} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2006} (* Delphi 2006+ *) + {$DEFINE RICHVIEWDEF2007} (* Delphi 2007 defines both VER180 and VER185 *) + {$IFNDEF VER180} { not Delphi 2006-2007 } + {$DEFINE RICHVIEWDEF2009} + {$IFNDEF VER200} + {$DEFINE RICHVIEWDEF2010} (* Delphi 2010 defines VER210 *) + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER180}{$IFNDEF VER185} +{$UNDEF RICHVIEWDEF2007} // this is D2006, not D2007 +{$ENDIF}{$ENDIF} + + +{$IFDEF RICHVIEWDEF7} +{$WARN UNSAFE_TYPE OFF} +{$WARN UNSAFE_CODE OFF} +{$WARN UNSAFE_CAST OFF} +{$ENDIF} + +{------------------------------------------------------------------------------} +{ CONDITIONAL DEFINES. } +{ Do not modify this file, use Project|Options, Directories/Conditionals, } +{ Conditional defines instead. } +{------------------------------------------------------------------------------} + +{------------------------------------------------------------------------------} +{ Defines for shrinking exe size / improving speed and memory usage by } +{ turning off unused features. } +{------------------------------------------------------------------------------} + +{NOT$DEFINE RVDONOTUSESTYLETEMPLATES} +{ + Define if you do not want to use TRVStyle.StyleTemplates and related functions. + +{NOT$DEFINE RVDONOTUSEALLCAPS} +{NOT$DEFINE RVDONOTUSESOFTHYPHENS} +{NOT$DEFINE RVDONOTUSECHARSCALE} +{ + Define it if you do not wish to use rvfsAllCaps option, soft hyphens, + CharScale. + Some speed up of text drawing and formatting. +} + +{NOT$DEFINE RVDONOTUSESMARTPOPUP} + + +{NOT$DEFINE RVDONOTUSEANIMATION} +{ + Define if you do not wish to display animations. + Saves memory and resources. +} + +{NOT$DEFINE RVDONOTUSETABS} +{ + Define if you do not wish to use tab stops. All code for importing tabs will + be excluded. But code for processing tabs (if they appeared in document) remains. +} + +{NOT$DEFINE RVDONOTUSEJPEGIMAGE} +{ + Define it if you do not wish to use Delphi jpeg units. + This will cause saving images to HTML as bitmaps, and turning off special + support for jpegs in paletted display mode. +} + +{NOT$DEFINE RVDONOTUSEHTML} +{ + Define it to remove all HTML-related methods. +} + +{NOT$DEFINE RVDONOTUSERTF} +{ + Define it to remove all RTF-export related methods +} + +{NOT$DEFINE RVDONOTUSERTFIMPORT} +{ + Define it to remove all RTF-import related methods. +} + +{NOT$DEFINE RVDONOTUSERVF} +{ + Define it to remove all RVF-related methods. + You can do it only if you do not use TRichViewEdit. Editor requires + RVF methods. +} + +{NOT$DEFINE RVDONOTUSEJUSTIFY} +{ + Define it to remove justify alignment support. + Was not properly tested. +} + +{NOT$DEFINE RVDONOTUSEUNICODE} +{ + Define it to disable Unicode support. + Cannot be activated in Delphi/C++Builder 2009+ +} +{NOT$DEFINE RVDONOTUSECHARSPACING} +{ + Define it to disable CharSpacing. Somewhat faster +} + +{NOT$DEFINE RVDONOTUSETABLES} +{ + Define, if you do not use tables. Exe-file will be smaller. +} + +{NOT$DEFINE RVDONOTUSELISTS} +{ + Define, if you do not use bullets and numbering +} + +{NOT$DEFINE RVDONOTUSESEQ} +{ + Define, if you do not use numbered sequences and footnotes +} + +{NOT$DEFINE RVDONOTUSEINI} +{ + Define, if you do not save/load RVStyle in ini-files and the Registry +} + +{NOT$DEFINE RVDONOTUSEDRAGDROP} +{ + Define, if you do not use OLE drag&drop +} + +{NOT$DEFINE RVDONOTUSEITEMHINTS} +{ + Define, if you do not want to use item titles (popup hints). + Saves 4 bytes per item in memory +} + +{NOT$DEFINE RVDONOTUSELIVESPELL} +{ + Define, if you do not want to use live spelling. + Saves 8 bytes per item in memory, reduces exe file size +} + +{NOT$DEFINE RVDONOTUSELINEARPOSITIONS} +{ + Define, if you do not need to process EM_GETSEL, EM_GETTEXTRANGE and EM_SETSEL +} + +{NOT$DEFINE RVDONOTUSERVMEMORYSTREAM} +{ + Disables custom (more efficient for saving large data) memory stream + implementation. Reduces exe file size +} + +{NOT$DEFINE RVDONOTUSEDOCPARAMS} +{ + Define to exclude TCustomRichView.DocParameters +} + +{NOT$DEFINE RVDONOTUSEOLECONTAINER} +{ + Does nothing. Reserved. +} + +{$IFDEF RVDONOTUSETABLES} + {$DEFINE RVDONOTUSEINPLACE} +{$ENDIF} +{------------------------------------------------------------------------------} +{ Other defines } +{------------------------------------------------------------------------------} +{NOT$DEFINE RVPBEARCOMPAT} +{ + Define to make HTML output more compatible with THTMLViewer (www.pbear.com) + Some unnecessary tags will be saved. +} + +{NOT$DEFINE RVEDITIGNORESESCAPE} +{ + If defined, TRichViewEdit and TDBRichViewEdit (if IgnoreEscape=True) controls + do not receive messages when Escape is pressed. Useful when placed in modal + dialogs, so that editors do not steal Escape from a Cancel button. +} + + +{NOT$DEFINE RVLANGUAGEPROPERTY} +{ + If defined, text style has additional property - Language: Cardinal +} +{NOT$DEFINE RVLIVESPELLEXEVENT} +{ + If defined, RichView has additional event - OnSpellingCheckEx. + This event has higher priority than OnSpellingCheck. +} + +{NOT$DEFINE RVUSETEXTHOVERCOLORWITHSELECTED} +{ + Define if you wish to return behavior of v1.2-, where text hover color was + used even for selected text. +} + +{NOT$DEFINE DONOTDECVSCROLLUNITS} +{ + Define to forbid RichView to decrease vertical scrolling units automatically + when needed (if you wish to control scrolling units yourself). +} + +{NOT$DEFINE RVDONOTCORRECTWMFSCALE} +{ + There is a problem in Delphi TMetafile class (wrong size) when pasting + some metafiles from Clipboard. RichView tries to correct it. + Turn this define on, if you have troubles with metafile sizes when pasting. +} + +{$DEFINE RVALLOWCPBYCP} +{ + RichView since version 1.0 does not allow to add one checkpoint just after + another. + When defined (default), second checkpoint is ignored. + When not defined, RichView raises exception. +} + +{NOT$DEFINE RVRECHECKRTFPARA} +{ + If defined, when importing RTF file, paragraph properties are rechecked + when inserting each item (otherwise, only when inserting the first paragraph's + item). Slows reading down, but provides the same results as MS Word when + RTF file contains contradicting data for the same paragraph (buggy RTF files) +} + + +{------------------------------------------------------------------------------} +{ Addons } +{------------------------------------------------------------------------------} + +{ + Define if you use import of MS Word DOC files. +} +{NOT$DEFINE RVUSEWORDDOC} + +{------------------------------------------------------------------------------} +{ Automatical defines: } +{------------------------------------------------------------------------------} +{$IFDEF RICHVIEWCBDEF1} +{ + IME (Input Method Editor) support is disabled for Delphi 2. + D2 has required library file - Imm.pas in sources, but does not have it in library (?!). + So I think support for D2 is possible, but requires some IDE configuration... + +} + +{$IFNDEF RVDONOTUSEUNICODE} + +{$DEFINE RVUSEIME} // Using IME + +{$ENDIF} +{$ENDIF} + +{$IFNDEF RICHVIEWDEF3} +// Turning off Jpeg support for Delphi2, C++Builder 1,3 +{$DEFINE RVDONOTUSEJPEGIMAGE} + +{$ENDIF} + +{$IFNDEF RICHVIEWCBDEF3} +// Turning off D&D support for Delphi2, C++Builder 1 +{$DEFINE RVDONOTUSEDRAGDROP} +{$ENDIF} + +{$IFNDEF RVDONOTUSELISTS} + {$DEFINE RVUSELISTORSEQ} +{$ELSE} + {$IFNDEF RVDONOTUSESEQ} + {$DEFINE RVUSELISTORSEQ} + {$ENDIF} +{$ENDIF} + +{$IFDEF RICHVIEWDEF2009} + {$DEFINE RVUNICODESTR} + {$DEFINE RVUNICODEWINDOW} +{$ENDIF} + +{$DEFINE RVDEBUG} + +{.$DEFINE RVFLATSCROLLBARS} + +{.$DEFINE RVONCUT} + +{.$DEFINE RVWATERMARK} + +{.$DEFINE RVUSEBASELINE} \ No newline at end of file diff --git a/12.0.4/Units/D9/RichView.dcu b/12.0.4/Units/D9/RichView.dcu new file mode 100644 index 0000000..8f4c1f5 Binary files /dev/null and b/12.0.4/Units/D9/RichView.dcu differ