1

私のプログラムは時間のかかるタスクを実行しており、アプリケーション ウィンドウの中央に TImage を表示したいのですが、一番上に表示されません。私の VST は常に一番上にあります。しかし、TPanel を使用すると、一番上に表示されたままになりますか? TImageにそれをさせるにはどうすればよいですか?

実際、すべてのコントロールに適用される解決策は素晴らしいでしょう:)

ありがとう!

4

2 に答える 2

9

ウィンドウ化されていないコントロールはウィンドウ化されたコントロールの上に表示できないため、メッセージを表示するには、ウィンドウ化されたコントロール (つまり、ウィンドウ ハンドルを持つコントロール、または「適切な」コントロール) が必要です最も簡単な解決策は、TImageを aTPanelおよび setImage1.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;

サンプル結果

于 2011-03-20T16:16:26.550 に答える
1

TImage にはウィンドウが関連付けられておらず、それがパネルとの違いです。

パネルを追加し、画像をパネル内に配置します。つまり、画像の親はパネルです。次に、パネルを前面に持ってくることで、画像を前面に持ってくることができます。

VST を非表示にすることを考えましたか?

于 2011-03-20T16:16:39.000 に答える