用delphi编写图片播放组件

简介: ...{ ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  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.
 
相关文章
|
前端开发 C# 开发工具
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
166 0
|
C# Windows
一个WPF开发的、界面简洁漂亮的音频播放器
一个基于C# + WPF开发的,界面外观简洁大方,操作体验良好的音频播放器。
126 0
|
vr&ar 图形学
【100个 Unity小知识点】☀️ | Unity中显示运行时游戏帧率的方法
Unity 小科普 老规矩,先介绍一下 Unity 的科普小知识: Unity是 实时3D互动内容创作和运营平台 。 包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 也可以简单把 Unity 理解为一个游戏引擎,可以用来专业制作游戏!
【100个 Unity小知识点】☀️ | Unity中显示运行时游戏帧率的方法
|
JavaScript
送你一个封装的移动端横屏展示的JS库
我们经常在移动端横屏展示一些东西,所以今天我们来介绍下怎么在移动端实现横屏展示。
|
XML 程序员 C语言
Qt编写控件属性设计器1-加载插件
一、前言 加载插件是整个属性设计器的第一步要打通的功能,插件中的控件都加载不了,后面就别搞别玩下去了没法玩的,要从一个动态库中加载出来控件,肯定需要用到反射机制,以前做.NET开发的时候就觉得反射这个东西相当强大,居然可以读取DLL加载出来控件,现在用Qt,发现Qt也有反射机制,也许这东东可能各大.
1040 0

热门文章

最新文章