Delphi: прозрачная или градиентная рамка - PullRequest
2 голосов
/ 09 января 2012

У меня есть форма, и я рисую ее градиентом на событии Paint. Также у меня есть кадры в этой форме. Я хочу, чтобы кадры были прозрачными, чтобы видеть градиент формы или вместо этого рисовать кадры с градиентом, если прозрачность недоступна.

Форма и рамка не должны мерцать:)

Как это сделать? Спасибо.

Отредактировано:

Как я вижу, мерцания прозрачности кадра. Поэтому лучшее решение для меня сейчас - переопределить TFrame1.PaintWindow (DC: HDC) и закрасить фон рамки градиентом.

1 Ответ

6 голосов
/ 09 января 2012

Вот способ получения прозрачности в кадрах, как описано здесь: how-to-make-delphi-tframe-background-transparent .

type
  TMyFrame = class(TFrame)
    procedure CreateParams(var Params: TCreateParams);override;
    procedure PaintWindow(DC: HDC); override;
  public
    constructor Create(AOwner:TComponent);override;
  end;

constructor TMyFrame.Create(AOwner: TComponent);
begin
  inherited;
  Brush.Style := bsClear;
end;

procedure TMyFrame.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_TRANSPARENT or WS_EX_COMPOSITED;
end;

procedure TMyFrame.PaintWindow(DC: HDC);
begin
  // Do not remove this comment to keep transparancy
end;

Обновлено:

Дэвид предложил добавить WS_EX_COMPOSITED к стилю, чтобы избежать мерцания при изменении размера. Это должно быть добавлено ко всем элементам управления.

...