社区
C++ Builder
帖子详情
如何禁止Ctrl+C等方法拷贝TDBGrid的内容?
LuoGD
2006-09-18 05:27:44
如题,要求可以输入文字,但不能拷贝出来。
...全文
588
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)
哈夫曼树与哈夫曼编码(java实现)
二叉树的带权路径长度: 设二叉树具有n个带权值的叶子结点,从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和。 记为: 举例: 给定4个叶子结点,其权值分别为{2,3,4,7},可以构造出形状不同的二叉树 哈夫曼树: 给定一组具有确定权值的叶子结点,带权路径长度最小的二叉树,称为哈夫曼树,亦称最优二叉树。 哈夫曼树的特点: 权值越大的叶子结点越靠近根结点,而权值越小的叶子结点越远离根结点。(构造哈夫曼树的核心思想) 只有度为0(叶子结点)和度为2(分支结点)的结点,不存在度为1的结点。 n个
哈夫曼编码与哈夫曼树的 java实现
哈夫曼编码与哈夫曼树的 java实现
哈夫曼树和哈夫曼编码详解(包含Java代码实现)
哈夫曼树又称为最优树,是一类带权路径长度最短的树,在实际中有着广泛的应用。路径:从树中的一个节点到另一个节点之间的分支构成这两个节点之间的路径。路径长度路径上的分支数目称为路径长度。树的路径长度:从树根到每一节点的路径长度之和。权:赋予某个实体的一个量,是对实体的某个属性或某些属性值的描述。节点的带权路径长度:从该节点到树根之间的路径长度乘上权。树的带权路经长度:树中所有叶子节点带权路径长度之和,记为WPL∑k1nwklkWPLk1∑nwklk。
数据结构—哈夫曼树和哈夫曼编码介绍以及Java实现案例
本文详细介绍了哈夫曼树的概念,并且提供了Java实现,最后又介绍了哈夫曼编码的概念以及原理。
哈夫曼java_哈夫曼树和哈夫曼编码介绍以及Java实现案例
1.哈夫曼树1.1哈夫曼树简介哈夫曼树:给定N个权值作为N个叶子节点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。以下图为例,先说明几个概念:权:赋予某个实体的一个量,是对实体的某个或某些属性的数值描述。在数据结构中,实体有节点(元素)和边(关系)两大类,所以对应有节...
C++ Builder
13,872
社区成员
102,696
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章