DrawGrid1.Canvas.Brush.Color不可在程序中赋值吗?(50分)

  • 主题发起人 主题发起人 chen_ke
  • 开始时间 开始时间
C

chen_ke

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中这样写:
DrawGrid1.Canvas.Brush.Color:=color2;//color2是变量,之前
DrawGrid1.Canvas.Brush.Color的值是另一个变量color1赋给的,
我调试时看到color2有一个数值,而 DrawGrid1.Canvas.Brush.Color
是这样的: DrawGrid1.Canvas.Brush.Color=variable 'self'
inaccessible here due to optimization.怎么回事?
 
要取得DrawGrid1中的任一单元格的颜色应该怎样写?
 
不会吧?DrawGrid的Canvas.Brush.Color又不是只读的,仔细检查一下你的代码
有没有问题。
 
没错!
属性没有问题,也不是只读的。
这是DELPHI的问题。
有时候某些变量突然在调试中不可访问,我碰到很多次了。
也找不出理由。
后来没有办法,只好用SHOWMESSAGE将它显示出来。
 
你自己不知道是什么颜色?不明白你的意思.
 
To yck:
>>有时候某些变量突然在调试中不可访问
>>后来没有办法,只好用SHOWMESSAGE将它显示出来
 这是因为Delphi编译时把你没用到的变量给优化掉了,就象chen_ke遇到的
 “variable 'self'inaccessible here due to optimization”,
 而你用ShowMessage把它显示出来,用到了这个变量,自然就不会被优化掉
 了.
不过Self被优化掉(???)我还是头一回听说。


To chen_ke:
 >>要取得DrawGrid1中的任一单元格的颜色
 不知你要做什么,要判断是否是选中的格子???我是瞎猜的:-)
 
设defaultdrawing为false试试.
 
给你段源程序:
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState);

var
index: integer;
begin
index := Row * DrawGrid1.ColCount + Col;
with Sender as TDrawGrid do
begin
Canvas.Brush.Color := clBackGround;
Canvas.FillRect(Rect);
ImageList1.Draw(Canvas,Rect.Left,Rect.Top,index);
if gdFocused in State then
Canvas.DrawFocusRect(Rect);
end;
end;
 
不可能这样,只有在wm_Paint消息处理函数中才能对设备变量赋值
我试了不过确实不能给每个单元改变颜色,请指教
 
to wwwjjjccc:
可以给每个单元改变颜色的.

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState);
begin
with Sender as TDrawGrid do
begin
// Colors: array[0..DrawGrid1.ColCount -1 ,
// 0..DrawGrid1.RowCount - 1] of TColor;

Canvas.Brush.Color := Colors[Col, Row];
Canvas.FillRect(Rect);
end;
end;
 
Delphi调试时确实会出现有些变量看不到结果的情况
但一般不影响程序的执行.
如果要给每一个Cell分配不同的颜色,用xWolf的方法
就可以了(xWolf用的是Delphi3吧Delphi4中Col, Row
是ACol,ARow)
如果想要得到每一个Cell的颜色可以用下面的方法
procedure TForm1.DrawGrid1Click(Sender: TObject);
var
v : TPoint;
begin
GetCursorPos(v);
Panel1.Color := DrawGrid1.Canvas.Pixels[v.x-Left,v.y-Top-20];
end;
Panel1是用来检验的.
 
我是在做图形学作业时遇到的问题,有关种子填充的,我用了drawgrid,每个网格
代表一个点,选中了一个种子时必须判断种子颜色与边界颜色是否相同,所以必须
得到任一个格的颜色,后来我找到一个方法,用得到坐标点颜色来得到网格颜色,
它们之间有一定的关系,但是这个关系很难确定,因为网格之间的网线本身就有长度。
只好尽量减少累计误差。
 
多人接受答案了。
 
后退
顶部