本人近来做一些组件,有一个问题始终得不到解决:DBGRID本身的3D效果看起来实在是不舒服,我想改为平面效果(主要是滚动条,甚至滚动条可以添加自己想要的颜色,而

  • 主题发起人 主题发起人 only_delphi
  • 开始时间 开始时间
O

only_delphi

Unregistered / Unconfirmed
GUEST, unregistred user!
本人近来做一些组件,有一个问题始终得不到解决:DBGRID本身的3D效果看起来实在是不舒服,我想改为平面效果(主要是滚动条,甚至滚动条可以添加自己想要的颜色,而不是简单的更改行或列的颜色或者是重绘,再者,如果你是重绘,必须要解决的问题是,避免闪动的厉害!)(300分)<br />本人近来做一些组件,有一个问题始终得不到解决:
DBGRID本身的3D效果看起来实在是不舒服,我想改为平面效果
(主要是滚动条,甚至滚动条可以添加自己想要的颜色,
而不是简单的更改行或列的颜色或者是重绘,再者,如果你是重绘,
必须要解决的问题是,避免闪动的厉害!)
如何改,或者做一个组件如何写代码,300分尽可能给回答完善者,
不平均发分。如果有人有写好的代码发送过来,将300分立刻送上
 
将问题提前者也将有分
 
先将dbgrid自带的滚动条去掉,然后自己加一个上去——这个思路应该可行


先占位——等我试出来了,再发上来——————————————————
 
Dev的DBGRID应该能满足你的要求
 
to :seucag
dev是?
 
DevExpress
quanmgrid
不知道拼错没
 
DevExpress
quanmgrid

那里有?
 
http://awin.sky-2008.com/softdown/list.asp?id=67
 
type
tmygrid=class(tdbgrid)
protected
procedure Paint;override;
procedure DrawCell(ACol:Integer;ARow:Integer;ARect:TRect;AState:TGridDrawState);override;
public
constructor create(AOwner:TComponent);override;
destructor destroy;override;
end;
//////实现
{tmygrid}
constructor tmygrid.create(AOwner:TComponent);
begin
inherited create(Owner);
BorderStyle:=bsNone;
BevelKind:=bkFlat;
Options:=Options-[dgColLines];
end;

destructor tmygrid.destroy;
begin
inherited;
end;

procedure tmygrid.Paint;
begin
inherited;
end;

procedure tmygrid.DrawCell(ACol:Integer;ARow:Integer;ARect:TRect;AState:TGridDrawState);
begin
inherited;
if (ARow=0) then
Canvas.Pen.Color:=clGray
else
Canvas.Pen.Color:=clBtnface;

if ACol&lt;&gt;0 then
begin
Canvas.MoveTo(ARect.Left,ARect.Top);
Canvas.LineTo(ARect.Left,ARect.Bottom);
end;
end;

{看看效果}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
mygrid:=tmygrid.create(Self);
mygrid.parent:=self;
mygrid.left:=0;
mygrid.top:=0;
mygrid.Height:=300;
mygrid.Options:=mygrid.Options-[dgIndicator];
mygrid.DataSource:=DataSource1;
end;
 
to hongxing_dl
你的代码如下://处是不能通过编译的代码,去掉后生成的控件出现不可想象的错误
unit mygrid;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, Grids, DBGrids;

type
tmygrid=class(tdbgrid)
protected
procedure Paint;override;
procedure DrawCell(ACol:Integer;ARow:Integer;ARect:TRect;AState:TGridDrawState);override;
public
constructor create(AOwner:TComponent);override;
destructor destroy;override;
end;


procedure Register;

implementation

procedure Register;
begin
RegisterComponents('Samples', [Tmygrid]);
end;
constructor tmygrid.create(AOwner:TComponent);
begin
inherited create(Owner);
// BorderStyle:=bsNone;
BevelKind:=bkFlat;
Options:=Options-[dgColLines];
end;

destructor tmygrid.destroy;
begin
inherited;
end;

procedure tmygrid.Paint;
begin
inherited;
end;

procedure tmygrid.DrawCell(ACol:Integer;ARow:Integer;ARect:TRect;AState:TGridDrawState);
begin
inherited;
if (ARow=0) then
// Canvas.Pen.Color:=clGray
else
// Canvas.Pen.Color:=clBtnface;

if ACol&lt;&gt;0 then
begin
Canvas.MoveTo(ARect.Left,ARect.Top);
Canvas.LineTo(ARect.Left,ARect.Bottom);
end;
end;


end.
 
呵呵:)
你不是要实现平面吗??
怎么能去掉呢?
 
问题是这些代码根本就不能通过编译,去掉后方能编译,
也就是说加//处代码是有问题的
 
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, StdCtrls, ExtCtrls;

加进去怎么样????
 

道喜:
编译是通过了,但问题是继承关系上出现了问题,
首先”该组件“是一个不可视组件
当然 运行时,就见不到了,

但是,我的问题是,滚动条变为平面,而不是原有的3D效果
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=4091
KeyLife富翁笔记
作者?: archonwang
标题?: DBGrid 应用全书(全面修订正在进行时)
关键字:
分类?: 开发经验
到上面这瞧一下有没有你想要的
另外,三方控件dbgrideh就是支持Flat的,就算你不想用它,也可以下载回来参看一下它是怎么做的嘛,它附有源码的
 
dbgrideh那里可以下载 啊?
 
早知道用控件可以吗,就不这么麻烦了

我也用dbgrideh的,确实不错
自己搜索一下吧:
51delphi.com
应该有
 
delphi标准的dbgrid控建的scrollbar也可以变平在paints时调用
procedure DrawFlat(Handle: THandle);
var
LStyle: Longint;
begin
LStyle := GetWindowLong(Handle, GWL_STYLE);
if (LStyle and (WS_VScroll or WS_HScroll) &lt;&gt; 0) then
begin
InitializeFlatSB(Handle);
if LStyle and WS_VScroll &lt;&gt; 0 then
FlatSB_SetScrollProp(Handle, WSB_PROP_VSTYLE, FSB_FLAT_MODE, True);
if LStyle and WS_HScroll &lt;&gt; 0 then
FlatSB_SetScrollProp(Handle, WSB_PROP_HSTYLE, FSB_FLAT_MODE, True);
end
else
FlatSB_ShowScrollBar(Handle, SB_BOTH, False);
end;
 
对的,到51elphi里找一下ehlib吧,那是一个控件组里一个控件
 
着段代码加到那里啊?
 
后退
顶部