求助,关于GRID

yuanque 2002-09-03 01:08:53
我想用CB中的TStringGrid来实现数据的展示(不一定是数据库中的数据,所以没有考虑用TDBGrid),但TStringGrid我感觉有点简单,因为我希望单元格可以有多种样式(如按钮,下拉框,图片,单选框等),不知怎么解决好,希望大家帮忙出主意!
...全文
70 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanreid 2002-09-03
  • 打赏
  • 举报
回复
比如要TStringGrid支持TListBox作为编辑对象(即下拉框),
第一步:可以先从TCustomListBox继承一个自己的类,假如叫TPopupListbox。必须实现两个保护的方法(protected):
void __fastcall CreateParams(Controls::TCreateParams & Params);
void __fastcall CreateWnd(void);

同时还需要处理一些按键和鼠标事件
DYNAMIC void __fastcall KeyPress(char &Key);
DYNAMIC void __fastcall MouseUp(TMouseButton Button, TShiftState Shift, int X, int Y);

第二步:从TInplaceEdit类继承自己的TGridInplaceEdit,并在TPopupListbox类中把TGridInplaceEdit添加为友元。
添加如下代码:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_SETCURSOR, TWMSetCursor, WMSetCursor)
VCL_MESSAGE_HANDLER(WM_PAINT, TWMPaint, WMPaint)
VCL_MESSAGE_HANDLER(WM_LBUTTONDBLCLK, TWMLButtonDblClk, WMLButtonDblClk)
VCL_MESSAGE_HANDLER(WM_KILLFOCUS, TMessage, WMKillFocus)
VCL_MESSAGE_HANDLER(WM_CANCELMODE, TMessage, WMCancelMode)
VCL_MESSAGE_HANDLER(CM_CANCELMODE, TCMCancelMode, CMCancelMode)
END_MESSAGE_MAP(TInplaceEdit)
处理这些消息。

第三步从TStringGrid的父类TCustomGrid继承你的控件,并把
TGridInplaceEdit添加为友元。
在(protected)重载如下:
void __fastcall DrawCell(int ACol, int ARow, const Windows::TRect &ARect, Grids::TGridDrawState AState);
TInplaceEdit* __fastcall CreateEditor(void);
DYNAMIC AnsiString __fastcall GetEditText(int ACol, int ARow);
DYNAMIC int __fastcall GetEditLimit(void);
DYNAMIC void __fastcall SetEditText(int ACol, int ARow, const System::AnsiString Value);
void __fastcall HideEditor(void);


在public中重载:
DYNAMIC bool __fastcall CanEditAcceptKey(char Key);
DYNAMIC bool __fastcall CanEditModify(void);
bool __fastcall CanEditShow(void);
DYNAMIC AnsiString __fastcall GetEditMask(int ACol, int ARow);

这些都是看VCL的源程序得到的灵感,时间长了比较生疏了,框架和实现方式大概就是这样了,有问题可以参考delphi的源程序。祝好运!

yuanque 2002-09-03
  • 打赏
  • 举报
回复
帮帮忙,分不够尽管开口嘛
yuanque 2002-09-03
  • 打赏
  • 举报
回复
楼上是不是指TStringGrid有一个Objects属性?能否简单举个例子,感激不尽
yuanreid 2002-09-03
  • 打赏
  • 举报
回复
如果不用别人的,只能自己编写这种控件,我也尝试过,TStringGrid实际已经预留了扩展的空间,他的每个单元支持用TcomboBox或CheckBox填充。感觉不是很困难,
yuanque 2002-09-03
  • 打赏
  • 举报
回复
当然不能用listview了,是要用表格控件。那不是一个层面的东东。
vixkywx 2002-09-03
  • 打赏
  • 举报
回复
用listview吧
yuanque 2002-09-03
  • 打赏
  • 举报
回复
因为工程的需要不能用别人的控件,有源码吗,请指点一两个网站,谢谢:)
JamesJiang 2002-09-03
  • 打赏
  • 举报
回复
去找几个增强型的Grid控件,网上大把。
新手求助RBF神经网络数据预测问题-数据.xls 本程序用前六个数据预测下一数据,前200组数据用于训练,用后80组数据进行预测,可预测结果为一个值,请大家指教: 源程序为: clc clear close all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %每五个数据整合, x=xlsread; n=length m=5; sum=0; j=1; x1=zeros); for k=1:m:n     for i=k:         sum=sum x;     end     x1=sum;     j=j 1;     sum=0; end j t=1:; figure plot;%,'d-m' hold on; grid on title; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %归一化处理 [x2,mint,maxt] = premnmx figure plot;%,'d-m' hold on; grid on title; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %输入数据 for k=1:1:200     p_train=[x2 x2 x2 x2 x2 x2]; 5*6     t_train=x2; 5*1 end     p_train=p_train'; %6*195     t_train=t_train'; %1*195 for z=1:1:81     p_test=[x2 x2 x2 x2 x2 x2];     t_test=x2; end      p_test=p_test';      t_test=t_test'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %建立 RBF 网络                      goal = 0.0001;                     % 训练误差的平方和 spread = 0.01;                     % 此值越大,需要的神经元就越少 MN = size;              % 最大神经元数 DF = 1;                            % 显示间隔 net = newrb; data_out=sim p_mse=mse figure plot hold on plot title; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %预测并作图 y=sim y_mse=mse figure plot; hold on; plot title; legend;
新手求助RBF神经网络数据预测问题-历史开奖数据.xlsx 本程序用前六个数据预测下一数据,前200组数据用于训练,用后80组数据进行预测,可预测结果为一个值,请大家指教: 源程序为: clc clear close all %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %每五个数据整合, x=xlsread; n=length m=5; sum=0; j=1; x1=zeros); for k=1:m:n     for i=k:         sum=sum x;     end     x1=sum;     j=j 1;     sum=0; end j t=1:; figure plot;%,'d-m' hold on; grid on title; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %归一化处理 [x2,mint,maxt] = premnmx figure plot;%,'d-m' hold on; grid on title; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %输入数据 for k=1:1:200     p_train=[x2 x2 x2 x2 x2 x2]; 5*6     t_train=x2; 5*1 end     p_train=p_train'; %6*195     t_train=t_train'; %1*195 for z=1:1:81     p_test=[x2 x2 x2 x2 x2 x2];     t_test=x2; end      p_test=p_test';      t_test=t_test'; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %建立 RBF 网络                      goal = 0.0001;                     % 训练误差的平方和 spread = 0.01;                     % 此值越大,需要的神经元就越少 MN = size;              % 最大神经元数 DF = 1;                            % 显示间隔 net = newrb; data_out=sim p_mse=mse figure plot hold on plot title; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %预测并作图 y=sim y_mse=mse figure plot; hold on; plot title; legend;
求助反应谱滤波程序-11.doc 本人有一组数据反应谱数值为【26.51 26.75 26.93 27.11 27.44 27.69 28.33 28.38 28.19 29.08 30.17 31.55 33.86 33.81 33.27 37.16 39.38 39.41 48.92 51.26 55.19 51.96 50.24 63.5 76.3 64.35 54.85 60.12 65.1 46.62 44.96 54.73 69.64 79.94 70.08 65.79 66.41 71.95 75.27 72.8 67.53 49.4 49.44 38.8 27.92 29.89 35.88 33.15 26.76 21.8 18.5 11.29 9.15 11.47 12.38 10.3 8.88 6.21 5.59 4.73 4.65 5.79 4.63 4.23 3.99 4.86 4.74 4.23 5.5 6.1 4.84 4.49 4.09 3.86 4.14 4.76 5.06 4.66 4.32 3.95 3.24 2.58 2.12 1.7 1.32 1.05 0.78 0.65 0.54 0.46 0.43 】 周期为(0.04~15)s,如下:       T=4.000000E-02; T=4.200000E-02;T=4.400000E-02; T=4.600000E-02; T=4.800000E-02;             T=5.000000E-02; T=5.500000E-02; T=6.000000E-02; T=6.500000E-02; T=7.000000E-02;       T=7.500000E-02; T=8.000000E-02; T=8.500000E-02; T=9.000000E-02; T=9.500000E-02;          T=1.000000E-01; T=1.100000E-01; T=1.200000E-01;T=1.300000E-01;T=1.400000E-01;            T=1.500000E-01; T=1.600000E-01;T=1.700000E-01;T=1.800000E-01; T=1.900000E-01;         T=2.000000E-01;T=2.200000E-01;T=2.400000E-01; T=2.600000E-01; T=2.800000E-01;         T=3.000000E-01;T=3.200000E-01; T=3.400000E-01;T=3.600000E-01; T=3.800000E-01;         T=4.000000E-01;T=4.200000E-01; T=4.400000E-01;T=4.600000E-01; T=4.800000E-01;          T=5.000000E-01;T=5.500000E-01; T=6.000000E-01;T=6.500000E-01; T=7.000000E-01;          T=7.500000E-01; T=8.000000E-01;T=8.500000E-01; T=9.000000E-01; T=9.500000E-01;          T= 1.000000; T= 1.100000;T= 1.200000;T= 1.300000;T= 1.400000; T= 1.500000;            T= 1.600000;T= 1.700000; T= 1.800000; T= 1.900000;T= 2.000000; T= 2.200000;          T= 2.400000; T= 2.600000;T= 2.800000;T= 3.000000;T= 3.200000; T= 3.400000;         T= 3.600000;T= 3.800000;T= 4.000000;T= 4.200000;T= 4.400000; T= 4.600000;               T= 4.800000; T= 5.000000; T= 5.500000; T= 6.000000;T= 6.500000;T= 7.000000;         T= 7.500000;T= 8.000000;T= 8.500000;T= 9.000000;T= 9.500000;T=10.000000;             T=11.000000;T=12.000000; T=13.000000; T=14.000000; T=15.000000;    那么如何利用中值滤波法求出滤波后的反应谱值,画出曲线,求高手指点一下啊 本人用了一维数字滤波器,但感觉还是有点问题,如下: clear clc      A=load; B=A; data=B'; [b,a]=ellip; y=filter T=4.000000E-02; T=4.200000E-02;T=4.400000E-02; T=4.600000E-02; T=4.800000E-02;             T=5.000000E-02; T=5.500000E-02; T=6.000000E-02; T=6.500000E-02; T=7.000000E-02;       T=7.500000E-02; T=8.000000E-02; T=8.500000E-02; T=9.000000E-02; T=9.500000E-02;          T=1.000000E-01; T=1.100000E-01; T=1.200000E-01;T=1.300000E-01;T=1.400000E-01;            T=1.500000E-01; T=1.600000E-01;T=1.700000E-01;T=1.800000E-01; T=1.900000E-01;         T=2.000000E-01;T=2.200000E-01;T=2.400000E-01; T=2.600000E-01; T=2.800000E-01;         T=3.000000E-01;T=3.200000E-01; T=3.400000E-01;T=3.600000E-01; T=3.800000E-01;         T=4.000000E-01;T=4.200000E-01; T=4.400000E-01;T=4.600000E-01; T=4.800000E-01;          T=5.000000E-01;T=5.500000E-01; T=6.000000E-01;T=6.500000E-01; T=7.000000E-01;          T=7.500000E-01; T=8.000000E-01;T=8.500000E-01; T=9.000000E-01; T=9.500000E-01;          T= 1.000000; T= 1.100000;T= 1.200000;T= 1.300000;T= 1.400000; T= 1.500000;            T= 1.600000;T= 1.700000; T= 1.800000; T= 1.900000;T= 2.000000; T= 2.200000;          T= 2.400000; T= 2.600000;T= 2.800000;T= 3.000000;T= 3.200000; T= 3.400000;         T= 3.600000;T= 3.800000;T= 4.000000;T= 4.200000;T= 4.400000; T= 4.600000;               T= 4.800000; T= 5.000000; T= 5.500000; T= 6.000000;T= 6.500000;T= 7.000000;         T= 7.500000;T= 8.000000;T= 8.500000;T= 9.000000;T= 9.500000;T=10.000000;             T=11.000000;T=12.000000; T=13.000000; T=14.000000; T=15.000000;    t=T'; plot%%%%%%%一类场地水平 hold on plot%%%%%%%一类场地水平 xlabel') ylabel') grid

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧