各位好,我现在想做一个汇编语言的代码编辑器,要实现的功能很简单,就是要让编辑器中的关键字高亮显示。例如:我在编辑器中输入Mov ax,bx 其中"Mov"是保留字,就要高亮显示,或者改变它的颜色。请问这个怎么实现?最好有例子。谢谢!

解决方案 »

  1.   

    猛料里有个Delphi语法着色的代码换汤不换药把关键字换一下就行了
      

  2.   

    在下也是刚学DELPHI,delphi猛料的版本太多了,好像没发现阿。给个有效地址吧。或者把猛料里的代码贴出来也行。谢谢了!
      

  3.   

    在 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');varFoundAt : LongInt;StartPos, ToEnd, i : integer;OldCap,T : String;FontC, BackC, C1, C2 ,C3 ,strC, strC1 : TColor;beginOldCap := Form.Caption;with RichE dobeginFont.Name := 'Courier New';Font.Size := 10;if WordWrap then WordWrap := false;SelectAll;SelAttributes.color := clBlack;SelAttributes.Style := [];SelStart := 0;if InVisible thenbeginVisible := 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' thenbeginBackC := clBlack; FontC := clWhite;C1 := clLime; C2 := clSilver; C3 := clAqua;strC := clYellow; strC1 := clRed;endelseif Style = 'Default' thenbeginBackC := clWhite; FontC := clBlack;C1 := clTeal; C2 := clMaroon; C3 := clBlue;strC := clMaroon; strC1 := clSilver;endelseif Style = 'Ocean' thenbeginBackC := $00FFFF80; FontC := clBlack;C1 := clMaroon; C2 := clBlack; C3 := clBlue;strC := clTeal; strC1 := clBlack;endelseif Style = 'Classic' thenbeginBackC := clNavy; FontC := clYellow;C1 := clLime; C2 := clSilver; C3 := clWhite;strC := clAqua; strC1 := clSilver;endelsebeginwith RichE dobeginT := '{'+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 dobeginwith RichE dobeginStartPos := 0;ToEnd := Length(Text) - StartPos;FoundAt := FindText(IntToStr(i), StartPos, ToEnd, [stWholeWord]);while (FoundAt <> -1) dobeginSelStart := 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 dobeginwith RichE dobeginStartPos := 0;ToEnd := Length(Text) - StartPos;FoundAt := FindText(CodeC1[i], StartPos, ToEnd, []);while (FoundAt <> -1) dobeginSelStart := 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 dobeginwith RichE dobeginStartPos := 0;ToEnd := Length(Text) - StartPos;FoundAt := FindText(CodeC2[i], StartPos, ToEnd, [stWholeWord]);while (FoundAt <> -1) dobeginSelStart := 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 dobeginFoundAt := FindText('''', StartPos, Length(Text), []);while FoundAt <> -1 dobeginSelStart := FoundAt;Startpos := FoundAt+1;FoundAt := FindText('''', StartPos, Length(Text), []);if FoundAt <> -1 thenbeginSelLength := (FoundAt - selstart)+1;SelAttributes.Style := [];SelAttributes.Color := strC;StartPos := FoundAt+1;FoundAt := FindText('''', StartPos, Length(Text), []);end;end;end;Startpos := 0;with RichE dobeginFoundAt := FindText('{', StartPos, Length(Text), []);while FoundAt <> -1 dobeginSelStart := FoundAt;Startpos := FoundAt+1;FoundAt := FindText('}', StartPos, Length(Text), []);if FoundAt <> -1 thenbeginSelLength := (FoundAt - selstart)+1;SelAttributes.Style := [];SelAttributes.Color := strC1;StartPos := FoundAt+1;FoundAt := FindText('{', StartPos, Length(Text), []);end;end;end;if InVisible thenbeginRichE.Visible := True;Form.Caption := OldCap;end;RichE.SelStart := 0;end;