ВзаимоНЕпонимание частей проекта.

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

ВзаимоНЕпонимание частей проекта.

Сообщение DiSe » 26.07.2003 (Сб) 23:03

В моём ActiveX проекте есть UserControl и модуль. В модуле :arrow: функции. А вызываю эти функции я из программного кода UserControl. Есть одна функция в модуле, в которой мне надо установить одно из свойств UserСontrol'а. Но при компиляции мне пишет, что не знает никакого UserControla. В общем мне нужна помощь. Контрол здесь.
Вложения
RectButton.rar
(3.92 Кб) Скачиваний: 66

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.07.2003 (Вс) 5:43

Не, вот красавец, а? :)
Имеет модуль, в котором сабклассинг, и из функции сабклассинга пытается изменить свойства данного экземпляра UserControl, не указывая, какого именно экземпляра! Если в процедуре сабклассинга прописать UserControl.BackColor=X, то каким образом, скажи мне, процедура сабклассинга узнает, какой именно из всех экземпляров юзерконтрола ты имеешь в виду? Выражение "UserControl" для неё - пустой звук! Оно имеет смысл только в одном месте - в коде юзерконтрола. Так что ищи способ передавать в процедуру сабклассинга объектную ссылку на вызывающий экземпляр юзерконтрола.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

DiSe
Обычный пользователь
Обычный пользователь
 
Сообщения: 97
Зарегистрирован: 30.06.2003 (Пн) 19:11

Сообщение DiSe » 27.07.2003 (Вс) 9:24

Я не очень хорошо разбираюсь в ActiveX, поэтому не могу представить как это сделать. Если не трудно, можешь написать (хотябы основное) код. Заранее благодарен.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.07.2003 (Вс) 12:51

Ну не знаю...
Например, можно создать массив юзерского типа:
Код: Выделить всё
type MyType
  hwnd as long
  mycontrol as control
end type

dim myreferences(1 to 5) as mytype

Вот, а потом для каждого твоего контрола на форме делать
Код: Выделить всё
myreferences(1).hwnd=mycontrol.hwnd
set myreferences(1).mycontrol=mycontrol


Вот.
Массив этот будет объявлен на уровне модуля. Соответственно, твоя процедура сабклассинга, получив параметр hwnd, должна будет позырить в массив myreferences и найти там такой mycontrol, у которого данный hwnd, и спокойно обращаться к нему через
Код: Выделить всё
myreferences(N).mycontrol.myproperty=myvalue.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

DiSe
Обычный пользователь
Обычный пользователь
 
Сообщения: 97
Зарегистрирован: 30.06.2003 (Пн) 19:11

Сообщение DiSe » 27.07.2003 (Вс) 14:37

Не работает! Не знаю почему? Можешь сразу код? А то я вообще не въехал в то, что ты написал.[/b]

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.07.2003 (Пн) 5:27

НИЗЯ ставить процедуру сабклассинга в инициализацию, потому что контрола ещё нет!
Вложения
RectButton.zip
Исправленный сабж
(4.37 Кб) Скачиваний: 68
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

DiSe
Обычный пользователь
Обычный пользователь
 
Сообщения: 97
Зарегистрирован: 30.06.2003 (Пн) 19:11

Сообщение DiSe » 28.07.2003 (Пн) 13:13

Не работает.:cry: Ты у себя пробовал? Вызывал PopUpMenu на компоненте? Цвет не меняется.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 29.07.2003 (Вт) 5:00

DiSe!
Давай так: я тебе говорою направление, а ты думаешь туда сам. Так оно лучше, поверь мне.
Направление:
  1. События MouseDown и MouseUp у твоей кнопки не возникают, потому что не замаплены оригинальные MouseDown и MouseUp.
  2. Вызов меню должен быть определён в самом коде контрола, то есть ты должен предоставить юзеру процедуру RBut.PopupMenu. Иначе не твоя кнопка будет владельцем меню, и не она будет получать от него сообщения.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

DiSe
Обычный пользователь
Обычный пользователь
 
Сообщения: 97
Зарегистрирован: 30.06.2003 (Пн) 19:11

Сообщение DiSe » 29.07.2003 (Вт) 9:55

Насчёт MouseDown и Up - у меня есть Click. А метод PopupMenu я делал в коде UsукControl, но при обращении RBut1.PopupMenu <имя> ничего не получается, говорит, что типа PopupMenu - failed.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.07.2003 (Ср) 4:53

DiSe писал(а):Насчёт MouseDown и Up - у меня есть Click.


Тогда зачем у твоей кнопки есть доступные юзеру события MouseUp и MouseDown? Они же никогда не происходят. Либо замапь их, либо убери.
А что касается меню - всё правильно. Я же говоррю - даю направление, а ты думай... но раз не хочешь думать и пробовать (:(), скажу, что меню принадлежит не контролу, а форме, поэтому вызывать его нужно из кода юзерконтрола как usercontrol.popupmenu parent.menuname
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Majestic-12 [Bot], Yandex-бот и гости: 3

    TopList