关于drawgrid的两个小问题

时间:2022-02-25 13:59:32
大家好,我用drawgrid做了两件事,应该都是简单的问题,但是我不知道要怎么解决:
   1.一个文字的显示,将文字象素在drawgrid对应的行和列上用颜色填充显示出来,这样显示出的文字就是由一格一格组成的。
   2.设置好颜色,点击drawgrid的一格就改变这一格的颜色。
   但是现在关于drawgrid有两个问题
   1.在上面的1中,由于drawgrid设置的比较大,显示完文字后用滚动条滚动后遮盖住的部分再滚动出来时文字就被擦除了,这是什么原因,要如何解决?
procedure TForm1.Button1Click(Sender: TObject);
var
  I,J,col,row:Integer; //J:文字的高度,I:文字的宽度
  S:string;
begin
   Image1.Picture.Assign(nil);
   Image1.Canvas.Font.Assign(Edit1.Font);
   Image1.Picture.Bitmap.Width:=Image1.Canvas.TextWidth(Edit1.Text);
   Image1.Picture.Bitmap.Height:=Image1.Canvas.TextHeight(Edit1.Text);
   Image1.Canvas.TextOut(0,0,Edit1.Text);
    for J:=0 to Image1.Picture.Bitmap.Height-1 do                 //逐行扫描,在drawgrid中显示文字
     begin
       DrawGrid1.canvas.Brush.Color:=ColorGrid1.ForegroundColor;  //选择颜色
       for I:=0 to Image1.Picture.Bitmap.Width-1 do
        if Image1.Picture.Bitmap.Canvas.Pixels[I,J]= clBlack then
        begin
        col:=I;
        row:=J+(DrawGrid1.RowCount div 2)-9;   //文字居中
        DrawGrid1.Canvas.FillRect(DrawGrid1.cellrect(col,row));
       end;
    end;
    end;

   2.在上面的2中,我写的程序如下:
procedure TForm1.DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
var
 r,c:integer;
begin
 DrawGrid1.canvas.Brush.Color:=colorgrid1.ForegroundColor;//选择颜色
 DrawGrid1.MouseToCell(x,y,c,r);
 edit1.Text:=intTostr(r+1);//用edit1来显示选择的行数
 edit2.Text:=intTostr(c+1);//用edit1来显示选择的列数
 DrawGrid1.Canvas.FillRect(DrawGrid1.cellrect( c,r)); //填充颜色
end;
   可是运行后要点击栅格两下才填充颜色,并且点击第二个栅格后原来的就不见了,可是如果将上面的DrawGrid1.Canvas.FillRect(DrawGrid1.cellrect(c,r));中的(c,r)改为(r,c),并且似乎只要不是(c,r)就不会这样,但是填充的就不是选择的那个栅格。这是什么原因?如何才能实现我想要的效果呢?







5 个解决方案

#1


帮你顶起

#2


谢谢楼上帮顶
可是没人来帮忙吗?

#3


    对于第一个问题,我在Ondrawcell里将Button1Click里的程序重新粘了一次,第一个问题倒是解决了,不过觉得办法有点笨,不知道还有没有好办法
    希望高手来解决下第二个问题啊

#4


两个问题由同一个原因引起
  在Ondrawcell写代码,两个问题都能解决。注意ondrawcell里的程序是控制当前重绘的某"一"个单元格。

#5


幫樓上的頂起

#1


帮你顶起

#2


谢谢楼上帮顶
可是没人来帮忙吗?

#3


    对于第一个问题,我在Ondrawcell里将Button1Click里的程序重新粘了一次,第一个问题倒是解决了,不过觉得办法有点笨,不知道还有没有好办法
    希望高手来解决下第二个问题啊

#4


两个问题由同一个原因引起
  在Ondrawcell写代码,两个问题都能解决。注意ondrawcell里的程序是控制当前重绘的某"一"个单元格。

#5


幫樓上的頂起