VBA -> Размещение прозрачного изображения на другом прозрачном изображении - PullRequest
0 голосов
/ 13 октября 2018

После длительного поиска я все еще не могу найти решение этой проблемы.

Справочная информация: Я пытаюсь создать конфигуратор продукта, который шаг за шагом будетпокажите изображение готового продукта в зависимости от выбора в форме.

«Обзорное» изображение будет «фоновым изображением» и изображениями с прозрачным фоном, расположенными друг над другом.

Мои проблемы:

  1. Если я вставлю 2 изображения в одно и то же поле с изображением в форме, я, похоже, потеряю прозрачность изображений.В итоге я увижу только последнее вставленное изображение с белым фоном вместо прозрачного фона.

Дополнительная информация для последующего программирования:

Я хотел бы иметь возможность удалить уже вставленное изображение

Мне все равно, если изображения должны быть PNG или GIF

Если это не может быть сделано в форме, я открыт, чтобы сделать это в листе Excel, но изображения должны быть размещены точно в том же месте на листе, друг над другом.

LoadPictureGDI Я использовал только, чтобы попытаться вставить изображение .png в форму (я пробовал также с изображениями .gif, не используя LoadPictureGDI, но стот же результат, что описан в моей проблеме выше)

Мой код пока:

Sub Sample(var_ec_image)
    Select Case var_ec_image
        Case "ec_base": AddPicture ("ec_base")
    End Select
End Sub

Sub AddPicture(picname As String)
    ' print picture from selection of form
        image_box.Picture = LoadPictureGDI( _
                ThisWorkbook.Path & "\images\" & picname & ".png")
    ' print test image on top of first image
        image_box.Picture = LoadPictureGDI( _
                ThisWorkbook.Path & "\images\ec_tilt_upper_part.png")
End Sub

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Хорошо, так что иногда самое простое решение никогда не приходит в голову :) Это работает для меня, поскольку у меня есть только 8 изображений для обработки.

Как это было решено:

В пользовательской форме ядобавлен один элемент управления изображением для каждого из прозрачных изображений, а также один элемент управления изображением для «базового изображения».

Все элементы управления изображением имеют одинаковую ширину и высоту и размещены на каждом другом.«BackStyle» элементов управления изображением установлено на «Прозрачный».В «Picture» я вставил разные (прозрачные) картинки.

Затем я «спрятал» или «показал» конкретный элемент управления изображением в зависимости от выбора в форме.

    If machine_form.Image2.Visible = False Then
        machine_form.Image2.Visible = True
  Else
        machine_form.Image2.Visible = False
    End If

Iоцените помощь, которую я получил, и я думаю, что впереди будут еще вопросы

0 голосов
/ 13 октября 2018

Как вы обнаружили, Excel делает вставленные изображения непрозрачными (непрозрачными) по умолчанию.

Однако, вы можете выбрать определенный цвет для прозрачного .


Установите прозрачный цвет вручную

  • Выберите изображение, затем щелкните вкладку Format на ленте.
  • В группе Adjust нажмите Цвет .
  • Нажмите Установить прозрачный цвет .
  • Нажмите на картинку, цвет должен быть прозрачным.

image
Источник изображения: "Почему одна часть стопки в логотипе Stack Overflow слегка смещена? "


Установить прозрачный цвет с помощью VBA

Вы можете использовать свойство PictureFormat.TransparentBackground для программного задания прозрачного цвета.

Например, , чтобы сделать белые секции прозрачными изображения под названием "Изображение 1":

Sub WhiteToTransparent()
    With ActiveSheet.Shapes("Picture 1")
        With .PictureFormat
            .TransparentBackground = True
            .TransparencyColor = vbWhite
        End With
        .Fill.Visible = False
    End With
End Sub

Пример адаптирован из документации .

...