XE7 - Image的双击事件无响应,咋整?(已解决)
今天折腾了好一会,本想做个类似于手机相册的功能,显示SQLite数据库中的图片,然后继续做一些处理。哪成想,写个测试例子时就被卡住了:简单的往窗体上拖放了一个TImage和一个TLabel,没有修改任何属性,HitTest默认为True。在TImage的OnDblClick事件中,修改TLabel.Text:
  procedure TForm1.Image2DblClick(Sender: TObject);
  begin
        label1.Tag := label1.Tag + 1;
      label1.Text := IntToStr(Label1.Tag);
  end;
可是这个事件压根就没响应。OnClick事件没啥问题。疑惑的很。网上搜了下,也问了几个老大(包括高勇老师),有说将Image的HitTest属性设置为False的,高勇老师QQ回复说设置为True。虽然已换了思路,用另外的方式处理图片的显示。但是自己的确实太菜了想多学点,就想知道原因在哪,郁闷了……。点解?
____________________________________
2015-3-13 17:26 补记:
遇到问题一味的在网上搜来搜去确实不是个法子,但是呢,搜来搜去也就那么几篇大同小异的文章,互相转载。应该大牛们不屑于记录类似的小问题吧。记得刚开始用Delphi时,从离线大富翁论坛受益匪浅,可是现在轻易找不到那种好资料了(还是说自己不会找?不会学?)。陶渊明诗曰:奇文共欣赏、疑义相与析。罢了,少牢骚,多折腾。
其实也不能说是解决了这个问题,应该说找到了代替OnDblClick事件的方法。就是用手势。记得之前刚从Delphi7升级到Delphi2010时,Gesture还是新鲜东西,那时触摸屏手机更是稀罕货~~。以下为自己折腾所得,当然也是参考了网上大牛们的文章,记下来,折腾几次,变成自己掌握的知识:
(1)在窗体中拖放GestureManager控件,设置窗体的Touch - GestureManager属性、InteractiveGestures属性。这些属性的意思看一遍都能猜个差不多。
  
(2)处理窗体的OnGesture事件:
总的来说就是判断下当前是哪种手势,是不是作用在Image控件上,然后做些处理就行了,当然,Image的初始尺寸、位置都要预先存放。
就别再一味的去搜索为啥Image的OnDblClick事件不响应了,没人理的。
procedure TForm1.FormGesture(Sender: TObject;const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
IObj: IControl;
img: TImage;
begin
if EventInfo.GestureID = System.UITypes.igiDoubleTap then //双击手势
begin
IObj := ObjectAtPoint(ClientToScreen(EventInfo.Location));
if IObj is TImage then
begin
img := TImage(IObj.GetObject);
if img.Width > ClientWidth then //缩小
begin
img.AnimateFloat('Width', Origin.Width, 0.2); //0.2秒内将宽度还原为原尺寸的宽度
img.AnimateFloat('Height', Origin.Height, 0.2);//0.2秒内将高度还原为原尺寸的宽度
img.AnimateFloat('Position.X', Origin.PosX, 0.2);
img.AnimateFloat('Position.Y', Origin.PosY, 0.2);
end
else //放大到Width的2倍,并将双击点作为放大后的中心点
begin
img.AnimateFloat('Position.X', img.Position.X -((EventInfo.Location.X - img.Position.X) * 2 * img.Bitmap.Width/ img.Width - (ClientWidth / 2)), 0.2);
img.AnimateFloat('Position.Y', img.Position.Y - ((EventInfo.Location.Y - img.Position.Y) * 2 * img.Bitmap.Height / img.Height - (ClientHeight / 2)), 0.2);
img.AnimateFloat('Width', img.Bitmap.Width * 2, 0.2);
img.AnimateFloat('Height', img.Bitmap.Height * 2, 0.2);
end;
end;
end;
end;
其它的手势可以根据不同的GestureID做相应的处理。
图片双击后放缩的功能目前算是做到了,但是咋自己整一个手机自带的相册的效果出来?昨天用ListBox做了个但是不知道咋连后台的SQLite数据库动态加载图片。
继续折腾……
XE7 - Image的双击事件无响应,咋整?(已解决)的更多相关文章
- WPF: 在 MVVM 设计中实现对 ListViewItem 双击事件的响应
		
ListView 控件最常用的事件是 SelectionChanged:如果采用 MVVM 模式来设计 WPF 应用,通常,我们可以使用行为(如 InvokeCommandAction)并结合命令来实 ...
 - SQL阻塞原因造成系统多功能无响应的分析解决思路
		
最近遇到一个sqlserver项目,月底会出现多个财务相关功能出现不定期操作无响应问题 通过查询SQL阻塞信息,定位到阻塞源头spid.该会话的状态.等待事件及执行的SQL脚本 根据spid查询该会话 ...
 - Android AppWidget偶尔无响应原因及解决办法
		
Android AppWidget偶尔会出现无响应问题,如按钮点击失效,数据不更新等等. 测试后发现,一般出现在手机用清理工具(或系统自己)清理后发生,或手机重启后发生. 目前经过测试,找到的办法是把 ...
 - C#中多线程写DataGridView出现滚动条导致程序卡死(无响应)的解决办法
		
因为写的程序涉及到多线程维护一个DataGridView,然后蛋疼的发现经常卡死...一开始以为是读写冲突的原因,然后就加了锁,问题依旧...然后发现每次出现滚动条的时候程序才会无响应,所以感觉应该是 ...
 - windows资源管理器多标签打开 windows文件夹多标签浏览 浏览器tab页面一样浏览文件夹 clover win8 win10 报错 无响应问题怎么解决 clover卡死 clover怎么换皮肤
		
大家都知道,我们打开一堆文件夹的时候,是什么样子 “厚厚的一叠”图标堆叠在一起的,非常的不方便 那么,是不是可以像浏览器一样的tab页面展示呢? 答案是可以的 安装好就是这样子的 是不是方便漂亮了很多 ...
 - c#中多线程写DataGridView出现滚动栏导致程序卡死(无响应)的解决的方法
		
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013529927/article/details/24225567 由于写的程序涉及到多线程维护一 ...
 - 注意:MainActivity的oncreate方法里不要再inflate布局了(MainActivity里的点击事件无响应)
		
activity_main已经通过setContentView(R.layout.activity_main);设置给MainActivity, 不要再inflate出新布局,然后findviewby ...
 - jQuery on()方法绑定动态元素的点击事件无响应的解决办法
		
$('#check_all').on('click' , function(){ alert(1); }); $("#yujinlist").append(html); count ...
 - opencv与mfc显示图片操作,MFC的鼠标响应在opencv图片上失效,opencv滚轮事件没有响应问题描述解决。
		
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11588758.html 用mfc 与OPENCV编写成. 出了很多冲突异常事件导致鼠标操作没有 ...
 
随机推荐
- java对象群体的组织:Enumeration及Iterator类
			
在一般情况下,遍历集合类会使用一下方式: for(int i=0;i<v.size();i++)< p=""> Customer c=(Custormer)v.g ...
 - eq相等 ,ne、neq不相等 EL表达式
			
eq相等,ne.neq不相等, gt大于, lt小于 gte.ge大于等于 lte.le 小于等于 not非 mod求模 is [not] div by是否能被某数整除 is [n ...
 - 检查和收集 Linux 硬件信息的 7 个命令
			
http://blog.sae.sina.com.cn/archives/3910 在Linux系统中,有许多命令可用于查询主机的硬件信息.一些命令只针对特定的硬件组件,比如CPU.内存,一些命令可以 ...
 - windows条件下,Ping加上时间戳,并保存到文件,适用于测试网络
			
在c盘下面新建文件 ping.vbs 在 ping.vbs中输入代码如下: Dim args, flag, unsuccOut args="" otherout="&qu ...
 - 如何向AcmeAir注入问题代码
			
为什么要注入问题代码? AcmeAir的常规代码是为了压测测试准备的,所以绝大部分的操作都是可以在几十毫秒中就可以正常返回的.为了向用户展示我们APM工具可以在源代码级别发现系统潜在问题,我们需要在A ...
 - ios开发--集成银联3.3.0
			
项目最近需要集成银联,在网上搜了一下发现都并不是最新版的银联集成教程,自己摸索了一下,总结写了下来. 附上3.3.0的下载网址 https://open.unionpay.com/upload/dow ...
 - 给View换字体
			
注意,给View换字体是直接换.在Delegate里换的只是某一列的字体 class delegate : public QStyledItemDelegate { public: ) : QStyl ...
 - Android 时间格式的正则表达式
			
//日期格式yyyy PatternsDict.date_y= /^(\d{4})$/; //日期格式yyyy-mm PatternsDict.date_ym= /^(\d{4})-(0\d{1} ...
 - SQL Server 高性能写入的一些总结
			
1.1.1 摘要 在开发过程中,我们不时会遇到系统性能瓶颈问题,而引起这一问题原因可以很多,有可能是代码不够高效.有可能是硬件或网络问题,也有可能是数据库设计的问题. 本篇博文将针对一些常用的数据库性 ...
 - 使用 node-odata 轻松创建基于 OData 协议的 RESTful API
			
前言 OData, 相信身为.NET程序员应该不为陌生, 对于他的实现, 之前也有童鞋进行过介绍(见:这里1,这里2). 微软的WCF Data Service即采用的该协议来进行通信, ASP.NE ...