语法高亮
2008-04-10 02:58:12来源:互联网 阅读 ()
在 RichEdit 中实现代码着色
下面的代码将以指定颜色对一些指定单词着色,就象delphi中的代码编辑器那样。
procedure CodeColors(Form : TForm;Style : String; RichE : TRichedit; InVisible : Boolean); const // 符号... CodeC1: array[0..20] of String = (''''#'''',''''$'''',''''('''','''')'''',''''*'''','''','''', ''''.'''',''''/'''','''':'''','''';'''',''''['''','''']'''',''''{'''',''''}'''',''''<'''',''''>'''', ''''-'''',''''='''','''' '''','''''''''''''''',''''@''''); // 保留字... CodeC2: array[0..44] of String = (''''and'''',''''as'''',''''begin'''', ''''case'''',''''char'''',''''class'''',''''const'''',''''downto'''', ''''else'''',''''end'''',''''except'''',''''finally'''',''''for'''', ''''forward'''',''''function'''',''''if'''',''''implementation'''',''''interface'''', ''''is'''',''''nil'''',''''or'''',''''private'''',''''procedure'''',''''public'''',''''raise'''', ''''repeat'''',''''string'''',''''to'''',''''try'''',''''type'''',''''unit'''',''''uses'''',''''var'''', ''''while'''',''''external'''',''''stdcall'''',''''do'''',''''until'''',''''array'''',''''of'''', ''''in'''',''''shr'''',''''shl'''',''''cos'''',''''div''''); var FoundAt : LongInt; StartPos, ToEnd, i : integer; OldCap,T : String; FontC, BackC, C1, C2 ,C3 ,strC, strC1 : TColor; begin OldCap := Form.Caption; with RichE do begin Font.Name := ''''Courier New''''; Font.Size := 10; if WordWrap then WordWrap := false; SelectAll; SelAttributes.color := clBlack; SelAttributes.Style := []; SelStart := 0; if InVisible then begin Visible := False; Form.Caption := ''''Executing Code Coloring...''''; end; end; BackC := clWhite; FontC := clBlack; C1 := clBlack; C2 := clBlack; C3 := clBlack; strC := clBlue; strC1 := clSilver; if Style = ''''Twilight'''' then begin BackC := clBlack; FontC := clWhite; C1 := clLime; C2 := clSilver; C3 := clAqua; strC := clYellow; strC1 := clRed; end else if Style = ''''Default'''' then begin BackC := clWhite; FontC := clBlack; C1 := clTeal; C2 := clMaroon; C3 := clBlue; strC := clMaroon; strC1 := clSilver; end else if Style = ''''Ocean'''' then begin BackC := $00FFFF80; FontC := clBlack; C1 := clMaroon; C2 := clBlack; C3 := clBlue; strC := clTeal; strC1 := clBlack; end else if Style = ''''Classic'''' then begin BackC := clNavy; FontC := clYellow; C1 := clLime; C2 := clSilver; C3 := clWhite; strC := clAqua; strC1 := clSilver; end else begin with RichE do begin T := ''''{'''' Style '''' = Invalid Style [Default,Classic,Twilight,Ocean] ONLY! }''''; Lines.Insert(0,T); StartPos := 0; ToEnd := Length(Text) - StartPos; FoundAt := FindText(T, StartPos, ToEnd, [stWholeWord]); SelStart := FoundAt; SelLength := Length(T); SelAttributes.Color := clRed; SelAttributes.Style := [fsBold]; StartPos := 0; ToEnd := Length(Text) - StartPos; FoundAt := FindText(''''ONLY!'''', StartPos, ToEnd, [stWholeWord]); SelStart := FoundAt; SelLength := 4; SelAttributes.Color := clRed; SelAttributes.Style := [fsBold,fsUnderLine]; end; end; RichE.SelectAll; RichE.color := BackC; RichE.SelAttributes.color := FontC; for i := 0 to 100 do begin with RichE do begin StartPos := 0; ToEnd := Length(Text) - StartPos; FoundAt := FindText(IntToStr(i), StartPos, ToEnd, [stWholeWord]); while (FoundAt <> -1) do begin SelStart := FoundAt; SelLength := Length(IntToStr(i)); SelAttributes.Color := C1; SelAttributes.Style := []; StartPos := FoundAt Length(IntToStr(i)); FoundAt := FindText(IntToStr(i), StartPos, ToEnd, [stWholeWord]); end; end; end; for i := 0 to 20 do begin with RichE do begin StartPos := 0; ToEnd := Length(Text) - StartPos; FoundAt := FindText(CodeC1[i], StartPos, ToEnd, []); while (FoundAt <> -1) do begin SelStart := FoundAt; SelLength := Length(CodeC1[i]); SelAttributes.Color := C2; StartPos := FoundAt Length(CodeC1[i]); FoundAt := FindText(CodeC1[i], StartPos, ToEnd, []); end; end; end; for i := 0 to 44 do begin with RichE do begin StartPos := 0; ToEnd := Length(Text) - StartPos; FoundAt := FindText(CodeC2[i], StartPos, ToEnd, [stWholeWord]); while (FoundAt <> -1) do begin SelStart := FoundAt; SelLength := Length(CodeC2[i]); SelAttributes.Color := C3; SelAttributes.Style := [fsBold]; StartPos := FoundAt Length(CodeC2[i]); FoundAt := FindText(CodeC2[i], StartPos, ToEnd, [stWholeWord]); end; end; end; Startpos := 0; with RichE do begin FoundAt := FindText('''''''''''''''', StartPos, Length(Text), []); while FoundAt <> -1 do begin SelStart := FoundAt; Startpos := FoundAt 1; FoundAt := FindText('''''''''''''''', StartPos, Length(Text), []); if FoundAt <> -1 then begin SelLength := (FoundAt - selstart) 1; SelAttributes.Style := []; SelAttributes.Color := strC; StartPos := FoundAt 1; FoundAt := FindText('''''''''''''''', StartPos, Length(Text), []); end; end; end; Startpos := 0; with RichE do begin FoundAt := FindText(''''{'''', StartPos, Length(Text), []); while FoundAt <> -1 do begin SelStart := FoundAt; Startpos := FoundAt 1; FoundAt := FindText(''''}'''', StartPos, Length(Text), []); if FoundAt <> -1 then begin SelLength := (FoundAt - selstart) 1; SelAttributes.Style := []; SelAttributes.Color := strC1; StartPos := FoundAt 1; FoundAt := FindText(''''{'''', StartPos, Length(Text), []); end; end; end; if InVisible then begin RichE.Visible := True; Form.Caption := OldCap; end; RichE.SelStart := 0; end;标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有上一篇:用程序模拟键盘和鼠标键盘
相关文章
- 15款代码语法高亮工具,美化你的代码 2018-06-17
- 让UltraEdit也支持Delphi语法高亮 2008-04-09
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
热门词条最新资讯热门关注热门标签