Как сделать окно HUD для Firemonkey - PullRequest
3 голосов
/ 27 января 2012

Я хочу скопировать функциональность HUD https://github.com/jdg/MBProgressHUD в Delphi с помощью firemonkey.

Вот как выглядит iPhone:

HUD

Основная проблема заключается в том, как сделать форму полупрозрачной и полностью удалить границы.

1 Ответ

4 голосов
/ 09 мая 2012

Создайте свою форму Firemonkey HD, установите Fill.Kind на bkNone и Fill.Color на Null.Кроме того, установите для свойства Transparency значение True, а для BorderStyle - bsNone.

Создайте TRectangle (или любую форму) и установите для свойства Stroke.Kind значение bkNone.Установите Fill.Color на Gray, Opacity на 0,5.

Создайте TAniIndicator и TLabel с родителем обоих в качестве формы.Это Opacity остается на уровне 1,0.По желанию, также создайте TImage и сделайте его точно таким же размером и положением, как и TAniIndicator.

Оттуда это просто случай работы с TFloatAnimation в TAniIndicator, когда вы хотите изменитьизображение (на галочку или тому подобное) и текст метки, чтобы просто изменить на любое сообщение, которое вы хотите отобразить.В идеале вы просто создаете процедуру, которая принимает либо строку, либо целое число в качестве переменной, а затем изменяете текст и индикатор / изображение в соответствии с этим.Например,

Procedure TForm1.Process(Mode : Integer);
Begin
 if Mode = 1 then
 begin
  AniIndicator1.Enabled := True;
  AniIndicator1.Visible := True;
  Image1.Visible := False;
  Label1.TextAlign := TTextAlign.taCenter; // Must be called to reset alignment
  Label1.Text := 'Loading';
 End
 else if Mode = 2 then
 Begin
  AniIndicator1.Enabled := False;
  AniIndicator1.Visible := False;
  Label1.TextAlign := TTextAlign.taCenter; // Must be called to reset alignment
  Image1.Bitmap.LoadFromFile('Tick.png');
  Image1.Visible := True;
  Label1.Text := 'Complete!';
 end;
end;

Затем вы можете создать tpanel в своей основной форме, а затем добавить вышеуказанную форму (которая содержит TAniIndicator, label, and rectangle) в качестве дочернего компонента.Затем вы вызываете созданную вами процедуру с допустимой переменной режима, и она будет работать так, как вы указали в коде.Достаточно просто добавить больше режимов, и я сделал нечто похожее с одним из моих собственных приложений (хотя это было связано с TRectangle, а не с созданием индикатора).

...