Как создать «Поддельный экран загрузки» в Delphi

#delphi #timer #shapes

#delphi #таймер #формы

Вопрос:

Я напрягал свой мозг, пытаясь создать экран загрузки в Delphi, но я просто нигде не могу найти помощь.

Я создаю игру для школьного проекта, и я хотел бы реализовать форму, которая имитирует экран загрузки.

Я хочу переместить фигуру по экрану, и я хочу, чтобы она оставляла за собой след (имитировать индикатор выполнения). Я знаю, что вы используете таймер для сглаживания его прогрессии, но я не уверен в том, как правильно использовать таймер с формой.

Я был бы признателен, если бы кто-нибудь показал мне, какой код / функции я должен использовать для этого.

С уважением, Кузон.

Комментарии:

1. Зачем «имитировать» экран загрузки? Почему бы не создать реальный экран загрузки? В чем разница?

2. Разница в том, что программа является школьным проектом, как я уже говорил ранее, и фактический экран загрузки немного не в моей компетенции. «Поддельный» экран загрузки предназначен только для эстетики, чтобы программа выглядела более «профессиональной».

3. Кто когда-либо голосовал против… Почему?

Ответ №1:

Чтобы переместить фигуру с помощью таймера и оставить след:

Каждый раз, когда срабатывает таймер, регулируйте положение фигуры. Здесь дорожка также имеет форму, добавляя ширину с каждым тиком таймера.

 unit MoveShape;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TFormMoveShape = class(TForm)
    Shape1: TShape;
    Timer1: TTimer;
    Shape2: TShape;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMoveShape: TFormMoveShape;

implementation

{$R *.dfm}

const
  cMoveIncrement = 2;

procedure TFormMoveShape.Timer1Timer(Sender: TObject);
begin
  if (Shape1.Left   Shape1.Width  < Self.ClientWidth - cMoveIncrement) then
  begin
    Shape1.Left := Shape1.Left   cMoveIncrement;
    Shape2.Width := Shape2.Width   cMoveIncrement;
  end
  else
  begin
    Shape1.Left := 8;
    Shape2.Width := 8;
  end;
end;

end.
  

 object FormMoveShape: TFormMoveShape
  Left = 0
  Top = 0
  Caption = 'Form27'
  ClientHeight = 336
  ClientWidth = 635
  Color = clBtnFace
  DoubleBuffered = True
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Shape2: TShape
    Left = 8
    Top = 112
    Width = 8
    Height = 41
    Brush.Color = clAqua
    Shape = stRoundRect
  end
  object Shape1: TShape
    Left = 8
    Top = 112
    Width = 137
    Height = 41
    Shape = stRoundRect
  end
  object Timer1: TTimer
    Interval = 50
    OnTimer = Timer1Timer
    Left = 512
    Top = 24
  end
end
  

Комментарии:

1. Большое вам спасибо! Этот код чрезвычайно полезен и углублен. Экран загрузки будет выглядеть фантастически. Очень признателен!