• XE7


      今天折腾了好一会,本想做个类似于手机相册的功能,显示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数据库动态加载图片。

      继续折腾……

      

  • 相关阅读:
    hdu 4009 Transfer water(最小型树图)
    如何使用java调用DLL运行C++(初篇)
    腾讯笔试题(2015)
    md5算法原理一窥(其一)
    hdu 3038 How Many Answers Are Wrong ( 带 权 并 查 集 )
    Java 基础知识点(必知必会其二)
    Java 基础知识点(必知必会其一)
    web基础之hibernate(一篇)
    web基础之Structs(一篇)
    mysql知识初篇(一)
  • 原文地址:https://www.cnblogs.com/mozzie/p/4333855.html
Copyright © 2020-2023  润新知