Delphi實現(xiàn)圖片滾動切換的完整實例代碼
更新時間:2014年07月21日 15:52:33 投稿:shichen2014
這篇文章主要介紹了Delphi實現(xiàn)圖片滾動切換的完整實例代碼,通過本實例,讀者可以進(jìn)一步掌握Delphi控件及圖形處理的技巧,需要的朋友可以參考下
本文以實例介紹了Delphi實現(xiàn)圖片滾動切換的方法。該程序可以實現(xiàn)圖像的滾動播出,并且通過本代碼可控制窗口中的圖像向上滾動,通過調(diào)節(jié)速度滾動條的值還可以調(diào)整滾動的速度;點擊“停止”按鈕,圖像即停止?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.
相關(guān)文章
Delphi隱藏TPageControl的標(biāo)簽實例介紹
件是一組頁面集,用于構(gòu)造一個多頁對話框,它顯示多個交互頁(TTabSheet 對象),接下來為大家介紹下Delphi隱藏TPageControl的標(biāo)簽方法2013-04-04在Delphi實現(xiàn)在數(shù)據(jù)庫中存取圖像的圖文演示無錯
最近打算學(xué)習(xí)Delphi實現(xiàn)在數(shù)據(jù)庫中存取圖像,網(wǎng)上的好多Delphi實現(xiàn)在數(shù)據(jù)庫中存取圖像都是錯誤的,所以我把圖片給弄好了。2008-01-01Delphi 在窗體上創(chuàng)建自己光標(biāo)的實例
這篇文章主要介紹了Delphi 在窗體上創(chuàng)建自己光標(biāo)的實例的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-09-09Java中CountDownLatch和CyclicBarrier的區(qū)別與詳解
CountDownLatch和CyclicBarrier是Java并發(fā)包提供的兩個非常易用的線程同步工具類,本文主要介紹了Java中CountDownLatch和CyclicBarrier的區(qū)別與詳解,具有一定的參考價值,感興趣的可以了解一下2023-11-11