WEB开发网
开发学院软件开发Delphi 语法高亮 阅读

语法高亮

 2006-02-04 13:31:12 来源:WEB开发网   
核心提示:在 RichEdit 中实现代码着色下面的代码将以指定颜色对一些指定单词着色,就象delphi中的代码编辑器那样,语法高亮, PRocedure CodeColors(Form : TForm;Style : String; RichE : TRichedit; InVi

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

Tags:语法 高亮

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接