In diesem Artikel wird anhand eines Beispiels die Methode zum Implementieren der Bildlaufumschaltung in Delphi vorgestellt. Dieses Programm kann das Scrollen von Bildern realisieren und über diesen Code das Bild im Fenster so steuern, dass es nach oben scrollt. Durch Anpassen des Werts der Geschwindigkeits-Scroll-Leiste kann auch die Scroll-Geschwindigkeit angepasst werden. drücken, und das Bild hört auf zu scrollen.
Der vollständige Funktionscode lautet wie folgt:
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 BitBtn2Click(Sender: TObject); procedure FormCreate(Sender: TObject); fCancel: Boolean;implementation{$R *.DFM}procedure TForm1.Open1Click(Sender: TObject);beginif OpenDialog1.Execute thenbeginImage1.Picture.LoadFromFile (OpenDialog1.FileName);//Bilddatei importieren Caption := 'Kontrollieren Sie die dynamische Bewegung des Bildes - ' + OpenDialog1. Dateiname;/ /Formulartitel ändernend;end;prozedur TForm1.Exit1Click(Sender: TObject);beginClose; //Formular verlassend;Prozedur TForm1.AboutImageViewer1Click(Sender: TObject);//Über beginMessageDlg ('Kontrollieren Sie die dynamische Bewegung von Bildern für'+ #13'Delphi Graphics Studio' , mtInFormation,[mbOk], 0);end;prozedur TForm1.ColorDepth1Click(Sender: TObject);varstrDepth: String;begincase Image1.Picture.Bitmap.PixelFormat of //Bildfarbtiefe abrufen pfDevice: strDepth := 'No picture';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 ('Bildfarbtiefe:' + strDepth,mtInFormation, [mbOK], 0);//Gibt die Farbtiefeninformationen des Bildes anend;procedure TForm1.ScrollPanel1Click(Sender: TObject);beginPanel1.Visible := not Panel1.Visible;ScrollPanel1.Checked := Panel1.Visible; / /Sichtbarkeit des Bedienfelds ändernend;procedure TForm1.TrackBar1Change(Sender: TObject);beginnLines := TrackBar1.Position;TrackBar1.Hint := IntToStr (TrackBar1.Position);//Gibt einen Hinweis auf die aktuelle Geschwindigkeitend;procedure TForm1.BitBtn1Click(Sender: TObject);varW, H, I, J , LineBytes: Integer;Line: PByteArray; //Zeigertypvariable definieren Bmp: Tbitmap;R: TRect;beginif Image1.Picture.Bitmap.PixelFormat=pfDevice then //Wenn das Bild nicht geöffnet ist beginMessageDlg ('Das Bild ist nicht geöffnet! ', mtInFormation, [mbOk], 0); //Exit endelsefCancel := False;BitBtn1.Enabled := False; //Ändern Sie die Eigenschaften der beiden Schaltflächen BitBtn2.Enabled := True; Bmp := Image1.Picture.Bitmap; // Holen Sie sich das BMP-Bild und definieren Sie die Bildgröße 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 //Überprüfen Sie das Break-Flag vor jeder Schleife (d. h. stellen Sie fest, ob die Stopp-Taste gedrückt wird) Break; //Klicken Sie auf die Schaltfläche „Stopp“, um das Scrollen des Bildes zu stoppen ((Bmp.ScanLine [0]), Line, LineBytes); //Kopiere die erste Zeile des Bildes für J := 1 bis 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; //Ermöglichen, dass die Schleife sofort gestoppt wird, um das Programm in den Anfangszustand zu versetzen.end;BitBtn1.Enabled := True; //Aktivieren Sie die Schaltfläche „Start“ BitBtn2.Enabled := False; Die Stopp-Schaltfläche ist ungültig. ;procedure TForm1.BitBtn2Click(Sender: TObject);beginfCancel := True; //Change flag Fcancel Wert, Bildlauf stoppenend;procedure TForm1.FormCreate(Sender: TObject);beginTrackBar1Change (self); //Rufen Sie die TrackBar1Change-Funktion aufend;end.