**************************************************************************** 14 如何改变列的颜色? 解决: var
AFirstColumnStyle: TcxStyle;
procedure TForm1.FormCreate(Sender: TObject); begin //列颜色
AFirstColumnStyle := TcxStyle.Create(Self); AFirstColumnStyle.Color := clAqua; AFirstColumnStyle.TextColor := clBlue;
cxGrid1TableView1.Columns[1].Styles.Content := AFirstColumnStyle; end;
**************************************************************************** 15 Set as default的用法?
解决:Set as default的用法是为了解决设置参数的方便而做的,比如:
连好数据库以后,更改cxGrid1DBBandedTableView1->OptionsCustomize-> ColumnFiltering 设为False。(这个设置可以将字段名的下拉单给去掉)更改cxGrid1DBBandedTableView1->OptionsView- >Navigator 设置为True。然后右击cxGrid1DBBandedTableView1,在弹出的菜单栏里面点击Set as default。
OK,下次你再产生一个新的cxGrid1DBBandedTableView1时这些设置和刚才的一样了。如果需要设置的参数很多的时候,这个Set as default很有用!
**************************************************************************** 16. 怎样使鼠标移动时,相应的单元里的文字变色? 解决: var
FTrackItem: TcxCustomGridTableItem; FTrackRec: TcxCustomGridRecord;
procedure TForm1.cxGrid1DBTableView1CustomDrawCell( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); begin
if (AViewInfo.GridRecord = FTrackRec) and (AViewInfo.Item = FTrackItem) then begin
ACanvas.Font.Color := clred; //红色字体 ACanvas.Font.Style := [fsUnderline];//带下划线 end; end;
procedure TForm1.cxGrid1DBTableView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var
AHitTest: TcxCustomGridHitTest; ATrackItem: TcxCustomGridTableItem; ATrackRec: TcxCustomGridRecord;
begin
ATrackItem := FTrackItem; ATrackRec := FTrackRec;
AHitTest := (Sender as TcxGridSite).GridView.ViewInfo.GetHitTest(X, Y); if AHitTest is TcxGridRecordCellHitTest then begin
FTrackItem := TcxGridRecordCellHitTest(AHitTest).Item; FTrackRec := TcxGridRecordCellHitTest(AHitTest).GridRecord; end else begin
FTrackItem := nil; FTrackRec := nil; end;
if (ATrackItem <> FTrackItem) or (ATrackRec <> FTrackRec) then begin
// Invalidate old cell if ATrackRec <> nil then
ATrackRec.Invalidate(ATrackItem); // Invalidate new cell if FTrackRec <> nil then
FTrackRec.Invalidate(FTrackItem); end; end;
**************************************************************************** zj注:17-27转载自http://blog.csdn.net/shuaihj/article/details/6131011
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时由程序加入) var
A:TDataSource:
B:TcxlookupcomboboxProperties; begin
A:=TDataSource.create(self);
B:=tcxlookupcomboboxproperties.create(self); A.Dataset:=Dic_ry_xb;//此处指定数据源。 b.listdource:=a;//此处指明字段的listsource属性。 b.keyfieldnames:='a'; //此处指明字段的关键字段 b.listfieldnames:='b'; //此处指明字段的返回值。
b.listcolumns.items[0].caption:='x; //此处默认是会建立一个字段,但是显示的表头是name,所以此处让它显示为自己想要的中午显示。 cxGrid1DBTableView1c1_sex_code.Properties:=b; //此处指明是那个字段。 end; //这个是初始化的代码
**************************************************************************** 21. 拷贝文件时有进度显示 解决:
procedure TForm1.mycopyfile(sourcef,targetf:string); var
FromF, ToF: file;
NumRead, NumWritten: Integer; Buf: array[1..2048] of Char; n:integer; begin
AssignFile(FromF, sourcef); Reset(FromF, 1); { Record size = 1 } AssignFile(ToF,targetf); { Open output file } Rewrite(ToF, 1); { Record size = 1 } n:=0; repeat
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
form1.label1.caption:=IntToStr(sizeof(buf)*n*100 div FileSize(FromF))+'100%'; application.ProcessMessages; //显示进度
BlockWrite(ToF, Buf, NumRead, NumWritten); inc(n);
until (NumRead = 0) or (NumWritten <> NumRead); form1.Label1.Caption:='100%'; CloseFile(FromF); CloseFile(ToF); end;
procedure TForm1.Button1Click(Sender: TObject); begin
mycopyfile('e:/components/tv2k-w2k.zip','c:/a.zip'); 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
procedure TFormItemList.FormCreate(Sender: TObject); var
AMenu: TComponent;
FMenuItem, FSubMenuItem: TMenuItem; begin
AMenu := nil;
if cxGridPopupMenu.BuiltInPopupMenus.Count = 0 then Exit;
AMenu := cxGridPopupMenu.BuiltInPopupMenus[0].PopupMenu; //第一个内置右键菜单(表头菜单) if Assigned(AMenu) and AMenu.InheritsFrom(TPopupMenu) then begin
TPopupMenu(AMenu).AutoHotkeys := maManual; //手动热键
//-------------------------
FMenuItem := TMenuItem.Create(Self); FMenuItem.Caption := '-';
FMenuItem.Name := 'miLineForGroup'; TPopupMenu(AMenu).Items.Add(FMenuItem);
//展开所有组
FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := 'miExpandAllGroup'; FMenuItem.Caption := '展开所有组(&X)'; FMenuItem.OnClick := miExpandAllGroupClick; TPopupMenu(AMenu).Items.Add(FMenuItem);
//收缩所有组
FMenuItem := TMenuItem.Create(Self); FMenuItem.Name := 'miCollapseAllGroup';
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库delphi控件cxGrid用法大全(2)在线全文阅读。
相关推荐: