如何在StringGrid的FixedRow的某个cell单位格中加入图片或者图标 (100分)

  • 主题发起人 主题发起人 流浪者_2008
  • 开始时间 开始时间

流浪者_2008

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在StringGrid的FixedRow的某个cell单位格中加入图片或者图标?请大虾指点!
 
在StringGrid 的 OnDrawCell事件中处理:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
b:TBitmap;
begin
b:=TBitmap.Create;
b.LoadFromFile('c:/windows/circles.bmp');
if (gdFixed in state) then
begin
stringgrid1.canvas.Draw(rect.left,rect.top,b);//画图只要这一行。
stringgrid1.font.color:=clWhite;
stringgrid1.font.size:=12;
stringgrid1.canvas.brush.Style :=bsClear;
stringgrid1.canvas.textout(rect.left+2,rect.top+2,'写的字');
end;
b.free;
end;

注意连接 OnDrawCell事件。
 
jsxjd,谢谢你给的范例,但是我只是想我点击了的FixedRow的某个Cell时,只在我点击的Cell里面出现图片,而不是FixedRow的全部Cell!
 
大虾们,帮帮忙呀,急!!!!SOS
 
在选择时间里面画
rect用cellrect函数得到
 
把你的条件改一下,默认情况下固定列是无法选中。
把上面的程序改一下,改成在当前行的因定列中显示图标。

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
b:TBitmap;
begin
b:=TBitmap.Create;
b.LoadFromFile('c:/windows/circles.bmp');
if (gdFixed in state) and (ARow=stringgrid1.row)then //这儿改一下
begin
stringgrid1.canvas.Draw(rect.left,rect.top,b);//画图只要这一行。
stringgrid1.font.color:=clWhite;
stringgrid1.font.size:=12;
stringgrid1.canvas.brush.Style :=bsClear;
stringgrid1.canvas.textout(rect.left+2,rect.top+2,'写的字');
end;
b.free;
end;

加个点击事件,用于刷新。
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
stringgrid1.refresh;
end;

不要再说不行!!!!!!!!!!!!!!
 
to jsxjd,不行呀,我需要的就是当我MouseDown StringGrid的FixedRow的Cell时,出现图片呀!
 
to yobdrow: 在选择时间里面画
rect用cellrect函数得到?如果实现呀,给个代码,OK?
 
大虾们,帮帮忙!
 
你到底是要最新点的有,还是以前点的也要有?说清楚,否则又不行。
另外,属性固定行的列(第一行的固定列)点了怎么办?
 
我是在我点击StringGrid的FixedRow的某个cell单元格时出现图片,同时也要排序,后面的我已经实现了
 
可以这样实现;
Var
VRow:VCol:integer;
IsClick:Boolean;
.
.
procedure TFrm_Browse.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
IsClick:=True;
end;

procedure TFrm_Browse.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
bmp:Tbitmap;
begin
if (StringGrid1.FixedRows<>0) and (IsClick=True) then
begin
if (ACol = VCol) and (ARow= VRow) then
begin
bmp := tbitmap.Create;
imagelist1.GetBitmap(0,bmp);
StringGrid1.canvas.Draw(Rect.Right-bmp.Width ,Rect.Top,bmp);
或者
StringGrid1.canvas.Draw(Rect.Left.Width ,Rect.Top,bmp);
end;
end;
end;
 
对了, 你只是在FixedRow上,请将ARow= VRow改为ARow=0
 
谢谢了!
 
后退
顶部