DirectX.CreateEvent(???)

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

DirectX.CreateEvent(???)

Сообщение ReMAG » 09.08.2006 (Ср) 21:54

А вот и я :)

Значит, балуюсь с DirectSound. Функция CreateEvent нужна чтобы вовремя подчищать буфер. В том примере, который я нашел, она записана так:

EventStop = objDX8.CreateEvent(Me)

хотя тип аргумента этой функции DirectXEvent. Ну да ладно, работает и хорошо. НО!
Этот код там выполняется в форме, а у меня в модуле класса. Вот.
Если в моем варианте там оставить Me, получаю Automation Error. А если передать туда форму, и подставить ее, то Type Mismatch!!!

И еще: разве Me и, например, frmTest отличаются чем-то в контексте формы??

Как победить, кто знает?
Никогда не говори "никогда"...

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 10.08.2006 (Чт) 0:07

И еще: разве Me и, например, frmTest отличаются чем-то в контексте формы??

Нет![/quote]
#define ROFL 0xDDDD

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

Сообщение ReMAG » 10.08.2006 (Чт) 0:11

DirectXManiac писал(а):
И еще: разве Me и, например, frmTest отличаются чем-то в контексте формы??

Нет!
[/quote]

Отлично, почему же тогда

EventStop = objDX8.CreateEvent(Me)

в форме срабатывает, а

EventStop = objDX8.CreateEvent(frmTest)

в модуле класса нет???
Никогда не говори "никогда"...

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 10.08.2006 (Чт) 19:48

ReMAG
потомучто Me передаёт тип Object, а frmTest - форму.
Лучше думать чем жевать.

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

а вот и нет

Сообщение ReMAG » 10.08.2006 (Чт) 20:57

Wild VB Code for Food писал(а):ReMAG
потомучто Me передаёт тип Object, а frmTest - форму.


Позволю себе не согласится.
В форме работает и Me и frmTest, а в модуль класса я передавал как Me, так и frmTest, и ничего не работает.
Что то мне подсказывает, что собака зарыта именно в местонахождении кода и, возможно, механизма Callback DirectX'а.
Или я не прав?
Никогда не говори "никогда"...

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

Сообщение Хакер » 10.08.2006 (Чт) 21:55

DirectXManiac писал(а):
И еще: разве Me и, например, frmTest отличаются чем-то в контексте формы??

Нет!


Нет, ты не прав. Me это доступ к объекту класса из кода этого класса. А frmTest это переменная класса frmTest и код формы не всегда выполняется для этой переменной.

Например
Код: Выделить всё

Dim frmTest2 as frmTest
Set frmTest2 = New frmTest

frmTest.Show
frmTest2.Show

frmTest.BackColor = vbBlue
frmTest2.BackColor = vbRed



На форуме положите код "Свернуть меня" и в обработчик события щелчка вставте этот код.

Код: Выделить всё
frmTest.WindowState = vbMinimized


Откроется две формы, одно красная, одна синяя. Но на ваше удивление, обе кнопки будут сворачивать только синюю форума.

А теперь заметие обработчик Click-а на:
Код: Выделить всё
Me.WindowState = vbMinimized


каждая форма будет сворачивать себя.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 10.08.2006 (Чт) 22:53

Уже понял свою ошибку!
#define ROFL 0xDDDD

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

Понеслась

Сообщение ReMAG » 11.08.2006 (Пт) 0:09

Только я ничего не понял...
Как все же заставить эвент создаваться не в форме :?:
Никогда не говори "никогда"...

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

Сообщение Хакер » 11.08.2006 (Пт) 0:12

ReMAG
А мы тут про другое. Я просто неудержался и поправил ошибку... к DX это не имеет никакого отношения.

Это к тому что
И еще: разве Me и, например, frmTest отличаются чем-то в контексте формы??


Да отличаются.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 11.08.2006 (Пт) 1:36

ReMAG
Object это тип данных, а форма - класс!
Object принимает форму и получает/передаёт параметры...
#define ROFL 0xDDDD

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

Отлично

Сообщение ReMAG » 11.08.2006 (Пт) 8:58

Хакер писал(а):ReMAG
А мы тут про другое.


Хорошо. Конкретизирую:

как правильно создавать эвент в DX кодом, который находится вне формы?
Никогда не говори "никогда"...

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

апдейт

Сообщение ReMAG » 22.08.2006 (Вт) 11:09

на http://www.vbstreets.ru/VB/Articles/66010.aspx написано следующее:

Для того,чтобы отловить события объекта DirectX (любого) нам нужно проделать две вещи: во-первых, создать объект, который поддерживал бы интерфейс DirectXEvent8. Делается это просто: пишем в начале модуля класса (или формы) Implements DirectXEvent8. У этого класса есть единственный метод – DXCallBack, который вызывается при появдении события. Второй шаг – нам нужно зарегистрировать этот объект-обработчик событий в главном объекте DirectX8 (в нашем случае objDX8), используя метод CreateEvent. В качестве параметра и передается существующий экземпляр объекта.


Вот именно это не работает, в модуле класса.
Никогда не говори "никогда"...

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 25.08.2006 (Пт) 18:13

ReMAG
У меня не на чем попробовать, попробуй так:
dim f as object
set f = formtest
EventStop = objDX8.CreateEvent(f)

ReMAG
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 54
Зарегистрирован: 02.10.2005 (Вс) 4:01
Откуда: Киев

Сообщение ReMAG » 26.08.2006 (Сб) 14:49

Сделал. Type Mismatch.
Ммм... а если в проекте нет формы? нельзя ли Implements DirectXEvent8 и DXCallBack разместить в модуле класса и как-то заставить CreateEvent работать?
Никогда не говори "никогда"...


Вернуться в Мультимедиа

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

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

    TopList