TStringGrid的界面是普通3D形状,我想改成Flat样式的,怎么改?(50分)

  • 主题发起人 主题发起人 Mow
  • 开始时间 开始时间
在TForm的OnCreate事件里DBGrid1.Ctl3D :=False;
 
to ArJianzeng:拜托你看看上面的贴子再灌水好不好!!![:(!]
灌水也要灌得有新意嘛!有点职业道德好不好?
 
把DefaultDraw 属性设置为False;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var
sText: String;
iHeight, iLen, iLeft, iTop: Integer;
ARect: TRect;
begin
with StringGrid1 do
begin
sText :=Trim(Cells[ACol, ARow]);
if sText ='' then sText :=' ';
iHeight :=Canvas.TextHeight('啊');
iLen :=Canvas.TextWidth(sText);

iLeft :=Rect.Left;
iTop :=Rect.Top;

if ARow =0 then
begin
Font.Name :='宋体';
Font.Color :=clBlack;
Canvas.Brush.Color :=$00FFDAB5;
end ;//end of if..then

if (ACol >0) then
begin
ARect :=CellRect(ACol -1, ARow);
iLeft :=ARect.Right;
end;//end of if..then

if (ARow >0) then
begin
ARect :=CellRect(ACol, ARow -1);
iTop :=ARect.Bottom;
end;//end of if..then
Canvas.TextRect(Rect, iLeft + (Rect.Right -Rect.Left -iLen) div 2,
iTop + (Rect.Bottom -Rect.Top -iHeight) div 2, sText);
end;//end of with..do

 
靠,说我灌水,你早点说吗,我省的发这些代码。。。。真是好心没好报。。。。
要问问题就虚心点,态度好一点。。。。
 
to ArJianzeng:
不好意思,刚才火大了一点,对不起[:)]。
不过,你的例子好象是关于文本对齐的,而我要的是把TStringGrid的title画成flat式的。
不过,还是要谢谢你。你能不能再举一个对应的例子?谢谢!
 
可以设置TPen的属性(Width, Style)等,然后进行重画,你自己试试吧。。。
我休息时间到了。。。。
 
to ArJianzeng:
我早用你说的方法画了N次了(N>20),都不满意!你能不能帮我试试?谢谢!
原来有人和我一样只是中午休息才能上来[:)]。怪不得一到12:30就很难挤上来了。
 
不等到答案决不罢休,哪怕等到天荒地老海枯石烂我心永恒![:)]
 
好,我给你答案
对stringGrid来说
修改grids中TCustomGrid的paint函数
主要是下面两句
DrawEdge(Canvas.Handle, TempRect, BDR_RAISEDINNER, FrameFlags1);
DrawEdge(Canvas.Handle, TempRect, BDR_RAISEDINNER, FrameFlags2);
具体的说明可以查msdn
给你一个我在别的空间中修改grid的例子
FrameFlags1 := BF_BOTTOM or BF_RIGHT;
FrameFlags2 := BF_TOP or BF_LEFT;
if DefaultDrawing and (gdTitled in DrawState) and Ctl3D then
begin
Ctl3DRect := Where;
Case FGridStyle of
GSUltraFlat:
begin
DrawEdge(Canvas.Handle, Ctl3DRect, BDR_RAISEDINNER, BF_FLAT);
DrawEdge(Canvas.Handle, Ctl3DRect, BDR_RAISEDINNER, BF_FLAT);
end;
GSFlat:
begin
Ctl3DRect.Right:=Ctl3DRect.Right+1;
Ctl3DRect.Bottom:=Ctl3DRect.Bottom+1;
DrawEdge(Canvas.Handle, Ctl3DRect, BDR_RAISEDINNER, BF_RECT );
end;
GSStand:
begin
DrawEdge(Canvas.Handle, Ctl3DRect, BDR_RAISEDINNER, FrameFlags1);
DrawEdge(Canvas.Handle, Ctl3DRect, BDR_RAISEDINNER, FrameFlags2);
end;
end;

 
另外此法对dbgrid无效,具体原因你自己分析把
 
to arm:
(泪流满面地)谢谢!我代表党和人民谢谢您!

不好意思,僧多粥少,大家将就一下吧!
 
后退
顶部