语法高亮

来源:互联网 发布:mac怎么换管理员名字 编辑:程序博客网 时间:2024/04/30 16:58
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

 

在 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; 
 <script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击