社区
C++ Builder
帖子详情
如何禁止Ctrl+C等方法拷贝TDBGrid的内容?
LuoGD
2006-09-18 05:27:44
如题,要求可以输入文字,但不能拷贝出来。
...全文
555
35
打赏
收藏
如何禁止Ctrl+C等方法拷贝TDBGrid的内容?
如题,要求可以输入文字,但不能拷贝出来。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
35 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ccrun.com
2006-09-19
打赏
举报
回复
我觉的用DBCtrlGrid不错。
楼主试着参考一下。放几个Label,Edit之类的作为显示题,备选答案和自填答案用。考生只需滚动鼠标就可以向下浏览,答题只需点击一下鼠标。尽量让使用者减少操作的复杂程度。
LuoGD
2006-09-19
打赏
举报
回复
该DBGrid主要是实现类似于考试回答问题的功能,前面是题号,后面是问题描述,再后面是考试人员的回答内容,
回答内容有选择项,也可以考试人员自己输入答案,
每个问题的备选回答不同,所以我就动态生成该列的PickList,在onCellClick事件中动态设置PickList,
但这样感觉给考试人员操作不是很方便,要点一下该问题(一行),让该Cell获得焦点,再点一下才触发onCellClick事件动态加载备选答案,再点击选择答案,这样回答一个问题要至少点鼠标3下,
感觉效率不高,有没有更有效的方法?
|id | 问题 |解答
| 1 | 问题描述1 |
| 2 | 问题描述2 |
BlueDeepOcean
2006-09-19
打赏
举报
回复
//在CPP文件中写代码如下:
//借鉴了"一个有趣的...(我不记得了.)贴子"
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TInplaceEdit::WndProc(Messages::TMessage &Message)
{
if( Message.Msg==WM_COPY )
{
ShowMessage("不许COPY");
}
else
Dispatch( &Message );
}
//上面是jjwwang((空园歌独酌,春日赋闲居)) 的
同时在头文件的
private: // User declarations
void __fastcall WndProc(Messages::TMessage &Message);
之后调用:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
DBGrid1->WindowProc = WndProc;
}
//---------------------------------------------------------------------------
jiangshx
2006-09-19
打赏
举报
回复
我试了,只需要把这段加到DBGrid1所在的窗体里就行了,不需要再添加任何代码。
LuoGD
2006-09-19
打赏
举报
回复
to jjwwang((空园歌独酌,春日赋闲居)) ( )
void __fastcall TInplaceEdit::WndProc(Messages::TMessage &Message)
{
if( Message.Msg==WM_COPY )
{
ShowMessage("不许COPY");
}
else
Dispatch( &Message );
}
这个代码直接加在我的Form的.cpp里面,
重新build工程,显示这几行代码不会被执行,设置断点时,断点也是无效的?
这段代码应该置于何处?
(另为感谢ccrun和jjwwang的热心,本贴增加到200分)
ccrun.com
2006-09-19
打赏
举报
回复
恩。jjwwang的有道理。因为DBGrid的编辑框其实是另外一个窗口,类名就是TInplaceEdit。这个方法很巧妙。不错。
CACACACACA
2006-09-19
打赏
举报
回复
建议重新Build工程一下.
tanlim
2006-09-19
打赏
举报
回复
可以将问题提交到我组织的这次BCB6界面研讨会上解决,请关注相关贴子
http://community.csdn.net/Expert/topic/5031/5031801.xml?temp=.7387659
CACACACACA
2006-09-19
打赏
举报
回复
不可能, 我测试了的.
LuoGD
2006-09-19
打赏
举报
回复
to jjwwang((空园歌独酌,春日赋闲居)) ( )
你的方法看起来很好,但没有效果!
jiangshx
2006-09-19
打赏
举报
回复
我弄了半天也没搞明白怎么拦截WM_COPY ,还是楼上牛,学习一下。
CACACACACA
2006-09-19
打赏
举报
回复
不会影响整个程序,只会禁止DBGrid的单元格的Copy.
CACACACACA
2006-09-19
打赏
举报
回复
//在CPP文件中写代码如下:
//借鉴了"一个有趣的...(我不记得了.)贴子"
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TInplaceEdit::WndProc(Messages::TMessage &Message)
{
if( Message.Msg==WM_COPY )
{
ShowMessage("不许COPY");
}
else
Dispatch( &Message );
}
LuoGD
2006-09-19
打赏
举报
回复
谢谢ccrun(老妖)~~~
DBGrid需要用户能修改一个字段的值,比如“是/否”等,但要防止用户拷贝其他字段的信息
BlueDeepOcean
2006-09-19
打赏
举报
回复
其实,如果就是针对具有诸如dgEditing属性的组件,直接操作即可,没必要搞得那么复杂,当然,条条大路通罗马吗,可我还是推崇能够直接解决问题的方法。:)
BlueDeepOcean
2006-09-19
打赏
举报
回复
学习一哈。
ccrun.com
2006-09-19
打赏
举报
回复
刚才想了想,在判断Ctrl + C的代码中还应该再加上判断当前窗口是否为本进程的窗口,以防误判断。另外还得解决鼠标右键菜单的复制粘贴。
最后想问楼主的是:非要允许用户编辑DBGrid中的内容吗?如果不是必须的话,可以将DBGrid->Options的dgEditing设为false,就不用这么费劲了。 -_-|||
ccrun.com
2006-09-19
打赏
举报
回复
我来了!!!
一个简单例程,通过Hook实现屏蔽Ctrl + C拷贝TDBGrid的内容,仅对键盘起作用。注意:通过鼠标右键菜单还可以拷贝。
HHOOK g_hOldHook = NULL;
long CALLBACK KeyProc(int nCode, WPARAM wParam, LPARAM lParam);
//---------------------------------------------------------------------------
long CALLBACK KeyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
KBDLLHOOKSTRUCT *hs = (KBDLLHOOKSTRUCT *)lParam;
// 判断当前按键是否为Ctrl + C
if(hs->vkCode == 'C' && GetAsyncKeyState(VK_CONTROL) < 0)
{
// 通过判断当前焦点窗口DBGrid的编辑框而决定是否屏蔽掉Ctrl + C
HWND hFocusWin = GetFocus();
// 获取焦点窗口的类名
char szClassName[255];
GetClassName(hFocusWin, szClassName, 255);
// 判断当前窗口是否为DBGrid的编辑框:TDBGridInplaceEdit
if(!strcmp(szClassName, "TDBGridInplaceEdit"))
return 1; // 如果是则直接返回,不处理Ctrl + C的消息
}
return CallNextHookEx(g_hOldHook, nCode, wParam, lParam);
// 以上只处理了Ctrl + C,如果要处理Ctrl + V或Ctrl + X等,方法类似
// ccrun(老妖)就不写那么多了。
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
// 安装键盘钩子
g_hOldHook = SetWindowsHookEx(WH_KEYBOARD_LL,
(HOOKPROC)KeyProc, HInstance, NULL);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
// 结束时卸载键盘钩子
if(g_hOldHook)
UnhookWindowsHookEx(g_hOldHook);
}
i_love_pc
2006-09-19
打赏
举报
回复
学习!
LuoGD
2006-09-19
打赏
举报
回复
http://www.msf8.com/htm_data/42/0607/14646.html
的hook的方法会屏蔽整个程序的Ctrol+C,但我只需要屏蔽一个窗口的一个TDBGrid,其他控件还是可以拷贝怎么办?
老妖请帮忙!
加载更多回复(15)
关于Delphi第三方面控Db
Grid
Eh的一些使用
设置 column.buttonstyle 为 cbsnone 以
禁止
显示下拉按钮。 【设置编辑器颜色和字体】 inplace编辑器可以设置数据单元的颜色和字体。数据单元使用ongetcellparams 事件来控制列的颜色和字体。 inplace 编辑器...
DB
GRID
EH 组件在Borland开发工具中应用全攻略
Enlib 3.0组件包是一位俄国人为增强Borland系列开发工具功能而开发的第三方组件,它具有界面友好、功能强大、开发效率高、、快速制作预览/打印简单中国式报表等特点。因此,一推出即受到广大Borland程序员的青睐。...
(转)Delphi 编程规范
Format Source),快捷键是
Ctrl
+ D,用这个工具排版以后的格式就是标准格式了。该工具没有相关的设置
方法
,我们遵照默认的设置来对我们的代码进行排版。这里对代码的排版规范做一下总结。----------1、缩进 缩进...
DB
Grid
各属性的设置
Delphi也提供了一些其他数据组件来方便用户输入,比如DBComboBox,DBCheckBox等组件,但这些组件却没有DB
Grid
功能强大。Delphi能不能象Visual Foxpro那样让DB
Grid
中获得焦点网格可以是其它可视数据组件以方便用户呢...
DB
Grid
应用全书
Delphi也提供了一些其他数据组件来方便用户输入,比如DBComboBox,DBCheckBox等组件,但这些组件却没有DB
Grid
功能强大。Delphi能不能象Visual Foxpro那样让DB
Grid
中获得焦点网格可以是其它可视数据组件以方便用户呢...
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章