Delphi實(shí)現(xiàn)圖片滾動切換的完整實(shí)例代碼
本文以實(shí)例介紹了Delphi實(shí)現(xiàn)圖片滾動切換的方法。該程序可以實(shí)現(xiàn)圖像的滾動播出,并且通過本代碼可控制窗口中的圖像向上滾動,通過調(diào)節(jié)速度滾動條的值還可以調(diào)整滾動的速度;點(diǎn)擊“停止”按鈕,圖像即停止?jié)L動。
完整的功能代碼如下:
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 := '控制圖像動態(tài)移動- ' + OpenDialog1.FileName;//改變窗體標(biāo)題 end; end; procedure TForm1.Exit1Click(Sender: TObject); begin Close; //退出窗體 end; procedure TForm1.AboutImageViewer1Click(Sender: TObject);//關(guān)于 begin MessageDlg ('控制圖像動態(tài)移動為'+ #13'Delphi圖形工作室制作', mtInFormation, [mbOk], 0); end; procedure TForm1.ColorDepth1Click(Sender: TObject); var strDepth: String; begin case Image1.Picture.Bitmap.PixelFormat of //獲得圖像顏色深度 pfDevice: strDepth := '無圖'; 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; //改變控制面板的可見性 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; //定義指針類型變量 Bmp: Tbitmap; R: TRect; begin if Image1.Picture.Bitmap.PixelFormat=pfDevice then //當(dāng)沒有打開圖片時 begin MessageDlg ('沒有打開圖片!', mtInFormation, [mbOk], 0);//給出出錯提示 exit; //退出 end else fCancel := False; BitBtn1.Enabled := False; //改變兩個按鈕的屬性 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動圖像 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; //激活“開始”按鈕 BitBtn2.Enabled := False; // 停止“按鈕”失效 end; procedure TForm1.BitBtn2Click(Sender: TObject); begin fCancel := True; //改變標(biāo)志Fcancel 的值,停止圖像滾動 end; procedure TForm1.FormCreate(Sender: TObject); begin TrackBar1Change (self); //調(diào)用TrackBar1Change 函數(shù) end; end.
上一篇:Delphi實(shí)現(xiàn)檢測并枚舉系統(tǒng)安裝的打印機(jī)的方法
欄 目:Delphi
下一篇:Delphi中對時間操作方法匯總
本文標(biāo)題:Delphi實(shí)現(xiàn)圖片滾動切換的完整實(shí)例代碼
本文地址:http://mengdiqiu.com.cn/a1/Delphi/8624.html
您可能感興趣的文章
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫中存取圖像的圖文演示無錯
- 01-10delphi建立、讀取、存貯INI文件的方法《三》
- 01-10Delphi Command模式
- 01-10delphi 正弦曲線圖
- 01-10delphi建立、讀取、存貯INI文件的方法《二》
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判斷文件是否為文本文件的函數(shù)
- 01-10delphi中一個值得大家來考慮的DLL問題
- 01-10初探Delphi中的插件編程


閱讀排行
本欄相關(guān)
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫中存取圖像的圖
- 01-10delphi建立、讀取、存貯INI文件的方法
- 01-10delphi 正弦曲線圖
- 01-10Delphi Command模式
- 01-10delphi建立、讀取、存貯INI文件的方法
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判斷文件是否為文本文件的函
- 01-10delphi中一個值得大家來考慮的DLL問題
- 01-10初探Delphi中的插件編程
隨機(jī)閱讀
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery