我在一个Listbox的Item上用Pen画了一条线,如何去掉这条线。画线的代码如下procedure TForm1.Button1Click(Sender: TObject);
var
R: TRect;
begin
R:= ListBox1.ItemRect( 0 );
ListBox1.Canvas.Pen.Width:= 2;
ListBox1.Canvas.MoveTo(R.Left, R.Top + 1);
ListBox1.Canvas.LineTo(R.Right, R.Top + 1);
end;
如果去掉刚刚的画线,应该怎么做?
Refresh当然行,但这个不是重绘整个Listbox吗?有没有方法可以只重绘被画线的Item,而不用重绘整块画布。就像选中一个Item, 该Item背景被画成蓝色,字体会由黑色变成白色。但这个画操作不会重画整个Listbox。
var
R: TRect;
begin
R:= ListBox1.ItemRect( 0 );
ListBox1.Canvas.Pen.Width:= 2;
ListBox1.Canvas.MoveTo(R.Left, R.Top + 1);
ListBox1.Canvas.LineTo(R.Right, R.Top + 1);
end;
如果去掉刚刚的画线,应该怎么做?
Refresh当然行,但这个不是重绘整个Listbox吗?有没有方法可以只重绘被画线的Item,而不用重绘整块画布。就像选中一个Item, 该Item背景被画成蓝色,字体会由黑色变成白色。但这个画操作不会重画整个Listbox。
R: TRect;
begin
R:= ListBox1.ItemRect( 0 );
ListBox1.Canvas.Pen.Width:= 2;
ListBox1.Canvas.MoveTo(R.Left, R.Top + 1);
ListBox1.Canvas.LineTo(R.Right, R.Top + 1);
ListBox1.Canvas.Brush.Color := clWhite;
R.Bottom := R.Top + ListBox1.Canvas.Pen.Width;
ListBox1.Canvas.FillRect(R);
end;
这样吗
你好”这样。然后选中他,再取消选中,最后的样子其实就是回到了画线前的样子。我要的就是如何在Item上面画了一条线后,再让他回复到画线前,当然最好是只重绘这个Item所占的区域。var
R: TRect;
begin
R:= ListBox1.ItemRect( 0 );
ListBox1.Canvas.Pen.Width:= 2;
ListBox1.Canvas.Pen.Mode:=pmNotXor; //用异或模式来画线,第二次用的时候就擦掉了
ListBox1.Canvas.MoveTo(R.Left, R.Top + 1);
ListBox1.Canvas.LineTo(R.Right, R.Top + 1);
end;