woawn 发表于 2012-6-13 19:55:35

怎样把dephi的关键字高亮

怎样把dephi的关键字高亮

aminghanhua 发表于 2012-6-13 19:55:36

在   RichEdit   中实现代码着色

贴给你好了,我找到的,试过,很好使。
--------------------------------------
在   RichEdit   中实现代码着色

下面的代码将以指定颜色对一些指定单词着色,就象delphi中的代码编辑器那样。procedure   CodeColors(Form   :   TForm;Style   :   String;   RichE   :   TRichedit;
                                                InVisible   :   Boolean);   
const   
    //   符号...   
    CodeC1:   array   of   String   =   ( '# ', '$ ', '( ', ') ', '* ', ', ',   
                  '. ', '/ ', ': ', '; ', '[ ', '] ', '{ ', '} ', ' < ', '> ',   
                  '- ', '= ', '+ ', ' ' ' ', '@ ');   
    //   保留字...   
    CodeC2:   array   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      ONLY!   } ';   
            Lines.Insert(0,T);   
            StartPos   :=   0;   
            ToEnd   :=   Length(Text)   -   StartPos;   
            FoundAt   :=   FindText(T,   StartPos,   ToEnd,   );   
            SelStart   :=   FoundAt;   
            SelLength   :=   Length(T);   
            SelAttributes.Color   :=   clRed;   
            SelAttributes.Style   :=   ;   
            StartPos   :=   0;   
            ToEnd   :=   Length(Text)   -   StartPos;   
            FoundAt   :=   FindText( 'ONLY! ',   StartPos,   ToEnd,   );   
            SelStart   :=   FoundAt;   
            SelLength   :=   4;   
            SelAttributes.Color   :=   clRed;   
            SelAttributes.Style   :=   ;   
      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,   );   
            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,   );   
            end;   
      end;   
    end;   
    for   i   :=   0   to   20   do   
    begin   
      with   RichE   do   
      begin   
            StartPos   :=   0;   
            ToEnd   :=   Length(Text)   -   StartPos;   
            FoundAt   :=   FindText(CodeC1,   StartPos,   ToEnd,   []);   
            while   (FoundAt   <>   -1)   do   
            begin   
                SelStart   :=   FoundAt;   
                SelLength   :=   Length(CodeC1);   
                SelAttributes.Color   :=   C2;   
                StartPos   :=   FoundAt   +   Length(CodeC1);   
                FoundAt   :=   FindText(CodeC1,   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,   StartPos,   ToEnd,   );   
            while   (FoundAt   <>   -1)   do   
            begin   
                SelStart   :=   FoundAt;   
                SelLength   :=   Length(CodeC2);   
                SelAttributes.Color   :=   C3;   
                SelAttributes.Style   :=   ;   
                StartPos   :=   FoundAt   +   Length(CodeC2);   
                FoundAt   :=   FindText(CodeC2,   StartPos,   ToEnd,   );   
            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;

woawn 发表于 2012-6-13 19:56:07

真是被催啊大家帮帮忙啊

woawn 发表于 2012-6-16 22:32:18

aminghanhua 发表于 2012-6-15 15:38 static/image/common/back.gif
在   RichEdit   中实现代码着色

贴给你好了,我找到的,试过,很好使。


我问一个傻B的问题哈这个richedit   在哪里啊,怎样实现它啊,俺是新手

aminghanhua 发表于 2012-6-17 12:18:48

我问一个傻B的问题哈这个richedit   在哪里啊,怎样实现它啊,俺是新手
在Delphi里搜索组件啊 win32选项卡里 小甲鱼最新讲解的记事本用的就是她

woawn 发表于 2012-6-17 15:44:09

哎算了不会搞啊,哈哈谢谢了给你分

qidaoshen 发表于 2014-3-16 01:53:26

看一看 看一看
页: [1]
查看完整版本: 怎样把dephi的关键字高亮