Есть ли способ сформировать кнопку вокруг картинки в Delphi - PullRequest
1 голос
/ 11 апреля 2020

Я использую компонент TAdvShapeButton из программного обеспечения TMS для создания кнопок вокруг круга.

enter image description here

Эта кнопка работает, добавляя изображения для; вниз, горячий, отключенный и нормальные состояния. Он сохраняет прозрачность из PNG, КРОМЕ, если TAdvShapeButton находится выше другого TAdvShapeButton.

Это приводит к следующей проблеме, потому что кнопка является прямоугольником.

enter image description here

Есть ли способ изменить форму этой кнопки из прямоугольника, чтобы она соответствовала загруженному изображению?

Я предполагаю что-то вроде того, что используется для округления углов формы:

procedure TfCompass.FormCreate(Sender: TObject);
var
  region:HRGN;
begin
  region := CreateRoundRectRgn(ClientRect.left, ClientRect.top, ClientRect.right, ClientRect.bottom, 326, 326);
  SetWindowRgn(Handle, region, true);
end;

Не знаю, как поступить.

Большое спасибо.

Редактировать 1:

Эта проблема возникает, даже если TAdvShapeButtons пропущены в форме .

enter image description here

1 Ответ

0 голосов
/ 12 апреля 2020

Сойдя с рекомендации Serta c, я нашел следующий код: http://delphi.cjcsoft.net/viewthread.php?tid=45051

procedure TForm1.MakeRounded(Control: TWinControl; iCorner : Integer);
var
  R: TRect;
  Rgn: HRGN;
begin
  with Control do
  begin
    R := ClientRect;
    rgn := CreateRoundRectRgn(R.Left, R.Top, R.Right, R.Bottom, iCorner, iCorner);
    Perform(EM_GETRECT, 0, lParam(@r));
    InflateRect(r, - 5, - 5);
    Perform(EM_SETRECTNP, 0, lParam(@r));
    SetWindowRgn(Handle, rgn, True);
    Invalidate;
  end;
end;

Хотя мне бы хотелось найти способ создания HRGN с помощью png внутри моего ShapeButton, я обнаружил, что скругление углов предотвращает перекрытие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...