Este artigo apresenta o método de implementação da alternância de rolagem de imagens no Delphi com um exemplo. Este programa pode realizar a transmissão contínua de imagens, e através deste código, a imagem na janela pode ser controlada para rolar para cima. Ajustando o valor da barra de rolagem de velocidade, a velocidade de rolagem também pode ser ajustada clicando no botão “Parar”. botão e a imagem irá parar de rolar.
O código completo da função é o seguinte:
unit Unit1; interfaces Windows, Classes, Gráficos, Formulários, Controles, Menus, Diálogos, StdCtrls, ExtCtrls, SysUtils, ComCtrls, Botões; : 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;procedimento Open1Click(Sender: TObject);procedimento Exit1Click(Sender: TObject);procedimento AboutImageViewer1Click(Sender: TObject);procedimento ColorDepth1Click(Sender: TObject);procedimento ScrollPanel1Click(Sender : TObject); procedimento TrackBar1Change(Remetente: TObject); procedimento BitBtn1Click(Remetente: TObject); procedimento BitBtn2Click(Remetente: TObject); fCancel: Booleano;implementação{$R *.DFM}procedure TForm1.Open1Click(Sender: TObject);beginif OpenDialog1.Execute thenbeginImage1.Picture.LoadFromFile (OpenDialog1.FileName);//Importar arquivo de imagem Legenda := 'Controle o movimento dinâmico da imagem - ' + OpenDialog1. FileName;/ /Alterar título do formulárioend;end;procedure TForm1.Exit1Click (Sender: TObject); mtInFormation,[mbOk], 0);fim;procedimento TForm1.ColorDepth1Click(Sender: TObject);varstrDepth: String;begincase Image1.Picture.Bitmap.PixelFormat of //Obter a profundidade de cor da imagem pfDevice: strDepth := 'Sem imagem';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 ('Profundidade da cor da imagem:' + strDepth,mtInFormation, [mbOK], 0);//Fornece informações de profundidade de cor da imagemend;procedure TForm1.ScrollPanel1Click(Sender: TObject);beginPanel1.Visible := not Panel1.Visible;ScrollPanel1.Checked := Panel1.Visible; /Alterar a visibilidade do painel de controleend;procedure TForm1.TrackBar1Change(Sender: TObject);beginnLines := TrackBar1.Position;TrackBar1.Hint := IntToStr (TrackBar1.Position);//Dá uma dica do speedend atual;procedimento TForm1.BitBtn1Click(Sender: TObject);varW, H, I, J , LineBytes: Integer;Line: PByteArray; //Definir variável do tipo de ponteiro Bmp: Tbitmap;R: TRect;beginif Image1.Picture.Bitmap.PixelFormat=pfDevice then //Quando a imagem não é aberta beginMessageDlg ('A imagem não é aberta! ', mtInFormation, [mbOk], 0); //Dá uma mensagem de erro exit; //Sair endelsefCancel := False;BitBtn1.Enabled := False; Bmp := Image1.Picture.Bitmap; //Obtém a imagem BMP e define o tamanho da imagem W := Bmp.Width;H := Bmp.Height;LineBytes := Abs (Integer (Bmp.ScanLine [1]) -Integer (Bmp.ScanLine [0]));Line := AllocMem (LineBytes);for I := 0 a H - 1 dobeginif fCancel então //Verifica o sinalizador de interrupção antes de cada loop (ou seja, determina se o botão parar está pressionado) Break //Clique no botão "Parar" para parar de rolar a imagem Mover; ((Bmp.ScanLine [0]), Line, LineBytes); //Copia a primeira linha da imagem para J := 1 a H - 1 dobeginMove ((Bmp.ScanLine [J]), (Bmp.ScanLine [J]). - 1]), LineBytes);se (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; //Permitir que o loop seja interrompido imediatamente para colocar o programa no estado inicial;BitBtn1.Enabled := True; O "botão" de parada é inválidoend ;procedure TForm1.BitBtn2Click(Sender: TObject);beginfCancel := True; valor, parar a rolagem da imagemend;procedimento TForm1.FormCreate(Sender: TObject);beginTrackBar1Change (self);