关于如何屏蔽Flash控件的右键菜单的问题有很多人问过,也有很多人回答,基本上都是说拦截
Application消息,或者继承一个新的控件,重载MouseDown消息,第一种解决办法,好象是简单
些,但是有个问题是:如果栏截应用程序的消息,势必会造成应用程序的所有消息都有执行这个
拦截过程,尽管可以通过条件来过滤掉其他消息,但是执行判断本身就要耗时间(尽管每次判断
一下的时间不多,但是的有消息占的时间加起来就不少了),另一种方法是继承控件,可以这样
写又麻烦,如果需要在设计期使用的话,还得重新注册。
有没有更加简单的方法呢?不需要去过滤所有的应用程序消息,又不需要重写控件?
的确还有第三种方法,这是Delphi为Delphi程序员专们保留用来在不
重写控件的情况下处理单个控件的消息的方法,但是这种方法处理控件消息很少被人使用,
因为它是TControl类的一个事件,但是它定义在Public域,所以在设计时不可见:
这个一件就是TControl.WindowProc,它是TWndMethod过程类型,类型定义在Classes单元:
TWndMethod = procedure(var Message: TMessage) of object;
但是我们又不能简单的写这个事件句柄,因为TControl类的实例在创建之初就已经给这个
事件赋值了,它的值就是TControl类的WndProc方法.而TControl正是靠WndProc方法来分发
消息给每个消息自己的消息处理句柄,如果我们简单的重写WindowProc事件,就会关闭消息
分发,就会造成所有消息都不能处理,而必须在WindowProc事件自己编程处理消息分发,结果
可能是这个控件只能画出一个框架.
为了重写这个WindowProc事件,而不必自己重处理消息分发,所以我们得想办法在重写这个
事件之前保存原事件句柄,执行完自己的消息处理函数后再调用原来的事件句柄处理消息分发.
具体源码请见:
type
TFormProg = class(TForm)
private
FFlash:TShockwaveFlash;//需要动态创建.
FFlashMes:TWndMethod;//保存Flash控件原来的WindowProc事件句柄
protected
procedure FlashMes(var Message: TMessage);
{ Private declarations }
public
end;
var
FormProg: TFormProg;
implementation
procedure TFormProg.FlashMes(var Message: TMessage);
begin
if (Message.Msg=WM_RBUTTONDOWN) then
//如果是右键按下:Flash控件就是在鼠标按下的消息里弹出菜单的.
begin
FFlash.Perform(WM_RBUTTONUP,Message.WParam,Message.LParam);
//直接传递给Flash控件鼠标弹起的消息.
Exit;
//并退出本过程,而不调用原来的事件句柄,即不再让Flash控件处理鼠标按下的消息,
//这样就不会弹出菜单了.
end;
//关闭右键消息,不传递给Flash控件处理。这样就不会弹出右键菜单。
FFlashMes(Message);
//让原理的事件句柄处理其他的消息.
end;
procedure TFormProg.FormCreate(Sender: TObject);
begin
FFlash:=TShockwaveFlash.Create(Self);//构造Flash控件的实例.
FFlash.Parent:=Self;//在本窗口播放.
FFlashMes:=FFlash.WindowProc;
FFlash.WindowProc:=FlashMes;// WindowProc;
FFlash.Align:=alClient;//整个窗口作为播放区域.
FFlash.Movie:=ExtractFilePath(Application.ExeName)+'log-ok.swf';//播放的文件.
FFlash.Menu:=False;//不显示菜单.
FFlash.Loop:=False;//不循环,由本程序自己来控制循环.
end;
相关推荐
flash彻底屏蔽右键
NULL 博文链接:https://qiqishou.iteye.com/blog/965268
flash player完全屏蔽右键菜单方法
直接上代码: package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; /** * 完全屏蔽Flash player11.2及其以后的右键菜单方法 * 编译器参数设置-swf-version=15 -target-player=11.2
屏蔽右键菜单的Flash.ocx
winform中使用的彻底屏蔽右键菜单的Flash.ocx
在Delphi中调用Flash
<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"
一个控制FlashPlayer的DLL+delphi DEMO
一个封装了控制FlashPlayer所有控制的相关函数的DLL方便其他语言的调用.还带了个DELPHI是范例.
YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip
附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。
6956



被折叠的 条评论
为什么被折叠?



