• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

DelphiCxGrid汇总(2)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

17. 怎样设计多表头的cxGrid?
解决:cxGrid可以解决如下的表头:
---------------------------------
| 说明1 | 说明2 |
---------------------------------
| 字段1 | 字段2 | 字段3 | 字段4 |
| 字段5 | 字段6 |
| 字段7 | 字段8 | 字段9 |
实现这个很简单,你可以直接在上面拖动字段名,拖动时会显示箭头的,放入你想显示的位置就OK了。或者在鼠标右击cxGrid1DBBandedTableView1菜单里的Edit Layout里也可以拖放。

但是cxGrid不能实现如下的多表头形式:
---------------------------------
| 说明1 | 说明2 |
---------------------------------
| 说明3 | 说明4 | 说明5 | 说明6 |
| 字段1 | 字段2 |
| 字段3 | 字段4 | 字段5 |
不知道有谁能实现这样的多表头?

****************************************************************************
18. 在主从表结构时,当点开“+”时怎样将焦点聚在相应主表的记录上?
解决:
var
HitTest: TcxCustomGridHitTest;

procedure TColumnsShareDemoMainForm.tvProjectsMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
// Note that the Sender parameter is a Site
  HitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y);
// The point belongs to the [+]/[-] button area
  if HitTest is TcxGridExpandButtonHitTest then
// Move focus to the record
  TcxGridExpandButtonHitTest(HitTest).GridRecord.Focused := True;
end;

****************************************************************************
19 CXGrid4如何展开全部节点
解决:GridDBTableView1.DataController.Groups.FullExpand;

****************************************************************************
20. cxGrid如何动态创建Items的Editor的项?
解决:cxGrid的列有一个属性,它的编辑框可以指定combobox,spinedit等.在设计时,可以为
combobox的items添加项目.请问是否可以动态创建?(run-time时由程序加入)

[delphi] view plaincopy
  1. var  
  2. A:TDataSource:  
  3. B:TcxlookupcomboboxProperties;  
  4. begin  
  5. A:=TDataSource.create(self);  
  6. B:=tcxlookupcomboboxproperties.create(self);  
  7. A.Dataset:=Dic_ry_xb;//此处指定数据源。  
  8. b.listdource:=a;//此处指明字段的listsource属性。  
  9. b.keyfieldnames:='a'//此处指明字段的关键字段  
  10. b.listfieldnames:='b'//此处指明字段的返回值。  
  11. b.listcolumns.items[0].caption:='x; //此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。  
  12. cxGrid1DBTableView1c1_sex_code.Properties:=b; //此处指明是那个字段。  
  13. end//这个是初始化的代码  

****************************************************************************
21. 拷贝文件时有进度显示
解决:

[delphi] view plaincopy
  1. procedure TForm1.mycopyfile(sourcef,targetf:string);  
  2. var  
  3. FromF, ToF: file;  
  4. NumRead, NumWritten: Integer;  
  5. Buf: array[1..2048of Char;  
  6. n:integer;  
  7. begin  
  8.    AssignFile(FromF, sourcef);  
  9.    Reset(FromF, 1); { Record size = 1 }  
  10.    AssignFile(ToF,targetf); { Open output file }  
  11.    Rewrite(ToF, 1); { Record size = 1 }  
  12.    n:=0;  
  13.    repeat  
  14.         BlockRead(FromF, Buf, SizeOf(Buf), NumRead);  
  15.         form1.label1.caption:=IntToStr(sizeof(buf)*n*100 div FileSize(FromF))+'100%';  
  16.         application.ProcessMessages;  
  17.         //显示进度  
  18.         BlockWrite(ToF, Buf, NumRead, NumWritten);  
  19.         inc(n);  
  20.     until (NumRead = 0or (NumWritten <> NumRead);  
  21.     form1.Label1.Caption:='100%';  
  22.     CloseFile(FromF);  
  23.     CloseFile(ToF);  
  24. end;  
  25. procedure TForm1.Button1Click(Sender: TObject);  
  26. begin  
  27. mycopyfile('e:/components/tv2k-w2k.zip','c:/a.zip');  
  28. end;  

****************************************************************************
22. cxGrid 设置斑马线
解决:
在TcxGridDBBandedTableView.Styles属性中有 ContentEven(奇数行风格) ContentOdd (偶数行风格) ,设定一下风格就好了。
****************************************************************************
23 根据记录内容更改字体颜色
解决:
参考范例CustomDrawTableViewDemo,
主要在TcxGridDBBandedTableView.OnCustomDrawCell事件中实现。
如下代码:

if   (Pos('-',AViewInfo.GridRecord.DisplayTexts[colOrderProductCount.Index]) > 0) then
begin //标识负数记录
    //ACanvas.Canvas.Brush.Color:= clMoneyGreen;
    ACanvas.Canvas.Font.Color:= clRed;//clActiveCaption
end;

其中colOrderProductCount是“产品订数”列。

还要有一步就是要刷新显示

TcxGridDBBandedTableView.LayoutChanged();
//tvCars.LayoutChanged(False);
TcxGridDBBandedTableView.Painter.Invalidate;

****************************************************************************
24 用代码展开/收缩主从结构
解决:
      Self.tvDepartment.ViewData.Expand(True);  
      Self.tvDepartment.ViewData.Collaspe(True);  
注:tvDepartment为主表对应的TableView

****************************************************************************
25 在内置右键菜单的后面增加菜单项
解决:
首先应在Form上加一个cxGridPopupMenu控件   以启用右键菜单  
UseBuildInPopupMenus设为True  

[delphi] view plaincopy
  1.      
  2. procedure   TFormItemList.FormCreate(Sender:   TObject);    
  3. var    
  4.       AMenu:   TComponent;    
  5.       FMenuItem,   FSubMenuItem:   TMenuItem;    
  6. begin    
  7.       AMenu   :=   nil;    
  8.       if   cxGridPopupMenu.BuiltInPopupMenus.Count   =   0   then    
  9.           Exit;    
  10.       AMenu   :=   cxGridPopupMenu.BuiltInPopupMenus[0].PopupMenu; //第一个内置右键菜单(表头菜单)    
  11.       if   Assigned(AMenu)   and   AMenu.InheritsFrom(TPopupMenu)   then    
  12.       begin    
  13.           TPopupMenu(AMenu).AutoHotkeys   :=   maManual;         //手动热键    
  14.      
  15.           //-------------------------    
  16.           FMenuItem   :=   TMenuItem.Create(Self);    
  17.           FMenuItem.Caption   :=   '-';    
  18.           FMenuItem.Name   :=   'miLineForGroup';    
  19.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
  20.      
  21.           //展开所有组    
  22.           FMenuItem   :=   TMenuItem.Create(Self);    
  23.           FMenuItem.Name   :=   'miExpandAllGroup';    
  24.           FMenuItem.Caption   :=   '展开所有组(&X)';    
  25.           FMenuItem.OnClick   :=   miExpandAllGroupClick;    
  26.           TPopupMenu(AMenu).Items.Add(FMenuItem);    
  27.      
  28.           //收缩所有组    
  29.           FMenuItem   :=   TMenuItem.Create(Self);    
  30.           FMenuItem.Name   :=   'miCollapseAllGroup';    
  31.           FMenuItem.Caption   :=   '收缩所有组(&O)';    
  32.           FMenuItem.OnClick   :=   miCollapseAllGroupClick;    
  33.           TPopupMenu(AMenu).Items

    鲜花

    握手

    雷人

    路过

    鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi中&quot;位&quot;的使用(3)-TBits发布时间:2022-07-18
下一篇:
delphi与C++进程之间的命名管道通信发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap