首页 > 其他分享 >Image32 动画演示2

Image32 动画演示2

时间:2024-06-11 16:44:23浏览次数:25  
标签:动画 begin 演示 Sender img TObject Image32 end procedure

Image 32 自带的Demo,添加一些注解。

unit uFrmAnimation2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.StdCtrls, Vcl.ExtCtrls, System.Math, Img32;

type
  TfrmAnimation2 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
  private
    img: TImage32;
    imgCnt: Integer;
    timer: TTimer;
    imgIndex: Integer;
    drawRec: TRect;
    procedure Timer1Timer(Sender: TObject);
  protected
    procedure WMERASEBKGND(var message: TMessage); message WM_ERASEBKGND;
  end;

var
  frmAnimation2: TfrmAnimation2;

implementation

{$R *.dfm}
{$R images.res}   // 这里有图片资源

uses
  Img32.Extra, Img32.Vector, Img32.Fmt.PNG;

function GetMinRotationRect(const rec: TRect): TRect;
var
  mp: TPointD;
  radius: double;
begin // 得出图片以中心点旋转时,所有旋转画布可正常展示的矩形区域.
  mp.X := rec.Width / 2;
  mp.Y := rec.Height / 2;
  radius := Distance(PointD(rec.Left, rec.Top), mp); // Img32.Vector    2点之间的距离
  Result.Left := Ceil(mp.X - radius);
  Result.Right := Ceil(mp.X + radius);
  Result.Top := Ceil(mp.Y - radius);
  Result.Bottom := Ceil(mp.Y + radius);
end;
// ------------------------------------------------------------------------------

function EnumResNameProc(hModule: hModule; lpszType, lpszName: PChar; lParam: LONG_PTR): BOOL; stdcall;
begin
  inc(PInteger(lParam)^);
  Result := true;
end;

procedure TfrmAnimation2.FormCreate(Sender: TObject);
var
  i: Integer;
  angle, angleDelta: double;
begin
  img := TImage32.Create;
  // 此窗口做为独立程序时,可以这样修改窗口大小,对此综合实例,暂无用途
  // img.LoadFromResource('RAZZ_00', 'PNG');
  // with GetMinRotationRect(img.Bounds) do
  // begin
  // ClientWidth := Width;
  // ClientHeight := Height;
  // end;

  // 统计在资源中为 PNG类型资源的数量
  EnumResourceNames(0, 'PNG', @EnumResNameProc, LONG_PTR(@imgCnt));
  // 设置窗体透明.
  self.Color := clRed;
  self.TransparentColorValue := self.Color;
  self.TransparentColor := true;
  // make the form **background** transparent
  // Self.TransparentColor := true; // :))
  // and make sure BorderStyle = bsNone and BorderIcons = []
  // 创建定时器,定时要求界面刷新
  timer := TTimer.Create(self);
  timer.OnTimer := Timer1Timer;
  timer.Interval := 33;
end;

procedure TfrmAnimation2.FormDestroy(Sender: TObject);
begin
  img.Free;
  timer.Free;
end;

procedure TfrmAnimation2.FormKeyPress(Sender: TObject; var Key: Char);
begin
  // if CharInSet(Key, [#13, #27, #32]) then
  // Close;
end;

procedure TfrmAnimation2.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  timer.Enabled := not timer.Enabled;
end;

procedure TfrmAnimation2.FormPaint(Sender: TObject);
var
  X, Y: Integer;
  mpForm: TPointD;
begin
  with ClientRect do
    mpForm := PointD(Width / 2, Height / 2);
  img.LoadFromResource(format('RAZZ_%2.2d', [imgIndex]), 'PNG');
  X := Round(mpForm.X - img.MidPoint.X);
  Y := Round(mpForm.Y - img.MidPoint.Y);
  //居中中显示
  Canvas.FillRect(ClientRect);
  img.CopyToDc(img.Bounds, Canvas.Handle, X, Y, false);
end;

procedure TfrmAnimation2.Timer1Timer(Sender: TObject);
begin
  imgIndex := (imgIndex + 1) mod imgCnt;     //下1张图.
  Invalidate;
end;

procedure TfrmAnimation2.WMERASEBKGND(var message: TMessage);
begin
  message.Result := 1;
end;

end.

 

 

标签:动画,begin,演示,Sender,img,TObject,Image32,end,procedure
From: https://www.cnblogs.com/bluejade/p/18242332

相关文章

  • 如何在Vue3中使用动画库实现元素过渡效果?
    在如今充满动态与交互的前端开发世界里,现代网页应用的用户体验越来越依赖于丰富的动画效果。Vue3作为一个强大且灵活的前端框架,支持各种动画库,比如GSAP、Anime.js等,它们能够让动画实现变得简单且强大。本文将通过实例,为大家介绍如何在Vue3中使用动画库实现元素过渡效果。一......
  • 微信小程序源码-公交信息在线查询系统的计算机毕业设计(附源码+演示录像+LW)
    大家好!我是职场程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • 微信小程序毕业设计-公交信息在线查询系统项目开发实战(附源码+演示视频+LW)
    大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。......
  • css选择器,盒子模型,定位,动画
    css返回到Java开发知识汇总目录1.基本选择器标签选择器:标签名字类选择器:.classnameid选择器:#2.层次选择器后代选择器:bodyp子选择器,1代,所有的p:body>p兄弟相邻选择器:.classname+p只选择当前相邻的下一个元素通用兄弟选择器:.classname~p选中当前......
  • Python模拟时钟演示及源代码
     turtle是Python中的一个模块,用于绘图和图形设计。它提供了一个简单的绘图窗口,可以绘制各种形状、线条和颜色等。通过使用turtle模块,我们可以在屏幕上实时地绘制图形,并且可以控制画笔的移动、旋转等操作。 2、使用示例下面是一个简单的使用turtle模块绘制一个正方形的......
  • Android大作业 - 瑞德记账app - 演示视频
    韩婴在《韩诗外传》有言:“家有千金之玉不知治,犹之贫也。”如果不知道如何管理和利用所拥有的丰富资源,依然会陷入贫困的境地。在当今社会,记账app对于个人财务管理有着重大意义。首先,它可以帮助用户建立并保持清晰的财务记录。通过记录每笔支出和收入,用户可以清楚地了解自己的财......
  • Springboot计算机毕业设计疫情蔬菜供给系统演示录像2022【附源码】开题+论文+mysql+程
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景2022年,全球仍受到新冠疫情的深远影响。在疫情期间,人们的生活方式和消费习惯发生了显著变化,尤其是在食品采购方面。蔬菜作为日常生活的必需品,其供给稳......
  • C51学习归纳7 --- LED点阵显示静态图片和动画
        今天学习一个非常常用的功能。外面的流动字母的LED大屏大家应该很常见吧。今天!学完这个,你就可以自己设计一个LED大屏了!一、开发板原理图    首先我们看点阵屏幕的输入信号,有P0_X和DP_X控制。P0_X直接就是芯片的P0输出端口,那么我们现在关注一下DP_X的产生......
  • Transformer动画讲解:注意力计算Q、K、V
    暑期实习基本结束了,校招即将开启。不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC在变少,岗位要求还更高了。提前准备才是完全之策。最近,我们又陆续整理了很多大厂的面试题,帮助一些球友解惑答疑,分享技术面试中的那些弯弯绕绕。总结链接如下:《大模......
  • Java位运算符代码演示
    文章目录原码、反码、补码代码演示(Java)应用参考原码、反码、补码在计算机内,有符号数有3种表示方法:原码、反码和补码,机器数的最高位为符号位,符号位为0表示正数,符号位为1表示负数。原码=符号位+真值的绝对值。如:3的原码(这里假设机器数的字长为8)是00000011,-3的原码是10......