zl程序教程

您现在的位置是:首页 >  工具

当前栏目

用delphi编写图片播放组件

组件 图片 编写 播放 Delphi
2023-09-27 14:24:59 时间
...{ ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  Author:pengyi    Email:pengyi.yi@126.com    :::: :::: Unit : UnitImagePlay :::: :::: Developer Team : Mdcl DevTeam :::: 
...{ ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::  Author:pengyi    Email:pengyi.yi@126.com    ::
:: ::
:: Unit : UnitImagePlay ::
:: ::
:: Developer Team : Mdcl DevTeam ::
:: $Id: UnitImagePlay.pas,v 1.13 2006/07/13 08:22:24 Exp $ ::
:: ::
:: Created Date : 2005-12-8 ::
:: Last Modified: $Date: 2006/07/13 08:22:24 $ ::
:: Last Modifier: $Author:pengyi $ ::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: }

unit UnitImagePlay;

interface
uses Messages, Windows, SysUtils, Classes, CutlineU,
  Controls, Forms, ExtCtrls, Graphics, StdCtrls, Dialogs;
type
  TXPImage = class;

  TShowPicture = class(TThread)
  private
    Fidx: integer; ...{当时显示的数}
//I:integer;
    FItem: TXPImage;
  protected
    procedure Execute; override;
  public
    procedure SetPicture;
    constructor Create(Aowner: TXPImage);
  end;

  TXPImage = class(TComponent)
  private
    FActive: Boolean; //当前是否激活
    FInterval: Integer;
//FTimer :TTimer;
    FImgbmp: TBitmap;
//FImage: TImage;
    FImage: TCutline;
    FImageList: TImageList;
    FshowPic: TShowPicture;
    procedure SetActive(Value: Boolean); virtual;
    procedure SetInterval(Value: Integer);
    procedure SetImageList(Value: TImageList);
    procedure SetImage(Value: TCutline);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Start;
// Procedure Pause;
//Procedure Continue;
    procedure Stop;
    property Active: Boolean read FActive write SetActive;
    property Interval: Integer read FInterval write SetInterval;
    property Imgbmp: TBitmap read FImgbmp write FImgbmp;
    property ImageList: TImageList read FImageList write SetImageList;
//Property Image:TImage Read FImage Write SetImage;
    property Image: TCutline read FImage write SetImage;
//Property showPic:TShowPicture Read FshowPic;
  end;

implementation

uses
  CommonU, DbugIntf;

...{ TXPImage }

constructor TXPImage.Create(AOwner: TComponent);
begin
  inherited;
  FInterval := 800;
  FImgbmp := TBitmap.Create;
//FImage := TCutline.Create(AOwner);
//FImageList := TImageList.Create(AOwner);
//FTimer := TTimer.Create(AOwner);
//FImage := TImage.Create(AOwner);
end;

destructor TXPImage.Destroy;
begin
  if Assigned(FImgbmp) then
    FImgbmp.Free;
//FTimer.Free;
//FImage.Free;
//FImageList.Free;
  inherited;
end;

procedure TXPImage.SetActive(Value: Boolean);
begin
  FActive := Value;
  if (FshowPic   nil) and Value then
    FshowPic := TShowPicture.Create(Self)
  else
    FshowPic.Terminate;
end;

procedure TXPImage.SetImageList(Value: TImageList);
begin
  FImageList := Value;
end;

procedure TXPImage.SetInterval(Value: Integer);
begin
  FInterval := value;
end;

procedure TXPImage.SetImage(Value: TCutline);
begin
  FImage := Value;
end;

procedure TXPImage.Start;
begin
  FActive := true;
//创建线程
  FshowPic := TShowPicture.Create(Self);
//FshowPic.Resume;
end;

procedure TXPImage.Stop;
begin
//FActive:= false;
  if FshowPic   nil then
  begin
    FshowPic.Terminate;
    FshowPic := nil;
  end;
end;

...{procedure TXPImage.Continue;
begin
IF FshowPic  nil then
begin
FActive:= true;
FshowPic.Resume;
end;
end;

procedure TXPImage.Pause;
begin
IF FshowPic  nil then
FActive:= false;
end;}

...{ TShowPicture }

constructor TShowPicture.Create(Aowner: TXPImage);
begin
  inherited Create(false);
  FItem := Aowner;
  Fidx := 0;
  FreeOnTerminate := true;
end;

procedure TShowPicture.Execute;
//var
// nTickCount: Cardinal;
begin
  inherited;
  while not Terminated do
  begin
    if FItem.Active then
    begin
//Application.ProcessMessages;
      synchronize(SetPicture); ...{注意此处}
      Fidx := Fidx + 1;
      if Fidx  = FItem.FImageList.Count then
        Fidx := 0;
      if terminated then
        exit;
//Item.;
      Sleep(FItem.FInterval);

// nTickCount := GetTickCount;
// while FItem.Active and (GetTickCount - nTickCount   FItem.FInterval) do
// Application.ProcessMessages;
    end
    else
    begin
      Suspend;
    end;
  end;
end;

procedure TShowPicture.SetPicture;
var
  sMsg: string;
begin

//SendMethodEnter(Format(“%s” 播放动画中的设置图片, [FItem.Image.Caption]));
  if FItem.Imgbmp   nil then
  begin
    try
//SendDebug(开始从 Imagelist 中获取图片);
      FItem.FImageList.GetBitmap(Fidx, FItem.Imgbmp);
//SendDebug(完成从 Imagelist 中获取图片);
//FItem.FImageList.GetBitmap(Fidx,FItem.FImage.Picture.Bitmap);
//SendDebug(开始从把图片给 Cutline 图片);
      FItem.Image.SetImage(FItem.Imgbmp);
//SendDebug(完成从把图片给 Cutline 图片);
//SendDebug(开始刷新 Cutline);
//FItem.FImage.Refresh;
//SendDebug(完成刷新 Cutline);
      application.ProcessMessages;
    except
      on E: Exception do
      begin
        sMsg := Format(错误位置:[%s] 类:[%s] 名称:[%s] 错误类:[%s] 错误信息:[%s],
          [播放动画, ClassName, FItem.Image.Caption, E.ClassName, E.Message]);
        SendDebugEx(sMsg, mtError);
        WriteLog(sMsg);
      end;
    end;
  end;
//SendMethodExit(Format(“%s” 播放动画中的设置图片, [FItem.Image.Caption]));
//SendSeparator;

end;

end.
Android组件化开发(五)--完整版音乐播放组件的封装 前面几篇系列文章我们讲解了`组件化开发`中几个常用功能组件的开发,包括:`网络请求组件`,`图片加载请求组件`,`应用保活组件`。今天我们来封装一个`音乐播放组件`。
【100个 Unity小知识点】☀️ | Unity中显示运行时游戏帧率的方法 Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
Qt编写自定义控件59-直方动态图 直方动态图类似于音乐播放时候的柱状图展示,顶部提供一个横线条,当柱状上升的时候,该线条类似于帽子的形式冲到顶端,相当于柱状顶上去的感觉,给人一种动态的感觉,听音乐的同时更加赏心悦目,原理比较简单,就是用2个定时器,一个定时器间隔比较短,负责快速把柱状图从底部冲到设置的值,同时横线条跟随一起冲上去,一个定时器负责慢慢的跌落值到0,然后横线条缓慢下降,下降速度比柱状图的速度要慢一些,产生一种对比的效果,看起来更像是跌落的感觉。
Qt编写控件属性设计器1-加载插件 一、前言 加载插件是整个属性设计器的第一步要打通的功能,插件中的控件都加载不了,后面就别搞别玩下去了没法玩的,要从一个动态库中加载出来控件,肯定需要用到反射机制,以前做.NET开发的时候就觉得反射这个东西相当强大,居然可以读取DLL加载出来控件,现在用Qt,发现Qt也有反射机制,也许这东东可能各大.
Qt编写自定义控件19-图片背景时钟 图片背景时钟控件,是全套控件中唯一的几个贴图的控件,这个背景要是不贴图,会画到猝死,必须用美工做好的图贴图作为背景,此控件以前学C#的时候写过,后面在写Qt控件的过程中把他移植过来了,其实画法完全一模一样,我能说连代码我都是直接复制粘贴过来改改的吗?所以有过多年编程经验的程序员们都知道,编程都是一通百通的,只要掌握好了一门,或者精通了一门,其他都是水到渠成的事情,基本上学习个把星期都能直接撸的那种,配合F1帮助文档和官方手册,直接手撸起来(各位别多想,是指撸代码)。
    最近在写WPF界面的时候遇到一个情况,由于界面已经由UI设计师用PS和AI软件画好了,在做UI的时候直接照着图做就行.