TStringGrid组件中Cell内某一个字符的颜色如何改变? ( 积分: 200 )

  • 主题发起人 主题发起人 xiongdingfu_2
  • 开始时间 开始时间
X

xiongdingfu_2

Unregistered / Unconfirmed
GUEST, unregistred user!
各位专家:
在下学浅, 经年苦思,不得其解,盼不吝赐教,必铭感五内:TStringGrid组件中Cell内某一个字符的颜色如何改变?
例如:在StringGrid[3,23]格子里有一个字符串:'$a中国文学史$b电子资源$f费正清著',
如何将其中的'$'字符变成红色,其它的字符保持原来的颜色???
 
各位专家:
在下学浅, 经年苦思,不得其解,盼不吝赐教,必铭感五内:TStringGrid组件中Cell内某一个字符的颜色如何改变?
例如:在StringGrid[3,23]格子里有一个字符串:'$a中国文学史$b电子资源$f费正清著',
如何将其中的'$'字符变成红色,其它的字符保持原来的颜色???
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
sCell : string;
Index : Integer;
strStart : Integer;
L,T : Integer;
sOther : string;
sColor : string;
begin
sCell := StringGrid1.Cells[ACol,ARow];
Index := Pos('$',sCell);
strStart := 1;
if Index>0 then
begin
StringGrid1.Canvas.FillRect(Rect);
L := Rect.Left;
T := Rect.Top;
while Index>0 do
begin
sOther := Copy(sCell,strStart,Index-1);
stringGrid1.Canvas.Font.Color := clBlack;
stringGrid1.Canvas.TextOut(L,T,sOther);
L := L+stringGrid1.Canvas.TextWidth(sOther);
sColor := Copy(sCell,Index,Length('$'));
StringGrid1.Canvas.Font.Color := clRed;
StringGrid1.Canvas.TextOut(L,T,sColor);
L := L+stringGrid1.Canvas.TextWidth(sColor);
sCell := Copy(sCell,Index+Length(sColor),MaxInt);
Index := Pos('$',sCell);
end;
stringGrid1.Canvas.Font.Color := clBlack;
stringGrid1.Canvas.TextOut(L,T,sCell);
end;
end;
 
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
iWidth: Integer;
s: String;
oldColor: TColor;
begin
if (ACol <> 0 ) and (ARow <> 0) then
begin
s := TStringGrid(Sender).Cells[ACol, ARow];
iWidth := TStringGrid(Sender).Canvas.TextWidth(copy(s, 1, 1));
TStringGrid(Sender).Canvas.TextOut(Rect.Left + 1, Rect.Top + 2, s);
TStringGrid(Sender).Canvas.Font.Color := clRed;
TStringGrid(Sender).Canvas.TextOut(Rect.Left + iWidth + 2, Rect.Top + 2, copy(s, 2, 1));
end;
end;
楼主可以根据你自己的$ 的位置确定!
 
to :kk2000
你的方法好像有点问题哦,它会将同一列的和字符“$”同一个位置的字符颜色都变成红色了
 
多人接受答案了。
 

Similar threads

后退
顶部