我要写一个sql 编辑器,请问sql语言的高亮显示如何实现~?下载了synedit 和mwedit 两个控件,都是由原码的,但是,懒得看,请问那位高手做过相应的东西,请指教。
解决方案 »
- delphi + access 登陆模块的密码修改
- 寻找能显示gif格式的OpenPictureDialog类的控件
- FR做的报表中:打印时,单击windows桌面的右下角图标弹出......
- delphi7的code_complete用不了了,请帮忙
- 我是初學Delphi6。有幾個問题想請教一下各位!
- 高手帮忙??
- 请问delphi中有没有直接把秒数转化成时间格式的函数?
- 如何监控一个数据库文件(eg:Paradox),当它被改动时,应用程序能将更新处理后保存到另一个数据库(eg:sybase)中?
- 文件传送
- 怎样将DLL程序作成EXE,我试了,用COMPILE和BUILD都不行(运行时HOST APPLICATION要用)
- 能下载成功delphi6.0企业版的网站到哪找?
- 关于memo和textarea,高手赐教
下面的代码将以指定颜色对一些指定单词着色 ,就象 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;