이 기사에서는 Delphi에서 그림 스크롤 전환을 구현하는 방법을 예제와 함께 소개합니다. 이 프로그램은 이미지의 스크롤 브로드캐스트를 실현할 수 있으며, 이 코드를 통해 창의 이미지가 위쪽으로 스크롤되도록 제어할 수 있습니다. 스크롤 막대의 속도를 조정하면 "중지"를 클릭하여 스크롤 속도도 조정할 수 있습니다. 버튼을 누르면 이미지 스크롤이 중지됩니다.
전체 함수 코드는 다음과 같습니다.
단위 Unit1;인터페이스는 Windows, 클래스, 그래픽, 양식, 컨트롤, 메뉴, 대화 상자, StdCtrls, ExtCtrls, SysUtils, ComCtrls, 버튼을 사용합니다. typeTForm1 = 클래스(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(Sender: TObject);프로시저 Exit1Click(Sender: TObject);프로시저 AboutImageViewer1Click(Sender: TObject);프로시저 ColorDepth1Click(Sender: TObject);프로시저 ScrollPanel1Click(Sender : TObject); 프로시저 TrackBar1Change(Sender: TObject); 프로시저 BitBtn2Click(Sender: TObject); 프로시저 FormCreate(Sender: TObject); Public 선언 }end;varForm1: TForm1;nLines: fCancel: 부울;구현{$R *.DFM}프로시저 TForm1.Open1Click(Sender: TObject);beginif OpenDialog1.Execute thenbeginImage1.Picture.LoadFromFile (OpenDialog1.FileName);//이미지 파일 가져오기 Caption := '이미지의 동적 움직임 제어 - ' + OpenDialog1. 파일 이름;/ /제목 양식 변경end;end;절차 TForm1.Exit1Click(Sender: TObject);beginClose; //양식 종료end;procedure TForm1.AboutImageViewer1Click(Sender: TObject);//beginMessageDlg('이미지의 동적 이동 제어'+ #13'Delphi Graphics Studio' , mtInFormation,[mbOk], 0);end;절차 TForm1.ColorDepth1Click(Sender: TObject);varstrDepth: String;begincase Image1.Picture.Bitmap.PixelFormat of //이미지 색상 심도 가져오기 pfDevice: strDepth := '그림 없음';pf1bit: strDepth := '1-bit'; pf4bit : strDepth := '4비트';pf8bit: strDepth := '8비트';pf15bit: strDepth := '15비트';pf16bit: strDepth := '16비트';pf24bit: strDepth := '24비트';pf32bit: strDepth := '32비트'; pfCustom: strDepth := 'Custom';end;MessageDlg('이미지 색상 심도:' + strDepth,mtInFormation, [mbOK], 0);//이미지 색상 심도 정보 제공 end;절차 TForm1.ScrollPanel1Click(Sender: TObject);beginPanel1.Visible := Panel1.Visible;ScrollPanel1.Checked := Panel1.Visible; /제어판 표시 여부 변경end;절차 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 then //그림이 열리지 않을 때 startMessageDlg('그림이 열리지 않습니다! ', 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 ~ H - 1 dobeginif fCancel then //각 루프 전에 중단 플래그를 확인합니다(즉, 중지 버튼이 눌렸는지 확인). //이미지 스크롤을 중지하려면 "중지" 버튼을 클릭하세요. ((Bmp.ScanLine [0]), Line, LineBytes); //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(핸들, @R, False);UpdateWindow(핸들);end;end;Move(Line, (Bmp.ScanLine [Bmp.Height - 1]), LineBytes);R := Rect(0, Panel1.Height + H - nLines,W, Panel1.Height + H);InvalidateRect(핸들, @R, False);UpdateWindow (Handle);Application.ProcessMessages; //프로그램을 초기 상태로 전환하기 위해 루프를 즉시 중지합니다.end;BitBtn1.Enabled := True; //"시작" 버튼 활성화 BitBtn2.Enabled := False; 중지 "버튼"이 유효하지 않습니다.end ;절차 TForm1.BitBtn2Click(Sender: TObject);beginfCancel := True //플래그 변경 Fcancel; 값, 이미지 스크롤 중지end;procedure TForm1.FormCreate(Sender: TObject);beginTrackBar1Change (self); //TrackBar1Change 함수 호출end;end.