有关ListView和DBGrid的美化的问题

steps 2000-02-16 02:08:00
我想要改变这两种控件的网格的显示颜色(背景与字体),但不明方法
请指教!
...全文
425 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Venne 2000-02-22
  • 打赏
  • 举报
回复
想挣你另外30分啊! :)

改变LISTVIEW的界面也是可行的。以下是一段代码。你可使用它来扩展你的需要,例如有很多SUBITEM的时候。还有,在画选择高亮时,代码可能不是非常好,你可能需要修改,但是它确实能工作。
这不算一段好的代码,但希望对你有帮助。只要在表单上放一个LISTVIEW和一个BUTTON就可以了。另外,在LISTVIEW里预先放5个ITEM。我没做错误检测。
LISTVIEW开始的状态是普通状态,点击按钮后增加两个列并且转为REPORT状态。


procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
NowListItem:TListItem;
NewColumn:TListColumn;
begin
NewColumn:=ListView1.Columns.Add;
NewColumn.Caption :='1';
NewColumn.Width :=ListView1.Width div 2;
NewColumn:=ListView1.Columns.Add;
NewColumn.Caption :='2';
NewColumn.Width :=ListView1.Width div 2;

for i:=0 to 4 do begin
NowListItem:=ListView1.Items[i];
NowListItem.SubItems.Add(NowListItem.Caption +'-1');
end;

ListView1.ViewStyle :=vsReport;
Button1.Enabled :=false;

end;

procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
var
Rect:Trect;
begin
DefaultDraw:=false;
Rect:=Item.DisplayRect( drBounds );
With Sender as TListView do begin
case item.Index of //行数控制
0,2,4:begin
if cdsSelected in State then begin //高亮判断
canvas.brush.Color :=clHighlight;
Canvas.font.Color :=clWhite;
end else begin
Canvas.Brush.Color :=rgb(255,222,222);
Canvas.font.Color :=clBlack;
end;
end;
1,3:begin
if cdsSelected in State then begin
canvas.brush.Color :=clHighlight;
Canvas.font.Color :=clWhite;
end else begin
Canvas.Brush.Color :=rgb(222,222,255);
Canvas.font.Color :=clBlack;
end;
end;
end;
Canvas.FillRect (Rect);
Canvas.brush.Style :=bsClear;
Canvas.TextRect (Rect,rect.left,rect.top,item.Caption);
if ListView1.ViewStyle =vsReport then begin
Canvas.TextRect (Rect,(Rect.left+(Rect.right-rect.left)div 2),rect.top,
item.SubItems.Text );
end;
end;
end;
steps 2000-02-22
  • 打赏
  • 举报
回复
好样的!Venne!!
尽管在你出第二个贴之前,我已经自己完成了的LISTVIEW的显示问题
但我还是要告诉你,你赚到了另外的30分,
你新出的贴虽然笨重了一点且不通用,但还是实现了分行换色显示和
SUBITEMS的显示,这完全达到我的要求
目前,国人在自己软件的包装上还不是很重视,我希望写的软件能在
这方面有所进步。近来我很忙,希望有时间时再和大家讨论美化界面
的问题!
本论题到圆满结束!!
steps 2000-02-20
  • 打赏
  • 举报
回复
jll及sky_horse: 感谢你们的支持,但我不是第一次用DELPHI
kxy和lin: 你们俩描述的方法我知道,也在StringGrid上完成了,但在ListView和DBGrid上实现有些困难,主要是显示一格中的文字内容有些问题
Venne: 你的回答很切题,在你的启发下,我完成了DBGrid的美化,但在ListView的vsreport状态下,我还没有能解决,我想要在每一格内显示不同的颜色,希望你有帮助我
barton: 你的方法是一个办法,但我一般不用别人的控件,原因很多,在这里谢了
由于Venne的启发性回答,我决定先给他20分,
现在问题变为
ListView的vsreport状态下如何改变每一格的显示
希望大家继续支持我
barton 2000-02-20
  • 打赏
  • 举报
回复
请你使用dfsExtListView,你会找到非常好的方法。
barton 2000-02-20
  • 打赏
  • 举报
回复
ListView在vsreport风格下改变每一格的显示是控制是修改SubItems.

procedure SetCell(ListView: TListView; Row, Col: Integer; const Value: string);
begin
if Col = 0 then
ListView.Items[Row].Caption := Value
else begin
while ListView.Items[Row].SubItems.Count < Col - 2 do
ListView.Items[Row].SubItems.Add('');
ListView.Items[Row].SubItems[Col - 1] := Value;
end
end;
Venne 2000-02-16
  • 打赏
  • 举报
回复
需要这样的方法是在LISTVIEW的OnCustomDraw,以及OnCustomDrawitem事件里重写,并且要把DeafaultDraw设为假,这样完全控制如何绘制你想要的效果.下面是一个在背景变成红色后,写一行字的例子:
procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
const ARect: TRect; var DefaultDraw: Boolean);
begin
With ListView1 do begin
Canvas.brush.Color :=clRed;
canvas.FillRect (Arect);
Canvas.TextOut (0,0, 'This is a test');
end;
DefaultDraw:=true;

end;

如果要更改DBGRID的网格颜色,方法也是类似,只是在OnDrawDataCell和OnDrawColumnCell时自己控制即可.下面我用一个DRAWRGRID做一示例,凡偶数行以一种颜色做为背景.在DRAWGRID控件下,是DRAWCELL事件.如果要改变字体等,请改变Canvas.font.name/size/color属性即可.

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
With DrawGrid1 do begin
if Arow mod 2 =0 then begin
canvas.brush.Color :=rgb(200,255,212);
canvas.FillRect (rect);
end;
end;
end;
Lin 2000-02-16
  • 打赏
  • 举报
回复
要改变ListView控件的背景与字体:
1、ListView.OwnerDraw := True;
2、挂接OnCustomDrawItem事件,自行绘制。
对于DBGrid,挂接OnDrawColumnCell事件试试。
jll 2000-02-16
  • 打赏
  • 举报
回复
对于ListView的网格背景可以用ListView.Color:=???(?代表颜色),字体的属性是Font,点击它可以打开通用字体设置对话框,然后你就可以设置了。
对于DBGrid方法类似。
sky__horse 2000-02-16
  • 打赏
  • 举报
回复
直接该二者得Color和Font得Color属性值即可
kxy 2000-02-16
  • 打赏
  • 举报
回复
DrawStyle设成OwnerDraw
在OnDrawCell事件中自己画.

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧