📄 inssymbolrvfrm.pas
字号:
{*******************************************************}
{ }
{ 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 + -