2012-01-27 70 views
3

我想用firemonkey在Delphi中复制https://github.com/jdg/MBProgressHUD的HUD功能。如何制作firemonkey HUD窗口

这就是看起来像iPhone:

HUD

的主要问题是如何使窗体半透明&完全删除边框。

+2

请修改您的问题,并发布屏幕截图或图片,说明您正在尝试做什么,而不是仅仅使用外部链接。如果外部链接消失或由于某种原因无法使用,那么将来对其他人而言,这会使你的问题变得毫无意义。谢谢。 :) – 2012-01-27 19:14:00

+1

你不能使半透明的形式,但你可以使它完全透明,并使用半透明(不透明<1)的形状。 – 2012-01-27 20:46:49

回答

4

创建您的Firemonkey HD表单,将其设置为Fill.KindbkNone,并将其设置为Fill.ColorNull。此外,将它的Transparency属性设置为True,并将其设置为BorderStylebsNone

创建TRectangle(或任何形状),并将Stroke.Kind属性设置为bkNone。将其设置为Fill.ColorGray,它是Opacity至0.5。

创建一个TAniIndicatorTLabel与父母都作为形式。它的Opacity保持在1.0。另外,还可以创建一个TImage,并使其与TAniIndicator的尺寸和位置完全相同。

从那里,当你想改变图像(打勾或类似)和标签文本以简单地改变为你想要显示的任何消息时,这仅仅是在TAniIndicator上使用TFloatAnimation的情况。理想情况下,您只需创建一个接受字符串或整数作为变量的过程,然后修改文本和指示符/图像以与之匹配。例如;

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相关,而不是创建指示器)很容易。