博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
怎样在Delphi中屏蔽Flash控件的右键弹出菜单
阅读量:7103 次
发布时间:2019-06-28

本文共 1854 字,大约阅读时间需要 6 分钟。

关于如何屏蔽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;

  

转载地址:http://eqzhl.baihongyu.com/

你可能感兴趣的文章
2048游戏完整源代码揭秘和下载 (一)
查看>>
gitlab项目数据同步
查看>>
关于Service与Broadcast以及Notification的终于告一段落了
查看>>
VO,PO,POJO的定义和区别
查看>>
Python环境搭建
查看>>
瑞信CDP与HA集群
查看>>
RAID各级别的特性
查看>>
Python学习笔记__7.3章 多重继承
查看>>
爱创课堂每日一题七十天- 说说你对前端架构师的理解?
查看>>
兄弟连第7节课
查看>>
学习笔记(11月15日)
查看>>
JavaWeb21-HTML篇笔记
查看>>
Java之品优购部署_day03(3)
查看>>
前端与移动开发之vue-day4(2)
查看>>
phpcms筛选功能
查看>>
简练软考知识点整理-制定进度计划过程
查看>>
26 LAMP
查看>>
Oracle解决用户锁的问题
查看>>
深入了解Kafka基本原理
查看>>
springCloud分布式事务实战(六)编写第二个微服务
查看>>