怎么样才能使memo1中同一行的字有不同的颜色?请给出原码!谢谢!(50分)

  • 主题发起人 主题发起人 kenwoo
  • 开始时间 开始时间
K

kenwoo

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么样才能使memo1中同一行的字有不同的颜色?请给出原码!谢谢!
 
如果memo1本身没有这个功能呢?
 
如果memo没有这种功能,请给出其它有这种功能的控件,并给出原码!
 
richedit控件
richedit1.DefAttributes.color := clred;
richedit1.lines.add('asdfasdf');
 
怎么控制同一行中的字不同颜色呢,请给出原码!谢谢!
 
在 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 RichEdo

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 RichEdo

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 100do

begin

with RichEdo

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 20do

begin

with RichEdo

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 44do

begin

with RichEdo

begin

StartPos := 0;
ToEnd := Length(Text) - StartPos;
FoundAt := FindText(CodeC2, StartPos, ToEnd, [stWholeWord]);
while (FoundAt <> -1)do

begin

SelStart := FoundAt;
SelLength := Length(CodeC2);
SelAttributes.Color := C3;
SelAttributes.Style := [fsBold];
StartPos := FoundAt + Length(CodeC2);
FoundAt := FindText(CodeC2, StartPos, ToEnd, [stWholeWord]);
end;

end;

end;

Startpos := 0;
with RichEdo

begin

FoundAt := FindText('''', StartPos, Length(Text), []);
while FoundAt <> -1do

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 RichEdo

begin

FoundAt := FindText('{', StartPos, Length(Text), []);
while FoundAt <> -1do

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;

 
把你要改变颜色的字符选中,然后改变 SelAttributes.color
 
接受答案了.
 

Similar threads

D
回复
0
查看
923
DelphiTeacher的专栏
D
D
回复
0
查看
715
DelphiTeacher的专栏
D
D
回复
0
查看
676
DelphiTeacher的专栏
D
后退
顶部