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

📄 inssymbolrvfrm.pas

📁 richviewaction 1.58 需要richview 1.9.46
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{*******************************************************}
{                                                       } 
{       RichViewActions                                 } 
{       Insert-symbol dialog                            } 
{                                                       } 
{       Copyright (c) Sergey Tkachenko                  } 
{       svt@trichview.com                               } 
{       http://www.trichview.com                        } 
{                                                       } 
{*******************************************************}
{ Thanks to Wim van der Vegt for implementing Unicode blocks }

unit InsSymbolRVFrm;

interface 

{$I RV_Defs.inc} 
{$I RichViewActions.inc} 

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
  Dialogs, BaseRVFrm, RVFontCombos, StdCtrls, ExtCtrls, RVALocalize, 
  RVGrids; 

const 
  CM_DENYSUBCLASSING = CM_BASE + 2000; 

type 

  TZoomPanel = class (TPanel) 
  private 
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST; 
    procedure CMDenySubclassing(var Msg: TMessage); message CM_DENYSUBCLASSING; 
  protected 
    procedure Paint; override; 
  public
    DefWidth: Integer; 
    FontName: String; 
    FontCharset: TFontCharset; 
    Text: String; 
    TextW: WideString; 
  end; 

  TfrmRVInsertSymbol = class(TfrmRVBase) 
    btnOk: TButton; 
    btnCancel: TButton; 
    lblCharset: TLabel; 
    lblFont: TLabel; 
    cmbFont: TRVFontComboBox; 
    cmbCharset: TRVFontCharsetComboBox; 
    dg: TRVGrid; 
    Label1: TLabel; 
    cmbBlock: TComboBox; 
    lblBlock: TLabel; 
    procedure FormCreate(Sender: TObject); 
    procedure dgDrawCell(Sender: TObject; ACol, ARow: Integer; ARect: TRect; 
      Selected: Boolean); 
    procedure cmbFontClick(Sender: TObject); 
    procedure cmbCharsetClick(Sender: TObject); 
    procedure dgSelectCell(Sender: TObject); 
    procedure dgTopLeftChanged(Sender: TObject); 
    procedure FormResize(Sender: TObject); 
    procedure dgEnter(Sender: TObject); 
    procedure cmbBlockClick(Sender: TObject); 
  private 
    { Private declarations }
    FUseBlocks: Boolean; 
    FontName: String; 
    FontCharset: TFontCharset; 
    Offset: Integer; 
    Endpos: Integer;
  protected
    {$IFDEF RVASKINNED}
    procedure OnCreateThemedControl(OldControl, NewControl: TControl); override;
    function IsThemeAllowedFor(Component: TComponent): Boolean; override;
    {$ENDIF}
  public
    { Public declarations }
    Panel: TZoomPanel;
    _btnOk, _lblCharset, _lblBlock: TControl;
    procedure Init(Char: Word; const AFontName: String; ACharset: TFontCharset);
    procedure GetInfo(var Char: Word; var AFontName: String; var ACharset: TFontCharset);
    procedure SetOptions(AllowUnicode, AllowANSI, UseBlocks: Boolean);
    procedure Localize; override;
  end;


implementation

uses math; // for Min()

{$R *.dfm}

//See - ftp://ftp.unicode.org/Public/UNIDATA/blocks.txt

type
  uniblock = record 
               s,e : Integer; 
               n   : string; 
  end; 

const 
  blocks     = 121; 
  uniblocks  : array[0..blocks] OF uniblock = ( 
                                              (s:$0020;e:$FFFF;n:'All'), 
                                              (s:$0020;e:$007F;n:'Basic Latin'),
                                              (s:$0080;e:$00FF;n:'Latin-1 Supplement'), 
                                              (s:$0100;e:$017F;n:'Latin Extended-A'), 
                                              (s:$0180;e:$024F;n:'Latin Extended-B'), 
                                              (s:$0250;e:$02AF;n:'IPA Extensions'), 
                                              (s:$02B0;e:$02FF;n:'Spacing Modifier Letters'), 
                                              (s:$0300;e:$036F;n:'Combining Diacritical Marks'), 
                                              (s:$0370;e:$03FF;n:'Greek and Coptic'), 
                                              (s:$0400;e:$04FF;n:'Cyrillic'), 
                                              (s:$0500;e:$052F;n:'Cyrillic Supplement'), 
                                              (s:$0530;e:$058F;n:'Armenian'), 
                                              (s:$0590;e:$05FF;n:'Hebrew'), 
                                              (s:$0600;e:$06FF;n:'Arabic'), 
                                              (s:$0700;e:$074F;n:'Syriac'), 
                                              (s:$0750;e:$077F;n:'Arabic Supplement'), 
                                              (s:$0780;e:$07BF;n:'Thaana'), 
                                              (s:$0900;e:$097F;n:'Devanagari'), 
                                              (s:$0980;e:$09FF;n:'Bengali'), 
                                              (s:$0A00;e:$0A7F;n:'Gurmukhi'), 
                                              (s:$0A80;e:$0AFF;n:'Gujarati'), 
                                              (s:$0B00;e:$0B7F;n:'Oriya'), 
                                              (s:$0B80;e:$0BFF;n:'Tamil'), 
                                              (s:$0C00;e:$0C7F;n:'Telugu'), 
                                              (s:$0C80;e:$0CFF;n:'Kannada'), 
                                              (s:$0D00;e:$0D7F;n:'Malayalam'),
                                              (s:$0D80;e:$0DFF;n:'Sinhala'), 
                                              (s:$0E00;e:$0E7F;n:'Thai'), 
                                              (s:$0E80;e:$0EFF;n:'Lao'), 
                                              (s:$0F00;e:$0FFF;n:'Tibetan'), 
                                              (s:$1000;e:$109F;n:'Myanmar'), 
                                              (s:$10A0;e:$10FF;n:'Georgian'), 
                                              (s:$1100;e:$11FF;n:'Hangul Jamo'), 
                                              (s:$1200;e:$137F;n:'Ethiopic'), 
                                              (s:$1380;e:$139F;n:'Ethiopic Supplement'), 
                                              (s:$13A0;e:$13FF;n:'Cherokee'), 
                                              (s:$1400;e:$167F;n:'Unified Canadian Aboriginal Syllabics'), 
                                              (s:$1680;e:$169F;n:'Ogham'), 
                                              (s:$16A0;e:$16FF;n:'Runic'), 
                                              (s:$1700;e:$171F;n:'Tagalog'), 
                                              (s:$1720;e:$173F;n:'Hanunoo'), 
                                              (s:$1740;e:$175F;n:'Buhid'), 
                                              (s:$1760;e:$177F;n:'Tagbanwa'), 
                                              (s:$1780;e:$17FF;n:'Khmer'), 
                                              (s:$1800;e:$18AF;n:'Mongolian'), 
                                              (s:$1900;e:$194F;n:'Limbu'), 
                                              (s:$1950;e:$197F;n:'Tai Le'), 
                                              (s:$1980;e:$19DF;n:'New Tai Lue'), 
                                              (s:$19E0;e:$19FF;n:'Khmer Symbols'), 
                                              (s:$1A00;e:$1A1F;n:'Buginese'), 
                                              (s:$1D00;e:$1D7F;n:'Phonetic Extensions'), 
                                              (s:$1D80;e:$1DBF;n:'Phonetic Extensions Supplement'), 
                                              (s:$1DC0;e:$1DFF;n:'Combining Diacritical Marks Supplement'), 
                                              (s:$1E00;e:$1EFF;n:'Latin Extended Additional'), 
                                              (s:$1F00;e:$1FFF;n:'Greek Extended'), 
                                              (s:$2000;e:$206F;n:'General Punctuation'), 
                                              (s:$2070;e:$209F;n:'Superscripts and Subscripts'), 
                                              (s:$20A0;e:$20CF;n:'Currency Symbols'), 
                                              (s:$20D0;e:$20FF;n:'Combining Diacritical Marks for Symbols'), 
                                              (s:$2100;e:$214F;n:'Letterlike Symbols'),
                                              (s:$2150;e:$218F;n:'Number Forms'), 
                                              (s:$2190;e:$21FF;n:'Arrows'), 
                                              (s:$2200;e:$22FF;n:'Mathematical Operators'), 
                                              (s:$2300;e:$23FF;n:'Miscellaneous Technical'), 
                                              (s:$2400;e:$243F;n:'Control Pictures'), 
                                              (s:$2440;e:$245F;n:'Optical Character Recognition'), 
                                              (s:$2460;e:$24FF;n:'Enclosed Alphanumerics'), 
                                              (s:$2500;e:$257F;n:'Box Drawing'), 
                                              (s:$2580;e:$259F;n:'Block Elements'), 
                                              (s:$25A0;e:$25FF;n:'Geometric Shapes'), 
                                              (s:$2600;e:$26FF;n:'Miscellaneous Symbols'), 
                                              (s:$2700;e:$27BF;n:'Dingbats'), 
                                              (s:$27C0;e:$27EF;n:'Miscellaneous Mathematical Symbols-A'), 
                                              (s:$27F0;e:$27FF;n:'Supplemental Arrows-A'), 
                                              (s:$2800;e:$28FF;n:'Braille Patterns'), 
                                              (s:$2900;e:$297F;n:'Supplemental Arrows-B'), 
                                              (s:$2980;e:$29FF;n:'Miscellaneous Mathematical Symbols-B'), 
                                              (s:$2A00;e:$2AFF;n:'Supplemental Mathematical Operators'), 
                                              (s:$2B00;e:$2BFF;n:'Miscellaneous Symbols and Arrows'), 
                                              (s:$2C00;e:$2C5F;n:'Glagolitic'), 
                                              (s:$2C80;e:$2CFF;n:'Coptic'), 
                                              (s:$2D00;e:$2D2F;n:'Georgian Supplement'), 
                                              (s:$2D30;e:$2D7F;n:'Tifinagh'), 
                                              (s:$2D80;e:$2DDF;n:'Ethiopic Extended'), 
                                              (s:$2E00;e:$2E7F;n:'Supplemental Punctuation'), 
                                              (s:$2E80;e:$2EFF;n:'CJK Radicals Supplement'), 
                                              (s:$2F00;e:$2FDF;n:'Kangxi Radicals'), 
                                              (s:$2FF0;e:$2FFF;n:'Ideographic Description Characters'), 
                                              (s:$3000;e:$303F;n:'CJK Symbols and Punctuation'), 
                                              (s:$3040;e:$309F;n:'Hiragana'), 
                                              (s:$30A0;e:$30FF;n:'Katakana'), 
                                              (s:$3100;e:$312F;n:'Bopomofo'), 
                                              (s:$3130;e:$318F;n:'Hangul Compatibility Jamo'), 
                                              (s:$3190;e:$319F;n:'Kanbun'),
                                              (s:$31A0;e:$31BF;n:'Bopomofo Extended'), 
                                              (s:$31C0;e:$31EF;n:'CJK Strokes'), 
                                              (s:$31F0;e:$31FF;n:'Katakana Phonetic Extensions'), 
                                              (s:$3200;e:$32FF;n:'Enclosed CJK Letters and Months'), 
                                              (s:$3300;e:$33FF;n:'CJK Compatibility'), 
                                              (s:$3400;e:$4DBF;n:'CJK Unified Ideographs Extension A'), 
                                              (s:$4DC0;e:$4DFF;n:'Yijing Hexagram Symbols'), 
                                              (s:$4E00;e:$9FFF;n:'CJK Unified Ideographs'), 
                                              (s:$A000;e:$A48F;n:'Yi Syllables'), 
                                              (s:$A490;e:$A4CF;n:'Yi Radicals'), 
                                              (s:$A700;e:$A71F;n:'Modifier Tone Letters'), 
                                              (s:$A800;e:$A82F;n:'Syloti Nagri'), 
                                              (s:$AC00;e:$D7AF;n:'Hangul Syllables'), 
                                              (s:$D800;e:$DB7F;n:'High Surrogates'), 
                                              (s:$DB80;e:$DBFF;n:'High Private Use Surrogates'), 
                                              (s:$DC00;e:$DFFF;n:'Low Surrogates'), 
                                              (s:$E000;e:$F8FF;n:'Private Use Area'), 
                                              (s:$F900;e:$FAFF;n:'CJK Compatibility Ideographs'), 
                                              (s:$FB00;e:$FB4F;n:'Alphabetic Presentation Forms'), 
                                              (s:$FB50;e:$FDFF;n:'Arabic Presentation Forms-A'), 
                                              (s:$FE00;e:$FE0F;n:'Variation Selectors'), 
                                              (s:$FE10;e:$FE1F;n:'Vertical Forms'), 
                                              (s:$FE20;e:$FE2F;n:'Combining Half Marks'),
                                              (s:$FE30;e:$FE4F;n:'CJK Compatibility Forms'), 
                                              (s:$FE50;e:$FE6F;n:'Small Form Variants'), 
                                              (s:$FE70;e:$FEFF;n:'Arabic Presentation Forms-B'), 
                                              (s:$FF00;e:$FFEF;n:'Halfwidth and Fullwidth Forms'), 
                                              (s:$FFF0;e:$FFFF;n:'Specials')); 

procedure TfrmRVInsertSymbol.FormCreate(Sender: TObject); 
var 
  i: Integer; 
begin 
  _btnOk := btnOk;
  _lblCharset := lblCharset;
  _lblBlock := lblBlock; 

  Offset:=$0020; 
  Endpos:=$FFFF; 

//unicode blocks 
  cmbBlock.Items.BeginUpdate; 
  cmbBlock.Clear; 
  for i:=0 to blocks do 
    cmbBlock.Items.Add(uniblocks[i].n); 
  cmbBlock.ItemIndex:=0; 
  cmbBlock.Items.EndUpdate; 

  inherited; 
  // defaults are not needed 
  //dg.DefaultColWidth := (dg.Width-4-GetSystemMetrics(SM_CXVSCROLL)) div (dg.ColCount+1); 
  //dg.DefaultRowHeight := (dg.ClientHeight) div (dg.RowCount+1); 
  //dg.Height := dg.RowCount*(dg.DefaultRowHeight+1)+(dg.Height-dg.ClientHeight); 

  Panel := TZoomPanel.Create(Self); 
  Panel.Parent := Self; 
  Panel.Visible := False; 

  Init(183, 'Symbol', SYMBOL_CHARSET);
  Label1.Font.Style := [fsBold];
end;

procedure TfrmRVInsertSymbol.Init(Char: Word; const AFontName: String; 

⌨️ 快捷键说明

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