转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
语法高亮         ★★★★

语法高亮

作者:闵涛 文章来源:闵涛的学习笔记 点击数:719 更新时间:2009/4/23 18:43:55

 

在 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; 
 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台