Advertisement
SmnVadik

Lab 6.4 (Delphi)

Sep 5th, 2023
529
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.76 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.     Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  7.     System.Classes, Vcl.Graphics,
  8.     Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls,
  9.     FMX.Graphics;
  10.  
  11. type
  12.     TForm1 = class(TForm)
  13.         timer: TTimer;
  14.         procedure FormCreate(Sender: TObject);
  15.         procedure FormPaint(Sender: TObject);
  16.         procedure FormKeyDown(Sender: TObject; var Key: Word;
  17.           Shift: TShiftState);
  18.         procedure timerTimer(Sender: TObject);
  19.     private
  20.         { Private declarations }
  21.         windowHeight: Integer;
  22.         waveAmplitude: Integer;
  23.         waveSpeed: Integer;
  24.         isWaveActive: Boolean;
  25.         waveOffset: Integer;
  26.     public
  27.         { Public declarations }
  28.         constructor Create(AOwner: TComponent); override;
  29.     end;
  30.  
  31. var
  32.     Form1: TForm1;
  33.  
  34. implementation
  35.  
  36. {$R *.dfm}
  37.  
  38.  
  39. constructor TForm1.Create(AOwner: TComponent);
  40. begin
  41.     inherited Create(AOwner);
  42.     DoubleBuffered := True;
  43.     Color := clBlack;
  44.     Font.Color := clWhite;
  45.  
  46.     windowHeight := 400;
  47.     waveAmplitude := 50;
  48.     waveSpeed := 5;
  49.     isWaveActive := False;
  50.     waveOffset := 0;
  51.  
  52.     timer := TTimer.Create(Self);
  53.     timer.Interval := 30;
  54.     timer.OnTimer := timerTimer;
  55. end;
  56.  
  57. procedure TForm1.FormCreate(Sender: TObject);
  58. begin
  59.     KeyPreview := True;
  60. end;
  61.  
  62. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  63.   Shift: TShiftState);
  64. begin
  65.     if Key = VK_RETURN then
  66.     begin
  67.         isWaveActive := not isWaveActive;
  68.         if isWaveActive then
  69.             timer.Enabled := True
  70.         else
  71.             timer.Enabled := True;
  72.     end;
  73. end;
  74.  
  75. procedure TForm1.FormPaint(Sender: TObject);
  76. var
  77.     y, waveX: Integer;
  78.     leftColor, rightColor: TColor;
  79.     i: Integer;
  80. begin
  81.     for y := 0 to windowHeight do
  82.     begin
  83.         waveX := Trunc(waveAmplitude * Sin(2 * Pi * (y + waveOffset) /
  84.           windowHeight));
  85.         if isWaveActive then
  86.         begin
  87.             leftColor := clBlue;
  88.             rightColor := clRed;
  89.         end
  90.         else
  91.         begin
  92.             leftColor := clRed;
  93.             rightColor := clBlue;
  94.         end;
  95.  
  96.         Canvas.Brush.Style := bsSolid; // Устанавливаем стиль заливки
  97.         Canvas.Brush.Color := leftColor; // Устанавливаем цвет заливки
  98.         Canvas.FillRect(Rect(0, y, waveX + ClientWidth div 2, y + 20));
  99.  
  100.         Canvas.Brush.Color := rightColor; // Устанавливаем другой цвет заливки
  101.         Canvas.FillRect(Rect(waveX + ClientWidth div 2, y, ClientWidth, y + 20));
  102.  
  103.     end;
  104. end;
  105.  
  106. procedure TForm1.timerTimer(Sender: TObject);
  107. begin
  108.     waveOffset := waveOffset + waveSpeed;
  109.     Invalidate;
  110. end;
  111.  
  112. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement