• 0
Radio

PNG Кнопка

Вопросы

Пожалуйста помогите как создать кнопку или timage  в которым фон PNG . Как сделать  срабатывание click не на размер кнопки а на область где есть содержимое PNG. Проста в проекте есть типа карты в которым надо показать информацию региона при нажатие на территорий региона.

99.thumb.png.74f6c5bb4a5ae005ab4119b56563ffbe.png.         

Каждый цвет это отдельный PNG территория . очень прошу помогите 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 ответов на этот вопрос

  • 0

Ну вот прям точно не сказу, а проверять поленюсь. Но сделать регион точно можно по контуру картинки (еще с самых ранних делфей есть рекомендации по прозрачности сплашей). И вот почти уверен FMX эту задачу автоматизировать может.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
11 минуту назад, POV сказал:

Ну вот прям точно не сказу, а проверять поленюсь. Но сделать регион точно можно по контуру картинки (еще с самых ранних делфей есть рекомендации по прозрачности сплашей). И вот почти уверен FMX эту задачу автоматизировать может.

можете по поподробнее  очень нужно 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

https://community.embarcadero.com/answers/how-do-i-get-at-individual-pixels-in-a-firemonkey-tbitmap

можно проверять цвет пиксела

а можно приготовить 100500 отдельных картинок, наложить их тут друг на друга и проверять непрозрачность пиксела в каждой из этих исходных картинок

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Можно костыль - кучу формочек над главной формой - у которых включено Transparent.

Но к чему извращения? Тыкай мышой в карту и определяй цвет под ней. 

 

 

P.S. Но вообще есть,к примеру, компонент TPie - у него регион соответствует контуру. Так что и сделать свой компонент произвольной формы можно. Вот так он рисуется

procedure TPie.Paint;
var
  LShapePath: TPathData;
  LShapeRect: TRectF;
  MidPoint: TPointF;
  StrokeThicknessRestoreValue: Single;
  FillShape, DrawShape: Boolean;
begin
  StrokeThicknessRestoreValue := FStroke.Thickness;
  LShapePath := TPathData.Create;
  try
    LShapeRect := GetDrawingShapeRectAndSetThickness(Self, False, FillShape, DrawShape, StrokeThicknessRestoreValue);
    MidPoint := LShapeRect.CenterPoint;

    LShapePath.MoveTo(MidPoint);
    LShapePath.AddArc(MidPoint, TPointF.Create(LShapeRect.Width * 0.5, LShapeRect.Height * 0.5), FStartAngle, FEndAngle - FStartAngle);
    LShapePath.LineTo(MidPoint);
    LShapePath.ClosePath;
    if FillShape then
      Canvas.FillPath(LShapePath, AbsoluteOpacity, FFill);
    if DrawShape then
      Canvas.DrawPath(LShapePath, AbsoluteOpacity, FStroke);
  finally
    if LShapePath <> nil then
      LShapePath.Free;
    if StrokeThicknessRestoreValue <> FStroke.Thickness then
      FStroke.Thickness := StrokeThicknessRestoreValue;
  end;

end;

 

Изменено пользователем POV

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу