DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: a12315
今日帖子: 42
在线用户: 13
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/10/23 21:49:01
标题:
flash演示我做的dbGrideh的改良版[带配音] 浏览:14922
加入我的收藏
楼主: 不需要一句代码,实现丰富的查找,查询,字段的隐藏,字段长度位置的记忆,导出Excel等功能;
 
6分多钟,5M多,flash格式,带配音,
希望大家耐心观看,并提出宝贵意见

http://www.daizhicun.com/bbs/dispbbs.asp?boardid=3&id=1591

http://www.sjflower.cn/dmx/dai/mydbgrideh.swf
----------------------------------------------
青云论坛
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/10/23 21:52:08
1楼: http://www.delphibbs.com/delphibbs/dispq.asp?lid=3241231
----------------------------------------------
青云论坛
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/10/24 8:39:52
2楼: 冒昧的问问能不能分享一下?
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/10/24 9:16:18
3楼: 怎么没有人要呢? 这么好的东西 楼主 分享一下啊
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/10/24 9:41:09
4楼: 不给算了
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/10/24 11:52:22
5楼: 我刚看到,当然可以公布,有些bug我正在完善。很快就会公布出来。
----------------------------------------------
青云论坛
作者:
男 luke_wang (luke) ★☆☆☆☆ -
普通会员
2005/10/24 12:53:13
6楼: 很不错。值的推荐。
你的dbGrideh是哪个version? 我的V3.6最左边怎么没有行号显示?
----------------------------------------------
-
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/10/24 12:56:21
6楼: 好感动  我会等你的
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 kg73 (蓝苹果) ★☆☆☆☆ -
盒子活跃会员
2005/10/24 12:56:36
6楼: 青云老兄做的很好啊。
期望尽快完成。

另外:只需要ehlib吗?版本有没有关系?
还有,和其他的控件(比如:dev等)不会冲突吧?


顶一下~!
----------------------------------------------
-
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/10/24 13:02:51
7楼: luke_wang 朋友
左边的行号,也是我自己加进去的。因为很多客户都有这个要求。
我是在ehlib3.4的基础上修改的。

到时候,我提供所有的ehlib文件,大家直接用我的就行。
希望能和大家共同完善它。

我完善这个控件组的初衷,是为了实现很强大的查询功能。

举个简单的例子。
 在大量的入库单查询客户想要处理的单据,一般的做法是
提供  单号,供货商编号和名称 ,商品名称这样的条件。

但是如果想查询 商品数量>5的条件就不能实现。

想查询 供货商名称<>'...'也不能实现;
想根据备注等信息查询也不能实现,

这时候,你会说,我把所有的查询功能做一个界面,让用户自定义查询方式,
但是那样客户查询起来,条件输入也显麻烦。而且最关键的是你都每个Grid都要做个查询,累死你。而且客户可能还不满意。

所以我想做个很强大的查询功能,不用通过sql语句实现。不用书写一句代码;
客户操作简单,
而且 grid第一行有序号,可以导出excel,可以自定义隐藏客户不想见的字段,可以每次都记住各个字段在grid里显示的长度;
----------------------------------------------
青云论坛
作者:
男 luke_wang (luke) ★☆☆☆☆ -
普通会员
2005/10/24 13:06:22
8楼: 谢谢qingyun。Good job!
----------------------------------------------
-
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/10/24 13:44:22
9楼: 文儿 给个小小的建议:

能把自动调整宽度的代码加上吗?(下面的我调试过OK)uses
  Math;

function DBGridRecordSize(mColumn: TColumn): Boolean;
{ 返回记录数据网格列显示最大宽度是否成功 }
begin
  Result := False;
  if not Assigned(mColumn.Field) then Exit;
  mColumn.Field.Tag := Max(mColumn.Field.Tag,
    TDBGrid(mColumn.Grid).Canvas.TextWidth(mColumn.Field.DisplayText));
  Result := True;
end; { DBGridRecordSize }

function DBGridAutoSize(mDBGrid: TDBGrid; mOffset: Integer = 5): Boolean;
{ 返回数据网格自动适应宽度是否成功 }
var
  I: Integer;
begin
  Result := False;
  if not Assigned(mDBGrid) then Exit;
  if not Assigned(mDBGrid.DataSource) then Exit;
  if not Assigned(mDBGrid.DataSource.DataSet) then Exit;
  if not mDBGrid.DataSource.DataSet.Active then Exit;
  for I := 0 to mDBGrid.Columns.Count - 1 do begin
    if not mDBGrid.Columns[I].Visible then Continue;
    if Assigned(mDBGrid.Columns[I].Field) then
      mDBGrid.Columns[I].Width := Max(mDBGrid.Columns[I].Field.Tag,
        mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption)) + mOffset
    else mDBGrid.Columns[I].Width :=
      mDBGrid.Canvas.TextWidth(mDBGrid.Columns[I].Title.Caption) + mOffset;
    mDBGrid.Refresh;
  end;
  Result := True;
end; { DBGridAutoSize }
///////源代码结束

///////使用示例开始
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  DBGridRecordSize(Column);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGridAutoSize(DBGrid1);
end;
///////使用示例结束
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/10/24 15:58:54
10楼: 多谢 文儿 ,我也作了这个功能,只是有些缺陷,我会参考您提供的再作完善。
----------------------------------------------
青云论坛
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/11/1 8:59:03
11楼: 可以了吗?我一直在等你呢
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 zjkzs (zjkzs) ★☆☆☆☆ -
普通会员
2005/11/1 10:01:52
12楼: 好东西,
----------------------------------------------
-
作者:
男 tomson_xh (Tomson) ★☆☆☆☆ -
普通会员
2005/11/1 10:07:37
12楼: 顶好顶好!
期盼在日发布。
----------------------------------------------
-
作者:
男 luke_wang (luke) ★☆☆☆☆ -
普通会员
2005/11/1 14:50:42
13楼: 能不能检查一下日期型数据的有效性?
以下是我写的代码。是否可能考虑加入?

procedure TMainFrm.DBGridDateUpdateData(Sender: TObject;
  var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var
  TmpStr, YearStr, MonthStr, DayStr: string;
  i, Year, Month, Day: integer;
begin
  try
    i := Pos(DateSeparator, Text);
    YearStr := Trim(Copy(Text, 1, i-1));
    TmpStr := Copy(Text, i+1, Length(Text)-i);
    i := Pos(DateSeparator, TmpStr);
    MonthStr := Trim(Copy(TmpStr, 1, i-1));
    DayStr := Trim(Copy(TmpStr, i+1, Length(TmpStr)-i));

    if Trim(YearStr) = '' then
      YearStr := FormatDateTime('yyyy', Now());
    if Trim(MonthStr) = '' then
      MonthStr := FormatDateTime('m', Now());
    if Trim(DayStr) = '' then
      DayStr := FormatDateTime('d', Now());

    Month := StrToInt(MonthStr);
    if Month < 1 then
    begin
      MonthStr := '1';
      Month := 1;
    end
    else if Month > 12 then
    begin
      MonthStr := '12';
      Month := 12;
    end;

    Day := StrToInt(DayStr);
    if Day < 1 then
    begin
      DayStr := '1';
    end
    else begin
      case Month of
        1,
        3,
        5,
        7,
        8,
        10,
        12: if Day > 31 then DayStr := '31';
        4,
        6,
        9,
        11: if Day > 30 then DayStr := '30';
        2:  begin
          Year := StrToInt(YearStr);
          if Year mod 4 = 0 then
          begin
          if Year mod 100 = 0 then
          begin
          if Year mod 400 = 0 then
          begin
          if Day > 29 then DayStr := '29';
          end
          else begin
          if Day > 28 then DayStr := '28';
          end;
          end
          else begin
          if Day > 29 then DayStr := '29'
          end;
          end
          else begin
          if Day > 28 then DayStr := '28';
          end;
          end;
      end;
    end;
    Text := YearStr + DateSeparator + MonthStr + DateSeparator + DayStr;
  except
    MessageBox(Self.Handle,PChar('日期{' + Text + '}输入错误,请与wangzhijun2005@hotmail.com联系'),'程序错误',MB_ICONERROR+MB_OK);
    Handled := True;
    Abort;
  end;
end;
----------------------------------------------
-
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/11/1 15:43:44
14楼: qingyun 最近没来盒子吗?
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 luke_wang (luke) ★☆☆☆☆ -
普通会员
2005/11/1 16:43:47
15楼: 发现Ehlib V3.6的Bug,楼主能否顺便修改一下。


如果程序动态改变column.ReadOnly属性值,按Tab键后,跳转到的column,即DBGridEh.SelectedIndex并不动态改变。

例如, DBGridEh有ID, TypeName, Income, Outcome, Balance, ActName六列。
其中,ID(autoinc), Income, Balance的ReadOnly设为True。
选择TypeName=Outcome,将Income.ReadOnly=True, Outcome.ReadOnly=False;
选择TypeName=Income,将Income.ReadOnly=False, Outcome.ReadOnly=True;

选择TypeName=Outcome后,按Tab后光标会移动到Outcome列(正常);
  但是选择TypeName=Income后,按Tab后光标会移动到ActName列(正确时应该移动到Income列, SelectedIndex=2)

附件是我的测试包
此帖子包含附件:luke_wang_2005111164341.rar 大小:610.2K
----------------------------------------------
-
作者:
男 gbm_pgs (编程之道) ★☆☆☆☆ -
盒子活跃会员
2005/11/1 19:46:13
16楼: 我也想要一份!
----------------------------------------------
寂静的虚空里诞生了神秘的东西,这种东西恒久存在永不消失,它是所有程序的根源所在,我不知道怎么形容它,姑且称它为编程之道!
作者:
男 lou_nj (瓜瓜) ★☆☆☆☆ -
普通会员
2005/11/2 13:31:22
17楼: 期待……
----------------------------------------------
[glow=255,orange,1][/glow]
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/11/6 20:01:15
18楼: 控件改造好;

主要改进功能:
   1、自动记忆字段宽度;这样客户可以按照个人喜好调节grid里各个字段显示的宽度;
  2、通过右键或(ctrl+s) 设置某些字段被隐藏;因为grid里面可能字段很多,客户可以自己设置把那些不是很关键的隐藏掉,这样方便他们操作,因为grid里的字段太多时,一个版面排不下,客户查阅起来不方便;设置好后,自动记忆,下次软件打开,保持上次关闭的样子;
  3、自动生成序号;让客户一眼就能看出grid里有多少记录;这个功能在我所遇到的客户中大部分都需要;搞不懂为什么大部分开发工具的Grid控件都不提供这个非常关键的功能;
  4、改进girdeh点击标题排序的功能,通过 adoDataSet.sort属性实现,不使用 它本身自带的那种重写sql语句重新open数据集那种消耗资源的方法;
  5、改进其强大的过滤功能,dbGridEh自身的过滤可以通过dbGrideh1.SFFilter.Local:=true;
dbGrideh1.SFFilter.Visible:=true;
然后,在第一行显示一个空行;
但是它的过滤由于AdoDataSet的过滤缺陷;
向 '(no=1 or no=2) and (name=3 or name=4)'这样的条件它不支持,所以一不小心输入条件就抱错,我改进了内部函数,所以现在没有问题了;
同时它默认的过滤是非模糊查询的。
也就是如果你在“编号”字段上输入“123”,那么它就过滤编号等于“123”的。我现在改成过滤编号包含“123”的记录;因为这样更符合查询的实际需求;如果非要过滤 编号等于"123"的,那么你就输入“=123”;
当然,这个强大的功能,大家是不需要做任何设置的。
点右键(Ctrl+Q),就会让GridEh的第一行显示出过滤条件,在里面输入就实现其复杂强大的过滤功能了;
 因为这是DBgrid内部的过滤功能,它其实是通过它对应的DataSet.Filter属性实现的。所有必需把DataSet的Filtered=ture;
同时,假如我们现在想再设置DataSet.Filter的值那么就会把DBgrid内部的过滤功能屏蔽掉;所以我添加了一个函数dbgrideh.ExternFilter ,这样如果需要设置DataSet.Filter,就用dbgrideh.ExternFilter代替,它会自动和dbgrideh的内部过滤'and'一下生成新的过滤条件;

6、dbGridEh默认通过Ctrl+F弹出查找界面实现查找功能,但是一般人不会主要到这个功能,所有我在右键事件里加了一个“查找”按钮;同时它以前的查找界面都是英文的,我改成中文了;

7、通过右键或(ctrl+E)自动导出到Excel,前提是系统安装了office的Excel软件;

待加入功能:
   1、自动导出到文本;
   2、点右键实现打印预览和打印功能;


我耗费了大量的日日夜夜,呕心沥血,加入大量很适用的功能,尤其是其强大的查询(过滤)和查找功能,极大的解放了开发人员的劳动;


  现在无私的奉献出,希望广大的开发人员能够使用,并提出宝贵建议,同时有兴趣的朋友也可以改造后再共享,不断完善;
此帖子包含附件:qingyun_200511620051.rar 大小:421.6K
----------------------------------------------
青云论坛
作者:
男 kg73 (蓝苹果) ★☆☆☆☆ -
盒子活跃会员
2005/11/6 22:47:49
19楼: 太好了!!
----------------------------------------------
-
作者:
男 luke_wang (luke) ★☆☆☆☆ -
普通会员
2005/11/7 10:54:29
20楼: 很不错。
不知道qingyun兄有没有将我说的Bug修改?
----------------------------------------------
-
作者:
男 kg73 (蓝苹果) ★☆☆☆☆ -
盒子活跃会员
2005/11/7 12:12:39
21楼: to qingyun :
你做的《ehlib改良版》试用了一下。
不知道是我用的不对,还是其他什么原因,发现一个小问题,描述如下:
一条纪录中(比如:id,学号,姓名,是否团员。。。),当查找一条不存在的纪录的时候,结果显示的是这样的(见下图)       ,注意那个boolen(是否团员),当点击那个复选框后,再返回“全部数据”时,出现错误。

另:使用的是ADOQuery连接数据    
右键菜单中的“显示全部数据”取消了吗?
此帖子包含附件:
GIF 图像
大小:8.4K
----------------------------------------------
-
作者:
男 kg73 (蓝苹果) ★☆☆☆☆ -
盒子活跃会员
2005/11/7 12:20:13
22楼: 右键菜单
此帖子包含附件:
JPEG 图像
大小:5.3K
----------------------------------------------
-
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/11/7 12:31:52
23楼: 楼上的朋友,你这个错误跟我的控件美有直接的关系。

也就是说,就算你用Dbgrid也会遇到同样的为问题,

id是你的关键字,所以你添加记录的时候,必须先添加上id的值,在添加“是否为团员”,因为当你焦点移动时,数据集会自动post,那样它就发现你的记录因为没有关键字而抱错;
----------------------------------------------
青云论坛
作者:
男 kg73 (蓝苹果) ★☆☆☆☆ -
盒子活跃会员
2005/11/7 16:10:03
24楼: 因为当你焦点移动时,数据集会自动post,那样它就发现你的记录因为没有关键字而抱错;
----------
谢谢,这个我明白的。
再发个图片:(见图),这种状态下,为何boolen仍然可以编辑?ehlib都有这个问题吗?(不好意思,之前没使用过该控件,见笑了  :)  )
此帖子包含附件:
JPEG 图像
大小:20.3K
----------------------------------------------
-
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/11/7 18:16:02
25楼: 如果不想编辑,直接让其ReadOnly=ture不是更好,你说的这种属性是DbGrid一致的,和我改写的GridEh没有直接关系。
也就是说,这不是DbGridEh特有的,如果你用Dbgrid也是遇到同要的情况;

这些公共属性我觉得你直接对比DBGrid就行了;这些功能不是DbGridEh的亮点部分;
----------------------------------------------
青云论坛
作者:
男 kg73 (蓝苹果) ★☆☆☆☆ -
盒子活跃会员
2005/11/7 19:07:01
26楼:  :)
----------------------------------------------
-
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/11/8 9:05:24
27楼: 我高高兴兴的装上了 可是 。。。。
此帖子包含附件:
JPEG 图像
大小:15.4K
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/11/8 9:16:21
28楼: 快帮忙啊  急死了
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/11/8 9:21:25
29楼: 安装的时候,是有顺序的。先编译EhLib70.dpk(但不要安装),再安装DclEhLib70.dpk。 ehlib安装的方法就是这样。我这里也没有什么特别的。
----------------------------------------------
青云论坛
作者:
男 kg73 (蓝苹果) ★☆☆☆☆ -
盒子活跃会员
2005/11/8 12:03:04
30楼: sunyesy (文儿) ,这种罕见的你都遇上了??!!
呵呵。。。。 。。。。 :)          :)
----------------------------------------------
-
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/11/11 16:03:24
31楼: 晕倒  还笑啊  我还是上面的错误 都急死了
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 sephil (NAILY Soft) ★☆☆☆☆ -
盒子中级会员
2005/11/11 16:14:54
32楼: 打开dfm,删除ShowSerialNo那行保存,然后重新打开工程
----------------------------------------------
Copyright 2008 ? NAILY Soft

Click here to redirect to my home
Click here to redirect to my blog
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/11/11 16:22:10
33楼: 但是我想留着这个功能 毕竟楼主好不容易弄上去的
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/11/11 16:32:59
34楼: 自己搞定了 呵呵 高兴
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 laoyangzi (静观) ★☆☆☆☆ -
盒子活跃会员
2005/11/11 16:33:04
34楼: 我还没有看到东东
不过如果并发执行速度真的很快的话,应该很棒
----------------------------------------------
血殇—灭倭寇!平四海!创中华大业!
真爱—经沧桑!历波澜!终一生守候!
作者:
男 etqxq (qxq) ★☆☆☆☆ -
盒子活跃会员
2005/11/11 16:41:21
35楼: 能不能加上符合条件让记录的字体变色
----------------------------------------------
qxq
作者:
男 laoyangzi (静观) ★☆☆☆☆ -
盒子活跃会员
2005/11/11 17:45:53
36楼: 棒!
加上保存到文件的属性
真的很好,可是实际工作中有这样的操作,字段名称是字母的一般有一个类似于字典表的表,里面存储的是对应于该字段的 显示名称 类型 显示宽度 描述 长度 等字段信息和现实信息(也就是说没有真正的字段,只不过是通过数据的规范性描述一个类似字段的功能).能不能在加上这个数据翻译功能.如果能加就真的很有实际意义了.
我做过几个类似的类,但是只能自己用,没有你的那么好.
----------------------------------------------
血殇—灭倭寇!平四海!创中华大业!
真爱—经沧桑!历波澜!终一生守候!
作者:
男 laoyangzi (静观) ★☆☆☆☆ -
盒子活跃会员
2005/11/11 18:10:27
37楼:
关联表          主键  
   A  a1 A  a1   1
   A  a2 A  a2   0
   A  a3 A  a3   0
   C  a1 A  a1   0
数据表
   A  a1  '8'          
   A  a2  '2005-11-11'    
   A  a3  '中国'          
   C  a1  '8'          
   C  c1  'HT20051111'          
   C  c2  '甲方:。。(具体内容)'
 .....
字典表
B 组名 字段名  类型  长度 默认显示宽度 排序 中文显示  描述      是否为空 ...
  A    a1   'varchar' 50  20          0     编号     个人编号   ...
  A    a2   'datetime'8   8          1     出生日期 出生日期
  A    a3   'varchar' 50  20          2     国籍     国籍 如:中国、法国
  C    c1   'varchar' 50  20..........1.....合同编号..........

就是类似这样的翻译功能,如果搂主考虑跨不同语言操作系统的话,如果能做到这样,真的非常棒了。
本人非常佩服搂主的研究精神,希望能共同进步!
----------------------------------------------
血殇—灭倭寇!平四海!创中华大业!
真爱—经沧桑!历波澜!终一生守候!
作者:
男 laoyangzi (静观) ★☆☆☆☆ -
盒子活跃会员
2005/11/11 18:15:05
38楼: 数据表应该加上分类
1   A  a1  '8'          
1   A  a2  '2005-11-11'    
1   A  a3  '中国'     
2   A  a1  '9'          
2   A  a2  '2005-11-21'    
2   A  a3  '中国'        
1   C  a1  '8'          
1   C  c1  'HT20051111'          
1   C  c2  '甲方:。。(具体内容)'
2   C  a1  '9'          
2   C  c1  'HT20051112'          
2   C  c2  '甲方:。。(具体内容)'
----------------------------------------------
血殇—灭倭寇!平四海!创中华大业!
真爱—经沧桑!历波澜!终一生守候!
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/11/13 13:34:47
39楼: laoyangzi (静观) 朋友提出的这个功能,我也非常重视的。
一般数据库设计的时候,字段都是英文,
而grid显示的时候,我们需要把它变成中文。
我的做法是:
   控制其DataSet的displayName;

具体实现是:
    1、在数据库里建立一张表
      create table EnToCnFields 
    ( En_Field , varchar(40),
      Cn_Field , varchar(50),
      Primary key (En_Field );

   2、把所有业务表的字段名倒入到上面表里的EnField 字段里,然后维护CnField 的值;
  比如:
      EnField       CnField 
       Cust_no       客户编号
       Cust_name     客户名称
       ..
  3、做一个函数EnToCnFields,当数据集open后,调用它;

procedure TFrmBase.EnToCnFields(DataSet: TDataSet);
var

  i: Integer;
begin
  if qryEnToCn.IsEmpty then
  begin
    qryEnToCn.Connection := self.AdoConn;
    qryEnToCn.sql.Text :=
      'select * from EnToCnFields ';
    qryEnToCn.Open;
  end;
  for i := 0 to DataSet.FieldCount - 1 do
  begin
    if qryEnToCn.Locate('EN_FIELD', DataSet.Fields[i].FieldName,
      [loPartialKey]) then
      DataSet.Fields[i].DisplayLabel := FQFieldNameChEn.FieldByName('CN_FIELD').AsString;
  end;
end;
----------------------------------------------
青云论坛
作者:
男 laoyangzi (静观) ★☆☆☆☆ -
盒子活跃会员
2005/11/14 10:57:06
40楼: 12分感谢楼主!
  这的确是个好方法,可以解决中英文转换。

  还有就是我上面的动态模拟字段的问题,不知道可不可以实现?
其实这个要脱离数据库的管理了,相当于自定义管理,所有字段有程序控制。
不知楼主有没有研究过这方面。
----------------------------------------------
血殇—灭倭寇!平四海!创中华大业!
真爱—经沧桑!历波澜!终一生守候!
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/11/27 18:20:42
41楼: laoyangzi (静观) 朋友,其实我对动态模拟字段的问题,也很关注,就是不通过数据库里的表,在DbGridEh上模拟一个表,可以在上面维护,但是不需要保存。

相当于一个临时表的功能。

但是我不会。
----------------------------------------------
青云论坛
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/11/28 21:05:49
42楼: 不知道大家对这个控件使用之后感觉怎样?

但是我最近对这个控件有个令我苦恼的问题,就是如果要想设置它的PopMenu属性,就会覆盖掉它默认的右键时间?

所以我问了这样的问题:
如何在控件里增加右键菜单?
 比如我们自定义一个 TmyEdit=Class(Tedit);

想在 TmyEdit 默认加上 一个右键PopupMenu菜单,菜单里加上几个子按钮,写些
事件;
比如 ShowMessag('第1个默认右键按钮');ShowMessag('第2个默认右键按钮');
等等。
这个功能很容易实现,但是有一个问题,

就是当使用TmyEdit 的时候,如果在它PopupMenu属性上添上一个PopupMenu1,那么该菜单里的按钮就覆盖了TmyEdit控件里默认的按钮。如何让这两个菜单按钮相加,显示所有菜单按钮呢?也就说设置TmyEdit 的PopupMenu 属性后,要对它内部定义的PopupMenu没有影响。

我前后尝试了三年多,仍然没有搞定。
我想覆盖其父类Tcontrol.SetPopupMenu 增加代码;
但是该函数不是虚函数,无法覆盖;

希望朋友们给与技术支持。 

http://www.delphibbs.com/delphibbs/dispq.asp?lid=3278920

希望大家帮我想想,完善该控件。
----------------------------------------------
青云论坛
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2005/11/29 2:37:19
43楼: :)好东东

这两天用了一下,发现BUG
1.当切换过滤条件时,footer 统计记录数没有及时体现(例:原10条,过滤后5条,隐藏过滤条件后10条,但此时footer统计还是5条,需要再点击Grid才会更新)。
2.如果在窗体procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  {if Key=#13 then
  begin
    Keybd_event(VK_TAB, 0, 0, 0);
    Key:=#0;
  end;}
end;
吃掉回车键,则过滤不能用。
3.设显示行数时,列所设定的字体颜色无效。
4.发现显示行数时,行数会出现叠影(原因不明)。
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/11/29 8:02:15
44楼: 遇到了好多麻烦 

多表显示到DBGRID 运行后 右键 只有导出EXCEL和过滤能用 其他设置显示和查找都不能用 郁闷中。。。
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 xyching (xyching) ★☆☆☆☆ -
普通会员
2005/11/29 8:48:37
45楼: delphi6可以使用吗
----------------------------------------------
-
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2005/11/29 14:15:36
46楼: delphi6直接可以用。
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2005/11/29 15:13:21
47楼: 传张图上来:
1:过滤条件清除后,记录还原,但sumlist没有马上还原。
2:列设颜色后无效
3:当列字体不一样时,就会出现重影。画列标时每多一列就多画一次。
此帖子包含附件:
JPEG 图像
大小:22.6K
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2005/11/29 18:25:52
48楼: 自已改了:
1.解决Dbgrideh还没有datasource 或datasource没有dataset,或dataset未active
出现的地址越界.
{DBGridEh.pas 13375行左右}
procedure TCustomDBGridEh.TitleClick(Column: TColumnEh);
begin
  Screen.Cursor := crSQLWait;
  try
    //11-29 add agu if not exist datasource or dateset
    if not Assigned(DataSource) then Exit;
    if DataSource.DataSet= nil then Exit;
    if not DataSource.DataSet.Active then Exit;
    ...

2.解决了各列无法设置字体颜色以及行标栏叠影
{DBGridEh.pas 10611行左右}
procedure TCustomDBGridEh.DrawColumnCell(const Rect: TRect; DataCol: Integer;
  //增加DataCol=0即行标栏的过滤
  if (dgIndicator in Options) and FShowSerialNo and (DataCol=0) then
  ...

3.解决取消过滤后,SumList及时重算
{DBGridEh.pas 13100行左右}
procedure TCustomDBGridEh.SwitchVisibleFilterCon;
begin
  clrInnerFilter;
  //add agu  11-29 Cancel Filter must reCal;
  if STFilter.Visible then SumList.RecalcAll ;
  ...

4.过滤时保留原来的排序。
{DbUtilsEh.pas 1338行左右 }
procedure TSQLDatasetFeaturesEh.ApplyFilter(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);

   //TDBGridEh(Sender).ClearSort;
   注释掉,过滤时我需保存原来的排序。
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2005/11/29 19:10:34
49楼: 再增加一个:
5.如果有设定事件OnApplyFilter,则过滤不能用。当成AfterFilter用了:)
{DBGridEH.pas 16185行左右}
      {change
      if Assigned(FOnApplyFilter) then
        FOnApplyFilter(Self)
      else
        DefaultApplyFilter;
      /change}
      {to}
      DefaultApplyFilter;
      if Assigned(FOnApplyFilter) then
        FOnApplyFilter(Self)
      {/to}

2.解决了各列无法设置字体颜色以及行标栏叠影(补充上面第2个)
{DBGridEh.pas 10611行左右}
procedure TCustomDBGridEh.DrawColumnCell(const Rect: TRect; DataCol: Integer;
var
  L: TBrushStyle;
  C: TColor;
  Str: string;
  //增加DataCol=0即第1栏的过滤
  if (dgIndicator in Options) and FShowSerialNo and (DataCol=0) then
    L := Canvas.Brush.Style;
    C:=Canvas.Font.Color ;//颜色也要还原
    ...
    //进行还原
    Canvas.Brush.Style := L;
    Canvas.Font.Color :=C;;//颜色也要还原
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/11/29 20:39:30
50楼: 2.解决了各列无法设置字体颜色以及行标栏叠影
{DBGridEh.pas 10611行左右}
procedure TCustomDBGridEh.DrawColumnCell(const Rect: TRect; DataCol: Integer;
  //增加DataCol=0即行标栏的过滤
  if (dgIndicator in Options) and FShowSerialNo and (DataCol=0) then
----------
-- 你加了一个DataCol=0 ,这个我开始做的时候也考虑过,但是当Grid里的字段
很多时,你把滚动条拉到靠右边的时候,就会发现 序号看不见了。

当然,我没有控制DataCol,让系统多消耗了资源,不过DataCol确实是不能控制的。你按我上面的做一下就会发现序号不见了。

  其实我一直以为我这种处理序号的方法不太好,但是也确实想不出什么好的办法。希望大家 齐心协力的想想。





4.过滤时保留原来的排序。
{DbUtilsEh.pas 1338行左右 }
procedure TSQLDatasetFeaturesEh.ApplyFilter(Sender: TObject;
  DataSet: TDataSet; IsReopen: Boolean);

   //TDBGridEh(Sender).ClearSort;
   注释掉,过滤时我需保存原来的排序。
----------
对于这个问题,我测试过,如果在过滤得时候,有排序,那么可以效率会减低100倍;
我做个测试的。所以我就故意不允许过滤得时候保持排序。

非常感谢楼上 cjrb  朋友的改进,根据您提供的信息,我再做改进发布上来。
不过最近困挠我的是该进后的PopMenu属性,
因为当初让它自带4个右键菜单,但是如果在使用的时候,设置其PopMenu,那么该
PopMenu就会覆盖掉那4个菜单,
如何 让PopMenu 不覆盖那4个菜单,而是叠加这4个菜单?
希望cjrb  朋友也能帮我们尝试一下。

希望大家共同完善。
----------------------------------------------
青云论坛
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2005/11/29 20:43:34
50楼: {DBGridEH.pas 13096行}
//Dbgrideh还没有datasource 或datasource没有dataset,或dataset未active
出现的地址越界.
//当显示再隐藏后会越界

procedure TCustomDBGridEh.clrInnerFilter;
begin
  if not Self.STFilter.Local then Exit;
  {add 这边也会越界}
  if not Assigned(DataSource) then Exit;
  if DataSource.DataSet= nil then Exit;
  if not DataSource.DataSet.Active then Exit;
  {/add}
  ClearFilter;
  SetExternFilter(FExternFilter);
end;
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2005/11/29 21:25:18
51楼: 有没设置sort,我试了access ,2万5记录,六个字段,
时间差一倍,好像没100倍那么多啊。
建议sort不要屏蔽,或可以设定。

举例:
sort字段a    有sort        无sort
字段a      条件>1001      条件>1001
1001         100101         1020
100101       100102         ...
100102       1020 
1020         102001  
102001


另:
procedure TCustomDBGridEh.ClearSort;
var
  I: Integer;
begin
  //应先判断是否为TADOQuery。
  if Tadoquery(Self.DataSource.Dataset).Sort = '' then
    Exit;
  Tadoquery(Self.DataSource.Dataset).Sort := '';
  for I := 0 to Self.Columns.Count - 1 do
  begin
    if Self.Columns[I].Title.SortMarker = smNoneEh then
      Continue;
    Self.Columns[I].Title.SortMarker := smNoneEh;
  end;
 //smUpEh
end;
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 leon7808 (烟灰) ★☆☆☆☆ -
普通会员
2005/11/30 7:11:29
52楼: 好东西喔 , 楼主辛苦了
----------------------------------------------
-
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2005/11/30 10:02:34
53楼: 关于popupmenu的:只能对设计时的菜单增加,运行时动态赋值的不行。


将constructor TCustomDBGridEh.Create(AOwner: TComponent);的
//  Self.SetPopupMenu;
改在下面这边
{DBGridEh.pas 12020行左右}
procedure TCustomDBGridEh.Loaded;
var
  I: Integer;
begin
  inherited Loaded;
  //add
  Self.SetPopupMenu;
{DBGridEH.pas 9120行左右}
procedure TCustomDBGridEh.SetPopupMenu;
begin
  ...
  ...
  //如果没有设定菜单,再自建,否则直接添加菜单
  if not Assigned(Self.PopupMenu) then
  begin
    TmpPopupMenu := TPopupMenu.Create(Self);
    TmpPopupMenu.AutoHotkeys := maManual;
    Self.PopupMenu := TmpPopupMenu;
  end;
  PopupMenu.Items.Add(PopMenuItemFilterVisible);
  PopupMenu.Items.Add(PopMenuItemSearch);
  PopupMenu.Items.Add(PopMenuItemSpace);
//  PopupMenu.Items.Add(PopMenuItemAllRec);
  PopupMenu.Items.Add(PopMenuItemFieldsVisible);
  PopupMenu.Items.Add(PopMenuItemExcel);
  PopupMenu.OnPopup := PopupMenuPopup;
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/11/30 20:08:50
54楼: 多谢cjrb (Thinking In 魂) ▲▲△△△  朋友提供关于popupmenu的解决方法;
我一直不知道有个Loaded事件;


我试过了确实可行



如果需要动态添加右键事件,我前段时间研究过。
希望能对大家有用。
{----------
   过程名:  TFrmBase.UnitePMenu
     作者:  dzc
     日期:  2005-10-24 22:33:17
 功能描述:

----------}

procedure TFrmBase.UnitePMenu(pMenuSrc, pMenuDec: TPopupMenu; bAddFist: Boolean);
var
  AItme: TMenuItem;
  I, iCount: integer;
begin
  iCount := pMenuDec.Items.Count;
  if not bAddFist then
    for I := 0 to iCount - 1 do
    begin
      AItme := pMenuDec.Items[0];
      pMenuDec.Items.Delete(0);
      pMenuSrc.Items.Add(AItme);
    end
  else
    for I := 0 to iCount - 1 do
    begin
      AItme := pMenuDec.Items[0];
      pMenuDec.Items.Delete(0);
      pMenuSrc.Items.Insert(I, AItme);
    end
end;
----------------------------------------------
青云论坛
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/12/15 10:34:51
55楼:  cjrb 朋友,我是楼主。
 我想有个功能也非常实用,就是当有Footer的时候,footer的第一列最好能显示记录的总条数,这样客户一下子就可以看出总共有多少条记录。
  希望您能研究一下怎么实现?

过几天等把这些功能都搞好了。我把最新的ehlib 再上传一下。
此帖子包含附件:
JPEG 图像
大小:99.6K
----------------------------------------------
青云论坛
作者:
男 sunq (№2) ★☆☆☆☆ -
普通会员
2005/12/15 11:42:41
56楼: 支持一下!希望看到完善后的版本!
----------------------------------------------
★★★★★  №2  DELPHI之路自此开始
作者:
男 rhlw (lw) ★☆☆☆☆ -
盒子活跃会员
2005/12/16 11:34:17
57楼: 请问楼主及文儿,你在27楼所提出的问题,我也试过,请问如何搞定.谢谢!
开始我还以为是我的电脑有问题: 因我是卸了原来的3.3版再安装的.我家里的电脑原来没有安装过EHLIB的.可以运行.
----------------------------------------------
-你的一句话,会令我少走许多弯路,衷心的多谢指点。
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2005/12/23 14:47:43
58楼: 多表头可以设置不?没试过
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 zjyn (zjyn126) ★☆☆☆☆ -
普通会员
2005/12/23 15:44:28
59楼: 好东西,怎么样取消右键菜单和点击表头排序的功能呢,不是所有的地方都用得上,如果能的话就更好了,辛苦了,敬礼!!!
----------------------------------------------
-
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2005/12/28 18:45:27
60楼: 我是楼主。

控件又改进了。
改正了很多错误;
大家再尝试用用吧。
此帖子包含附件:qingyun_20051228184448.rar 大小:626.0K
----------------------------------------------
青云论坛
作者:
男 rafe (rafer) ★☆☆☆☆ -
普通会员
2005/12/28 23:39:28
61楼: 下载安装了并加入数据运行有如下错误提示,怎么会事呢?
此帖子包含附件:
JPEG 图像
大小:15.0K
----------------------------------------------
-
作者:
男 siwei_liulang (思维流浪) ★☆☆☆☆ -
普通会员
2006/1/1 16:56:12
62楼: 请教:
我的Dbgrideh自动求和不精确
SQL数据库,Float类型。
5位小数只能显示3位或4位
怎么显示正确数据呢?
有朋友说要'设成自动宽度,或者字体小些就可以了'
自动宽度怎么设呢?
字体已经最小了
----------------------------------------------
叶子的离去是风的追求还是树的不挽留。 
孩子把玩具当朋友。成人把朋友当玩具。
作者:
男 chang_soft (常常) ★☆☆☆☆ -
盒子活跃会员
2006/1/2 8:29:53
63楼: 好东西,谢谢指导
----------------------------------------------
-
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2006/1/10 12:36:22
64楼: 最新控件
此帖子包含附件:qingyun_2006110123538.rar 大小:626.2K
----------------------------------------------
青云论坛
作者:
男 samsonleung (大头叔叔) ★☆☆☆☆ -
普通会员
2006/1/11 15:35:09
65楼: 顶一下,支持楼主。
----------------------------------------------
//天天学习,天天delphi
http://www.cnblogs.com/samsonleung/
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2006/1/19 9:09:50
66楼: 出现安装运行错误的原因是:
系统原本安装的旧版本的路径没移除掉。
移掉重新Build就行。
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2006/1/19 9:20:33
67楼: 新版本没装。
旧版本发现一个问题,新版本应该也还存在。
当设置Column[i]的GetCellParams(
  Sender: TObject; EditMode: Boolean; Params: TColCellParamsEh);
begin
  if Params.Text='0'   then//将0显示为空的话
    Params.Text :='';
end;
这段代码就不启作用。

原因是那段班马线代码。

如果把那段班马线代码改在
procedure TCustomDBGridEh.GetCellParams(Column: TColumnEh; AFont: TFont;
  var Background: TColor; State: TGridDrawState);

则选取的颜色则失效。
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 cjrb (Thinking In 魂) ★☆☆☆☆ -
盒子活跃会员
2006/1/20 8:54:18
68楼: 关于footer的第一列最好能显示记录的总条数

早上试了下,在差不多12000行左右

procedure TCustomDBGridEh.LinkActive(Value: Boolean);
begin
  ...
  //在最后一行增加
  {agu add}
  //如果第一列没被设定,自动设为记录总数,
  //前提FooterRowCount>0 且SumList的Active为True
  if (FooterRowCount >0) and (Columns.Count>0) and (Columns[0].Footer.ValueType=fvtNon) then
    Columns[0].Footer.ValueType :=fvtCount;
end;
----------------------------------------------
按此在新窗口浏览图片 充电..........
作者:
男 rhlw (lw) ★☆☆☆☆ -
盒子活跃会员
2006/2/26 16:02:52
69楼: 各位大哥,我点右键"显示过滤条件"后,可输入过滤条件,但再点击右键"隐藏过滤条件"就会出现如下错误.请指点,多谢.
此帖子包含附件:
JPEG 图像
大小:233.3K
----------------------------------------------
-你的一句话,会令我少走许多弯路,衷心的多谢指点。
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2006/3/5 17:02:17
70楼: 楼上兄弟凡是安转遇到问题的,请把你们以前安转的Ehlib全部卸载后,再安装这个。
----------------------------------------------
青云论坛
作者:
男 rhlw (lw) ★☆☆☆☆ -
盒子活跃会员
2006/3/7 21:23:29
71楼: 多谢楼主,辛苦了.
待加入功能:
   1、自动导出到文本;
   2、点右键实现打印预览和打印功能;
其中第2点尤其有用,如果能在打印预览中可以设置页面(包括列宽和行高,页眉和页脚)就更好了.
 另有一问题: 上面我所说的问题还是会出现,即如果按右键选择显示或隐藏过滤条件时,还是会出现问题.我的系统是新安装的,delphi也是新安装的7.0,之前还没有安装过ehlib直接安装你06110发布的.我发现原来是与数据源有关.用ADO来连接ACESS没有问题,用BDE来和PAXDOX则有问题出现这种情况.能否修改?



 楼主加油,再次感谢您的付出.多谢!
----------------------------------------------
-你的一句话,会令我少走许多弯路,衷心的多谢指点。
作者:
男 gdlpc (gdlpc) ★☆☆☆☆ -
普通会员
2006/3/7 21:45:01
72楼: 楼主:你好。
1、RestoreGridLayoutIni函数如何使用?请给具体代码。
2、你的网站(论坛)为什么不给注册?
----------------------------------------------
-
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2006/3/13 20:04:55
73楼:
我是楼主,我现在的DBGridEh已经用到了目前公司的一个大项目上,软件正在测试中。
  客户发现一个问题:
    就是在 Grid的第一行的某个字段上输入查询条件后,鼠标焦点再转到其它字段上,查询条件会自动复制,这样其实不符合一般人的操作习惯。

  我想把这个自动复制功能去除掉,不知道该如何实现,希望大家能够和我一起探讨探讨.
此帖子包含附件:
JPEG 图像
大小:39.6K
----------------------------------------------
青云论坛
作者:
女 sunyesy (文儿) ★☆☆☆☆ -
盒子活跃会员
2006/3/13 22:29:25
74楼: 早发现拉
----------------------------------------------
大象说他Delphi比我好,我想了三天没明白是怎么回事!按此在新窗口浏览图片
作者:
男 goodhelp (goodhelp) ★☆☆☆☆ -
普通会员
2006/3/15 18:31:49
75楼: 为什么用在带form的dll中,关闭时调用这个dll的主程序会报错而退出!用原版的dbgrideh不会出错!
希望楼主看一下!
----------------------------------------------
-
作者:
男 kgb_16 (king) ★☆☆☆☆ -
普通会员
2006/4/26 16:44:09
76楼: 好东西啊,怎么一直都没有发现呢,谢谢楼主
----------------------------------------------
-
作者:
男 ljjcloudy2 (jiajin) ★☆☆☆☆ -
普通会员
2006/4/28 14:34:37
78楼: 谢谢楼主,太强了!!!
请问你做delphi多长时间了
----------------------------------------------
-
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2006/5/10 12:03:59
79楼: 我是楼主,现在已经改造了4.0版本,
改造好后,遇到一些麻烦,
新版本中用到了内存表控件 MemTableEh ,
这个控件看上去很不错,过滤得时候可以下拉出该列中所有不重复的信息;
但是有两个非常致命的缺陷:
1、速度太慢,几乎不能忍受,大家测试的时候也许只有几百条数据,也许没有留意这个问题,我测试的时候都是几千条到几万条;这些数据如果用AdoQuery直接关联,那么很快就会连接上,如果 MemTableEh ,没有个半分钟左右的时间出不来,有这个时间,你可以抽半根烟了;所以这个看似不错的功能其实多少实用价值;

2、如果对dbGridEh进行排序,那么以前我们一般用 AdoQuery.Sort:='...';
   现在只能用MemTableEh.SortOrder:='...';
 这个速度也很慢,而且有个致命的错误,如果DbGridEh里的字段位置调一下,排序就不准了。


所以我已经改造了这个ehlib4.0,从它提供的Demo看,感觉不错,但是感觉不够成熟;

也许是我实用的方法不是很正确,希望大家讨论讨论4.0的实用感受
----------------------------------------------
青云论坛
作者:
男 gbm_pgs (编程之道) ★☆☆☆☆ -
盒子活跃会员
2006/5/10 16:07:10
80楼: ehlib3.6在D6下好像有问题,经过测试,将adoconnection1和adoquery放DM去连接时没有问题,就是在关闭窗体的时候就出错了!
我把adoconnection1和DataSet类直接放窗体就没有问题,不知是何固?
----------------------------------------------
寂静的虚空里诞生了神秘的东西,这种东西恒久存在永不消失,它是所有程序的根源所在,我不知道怎么形容它,姑且称它为编程之道!
作者:
男 gbm_pgs (编程之道) ★☆☆☆☆ -
盒子活跃会员
2006/5/10 16:35:35
81楼: 嗯,下了:qingyun_2006110123538.rar 大小:626.2K 
---------- 
之后重新编译就好了!
----------------------------------------------
寂静的虚空里诞生了神秘的东西,这种东西恒久存在永不消失,它是所有程序的根源所在,我不知道怎么形容它,姑且称它为编程之道!
作者:
男 gbm_pgs (编程之道) ★☆☆☆☆ -
盒子活跃会员
2006/5/10 16:41:45
82楼: 想请教一下楼主和各位兄弟姐妹,像最后一行要显示"总计"或"总记录"是怎么弄的?我只看到有一个
DBSumList1控件,DBGRIDEH控件是在哪设的啊?
----------------------------------------------
寂静的虚空里诞生了神秘的东西,这种东西恒久存在永不消失,它是所有程序的根源所在,我不知道怎么形容它,姑且称它为编程之道!
作者:
男 zh2000 (小明) ★☆☆☆☆ -
盒子活跃会员
2006/5/18 16:36:16
83楼: 楼主你好,提两个问题?...请问,1: 改后的 dbgrideh 不能 指定列吗?  select * from XS  所有列出来就 可以 保存 隐藏的列...但我设计期 指定列 后,运行后就不能 保存 隐藏列了...保存后再进入 又 恢复 原状...还有 2: 不能 调整 列的位置 后 也能 保存吗?  即 第 10 列 调到 第一列......以上问题不知道 是不是我不会用 :(....
----------------------------------------------
非常感谢各位回答问题....谢谢.....
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2006/5/18 18:49:36
84楼: 最新的控件,已经解决

楼上朋友提出的问题:

具体下载,可以参考:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3323881
----------------------------------------------
青云论坛
作者:
男 hjjszhshs (我心飞翔) ★☆☆☆☆ -
盒子活跃会员
2006/7/22 9:35:41
85楼: 非常感謝﹐但還有一問題請幫忙解決。
如下﹕筛选前有颜色,筛选后,颜色怎样消失了(如图)。我想筛选后颜色仍然保留,请问怎样处理?.
此帖子包含附件:
JPEG 图像
大小:54.3K
----------------------------------------------
-
作者:
男 tyc2000 (Tyc) ★☆☆☆☆ -
盒子活跃会员
2006/7/22 11:04:08
86楼: 非常感谢楼主!辛苦了!下载了,试用先。
----------------------------------------------
-
作者:
男 chiefboy (boyb) ★☆☆☆☆ -
普通会员
2006/7/22 11:52:02
87楼: 一本书上说,只有很少的免费的三方控件具有顶级水平,和商用组件不相上下。我认为这种说法是有道理的,虽然免费的多,但是人力资源分散。我认为最好的就是创建一个组织,开发并维护一个自由控件库!
  我看这个帖子从去年到今年,这么长时间还存在如许bug,虽然说没有没有bug的代码,但是这个时间太长了,作为商品发布的话成本太高了。
----------------------------------------------
-
作者:
男 cysky (清风一剑) ★☆☆☆☆ -
盒子活跃会员
2006/7/25 23:07:09
88楼: 谁有这个swf教程,发给我一份,谢谢了,
hedaboy@sina.com.cn
----------------------------------------------
一位计算机专业教师
一位delphi的爱好者
作者:
男 hnxxcxg (咏南中间件) ★☆☆☆☆ -
盒子活跃会员
2007/12/18 17:11:57
89楼: 解决在数据集增加时行号不对的改进
procedure TCustomDBGridEh.DrawColumnCell(const Rect: TRect; DataCol: Integer;
  Column: TColumnEh; State: TGridDrawState);
var
  L: TBrushStyle;
  C: TColor;
  Str: string;
  i,t: Integer;
begin
  //add by cxg
  if (dgIndicator in Options) and FShowSerialNo then
  begin
    L := Canvas.Brush.Style;
    C:= Canvas.Font.Color ;
    Canvas.Brush.Style := bsClear;
    Canvas.Font.Color := clBlack;
    if Column.Field.Dataset.State = dsInsert then     //append
    begin
      if DataSource.DataSet.RecordCount-datarowcount<0 then
        t:=0;
      if DataSource.DataSet.RecordCount-datarowcount=0 then
        t:=1;
      if DataSource.DataSet.RecordCount-datarowcount=1 then
        t:=2;
      if DataSource.DataSet.RecordCount-datarowcount>=2 then
        t:=DataSource.DataSet.RecordCount-datarowcount+1;
      i:=MouseCoord(Rect.Left + 1, Rect.Top + 1).Y+t;
      str := Format('%d', [i]);
    end
    else if (SumList.RecNo > 0) then
      Str := Format('%d', [SumList.RecNo]);
    Canvas.TextOut((ColWidths[0] - Canvas.TextWidth(Str) - IndicatorWidth) shr
      1, Rect.Bottom - Canvas.TextHeight('0') - 2, Str);

    Canvas.Brush.Style := L;
    Canvas.Font.Color:=C;
  end;
  //end by cxg
  
  if Assigned(OnDrawColumnCell)
    then OnDrawColumnCell(Self, Rect, DataCol, Column, State);
end; 

增加行号具体步骤:
http://delphibbs.com/keylife/iblog_show.asp?xid=29356
----------------------------------------------
中间件QQ群: 92449782 博客: http://www.cnblogs.com/hnxxcxg/
作者:
男 qingyun (qingyun) ★☆☆☆☆ -
盒子活跃会员
2008/1/28 21:49:14
90楼: 呵呵,我是楼主,这个长帖很久没有来关注了,看到大家这么热心关心,献计献策,真是感动的热泪盈眶;
 最近半年,公司项目太忙,没有继续完善;其实我想把DBGrid再做大量改造,具有更强大功能,主要侧重在分析上,比如 能够类似CxGrid的分组功能;能做类似股票软件的30日均线等等,能够和DbChart内联起来,能自定义输出简单的报表,这些只要放一个DBGrid就行, 用它做项目时,这些功能不需要写任何代码;
这样我们以后做软件项目的时候,就可以少做查询统计模块,少做报表,少做图形化分析;

希望大家献计献策。多多贡献。

我想我们是否可以搞一个DBGRidEh的研发小组。做一个超强的Grid控件。
极大的方便项目的开发;

有兴趣的朋友,大家可以构思一下,
我想先在我的网站 http://www.daizhicun.com 上开辟一个区域,专门研究DBGridEh的改良;以后可以扩展更强的其他类似控件,搞的好的话,继续扩展其他方向,做成类似cnpack那种模式;
----------------------------------------------
青云论坛
作者:
男 xtx_xiegao (reboot) ★☆☆☆☆ -
普通会员
2008/1/29 13:28:37
91楼: 支持楼主!
----------------------------------------------
-
作者:
男 xtx_xiegao (reboot) ★☆☆☆☆ -
普通会员
2008/1/29 19:40:10
92楼: 请问楼主能不能DBGridEh中实现这个贴子的效果?

http://bbs.2ccc.com/topic.asp?topicid=282252
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行1410.156毫秒 RSS