UserControl PictureBox контейнер

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

UserControl PictureBox контейнер

Сообщение djalex777 » 02.06.2015 (Вт) 12:06

Всем доброго времени суток! Давно не писал ничего на VB6, но вот понадобилось...

Есть UserControl, на нём (в нём) есть PictureBox. У UserControl свойство ControlContainer выставлено в True. Задача - при добавлении элементов в дизайнере (IDE) VB6 на UserControl сделать так чтобы они добавлялись в PictureBox. Т.е. чтобы {ObjectToAdd}.Container = PictureBox. Пробовал перехватывать Drop на UserControl и переустанавливать свойство Container для объекта в нужный мне, но получаю ошибку 'Invalid Object Use' Что делаю не так?

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: UserControl PictureBox контейнер

Сообщение bon818 » 03.06.2015 (Ср) 8:03

djalex777 писал(а):Пробовал перехватывать Drop на UserControl и переустанавливать свойство Container для объекта в нужный мне

Наверно как-то можно, но DragDrop в UserControl'е , без OLE не работает почему-то.
По мне так проще на API.
Form
Код: Выделить всё
'Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Sub UserControlX_DragDrop(Source As Control, X As Single, Y As Single)
    SetParent Source.hwnd, UserControlX.GetPictureHnd
End Sub

UserControl
Код: Выделить всё
Function GetPictureHnd() As Long
    GetPictureHnd = Picture1.hwnd
End Function

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: UserControl PictureBox контейнер

Сообщение Хакер » 03.06.2015 (Ср) 8:07

bon818 писал(а):Наверно как-то можно, но DragDrop в UserControl'е , без OLE не работает почему-то.

DragDrop вообще не причём. Set ChildControl.Container = PbWithinUC не сработает в любом случае, даже если выполнять это не по драгу, а по клику кнопки.

bon818 писал(а):По мне так проще на API.

Это очевидный трюк, но это, должно быть не менее очевидно, ещё и неправильный путь. Потому что дочерний контрол по прежнему думает, что его родитель — другой объект.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: UserControl PictureBox контейнер

Сообщение bon818 » 03.06.2015 (Ср) 9:55

Да Source.Parent.Caption возвращает бывшего родителя.
А так GetParent(Source.hwnd) то все норм и меня бы это устроило, наверное.
А как правильно то?

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Re: UserControl PictureBox контейнер

Сообщение djalex777 » 03.06.2015 (Ср) 10:11

Пробовал я через SetParent, но лично у меня IDE сразу "падает" при вызове этой функции, помимо того, что написал Хакер. Кроме того, как быть в этом случае с Label...
Последний раз редактировалось djalex777 03.06.2015 (Ср) 20:11, всего редактировалось 1 раз.

bon818
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 267
Зарегистрирован: 29.08.2009 (Сб) 4:49
Откуда: Ташкент

Re: UserControl PictureBox контейнер

Сообщение bon818 » 03.06.2015 (Ср) 10:30

Ну если нет ничего другого, то как вариант создать контрол в нужном месте с параметрами из Source Control.
Или даже так
Private Sub xxxxx_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
UserControlX Data, "value1= Caption"
End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: UserControl PictureBox контейнер

Сообщение Хакер » 03.06.2015 (Ср) 11:05

djalex777 писал(а):помимо того, что написал Xakep.

Остерегайтесь подделок.

bon818 писал(а):А как правильно то?

Тут в двух словах не выразишь, а кроме того, прежде чем писать, нужно провести небольшое исследование, чтобы не оказалось, что написанное не относится к ситуации. Будет время — попробую написать/исследовать.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList