Изменить размер изображения
Модератор: Naeel Maqsudov
Подскажите пожалуйста, как сделать масштабируемым элемент Image внутри Userfom при изменении размеров формы?
Как изменяются размеры UserForm ?
Форма меняет размеры при помощи мыши простым растягиванием. Код здесь на форуме бралpashulka писал(а):Как изменяются размеры UserForm ?
Тогда можно попробовать такой подход :
При ответе не нужно цитировать предыдущее сообщение.
Код: Выделить всё
Private oldHeight!, oldWidth!
Private Sub UserForm_Initialize()
oldHeight = Me.Height: oldWidth = Me.Width
End Sub
Private Sub UserForm_Resize()
With Me.Image1
.Height = .Height * (Me.Height / oldHeight)
.Width = .Width * (Me.Width / oldWidth)
End With
oldHeight = Me.Height: oldWidth = Me.Width 'Or UserForm_Initialize
End Sub
Да , все сработало волшебным образом!!! Правда появилась другая проблема - Увеличивающееся изображение начинает перекрывать находящиеся на форме объекты Кнопка. им бы задать некую привязку.....
Тогда, или перебирать все элементы управления и менять их размеры :
Или же использовать свойство .Zoom. В последнем случае, необходимо учесть, что ширина и высота формы могут меняться непропорциально, например, percHeight = 105 , а percWidth = 150 (в примере я просто выбрал минимум, но это не является обязательным условием)
Код: Выделить всё
Private oldHeight!, oldWidth!
Private Sub UserForm_Initialize()
oldHeight = Me.Height: oldWidth = Me.Width
End Sub
Private Sub UserForm_Resize()
Dim iControl As MSForms.Control, percHeight!, percWidth!
percHeight = Me.Height / oldHeight
percWidth = Me.Width / oldWidth
For Each iControl In Me.Controls
With iControl
'Есть также метод .Move
.Top = .Top * percHeight
.Left = .Left * percWidth
.Height = .Height * percHeight
.Width = .Width * percWidth
End With
Next
oldHeight = Me.Height: oldWidth = Me.Width 'Or UserForm_Initialize
End Sub
Код: Выделить всё
Private oldHeight!, oldWidth!
Private Sub UserForm_Initialize()
oldHeight = Me.Height: oldWidth = Me.Width
End Sub
Private Sub UserForm_Resize()
Dim percHeight%, percWidth%
percHeight = (Me.Height / oldHeight) * 100
percWidth = (Me.Width / oldWidth) * 100
Me.Zoom = Application.Min(percHeight, percWidth, 400)
'В окончательном варианте необходимо учесть, что
'масштаб должен быть в пределах от 10 до 400
End Sub
Уважаемый Мастер pashulka! Это исчерпывающий ответ! Первый способ мне больше глянулся! Не нашел я по форуму как поднимать репутацию, СПАСИБО! Еще есть вопрос, но не знаю, можно ли в этой теме или новую создавать? Суть вопроса как с помощью кнопочного циферблата в данной UserForm осуществить ввод числа в активную ячейку Excel ???
Мы с гуглом, что называется, "теряемся в догадках" касательно того, что есть кнопочный циферблат, применительно к UserForm ... но если абстрагироваться от этого термина и предположить, что в момент выполнения макроса, активная ячейка наличествует, то :
Код: Выделить всё
ActiveCell = 123 'ActiveCell.Value = 123
Все проще, имеется 10 кнопок, как в телефоне и с их помощью в ячейку набирается число!
Такая версия имелась в разработке, но было маловато доказательств … а если серьёзно, то при определённой ситуации, можно даже так :
В идеале, конечно же, используя событие UserForm_Initialize, активную ячейку имеет смысл почистить от мусора, а также, установить соответствующий формат, например, числовой или общий (но не текстовый)
P.S. Если же создавать десять событий (для каждой кнопки) не хочется, то здесь можно найти примеры создания массивов элементов, автором которых является Дмит
Код: Выделить всё
Private Sub CommandButton0_Click() 'Цифра 0
ActiveCell = ActiveCell & 0
End Sub
Private Sub CommandButton1_Click() 'Цифра 1
ActiveCell = ActiveCell & 1
End Sub
и т.д.
...
P.S. Если же создавать десять событий (для каждой кнопки) не хочется, то здесь можно найти примеры создания массивов элементов, автором которых является Дмит