Cet article présente la méthode d'implémentation de la commutation de défilement d'image dans Delphi avec un exemple. Ce programme peut réaliser la diffusion de défilement d'images, et grâce à ce code, l'image dans la fenêtre peut être contrôlée pour défiler vers le haut. En ajustant la valeur de la barre de défilement de vitesse, la vitesse de défilement peut également être ajustée en cliquant sur « Arrêter ». et l'image cessera de défiler.
Le code de fonction complet est le suivant :
unité Unit1;interfaceutiliseWindows, Classes, Graphiques, Formulaires, Contrôles, Menus,Dialogs, StdCtrls, ExtCtrls, SysUtils, ComCtrls, Buttons;typeTForm1 = class(TForm)MainMenu1: TMainMenu;File1: TMenuItem;Open1: TMenuItem;N1: TMenuItem;Exit1 : TMenuItem; Aide1: 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;procédure Open1Click(Expéditeur: TObject);procédure Exit1Click(Expéditeur: TObject);procédure AboutImageViewer1Click(Expéditeur: TObject);procédure ColorDepth1Click(Expéditeur: TObject);procédure ScrollPanel1Click(Expéditeur : TObject); procédure TrackBar1Change (Expéditeur: TObject); procédure BitBtn1Click (Expéditeur: TObject); procédure BitBtn2Click (Expéditeur: TObject); procédure FormCreate (Expéditeur: TObject); fin;varForm1: TForm1;nLines: Integer; fAnnuler : booléen;implémentation{$R *.DFM}procédure TForm1.Open1Click(Sender: TObject);beginif OpenDialog1.Execute thenbeginImage1.Picture.LoadFromFile (OpenDialog1.FileName);//Importer le fichier image Légende := 'Contrôler le mouvement dynamique de l'image - ' + OpenDialog1. FileName;/ /Changer le titre du formulairefin;fin;procédure TForm1.Exit1Click(Sender: TObject);beginClose; //Quitter le formulaire;procédure TForm1.AboutImageViewer1Click(Sender: TObject);//AboutbeginMessageDlg('Contrôler le mouvement dynamique des images pour'+ #13'Delphi Graphics Studio' , mtInFormation,[mbOk], 0);fin;procédure TForm1.ColorDepth1Click(Sender: TObject);varstrDepth: String;begincase Image1.Picture.Bitmap.PixelFormat of //Obtenir la profondeur de couleur de l'image pfDevice: strDepth := 'Aucune image';pf1bit: strDepth := '1-bit'; pf4bit : strDepth := '4 bits';pf8bit : strDepth := '8 bits';pf15bit : strDepth := '15 bits';pf16bit : strDepth := '16 bits';pf24bit : strDepth := '24 bits';pf32bit : strDepth := '32 bits'; pfCustom: strDepth := 'Custom';end;MessageDlg ('Profondeur de couleur de l'image :' + strDepth,mtInFormation, [mbOK], 0);//Donne les informations sur la profondeur de couleur de l'imageend;procédure TForm1.ScrollPanel1Click(Sender: TObject);beginPanel1.Visible := not Panel1.Visible;ScrollPanel1.Checked := Panel1.Visible / /Modifier la visibilité du panneau de contrôleend;procédure TForm1.TrackBar1Change(Sender: TObject);beginnLines := TrackBar1.Position;TrackBar1.Hint := IntToStr (TrackBar1.Position);//Donne un indice sur la fin de vitesse actuelle;procédure TForm1.BitBtn1Click(Sender: TObject);varW, H, I, J , LineBytes : Integer;Line : PByteArray; //Définir la variable de type pointeur Bmp : Tbitmap;R : TRect;beginif Image1.Picture.Bitmap.PixelFormat=pfDevice then //Lorsque l'image n'est pas ouverte,beginMessageDlg('L'image n'est pas ouverte ! ', mtInFormation, [mbOk], 0); //Donner un message d'erreur exit; //Quitter endelsefCancel := False;BitBtn1.Enabled := False; //Modifier les propriétés des deux boutons BitBtn2.Enabled := True; Bmp := Image1.Picture.Bitmap; //Récupère l'image BMP et définit la taille de l'image 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 //Vérifiez l'indicateur de rupture avant chaque boucle (c'est-à-dire déterminez si le bouton d'arrêt est enfoncé) Break //Cliquez sur le bouton "Stop" pour arrêter le défilement de l'image Déplacer; ((Bmp.ScanLine [0]), Line, LineBytes); //Copiez la première ligne de l'image pour J := 1 vers 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; //Autoriser l'arrêt immédiat de la boucle pour remettre le programme dans l'état initialend;BitBtn1.Enabled := True; //Activer le bouton "Démarrer" BitBtn2.Enabled := False; Le "bouton" d'arrêt est invalidend ;procedure TForm1.BitBtn2Click(Sender: TObject);beginfCancel := True //Change flag Fcancel; valeur, arrêter le défilement de l'imageend;procédure TForm1.FormCreate(Sender: TObject);beginTrackBar1Change (self); //Appeler la fonction TrackBar1Changeend;end.