//你发的帖子都没有结帐!这样可不好,如果不会给分我可以帮你?如何读取和存放颜色(zql0913) 50 6 5-15 09:22 管理
?自己做个SQL编辑器(zql0913) 50 0 5-15 09:10 管理
?在TRichEdit中如何改变字体的颜色并可以继续输入(zql0913) 50 1 5-13 16:48 管理
?如何在一个字符串分割字符(zql0913) 20 10 5-13 15:17 管理
?如何将DBF文件的记录作物理删除!!!(zql0913) 20 2 4-28 23:10 管理
?如何将ORACLE中的表导出成DBF!!(zql0913) 100 0 4-28 17:34 管理
?关于TreeView的图标问题(zql0913) 20 5 4-5 19:05 管理
?有关本地时间的问题(zql0913) 50 8 4-4 13:03 管理
?如何自己制作编译器!(zql0913) 100 6 3-28 10:40 管理
?关于证件打印机的问题!!!(zql0913) 20 1 3-19 15:12 管理
?关于专用打印机指令问题!!!(zql0913) 50 0 3-18 17:58 管理
?如何使用Printer打印出TShape(zql0913) 50 3 3-16 14:49 管理
?关于TreeView取结点TEXT问题!(zql0913) 20 4 3-10 20:36 管理
?取TEXT文件行的文字!(zql0913) 20 3 3-7 18:17 管理
?剪切板复制的问题(zql0913) 20 2 3-5 22:56 管理
?ORACLE表的问题(zql0913) 20 5 3-5 19:56 管理
?关于数据类型的问题!!!(zql0913) 20 1 3-4 19:01 管理
?关于如果取TMENO行数(zql0913) 20 2 2-11 21:37 管理
?怎样打开文件(zql0913) 20 4 1-25 16:16 管理
?两个小问题!!!(zql0913) 40 3 1-25 10:35 管理
?关于制作压缩软件(zql0913) 50 6 1-11 16:00 管理
?设置鼠标样式问题(zql0913) 20 4 12-13 08:43 管理
?关于ListView的问题2222(zql0913) 20 3 11-11 12:58 管理
?Delphi初学者请教循环问题!详情请进,重谢!(zql0913) 50 7 10-9 18:35 管理
?数据库连接问题??????(zql0913) 20 2 9-15 11:28 管理
rPB-Delphi(zql0913) 0 2 9-12 09:28 管理
?初学者提问!!(zql0913) 22 2 8-26 13:55 管理
27篇
?自己做个SQL编辑器(zql0913) 50 0 5-15 09:10 管理
?在TRichEdit中如何改变字体的颜色并可以继续输入(zql0913) 50 1 5-13 16:48 管理
?如何在一个字符串分割字符(zql0913) 20 10 5-13 15:17 管理
?如何将DBF文件的记录作物理删除!!!(zql0913) 20 2 4-28 23:10 管理
?如何将ORACLE中的表导出成DBF!!(zql0913) 100 0 4-28 17:34 管理
?关于TreeView的图标问题(zql0913) 20 5 4-5 19:05 管理
?有关本地时间的问题(zql0913) 50 8 4-4 13:03 管理
?如何自己制作编译器!(zql0913) 100 6 3-28 10:40 管理
?关于证件打印机的问题!!!(zql0913) 20 1 3-19 15:12 管理
?关于专用打印机指令问题!!!(zql0913) 50 0 3-18 17:58 管理
?如何使用Printer打印出TShape(zql0913) 50 3 3-16 14:49 管理
?关于TreeView取结点TEXT问题!(zql0913) 20 4 3-10 20:36 管理
?取TEXT文件行的文字!(zql0913) 20 3 3-7 18:17 管理
?剪切板复制的问题(zql0913) 20 2 3-5 22:56 管理
?ORACLE表的问题(zql0913) 20 5 3-5 19:56 管理
?关于数据类型的问题!!!(zql0913) 20 1 3-4 19:01 管理
?关于如果取TMENO行数(zql0913) 20 2 2-11 21:37 管理
?怎样打开文件(zql0913) 20 4 1-25 16:16 管理
?两个小问题!!!(zql0913) 40 3 1-25 10:35 管理
?关于制作压缩软件(zql0913) 50 6 1-11 16:00 管理
?设置鼠标样式问题(zql0913) 20 4 12-13 08:43 管理
?关于ListView的问题2222(zql0913) 20 3 11-11 12:58 管理
?Delphi初学者请教循环问题!详情请进,重谢!(zql0913) 50 7 10-9 18:35 管理
?数据库连接问题??????(zql0913) 20 2 9-15 11:28 管理
rPB-Delphi(zql0913) 0 2 9-12 09:28 管理
?初学者提问!!(zql0913) 22 2 8-26 13:55 管理
27篇
//要处理SQL语法相信你自己可以修改完成unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
procedure RichEdit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}uses
RichEdit;const
cReservedWordCount = 65; //保留字数量
cReservedWords: array[0..Pred(cReservedWordCount)] of string = //保留字列表
(
'and', 'array', 'as', 'asm',
'begin', 'case', 'class', 'const',
'constructor', 'destructor', 'dispinterface', 'div',
'do', 'downto', 'else', 'end',
'except', 'exports', 'file', 'finalization',
'finally', 'for', 'function', 'goto',
'if', 'implementation', 'in', 'inherited',
'initialization', 'inline', 'interface', 'is',
'label', 'library', 'mod', 'nil',
'not', 'object', 'of', 'or',
'out', 'packed', 'procedure', 'program',
'property', 'raise', 'record', 'repeat',
'resourcestring', 'set', 'shl', 'shr',
'string', 'then', 'threadvar', 'to',
'try', 'type', 'unit', 'until',
'uses', 'var', 'while', 'with',
'xor'
); cDirectiveCount = 39; //指示字数量
cDirectives: array [0..Pred(cDirectiveCount)] of string = //指示字列表
(
'absolute', 'abstract', 'assembler', 'automated',
'cdecl', 'contains', 'default', 'dispid',
'dynamic', 'export', 'external', 'far',
'forward', 'implements', 'index', 'message',
'name', 'near', 'nodefault', 'overload',
'override', 'package', 'pascal', 'private',
'protected', 'public', 'published', 'read',
'readonly', 'register', 'reintroduce', 'requires',
'resident', 'safecall', 'stdcall', 'stored',
'virtual', 'write', 'writeonly'
);function ReservedWordIndex(mStr: string): Integer; { 返回保留字的相对序号 }
var
I: Integer;
begin
Result := -1;
for I := 0 to Pred(cReservedWordCount) do
if SameText(cReservedWords[I], mStr) then begin
Result := I;
Break;
end;
end; { ReservedWordIndex }function DirectiveIndex(mStr: string): Integer; { 返回指示字的相对序号 }
var
I: Integer;
begin
Result := -1;
for I := 0 to Pred(cDirectiveCount) do
if SameText(cDirectives[I], mStr) then begin
Result := I;
Break;
end;
end; { DirectiveIndex }procedure TForm1.RichEdit1Change(Sender: TObject);
var
S: string;
T: string;
I, J, L: Integer;
vSelStart: Integer;
vSelLength: Integer;
E: Extended;
begin
S := TRichEdit(Sender).Text;
if S = '' then Exit;
L := Length(S);
J := 1;
TRichEdit(Sender).Perform(EM_HIDESELECTION, Longint(True), 0);
vSelStart := TRichEdit(Sender).SelStart;
vSelLength := TRichEdit(Sender).SelLength;
TRichEdit(Sender).SelStart := J - 1;
TRichEdit(Sender).SelLength := L - (J - 1);
TRichEdit(Sender).SelAttributes.Color := clWindowText;
TRichEdit(Sender).SelAttributes.Style := [];
while J <= L do begin
T := '';
for I := J to L do
if S[I] in ['a'..'z', '0'..'9', 'A'..'Z', '_'] then
T := T + S[I]
else Break;
if T <> '' then begin
TRichEdit(Sender).SelStart := J - 1;
TRichEdit(Sender).SelLength := Length(T);
if (ReservedWordIndex(T) >= 0) or (DirectiveIndex(T) >= 0) then begin //保留字
TRichEdit(Sender).SelAttributes.Color := clWindowText;
TRichEdit(Sender).SelAttributes.Style := [fsBold];
end else if TryStrToFloat(T, E) then begin //数字
TRichEdit(Sender).SelAttributes.Color := clRed;
TRichEdit(Sender).SelAttributes.Style := [fsBold];
end;
Inc(J, Length(T));
end else begin
if S[J] = '''' then begin
T := '''';
for I := J + 1 to L do
if S[I] in ['''', #13, #10] then begin
if S[I] = '''' then T := T + '''';
Break;
end else T := T + S[I];
if T <> '' then begin //字符
TRichEdit(Sender).SelStart := J - 1;
TRichEdit(Sender).SelLength := Length(T);
TRichEdit(Sender).SelAttributes.Color := clNavy;
TRichEdit(Sender).SelAttributes.Style := [fsBold, fsItalic];
Inc(J, Length(T));
end;
end else if S[J] = '#' then begin
T := '#';
for I := J + 1 to L do
if S[I] in ['$', '0'..'9', 'A'..'F', 'a'..'f'] then
T := T + S[I]
else Break;
if T <> '' then begin //字符
TRichEdit(Sender).SelStart := J - 1;
TRichEdit(Sender).SelLength := Length(T);
TRichEdit(Sender).SelAttributes.Color := clNavy;
TRichEdit(Sender).SelAttributes.Style := [fsBold, fsItalic];
Inc(J, Length(T));
end;
end else if Copy(S, J, 2) = '//' then begin
T := '//';
for I := J + 2 to L do
if S[I] in [#13, #10] then
Break
else T := T + S[I];
if T <> '' then begin //注释
TRichEdit(Sender).SelStart := J - 1;
TRichEdit(Sender).SelLength := Length(T);
TRichEdit(Sender).SelAttributes.Color := clNavy;
TRichEdit(Sender).SelAttributes.Style := [fsItalic];
Inc(J, Length(T));
end;
end else if S[J] = '{' then begin
T := '{';
for I := J + 1 to L do
if S[I] = '}' then begin
T := T + '}';
Break
end else T := T + S[I];
if T <> '' then begin //注释
TRichEdit(Sender).SelStart := J - 1;
TRichEdit(Sender).SelLength := Length(T);
TRichEdit(Sender).SelAttributes.Color := clNavy;
TRichEdit(Sender).SelAttributes.Style := [fsItalic];
Inc(J, Length(T));
end;
end else if Copy(S, J, 2) = '(*' then begin
T := '(*';
for I := J + 2 to L do
if Copy(S, I, 2) = '*)' then begin
T := T + '*)';
Break;
end else T := T + S[I];
if T <> '' then begin //注释
TRichEdit(Sender).SelStart := J - 1;
TRichEdit(Sender).SelLength := Length(T);
TRichEdit(Sender).SelAttributes.Color := clNavy;
TRichEdit(Sender).SelAttributes.Style := [fsItalic];
Inc(J, Length(T));
end;
end;
end;
if T = '' then Inc(J);
end;
TRichEdit(Sender).SelStart := vSelStart;
TRichEdit(Sender).SelLength := vSelLength;
TRichEdit(Sender).Perform(EM_HIDESELECTION, Longint(False), 0);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
RichEdit1.Font.Name := 'Courier New';
RichEdit1.Font.Size := 10;
RichEdit1.Lines.Text :=
'(* 没有语法分析并且处理速度太慢 *)'#13#10 +
'function ReservedWordIndex(mStr: string): Integer; { 返回保留字的相对序号 }'#13#10 +
'var'#13#10 +
' I: Integer;'#13#10 +
'begin'#13#10 +
' Result := -1;'#13#10 +
' for I := 0 to Pred(cReservedWordCount) do'#13#10 +
' if SameText(cReservedWords[I], mStr) then begin'#13#10 +
' Result := I;'#13#10 +
' Break;'#13#10 +
' end;'#13#10 +
'end; { ReservedWordIndex }'#13#10;
end;end.