บทความนี้จะแนะนำวิธีการใช้การสลับการเลื่อนรูปภาพใน Delphi พร้อมตัวอย่าง โปรแกรมนี้สามารถรับรู้ถึงการเลื่อนของรูปภาพ และด้วยโค้ดนี้ สามารถควบคุมรูปภาพในหน้าต่างให้เลื่อนขึ้นด้านบนได้ โดยการปรับค่าของแถบเลื่อนความเร็ว จะทำให้สามารถปรับความเร็วในการเลื่อนได้ด้วยการคลิกปุ่ม "หยุด" จากนั้นรูปภาพจะหยุดเลื่อน
รหัสฟังก์ชันที่สมบูรณ์มีดังนี้:
หน่วย Unit1;อินเทอร์เฟซ Windows, คลาส, กราฟิก, แบบฟอร์ม, การควบคุม, เมนู, กล่องโต้ตอบ, StdCtrls, ExtCtrls, SysUtils, ComCtrls, ปุ่ม; 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; ขั้นตอน Open1Click (ผู้ส่ง: TObject); ขั้นตอน Exit1Click (ผู้ส่ง: TObject); ขั้นตอน AboutImageViewer1Click (ผู้ส่ง: TObject); ขั้นตอน ColorDepth1Click (ผู้ส่ง: TObject); ขั้นตอน ScrollPanel1Click (ผู้ส่ง : : TObject); ขั้นตอน TrackBar1Change (ผู้ส่ง: TObject); ขั้นตอน BitBtn1Click (ผู้ส่ง: TObject); ขั้นตอน BitBtn2Click (ผู้ส่ง: TObject); fCancel: บูลีน; การนำไปใช้งาน {$R *.DFM}ขั้นตอน TForm1.Open1Click(Sender: TObject);beginif OpenDialog1.Execute thenbeginImage1.Picture.LoadFromFile (OpenDialog1.FileName);//Import image file Caption := 'Control the dynamic movement of the image - ' + OpenDialog1. FileName;/ /เปลี่ยนรูปแบบ titleend;end;procedure TForm1.Exit1Click(Sender: TObject);beginClose; //ออกจากฟอร์ม;ขั้นตอน TForm1.AboutImageViewer1Click(Sender: TObject);//เกี่ยวกับ beginningMessageDlg ('ควบคุมการเคลื่อนไหวแบบไดนามิกของรูปภาพสำหรับ'+ #13'Delphi Graphics Studio' , mtInFormation,[mbOk], 0);สิ้นสุด;ขั้นตอน TForm1.ColorDepth1Click(Sender: TObject);varstrDepth: String;begincase Image1.Picture.Bitmap.PixelFormat of //รับความลึกของสีของภาพ pfDevice: strDepth := 'No picture';pf1bit: strDepth := '1-bit'; pf4bit : strDepth := '4 บิต';pf8bit: strDepth := '8-บิต';pf15bit: strDepth := '15-บิต';pf16bit: strDepth := '16-บิต';pf24bit: strDepth := '24-บิต';pf32bit: strDepth := '32-บิต'; pfCustom: strDepth := 'กำหนดเอง';end;MessageDlg ('ความลึกของสีของภาพ:' + strDepth,mtInFormation, [mbOK], 0);//ให้ข้อมูลความลึกของสีของภาพสิ้นสุด;ขั้นตอน TForm1.ScrollPanel1Click(Sender: TObject);beginPanel1.Visible := not Panel1.Visible;ScrollPanel1.Checked := Panel1.Visible; /เปลี่ยนการมองเห็นของแผงควบคุมสิ้นสุดขั้นตอน TForm1.TrackBar1Change(ผู้ส่ง: TObject);beginnLines := TrackBar1.Position;TrackBar1.Hint := IntToStr (TrackBar1.Position);//ให้คำแนะนำของการเร่งความเร็วปัจจุบัน;ขั้นตอน TForm1.BitBtn1Click(Sender: TObject);varW, H, I, J , LineBytes: Integer;Line: PByteArray; //กำหนดตัวแปรประเภทตัวชี้ Bmp: Tbitmap;R: TRect;beginif Image1.Picture.Bitmap.PixelFormat=pfDevice แล้ว //เมื่อรูปภาพไม่ได้เปิดขึ้น startMessageDlg ('รูปภาพไม่ได้เปิดอยู่! ', mtInFormation, [mbOk], 0); // ให้ข้อความแสดงข้อผิดพลาด exit; // Exit endelsefCancel := False;BitBtn1.Enabled := False; // เปลี่ยนคุณสมบัติของทั้งสองปุ่ม BitBtn2.Enabled := True; Bmp := Image1.Picture.Bitmap; //รับภาพ BMP และกำหนดขนาดภาพ W := Bmp.Width;H := Bmp.Height;LineBytes := Abs (จำนวนเต็ม (Bmp.ScanLine [1]) -Integer (Bmp.ScanLine [0]));Line := AllocMem (LineBytes);for I := 0 ถึง H - 1 dobeginif fCancel แล้ว //ตรวจสอบแฟล็กแบ่งก่อนแต่ละวง (นั่นคือ ตรวจสอบว่ามีการกดปุ่มหยุดหรือไม่) Break; //คลิกปุ่ม "หยุด" เพื่อหยุดการเลื่อนรูปภาพ ย้าย ((Bmp.ScanLine [0]), Line, LineBytes); //คัดลอกบรรทัดแรกของรูปภาพสำหรับ J := 1 ถึง H - 1 dobeginMove ((Bmp.ScanLine [J]), (Bmp.ScanLine [J] - 1]), LineBytes); ถ้า (J mod nLines = 0) แล้วเริ่ม R := Rect (0, Panel1.Height + J-nLines,W, Panel1.Height + J);InvalidateRect (หมายเลขอ้างอิง, @R, เท็จ);UpdateWindow (หมายเลขอ้างอิง);ปลาย;ปลาย;ย้าย (บรรทัด, (Bmp.ScanLine [Bmp.Height - 1]), LineBytes);R := Rect (0, Panel1.Height + H - nLines,W, Panel1.Height + H);InvalidateRect (หมายเลขอ้างอิง, @R, False);UpdateWindow (Handle);Application.ProcessMessages; //อนุญาตให้ลูปหยุดทันทีเพื่อวางโปรแกรมไว้ในสถานะเริ่มต้น;BitBtn1.Enabled := True; //เปิดใช้งานปุ่ม "Start" BitBtn2.Enabled := False; ปุ่ม "หยุด" ไม่ถูกต้อง ; ขั้นตอน TForm1.BitBtn2Click (Sender: TObject); beginfCancel := True; // Change flag Fcancel ค่า หยุดการเลื่อนรูปภาพ ขั้นตอน TForm1.FormCreate (ผู้ส่ง: TObject); beginTrackBar1Change (ตนเอง); // เรียกใช้ฟังก์ชัน TrackBar1Change สิ้นสุด; สิ้นสุด