控制在顶部,像TPanel一样可以吗?

时间:2011-03-20 16:12:03

标签: delphi vcl timage tpanel stayontop

我的程序正在执行一项耗时的任务,我想在应用程序窗口中间显示一个TImage,但它不会保持最佳状态 - 我的VST始终位于顶部。但是,当我使用TPanel时,它会保持在顶部?我如何让我的TImage做到这一点?

事实上,适用于所有控件的解决方案非常出色:)

谢谢!

2 个答案:

答案 0 :(得分:7)

您需要一个窗口控件(即带有窗口句柄的控件或“正确”控件)才能显示您的消息,因为窗口上方无法显示非窗口控件控制。最简单的解决方案是将TImage放入TPanel并设置Image1.Align := alClientPanel1.BorderStyle := bsNone

如果您希望在普通控件上绘制半透明位图,您可以像我一直这样做:

procedure TForm1.Button1Click(Sender: TObject);
var
  bm: TBitmap;
  png: TPngImage;
begin
  // The form contains a hidden TPanel (somewhere on the form)
  // with a TImage (alClient).

  // png is a PNG image with an alpha channel
  png := TPngImage.Create;
  try
    png.LoadFromFile('C:\Users\Andreas Rejbrand\Pictures\alpha.png');
    // Create bitmap of form and blend PNG on it
    bm := GetFormImage;
    try
      bm.Canvas.Draw(0, 0, png);
      Image1.Picture.Bitmap := bm;
    finally
      bm.Free;
    end;
    Panel1.Align := alClient;
    Panel1.BringToFront;
    Panel1.Show;
  finally
    png.Free;
  end;
end;

Sample result http://privat.rejbrand.se/formdraw.png

答案 1 :(得分:1)

TImage没有与之关联的窗口,这是它与面板之间的区别。

添加一个面板,并将图像放在面板内,即图像的父图像是面板。然后,您可以将面板放在前面,将图像放在前面。

您是否考虑过隐藏VST?