请问如何在窗体重创建自己的快捷键

数字蛋糕 2002-05-12 08:05:44
我要做一个非可视控件,要求能够相应他所在的Form的F12键的按下事件,然后弹出一个对话框.

怎么实现这个控件?需要拦截那些事件?或者是要注册AccelerateTable?
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
数字蛋糕 2002-05-25
  • 打赏
  • 举报
回复
至于怎么创建非可视控件的消息循环,大家可以看看Timer的源代码就明白了.
很简单的.
数字蛋糕 2002-05-25
  • 打赏
  • 举报
回复
原先我也是使用你说的方法,可是如果在控件中的话,必须要将窗体子类化以截取WM_HOTKEY消息.作为控件来说这样一来问题就多多.

后来我找到了一个方法(说实在的很下流):
思路也是使用RegHotKey,可是他在构造函数中创建了一个自己的窗口句柄而不是使用父窗体的句柄.

不过还是谢谢你,分数奉上
black_fox 2002-05-20
  • 打赏
  • 举报
回复
如果你是要对控件操作。思路基本上差不多。但是你要接管其Parent的消息泵。来响应WM_HOTKEY消息,
另:RegisterHotKey和UNRegisterHotKey的句柄也应该是其Parent的。

应该还有其它的一些办法。但我一时想不出。。呵呵
black_fox 2002-05-20
  • 打赏
  • 举报
回复
Private
PROCEDURE Hotshortcut(VAR message: TMessage); message WM_HOTKEY;

VAR
FrmMain : TFrmMain;
Showkey : tshortcut;
ShowKeyID: integer;

PROCEDURE TFrmMain.FormCreate(Sender: TObject);
BEGIN
ShowKey:=16472;//此处为F12的值
ShowKeyID:= RegisterKey(Showkey);
END;


PROCEDURE TFrmMain.FormDestroy(Sender: TObject);
BEGIN
UnRegisterKey(ShowKeyID);
END;

PROCEDURE TFrmMain.Hotshortcut(VAR message: TMessage);
BEGIN
IF Self.visable then
hide
else
show;
END;



{************************************************
函数:UnRegisterKey
功能:反注册全局热键
输入:Atom数据
输出:成功为TRUE,失败返回False
作者:BlackFox
日期:2002/5/10
************************************************}
FUNCTION UnRegisterKey(VAR id: integer): boolean;
BEGIN
result := UnRegisterHotKey(handle, id);
DeleteAtom(id);
id := 0;

END;

{************************************************
函数:RegisterKey
功能:注册全局热键
输入:Key:要注册的热键
输出:返回一个Atom数据,失败返回0
作者:BlackFox
日期:2002/5/10
************************************************}

FUNCTION RegisterKey(key: Tshortcut): integer;
VAR
TheKey : Word;
TheShiftState : TShiftState;
state : uint;
BEGIN
Result := GlobalAddAtom(pchar(Format('Fox%d', [key])));
IF result = 0 THEN
exit;
state := 0;
ShortCutToKey(key, TheKey, TheShiftState);
IF ssShift IN TheShiftState THEN
state := state OR mod_shift;
IF ssalt IN theshiftstate THEN
state := state OR mod_alt;
IF ssctrl IN theshiftstate THEN
state := state OR MOD_CONTROL;
RegisterHotKey(handle, Result, state, thekey);

END;
wzrlover 2002-05-20
  • 打赏
  • 举报
回复
RegisterHotKey(不知道有没有写错)注册一个热键 试试
数字蛋糕 2002-05-20
  • 打赏
  • 举报
回复
为什么我最近提出的许多问题都没有人回答?
不会真的这么难吧.
RadiAnt DICOM Viewer为图片操作和测量提供了以下基本工具: •流畅地镜头远近调节和摇摄 •亮度和反光调节,反色模式 •预置计算机断层扫描((如肺、骨头、等等)窗口的设置 •(90度、180度)图片旋转、(水平和垂直)图片翻转 •分段长度 •圆形/椭圆形和其范围内的中间、最小、最大参数值(如,计算机断层照相法中Hounsfield单位的密度) •角度值(标准角度和科布角度) •自由绘画的画笔工具 快如闪电 RadiAnt DICOM Viewer是为使客户尽可能有效地利用资源而设计。它不但能在大内存的多处理器和多核系统下运行,也能在旧款内存只有512MB的单核机上运行。 在必要的情况下,64位版本能为现代系统提供超过4GB容量,储存所有曾打开过的图像。非同步浏览可以让您在图片打开的状态下浏览和处理图片。 以上所有这些,只需要通过一个非常小巧,安装文件只有2MB大小的应用程序就可以实现。 多式DICOM的技术支持 该软件能够打开并展示不同格式的图片: •数字式放射照相术(CR, DX) •乳房X射线照相术(MG) •计算机断层照相法(CT) •磁共振(MR) •正电子发射计算机断层扫描PET-CT (PT) •超声波扫描术(US) •数字血管造影术(XA) •核医学照相术(NM) •二次图片和扫描的图像(SC) 许多种类的DICOM图像都可以得到技术支持: •单色的 (如:CR, CT, MR) 和彩色的 (如:US, 3D建) •静态图像 (如:CR, MG, CT) 和连续动态图像(如: XA, US) •未压缩和压缩过的图像(RLE, 有损的JPEG, 无损的JPEG, JPEG 2000) 不同系列或研究的比较 为了比较单个图片的多个系列或者多个图片,目前都能再同一或者不同窗口中打开。 在同一平面中获取的图片(如在造影剂应用之前和之后的计算机断层扫描(CT)照片系列)系统可以默认自动同步。 当浏览不同面的解剖系列图像时,显示出的交叉参考线可以更好地展示相互间的联系 (如,磁共振图像)。 DICOM文件转换成为图像和视频 为了创建优秀视觉呈现和专业的出版——RadiAnt DICOM Viewer能够将DICOM文件转换成为JPEG格式图片(压缩的)或者BMP格式图片(未压缩的位图)和WMV视频(Windows媒体视频)。 一张图片,一整套系列或者全部打开的图片都可以同时被转换。 通过快捷键,同时按下CTRL+C,可以将显示的图片快速地复制到Windows剪贴板,并且能迅速地简单地粘贴到Word文档或PowerPoint文件。 多维建 RadiAnt DICOM Viewer所提供的MPR工具可以用来在正交平面(冠状的、径向的、轴向的、倾斜的,取决于图像的基本平面)中建图像。 建过程相当迅速: 可以在大约三秒钟的时间,由超过2000张轴向CT断面切片建出冠装位图像(在现代英特尔酷睿i7系统下)。 PET-CT 图像融合 在一个CT扫描件上覆盖一个彩色PET图像,从而获得FDG(氟脱氧葡萄糖)摄取量增加的区域的结构参考。 在指定区域,用椭圆工具来测量SUVbw(运用体计算出的标准吸收值)的最大、最小和平均参数。 图像融合还能被运用到其他图像形式,如磁共振图像。DWI图像也能通过T1或者T2系列中扫描图像达到融合。 注意:这是一个安装软件,安装时需要在这个软件加上后缀.exe方可以执行安装

5,930

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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