Delphi 顶部的控件,就像TPanel可以做的那样? 我的程序正在执行一个耗时的任务,我想在应用程序窗口中间显示一个计时器,但它不会停留在顶部——我的VST总是在上面。但是,当我使用TPanel时,它会保持在顶部吗?我怎么能让我的孩子这么做

Delphi 顶部的控件,就像TPanel可以做的那样? 我的程序正在执行一个耗时的任务,我想在应用程序窗口中间显示一个计时器,但它不会停留在顶部——我的VST总是在上面。但是,当我使用TPanel时,它会保持在顶部吗?我怎么能让我的孩子这么做,delphi,vcl,timage,tpanel,stayontop,Delphi,Vcl,Timage,Tpanel,Stayontop,事实上,一个适用于所有控件的解决方案将非常出色:) 谢谢 您需要一个窗口控件(即带有窗口句柄的控件或“适当”控件)来显示消息,因为非窗口控件在窗口控件上方不可见。最简单的解决方案是将TImage放置在TPanel中,并设置Image1.Align:=alClient和Panel1.BorderStyle:=bsNone 如果您希望在普通控件上绘制半透明位图,可以像我一直做的那样: procedure TForm1.Button1Click(Sender: TObject); var bm:

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

谢谢

您需要一个窗口控件(即带有窗口句柄的控件或“适当”控件)来显示消息,因为非窗口控件在窗口控件上方不可见。最简单的解决方案是将
TImage
放置在
TPanel
中,并设置
Image1.Align:=alClient
Panel1.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;
您需要一个窗口控件(即带有窗口句柄的控件或“适当”控件)来显示消息,因为非窗口控件在窗口控件上方不可见。最简单的解决方案是将
TImage
放置在
TPanel
中,并设置
Image1.Align:=alClient
Panel1.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;

图像没有与之关联的窗口,这就是它与面板之间的区别

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


您是否考虑过隐藏VST?

图像没有与之关联的窗口,这就是它与面板之间的区别

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


你想过隐藏你的VST吗?

我也想过,但是我的图像有字母混合的边框+1的信息虽然@安德烈亚斯,你能告诉杰夫如何使他的面板透明吗?@David:恐怕我不知道有什么可靠的方法可以做到这一点。(我想您应该添加
WS_EX_TRANSPARENT
并回复一些消息。)如果您这样做,请告知我们。@Andreas是的,这不是我的专业领域either@David:我添加了一段代码,至少相当于相同的内容。这段代码非常健壮。我也考虑过这一点,但是我的图像有字母混合的边框+1的信息虽然@安德烈亚斯,你能告诉杰夫如何使他的面板透明吗?@David:恐怕我不知道有什么可靠的方法可以做到这一点。(我想您应该添加
WS_EX_TRANSPARENT
并回复一些消息。)如果您这样做,请告知我们。@Andreas是的,这不是我的专业领域either@David:我添加了一段代码,至少相当于相同的内容。这段代码非常健壮。是的,但我更希望它可见。是的,但我更希望它可见。@LachlanG:Virtual StringTree,一个非常著名的第三方控件。谢谢Andreas。我知道这个控件,应该猜到它的首字母缩写。@LachlanG:Virtual StringTree,一个非常有名的第三方控件。谢谢Andreas。我知道控件,应该猜到缩写词。