Динамические события в VB6?

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

Динамические события в VB6?

Сообщение riden » 23.10.2007 (Вт) 20:03

В языках C++, С#, Java,... события (слушатели событий) могут добавлятся и удалятся на этапе исполнения (в Run-Time).
В VB6, я же обноружил, только ручные события: события добавляются руками, пользователем. То есть пользователь добавляет обработку событий во время разработки (построения формочки), а затем они висят во время работы программы (что не есть хорошо).

Существует ли какая либо возможность в VB6 добавлять/удалять слушатели событий динамично: на этапе исполнения, то есть кодом.

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

Сообщение Хакер » 23.10.2007 (Вт) 20:35

riden
Есть, причём в разные степени реалистичности.

Те способы, что дают её в самой наивысшей степени реалистичности тебе наверняка не понравятся.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

riden
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 23.10.2007 (Вт) 19:28

Сообщение riden » 23.10.2007 (Вт) 20:47

То есть стандартных языковых средств нет?
А возможно это видно посредством использования WinApi.

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

Сообщение Хакер » 23.10.2007 (Вт) 20:52

В С++ нет событий вообще.
В C# и Java - не COM-классы.

WinAPI никакого отношения к данному делу не имеет.

Языковых средств, если это можно так назвать, нет.

Есть WithEvents если они тебя устроят. Есть ObjectExtender, который я так и не понял как использовать.

Есть хитрый способ, но он тебе не понравится.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Сообщение BION » 23.10.2007 (Вт) 22:13

Хакер писал(а):... Есть хитрый способ, но он тебе не понравится.


Давайте колитесь, мне тоже интересно :)

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

Сообщение Хакер » 23.10.2007 (Вт) 22:13

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

riden
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 23.10.2007 (Вт) 19:28

Сообщение riden » 24.10.2007 (Ср) 3:15

В С++ нет событий вообще.

А это что по твоему:
Код: Выделить всё
class CMainWin: public CFrameWnd
{
public:
   CMainWin();
   afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
   DECLARE_MESSAGE_MAP()
};
//.....................................................................//
// Очередь сообщений приложения
BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd)
   ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

//метод "держатель" события, который вызывается при всплывании сообщения
void CMainWin::OnLButtonDown(UINT nFlags, CPoint point)
{
// CString - класс MFC упрощающий работу со строками
   CString Str;
   Str.Format("Нажата левая клавиша мыши в точке x=%d, y=%d", point.x, point.y);
// MessageBox - метод кдасса CWnd (базового для CFrameWnd и,соответственно, CMainWin)
// инкапсулирует одноименную функцию вывода сообщений API
   MessageBox(Str, "Пришло сообщение", MB_OK|MB_ICONINFORMATION);
   CFrameWnd::OnLButtonDown(nFlags, point);
}

WinAPI никакого отношения к данному делу не имеет.

Сообщения WinAPI - это и есть событийная модель.
http://bbs.vbstreets.ru/viewtopic.php?t=9370

Собственно говоря, это и есть использование WinAPI.

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

Сообщение Хакер » 24.10.2007 (Ср) 4:24

То, что ты привёл этот код C++ означает, что ты совершенно не понимаешь, что в VB а что в С++.

То, что ты называешь "сообщения Windows " сообщениями WinAPI ещё больше усугубляет положение.

То, что ты называешь тот пример использованием WinAPI ставит жирную точку.

Хотел поумничать? Хотел "исправить" меня? -- Разбирайся сам.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 24.10.2007 (Ср) 10:07

riden
Хотел поумничать? Хотел "исправить" Хакера? По части умничания и исправлений ему равных нет! :D Он сам кого хочешь отумничает и исправит. :twisted: Заметь: он громит в пух и прах чужие соображения не давая никаких взамен. "Это событийная модель? Это фуфло, а не событийная модель. Знавал я событийные модели... Да ты вообще ничерта нигде не соображаешь. Все, что ты скажешь, будет объявлено умничанием и попыткой исправления меня и будет использовано против тебя в дальнейшем." - вот как-то так. :lol: А еще он похож на хреновый поисковик, не разбирающий словоформ - если в него ввести запрос "сообщения windows", то получишь вменяемый результат, а если "сообщения winapi" - срач и гонево.

Но с другой стороны, ляпы в терминологии - признак непрофессионализма, его нужно искоренять.

Забей. Если хочется, триггерами в событийной модели можно сделать и сообщения windows, и таймер, и сокет, и т. д, зависит от задачи. А конкретно по теме, опиши свою задачу, в которой динамическое добавление слушателей было бы удобно и желательно.
Лучший способ понять что-то самому — объяснить это другому.


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

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

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 86

    TopList