鱼C论坛

 找回密码
 立即注册
查看: 3112|回复: 6

怎样把dephi的关键字高亮

[复制链接]
发表于 2012-6-13 19:55:35 | 显示全部楼层 |阅读模式
1鱼币
怎样把dephi的关键字高亮

最佳答案

查看完整内容

在 RichEdit 中实现代码着色 贴给你好了,我找到的,试过,很好使。 -------------------------------------- 在 RichEdit 中实现代码着色 下面的代码将以指定颜色对一些指定单词着色,就象delphi中的代码编辑器那样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-13 19:55:36 | 显示全部楼层
在   RichEdit   中实现代码着色

贴给你好了,我找到的,试过,很好使。
--------------------------------------
在   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;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-13 19:56:07 | 显示全部楼层
真是被催啊大家帮帮忙啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-16 22:32:18 | 显示全部楼层

我问一个傻B的问题哈这个richedit   在哪里啊,怎样实现它啊,俺是新手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-6-17 12:18:48 | 显示全部楼层
我问一个傻B的问题哈这个richedit   在哪里啊,怎样实现它啊,俺是新手

在Delphi里搜索组件啊 win32选项卡里 小甲鱼最新讲解的记事本用的就是她
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-17 15:44:09 | 显示全部楼层
哎算了不会搞啊,哈哈谢谢了给你分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-3-16 01:53:26 | 显示全部楼层
看一看 看一看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 04:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表