この記事では、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(Sender: TObject);プロシージャ Exit1Click(Sender: TObject);プロシージャ AboutImageViewer1Click(Sender: TObject);プロシージャ ColorDepth1Click(Sender: TObject);プロシージャ ScrollPanel1Click(Sender) : TObject); プロシージャ TrackBar1Change(Sender: TObject); プロシージャ BitBtn2Click(Sender: TObject); プロシージャ FormCreate(Sender: TObject); fCancel: ブール値;実装{$R *.DFM}procedure TForm1.Open1Click(Sender: TObject);beginif OpenDialog1.Execute thenbeginImage1.Picture.LoadFromFile (OpenDialog1.FileName);//画像ファイルをインポート Caption := '画像の動的な動きを制御します - ' + OpenDialog1。ファイル名;/ /フォームタイトルを変更end;end;procedure TForm1.Exit1Click(Sender: TObject);beginClose; //フォームを終了end;プロシージャ TForm1.AboutImageViewer1Click(Sender: TObject);//beginMessageDlg について ('+ #13'Delphi Graphics Studio' の画像の動的な動きを制御する) mtInFormation,[mbOk], 0);終了;手順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 := 'カスタム';end;MessageDlg ('画像の色深度:' + strDepth,mtInFormation, [mbOK], 0);//画像の色深度情報を与えますend;procedure TForm1.ScrollPanel1Click(Sender: TObject);beginPanel1.Visible := notPanel1.Visible;ScrollPanel1.Checked :=Panel1.Visible; / /コントロール パネルの表示設定を変更しますend;プロシージャ 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; // 2 つのボタンのプロパティを変更します。 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 //各ループの前に割り込みフラグをチェックします(つまり、停止ボタンが押されたかどうかを判断します) Break //画像のスクロールを停止するには、「停止」ボタンをクリックします。 ((Bmp.ScanLine [0]), Line, LineBytes); // J := 1 の画像の最初の行を 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,パネル 1.高さ + H - nLines,W, パネル 1.高さ + H);InvalidateRect (ハンドル、@R、False);UpdateWindow (Handle);Application.ProcessMessages; //ループを直ちに停止してプログラムを初期状態にします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。