Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/63: Рейтинг темы: голосов - 63, средняя оценка - 4.90
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 492
1

Создание обработчиков сообщений

08.01.2010, 22:54. Показов 12325. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
void __fastcall MyDoMessage(TMessage &msg);
bool __fastcall OpenWaveIn(HWND hWnd,int nChan,int Freq,int Bits);
void __fastcall CloseWaveIn(HWND hWnd);
bool __fastcall DataWaveIn(HWND hWnd, HWAVEIN hwav, LPWAVEHDR pHdr);
и
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_USER+1, TMessage, WMUSER1)
VCL_MESSAGE_HANDLER(WM_USER+2, TMessage, WMUSER2)
END_MESSAGE_MAP(TForm)
void __fastcall WMUSER1(TMessage & msg);
void __fastcall WMUSER2(TMessage & msg);
Вопрос->откуда и как в unit1.h получить выше изложенное. Ведь не лапками нацарапано!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.01.2010, 22:54
Ответы с готовыми решениями:

Создание обработчиков событий
Я создал динамически форму а на нем кнопку button, как теперь создовать обработчики событий,...

Создание обработчиков событий
Здравствуйте. Вот для разнообразия (раньше пользовался VS) поставил Qt 5.4.0, вроде всё норм, да...

Создание форм и обработчиков на PHP
1. Написать форму для загрузки файла на сервер, в свою рабочую папку. 2. Написать скрипт для...

Динамическая создание обработчиков событий
Суть в следующем. На формочку динамически накидываются ЧекБоксы. Они представляют собой категории и...

9
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
08.01.2010, 23:45 2
Что значит откуда получить? Ручками напечатать
Объявите MESSAGE MAP и ф-ции обработки сообщений прямо в классе. Обычно в разделе protected.
Хотя и не обязательно.
C++
1
2
3
4
5
6
7
8
9
10
11
class TForm1 : public TForm
{
...
protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_USER+1, TMessage, WMUSER1)
VCL_MESSAGE_HANDLER(WM_USER+2, TMessage, WMUSER2)
END_MESSAGE_MAP(TForm)
void __fastcall WMUSER1(TMessage & msg);
void __fastcall WMUSER2(TMessage & msg);
}
и остальные тоже в классе.. но только в private или в public.

в итоге должно получиться:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class TForm1 : public TForm
{
__published: // IDE-managed Components
 
protected:
    BEGIN_MESSAGE_MAP
    VCL_MESSAGE_HANDLER(WM_USER+1, TMessage, WMUSER1)
    VCL_MESSAGE_HANDLER(WM_USER+2, TMessage, WMUSER2)
    END_MESSAGE_MAP(TForm)
    void __fastcall WMUSER1(TMessage & msg);
    void __fastcall WMUSER2(TMessage & msg);
private:
    void __fastcall MyDoMessage(TMessage &msg);
    bool __fastcall OpenWaveIn(HWND hWnd,int nChan,int Freq,int Bits);
    void __fastcall CloseWaveIn(HWND hWnd);
    bool __fastcall DataWaveIn(HWND hWnd, HWAVEIN hwav, LPWAVEHDR pHdr);
public: 
    __fastcall TForm1(TComponent* Owner);
};


а вот описание функций самому придется царапать...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void __fastcall TForm1::MyDoMessage(TMessage &msg)
{
 
}
bool __fastcall TForm1::OpenWaveIn(HWND hWnd,int nChan,int Freq,int nBits)
{
 
}
void __fastcall TForm1::CloseWaveIn(HWND hWnd)
{
 
}
bool __fastcall TForm1::DataWaveIn(HWND hWnd, HWAVEIN hwav, LPWAVEHDR pHdr)
{
 
}
void __fastcall TForm1::WMUSER1(TMessage &msg)
{
 
}
void __fastcall TForm1::WMUSER2(TMessage &msg)
{
 
}
WMUSER1 и WMUSER2 будете где то сами посылать.
например:
SendMessage(Form1->Handle,WM_USER+1, 200, 100);
//выполнится WMUSER1 причем:
//200 передастся в функцию WMUSER1 в качестве парраметра msg.WParam
//100 передастся в функцию WMUSER1 в качестве парраметра msg.LParam

Если что-то не понятно - пишите.
2
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 492
09.01.2010, 01:10  [ТС] 3
За это спасибо, разобрался.
Только вот ошибка бьёт 'is not a valid integer value' При нажатии (Button1 - Запуск)
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(MyhWnd)
{
if(MyhWnd)DeallocateHWnd(MyhWnd);
MyhWnd=NULL;
}
//Создаю окно для отработки сообщений waveIn
MyhWnd=AllocateHWnd(MyDoMessage);
if(!MyhWnd){ ShowMessage("No create MyhWnd"); return; }
Freq=StrToInt(ComboBox1->Items->Strings[ComboBox1->ItemIndex]); //тут то и глючит
nChan=RadioGroup1->ItemIndex+1;
nBits=(RadioGroup2->ItemIndex+1)*8;
// Запускаем waveIn
if(!OpenWaveIn(MyhWnd,nChan,Freq,nBits))
{
if(MyhWnd)DeallocateHWnd(MyhWnd);
MyhWnd=NULL;
ShowMessage("Err Open SoundDriver");
return;
}
Label3->Caption="Sound Open";
//И процесс пошёл
}
код я взял с сайта
http://inprise.narod.ru/cbuild... 86921.html
правда заменил
if ((pInfo == NULL) !! (pInfo->hwav != hwav))return false;
на
if ((pInfo == NULL) || (pInfo->hwav != hwav))return false;
0
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
09.01.2010, 23:37 4
У Вас в ComboBox1 текст какой то, возможно.
Там должно быть какое то число..(харрактеризующее частоту звука, судя по всему). По этому при вызове StrToInt получаете ошибку.

Добавлено через 13 минут
В диспетчере объектов ComboBox1 введите в свойство Items:
8000
11025
22050
44100
1
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 492
10.01.2010, 16:23  [ТС] 5
Подбросил не глючит.
AnsiString reg[4] = {"8000","11025","22050","44100"};
// ----- Для waveIn ----------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
int i;
for (i=0; i<4; i++)
ComboBox1->Items->Add(reg[i]);
//*******************************
ComboBox1->ItemIndex=3; // 44100 Hz
Афтор пишет что:
Проверка проводилась на машине с FM Radio, в качестве источника входных сигналов.
У меня в ноут буке такое удовольствие (FM Radio) отсутсвует. Не знаю, что бы придумать в качестве эталона частотного сигнала. Может ты знаешь?
0
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
11.01.2010, 22:50 6
Данная программа открывает LineIn и читает оттуда.
Для этой программы не важно, что будет использоваться в качестве входного сигнала.
Она должна реагировать на все, что "звучит" с колонок вашего компьютера. По этому, простой способ, проверить ее работоспособность - это запустить какой-либо звуковой поток.. например с интернет радио. FM радио - это в данном случае программа, которая запущена и проигрывает что-либо. Вы можете использовать для теста Windows Media Player. Запустите какой-то MP3. Эта программа будет реагировать на аналоговый сигнал. Там ProgressBar-ы для левого и правого канала указывают на силу входящего сигнала.
1
25 / 25 / 8
Регистрация: 27.10.2009
Сообщений: 81
12.01.2010, 08:33 7
Garic_, выложи пожалуйста проект скомпилиный, если не трудно, а то чего-то у меня не получается его скомпилить, выдает 26 ошибок.
0
230 / 227 / 65
Регистрация: 18.12.2009
Сообщений: 316
12.01.2010, 15:30 8
Ну... вот так как то... у меня работает, вроде.
Вложения
Тип файла: zip FormForumTest.zip (239.9 Кб, 134 просмотров)
1
72 / 72 / 5
Регистрация: 03.11.2009
Сообщений: 492
19.01.2010, 17:40  [ТС] 9
Извеняюсь, то что надолго повис. Спасибо за потсказку, проблема была в RadioGroup в items 8 bits
16 bits. теперь работает. Но есть ещё вопрос,в RichEdit1 получить пошаговый вывод дискретизации за одну секунду 44100 отщётов. Примерно так.
1 10101111
2 01101110
.............
44100 10101100

вот при мер но он неудачный.
bool __fastcall TForm1:ataWaveIn(HWND hWnd, HWAVEIN hwav, LPWAVEHDR pHdr)
{
..................
while (n < pInfo->buffersize)
{
................
SendMessage(Form1->Handle,WM_USER+1, 0, LevelLeft);
RichEdit1->Lines->Add(IntToStr(czrc++) + " " + IntToStr(LevelLeft));
0
LK
17.11.2011, 22:26     Создание обработчиков сообщений
  #10
 Комментарий модератора 
Перемещено в тему Как послать сообщение в dll
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2011, 22:26

Создание обработчиков для клика
Здраствуйте. в программе по клику кнопки button2 создается и заполняется неким образом таблица,...

Создание обработчиков событий FormCreate и Button1Click
Парни хелп, нужно вставить формулу в код. Вот код procedure FormCreate(Sender: TObject); ...

Создание формы отправки сообщений
Здравствуйте, создаю форму отправки сообщений, форму саму описал, но не знаю как сделать так, чтобы...

Создание простого вывода сообщений в окно
Здравствуйте форумчане, нужна помощь, Помогите создать простую программу в которой будет выводится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru