Управление сверху, как может сделать TPanel?

Моя программа выполняет трудоемкую задачу, и я хотел бы отобразить TImage в середине окна приложения, но он не останется сверху - мой VST всегда находится сверху. Тем не менее, когда я использую TPanel, он остается на вершине? Как я могу сделать так, чтобы мой TImage сделал это?

На самом деле, решение, которое применяется ко всем элементам управления, было бы великолепно:)

Спасибо!

2 ответа

Решение

Вам нужен оконный элемент управления (то есть элемент управления с дескриптором окна или "правильный" элемент управления) для отображения вашего сообщения, потому что не оконный элемент управления не может быть виден над оконным элементом управления. Самое простое решение - разместить 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;

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

TImage не имеет связанного с ним окна, и в этом разница между ним и панелью.

Добавьте панель и поместите изображение внутри панели, то есть родитель изображения является панелью. Затем вы можете перенести изображение на передний план, перенеся панель на передний план.

Ты думал о том, чтобы спрятать свой VST?

Другие вопросы по тегам