本文以實例介紹了Delphi實現圖片滾動切換的方法。該程序可以實現圖像的滾動播出,并且通過本代碼可控制窗口中的圖像向上滾動,通過調節(jié)速度滾動條的值還可以調整滾動的速度;點擊“停止”按鈕,圖像即停止?jié)L動。
完整的功能代碼如下:
unit Unit1;interfaceusesWindows, Classes, Graphics, Forms, Controls, Menus,Dialogs, StdCtrls, ExtCtrls, SysUtils, ComCtrls, Buttons;typeTForm1 = 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);privatepublic{ Public declarations }end;varForm1: TForm1;nLines: Integer;fCancel: Boolean;implementation{$R *.DFM}procedure TForm1.Open1Click(Sender: TObject);beginif OpenDialog1.Execute thenbeginImage1.Picture.LoadFromFile (OpenDialog1.FileName);//導入圖像文件Caption := '控制圖像動態(tài)移動- ' + OpenDialog1.FileName;//改變窗體標題end;end;procedure TForm1.Exit1Click(Sender: TObject);beginClose; //退出窗體end;procedure TForm1.AboutImageViewer1Click(Sender: TObject);//關于beginMessageDlg ('控制圖像動態(tài)移動為'+ #13'Delphi圖形工作室制作', mtInFormation,[mbOk], 0);end;procedure TForm1.ColorDepth1Click(Sender: TObject);varstrDepth: String;begincase 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);beginPanel1.Visible := not Panel1.Visible;ScrollPanel1.Checked := Panel1.Visible; //改變控制面板的可見性end;procedure TForm1.TrackBar1Change(Sender: TObject);beginnLines := TrackBar1.Position;TrackBar1.Hint := IntToStr (TrackBar1.Position);//給出當前速度大小的提示end;procedure TForm1.BitBtn1Click(Sender: TObject);varW, H, I, J, LineBytes: Integer;Line: PByteArray; //定義指針類型變量Bmp: Tbitmap;R: TRect;beginif Image1.Picture.Bitmap.PixelFormat=pfDevice then //當沒有打開圖片時beginMessageDlg ('沒有打開圖片!', mtInFormation, [mbOk], 0);//給出出錯提示exit; //退出endelsefCancel := 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 dobeginif fCancel then //在每一次循環(huán)前均檢查中斷標志(即確定停止按鈕是否按下)Break; //單擊“停止”按鈕則停止?jié)L動圖像Move ((Bmp.ScanLine [0]), Line, LineBytes); //復制圖像的第一行for J := 1 to H - 1 dobeginMove ((Bmp.ScanLine [J]), (Bmp.ScanLine [J-1]), LineBytes);if (J mod nLines = 0) thenbeginR := 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);beginfCancel := True; //改變標志Fcancel 的值,停止圖像滾動end;procedure TForm1.FormCreate(Sender: TObject);beginTrackBar1Change (self); //調用TrackBar1Change 函數end;end.
|
新聞熱點
疑難解答
圖片精選