Delphi實(shí)現(xiàn)圖片滾動(dòng)切換的完整實(shí)例代碼
本文以實(shí)例介紹了Delphi實(shí)現(xiàn)圖片滾動(dòng)切換的方法。該程序可以實(shí)現(xiàn)圖像的滾動(dòng)播出,并且通過(guò)本代碼可控制窗口中的圖像向上滾動(dòng),通過(guò)調(diào)節(jié)速度滾動(dòng)條的值還可以調(diào)整滾動(dòng)的速度;點(diǎn)擊“停止”按鈕,圖像即停止?jié)L動(dòng)。
完整的功能代碼如下:
unit Unit1;
interface
uses
Windows, Classes, Graphics, Forms, Controls, Menus,
Dialogs, StdCtrls, ExtCtrls, SysUtils, ComCtrls, Buttons;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
N1: TMenuItem;
Exit1: TMenuItem;
Help1: TMenuItem;
AboutImageViewer1: TMenuItem;
OpenDialog1: TOpenDialog;
Options1: TMenuItem;
ColorDepth1: TMenuItem;
ScrollPanel1: TMenuItem;
Panel1: TPanel;
TrackBar1: TTrackBar;
BitBtn2: TBitBtn;
BitBtn1: TBitBtn;
Label1: TLabel;
Image1: TImage;
N2: TMenuItem;
procedure Open1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure AboutImageViewer1Click(Sender: TObject);
procedure ColorDepth1Click(Sender: TObject);
procedure ScrollPanel1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
{ Public declarations }
end;
var
Form1: TForm1;
nLines: Integer;
fCancel: Boolean;
implementation
{$R *.DFM}
procedure TForm1.Open1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
Image1.Picture.LoadFromFile (OpenDialog1.FileName);//導(dǎo)入圖像文件
Caption := '控制圖像動(dòng)態(tài)移動(dòng)- ' + OpenDialog1.FileName;//改變窗體標(biāo)題
end;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close; //退出窗體
end;
procedure TForm1.AboutImageViewer1Click(Sender: TObject);//關(guān)于
begin
MessageDlg ('控制圖像動(dòng)態(tài)移動(dòng)為'+ #13'Delphi圖形工作室制作', mtInFormation,
[mbOk], 0);
end;
procedure TForm1.ColorDepth1Click(Sender: TObject);
var
strDepth: String;
begin
case Image1.Picture.Bitmap.PixelFormat of //獲得圖像顏色深度
pfDevice: strDepth := '無(wú)圖';
pf1bit: strDepth := '1-bit';
pf4bit: strDepth := '4-bit';
pf8bit: strDepth := '8-bit';
pf15bit: strDepth := '15-bit';
pf16bit: strDepth := '16-bit';
pf24bit: strDepth := '24-bit';
pf32bit: strDepth := '32-bit';
pfCustom: strDepth := 'Custom';
end;
MessageDlg ('圖像顏色深度:' + strDepth,mtInFormation, [mbOK], 0);//給出圖像
顏色深度信息
end;
procedure TForm1.ScrollPanel1Click(Sender: TObject);
begin
Panel1.Visible := not Panel1.Visible;
ScrollPanel1.Checked := Panel1.Visible; //改變控制面板的可見(jiàn)性
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
nLines := TrackBar1.Position;
TrackBar1.Hint := IntToStr (TrackBar1.Position);//給出當(dāng)前速度大小的提示
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
W, H, I, J, LineBytes: Integer;
Line: PByteArray; //定義指針類(lèi)型變量
Bmp: Tbitmap;
R: TRect;
begin
if Image1.Picture.Bitmap.PixelFormat=pfDevice then //當(dāng)沒(méi)有打開(kāi)圖片時(shí)
begin
MessageDlg ('沒(méi)有打開(kāi)圖片!', mtInFormation, [mbOk], 0);//給出出錯(cuò)提示
exit; //退出
end
else
fCancel := False;
BitBtn1.Enabled := False; //改變兩個(gè)按鈕的屬性
BitBtn2.Enabled := True;
Bmp := Image1.Picture.Bitmap; //獲取BMP 圖像并定義圖像尺寸
W := Bmp.Width;
H := Bmp.Height;
LineBytes := Abs (Integer (Bmp.ScanLine [1]) -Integer (Bmp.ScanLine [0]));
Line := AllocMem (LineBytes);
for I := 0 to H - 1 do
begin
if fCancel then //在每一次循環(huán)前均檢查中斷標(biāo)志(即確定停止按鈕是否按下)
Break; //單擊“停止”按鈕則停止?jié)L動(dòng)圖像
Move ((Bmp.ScanLine [0]), Line, LineBytes); //復(fù)制圖像的第一行
for J := 1 to H - 1 do
begin
Move ((Bmp.ScanLine [J]), (Bmp.ScanLine [J-1]), LineBytes);
if (J mod nLines = 0) then
begin
R := Rect (0, Panel1.Height + J-nLines,W, Panel1.Height + J);
InvalidateRect (Handle, @R, False);
UpdateWindow (Handle);
end;
end;
Move (Line, (Bmp.ScanLine [Bmp.Height - 1]), LineBytes);
R := Rect (0, Panel1.Height + H - nLines,W, Panel1.Height + H);
InvalidateRect (Handle, @R, False);
UpdateWindow (Handle);
Application.ProcessMessages; //允許立即停止循環(huán)使程序處于初始狀態(tài)
end;
BitBtn1.Enabled := True; //激活“開(kāi)始”按鈕
BitBtn2.Enabled := False; // 停止“按鈕”失效
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
fCancel := True; //改變標(biāo)志Fcancel 的值,停止圖像滾動(dòng)
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
TrackBar1Change (self); //調(diào)用TrackBar1Change 函數(shù)
end;
end.
相關(guān)文章
Delphi隱藏TPageControl的標(biāo)簽實(shí)例介紹
件是一組頁(yè)面集,用于構(gòu)造一個(gè)多頁(yè)對(duì)話(huà)框,它顯示多個(gè)交互頁(yè)(TTabSheet 對(duì)象),接下來(lái)為大家介紹下Delphi隱藏TPageControl的標(biāo)簽方法2013-04-04
在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中存取圖像的圖文演示無(wú)錯(cuò)
最近打算學(xué)習(xí)Delphi實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中存取圖像,網(wǎng)上的好多Delphi實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中存取圖像都是錯(cuò)誤的,所以我把圖片給弄好了。2008-01-01
delphi7連接mysql5的實(shí)現(xiàn)方法
這篇文章主要介紹了delphi7連接mysql5的實(shí)現(xiàn)方法,需要的朋友可以參考下2014-07-07
Delphi 在窗體上創(chuàng)建自己光標(biāo)的實(shí)例
這篇文章主要介紹了Delphi 在窗體上創(chuàng)建自己光標(biāo)的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09
Java中CountDownLatch和CyclicBarrier的區(qū)別與詳解
CountDownLatch和CyclicBarrier是Java并發(fā)包提供的兩個(gè)非常易用的線(xiàn)程同步工具類(lèi),本文主要介紹了Java中CountDownLatch和CyclicBarrier的區(qū)別與詳解,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
Delphi實(shí)現(xiàn)木馬文件傳輸代碼實(shí)例
這篇文章主要介紹了Delphi實(shí)現(xiàn)木馬文件傳輸?shù)姆椒?對(duì)于了解木馬的運(yùn)行原理有一定的幫助,需要的朋友可以參考下2014-07-07

