⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ehlibstudy.txt

📁 Eh学习笔记 实际上
💻 TXT
📖 第 1 页 / 共 4 页
字号:
      ------------
      Col1|Col2
    分析表头几层,然后根据其表头的'|' 将,其还原成
      |Mergetitle|Mergetitle
      ----------------------
      Col1       |Col2
    再导入到Excel里合并单元格即可! 

 
 2003-12-10 14:55:16    在dbgrideh中允许选择多行,如何知道哪些行被选中?是个BOOKMARK类型的属性。
SelectedRows: TBookmarkList
procedure TForm1.Button1Click(Sender: TObject);
var
 i, j: Integer;
 s: string;
begin
 if DBGrid1.SelectedRows.Count>0 then
   with DBGrid1.DataSource.DataSet do
     for i:=0 to DBGrid1.SelectedRows.Count-1 do
     begin
       GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
       for j := 0 to FieldCount-1 do
       begin
         if (j>0) then s:=s+', ';
         s:=s+Fields[j].AsString;
       end;
       Listbox1.Items.Add(s);
       s:= '';
     end;
end;   

 
 2003-12-10 15:06:19    dbgrideh 上选择多行之后,要求把所选择的记录全部添加入SQL数据库的一个固定表中。dbgrideh.selectedrows记载了所有被选择行的bookmark;利用SelectedRows和GotoBookmark完成。代码如下:

procedure TForm1.Button1Click(Sender: TObject);
var
 i, j: Integer;
 s: string;
begin
 if DBGrid1.SelectedRows.Count>0 then
   with DBGrid1.DataSource.DataSet do
     for i:=0 to DBGrid1.SelectedRows.Count-1 do
     begin
       GotoBookmark(pointer(DBGrid1.SelectedRows.Items[i]));
       for j := 0 to FieldCount-1 do
       begin

         if (j>0) then s:=s+', ';
         s:=s+Fields[j].AsString;
       end;
       Listbox1.Items.Add(s);
       s:= '';
     end;
end; 

 
 2004-2-11 12:45:10    在dbgrideh中直接点击title就可按点击的那个字段排序的方法第一种方法(未测试)
procedure TForm1.DBGridEh1TitleClick(Column: TColumnEh);
begin
 //点击GridEh标题排序
 if (Column.Title.SortMarker = smNoneEh) or (Column.Title.SortMarker = smDownEh) then
   begin
     ADOQuery1.SORT := COLUMN.FIELDNAME;
     Column.Title.SortMarker := smUpEh
   end
 else
   begin
     ADOQuery1.SORT := COLUMN.FIELDNAME + ' DESC';
     Column.Title.SortMarker := smDownEh
   end;
end; 

第二种方法(未测试)
procedure TPrintMai_frm.DBGridEh1TitleClick(Column: TColumnEh);
var
 sortstring: string;
begin //进行排序
 with Column do
 begin
   if FieldName = '' then
     Exit;
   case Title.SortMarker of
     smNoneEh:
       begin
         Title.SortMarker := smDownEh;
         sortstring := Column.FieldName + ' ASC';
       end;
     smDownEh: sortstring := Column.FieldName + ' ASC';
     smUpEh: sortstring := Column.FieldName + ' DESC';
   end; //数据集排序。
   try
     DM.DataModule1.qry2.Sort := sortstring //dataset为实际数据集变量名
   except
   end;
 end;
end;  

 
 2004-3-24 17:34:05    ehlib的颜色控制及打印From:
    http://www.delphibbs.com/keylife/iblog_show.asp?xid=191

      很多说根据条件在数据网格中显示不同颜色的说法都是在DrawColumnCell事件里,这样显示没有问题,但在ehlib中如果想打印出来可就不行了。
ehlib提供了GetCellParams事件,可以显示和打印
//只能显示,不能打印
procedure TfrmQueryContractInfo.DBGrid1DrawColumnCell(Sender: TObject;
 const Rect: TRect; DataCol: Integer; Column: TColumnEh;
 State: TGridDrawState);
var
 OldColor,OldColumnColor:TColor;
 v:TColCellParamsEh;
begin
{  OldColor:=DBGrid1.Canvas.Font.Color ;
 if (Column.Field.FieldName = '填制调单时间') then
 if (DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应发货时间').AsDateTime) then
 begin
   //v:=TColCellParamsEh.Create ;
   //Column.GetColCellParams(true,v);
   //v.Font.Color :=clRed;
   //Column.FillColCellParams(v);
   //v.Free;
   DBGrid1.Canvas.font.Color := clRed;
 end;

 //Column.GetColCellParams  .FillColCellParams()

 if (Column.Field.FieldName = '移交时间') then
 if (DBGrid1.DataSource.DataSet.FieldByName('移交时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应移交时间').AsDateTime) then
   DBGrid1.Canvas.Font.Color := clRed;

 if (Column.Field.FieldName = '填制运输单时间') then
 if (DBGrid1.DataSource.DataSet.FieldByName('填制运输单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime) then
   DBGrid1.Canvas.Font.Color := clRed;

 DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 DBGrid1.Canvas.Font.Color:=OldColor;
}
end;
//可以显示,可以打印
procedure TfrmQueryContractInfo.DBGrid1GetCellParams(Sender: TObject;
 Column: TColumnEh; AFont: TFont; var Background: TColor;
 State: TGridDrawState);
var
 OldColor,OldColumnColor:TColor;
 v:TColCellParamsEh;
begin
 //OldColor:=DBGrid1.Canvas.Font.Color ;
 if (Column.Field.FieldName = '填制调单时间') then
 if (DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应发货时间').AsDateTime) then
   AFont.Color := clRed;

 if (Column.Field.FieldName = '移交时间') then
 if (DBGrid1.DataSource.DataSet.FieldByName('移交时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('应移交时间').AsDateTime) then
   AFont.Color := clRed;

 if (Column.Field.FieldName = '填制运输单时间') then
 if (DBGrid1.DataSource.DataSet.FieldByName('填制运输单时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('填制调单时间').AsDateTime) then
   AFont.Color := clRed;

 if (Column.Field.FieldName = '实际到货时间') then
 if (DBGrid1.DataSource.DataSet.FieldByName('实际到货时间').AsDateTime >DBGrid1.DataSource.DataSet.FieldByName('要求到货时间').AsDateTime) then
   AFont.Color := clRed;
 //DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 //DBGrid1.Canvas.Font.Color:=OldColor;
end;  

 
 2004-3-29 20:12:46    DBGridEH 所有欄位自動寬度的實現interface
THackDBGridEH = class(TCustomdbgrideh)
end;

procedure OptimizeGrid(AGrid: TCustomDbGridEh);

implementation
procedure OptimizeGrid(AGrid: TCustomDbGridEh);
var
i: integer;
begin
// 優化GRID的寬度
for i := 0 to TDBGridEh(AGrid).Columns.count - 1 do
THackDBGridEH(AGrid).OptimizeSelectedColsWidth(TDBGridEh(AGrid).Columns[i]);
end;


從ehlib 3.0開始,DBGridEH的OptionEh中就多了一個dbgDblClickOptimizeColWidth選項,設為true,就可以雙擊一個標題的右邊線,自動此列的寬度.
但是我想一次性實現整個grid的自動寬度,卻沒有找到相就的方法(真的有可能是我沒有找到,如果本身就有的話請一定要用郵件通知我喔),所以就自已寫了一個,用起來還可以,數據量大的時候就會有些慢呢!

作者email :rogue_xu@sina.com
 


2005-5-23 10:17:38   
	查看评语???   
 2005-5-26 18:02:12    点击DBGridEh标题实现排序

KeyLife富翁笔记  
作者 : tempmen
标题 : 点击GridEh标题排序 
关键字: 
分类 : 个人专区 
密级 : 公开 
(评分: , 回复: 0, 阅读: 145) »» 
1。
if (Column.Title.SortMarker = smNoneEh) or (Column.Title.SortMarker = smDownEh) then
    begin
      ADOQuery1.SORT := COLUMN.FIELDNAME;
      Column.Title.SortMarker := smUpEh
    end
  else
    begin
      ADOQuery1.SORT := COLUMN.FIELDNAME + ' DESC';
      Column.Title.SortMarker := smDownEh
    end;   
2。
以下方法用来实现 点击DBGrid列 按该列正序排序,再次点击 逆序
procedure TFormMain.MyDBGridTitleClick(Column: TColumn);
var i:integer;
begin
  if AdoQCX.Sort = Column.FieldName then    //AdoQCX为MyDBGrid绑定的Tadoquery
    begin
      For i:=0 to MyDBGrid.Columns.Count-1 do
        MyDBGrid.Columns[i].Title.RestoreDefaults;

      AdoQCX.Sort := Column.FieldName + ' DESC';
      Column.Title.Font.Color:=clPurple;    //用紫色表示 逆序 字段
    end
  else begin
    For i:=0 to MyDBGrid.Columns.Count-1 do
      MyDBGrid.Columns[i].Title.RestoreDefaults;

    AdoQCX.Sort := Column.FieldName;
    Column.Title.Font.Color:=clBlue;    //用蓝色表示正序字段
    end;
end;

顺便求教,有没有好方法实现 用上下箭头 代替颜色表示正序、逆序
前提是使用DBGrid控件,不是其他第三方控件  

3。
procedure TForm_main.DBGrid_topTitleClick(Column: TColumn);
var
 lInteger_count,lInteger_Length:integer;
 lString_All,lString_Last:string;
begin
 for lInteger_count := 0 to dbgrid_top.FieldCount - 1 do
  begin
   lInteger_Length := length(dbgrid_top.columns[lInteger_count].Title.Caption);
   lString_Last := copy(dbgrid_top.columns[lInteger_count].Title.Caption,lInteger_Length-2,3);
   lString_All := copy(dbgrid_top.columns[lInteger_count].Title.Caption,1,lInteger_Length-3);
   if dbgrid_top.columns[lInteger_count].FieldName = column.FieldName then
    begin
     if (lString_Last = ' ▼') then
      begin
       adoquery_main.Sort := column.FieldName + ' ASC';
       dbgrid_top.columns[lInteger_count].Title.Caption := lString_All + ' ▲';
      end
     else if (lString_Last = ' ▲') then
      begin
       adoquery_main.Sort := column.FieldName + ' DESC';
       dbgrid_top.columns[lInteger_count].Title.Caption := lString_All + ' ▼';
      end
     else
      begin
       adoquery_main.Sort := column.FieldName + ' ASC';
       dbgrid_top.columns[lInteger_count].Title.Caption := lString_All + lString_Last + ' ▲';
      end;
    end
   else
    begin
     if ((lString_Last = ' ▼') or (lString_Last = ' ▲')) then
      dbgrid_top.columns[lInteger_count].Title.Caption := lString_All;
    end;
  end;
end; 
 

 
 2005-6-10 11:33:26    DBGRIDEH 组件在Borland开发工具中应用全攻略 【陈文彬】

http://www.delphibbs.com/keylife/iblog_show.asp?xid=5161

 
 2005-6-18 11:43:26    DevExpress cxGrid 使用方法汇总

http://www.delphibbs.com/keylife/iblog_show.asp?xid=3893

 
 2005-7-1 20:33:17    DBGridEh 应用实例

KeyLife富翁笔记  
作者 : delsoft
标题 : DBGridEH应用实例 
关键字: 
分类 : 个人专区 
密级 : 公开 
(评分: , 回复: 0, 阅读: 44) »» 
DBGridEH应用实例 
--------------------------------------------------------------------------------
作者:金软在线   来源:softsky.com.cn   发布日期:2005-4-1   点击次数: 94 
应用实例
    Enlib3.0组件包安装成功后,在系统的组件面板中会显示“enlib”组件包标签(如图1),添加DBGridEh到窗体的方法与其它组件一样。在窗体中添加该组件后,请跟我一起来实现图2的一些特殊效果,具体属性设置请参考属性表的说明。

A、定制标题行
 1、制作复杂标题行
    标题行可设为2行以上高度,并可以为多列创建一个共同的父标题行。为实现这个效果,需在各个列标题属性中以“|”分隔父标题和子标题,如办公用品包括代码和名称两部分,具体属性设置如下:

usemultititile=true;
titlelines=2
DBGridEh.Columns[0].Title.Caption := '办公用品|代码';
DBGridEh.Columns[1].Title.Caption := '办公用品|名称';

 2、标题行显示图片 
    实现图2中的购买人标题行显示效果。首先添加一个imagelist组件img1并在其中添加一组bmp,ico格式的图片。然后将DBGridEh的TitleImages设置为img1.最后在需要显示图片的列标题的imageindex中设置需要显示的img1中图片的序号。按F9执行一下程序,是不是很酷!

 3、自动显示标题行的升降排序标志符(▽降序△升序)并做相应排序
    DBGridEh组件可以在标题行单元格中显示小三角形升、降排序标志符图片,在运行时可点击标题行,图片自动切换并做相应排序。具体属性设置如下:

OptionsEh=dghAutoSortMarking 
Column.Title.TitleButton=true 

SortMarkedColumns 为当前排序列可在运行时使用.
然后在该列的ontitleclick事件中添加代码:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -