Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
shs
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 4
1

Обработка сообщений динамической формы

02.12.2013, 01:26. Просмотров 739. Ответов 6
Метки нет (Все метки)

Создаю динамическую форму:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button4Click(TObject *Sender)
{
TForm *MyNewForm=new TForm(this);
//определяю компоненты формы и т. д.
MyNewForm->Show();
// что-то делаю
delete(MyNewForm);
}
Вопрос: как в этом случае определить и создать обработчик
сообщения? (Ну, например, WM_MOVING).
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2013, 01:26
Ответы с готовыми решениями:

Обработка сообщений клавиатуры
как в билдере програмировать нажатия кнопок? ну: if(key= #11)как правельно? і как прописать...

Обработка элементов массива (массив в виде динамической структуры)
Есть такое задание. Составить программу обработки элементов массива, которые вводит Массив оформить...

Закрытие формы (динамической)
Добрый вечер. В общем создал динамическую форму, создал в ней все нужные мне компоненты. Так же...

Обработка сообщений в win32 api
Написал программу которая после ввода в поле edit текста exit и нажатия на кнопку выходит из...

Обработчик разрушения динамической формы
- Здравствуйте Всем! Текст простой программы на BCB6 говорит сам за себя... Заголовок основной...

6
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
02.12.2013, 16:58 2
Цитата Сообщение от shs Посмотреть сообщение
Вопрос: как в этом случае определить и создать обработчик
сообщения? (Ну, например, WM_MOVING).
Ответ: определить пользовательскую функцию и присвоить её имя необходимому обработчику.
0
shs
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 4
02.12.2013, 22:57  [ТС] 3
Kulgar! Я достаточно конкретно сформулировал вопрос: как в этом случае (см. приведенный фрагмент кода) определить и создать обработчик ? (Как создать производный класс от TForm, определить карту сообщений,пользовательскую функцию и присвоить её имя необходимому обработчику я знаю).

P.S. На самом деле я не уверен, что это вообще возможно, но, как всегда, в таких случаях, полагаю, что я не всё знаю. Поэтому и задал вопрос.
0
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
02.12.2013, 23:29 4
shs, я Ваш фрагмент кода и взял. Долго не заморачивался: присвоил OnClick имя другой функции - сработало.
На чём в моём сообщении Вы поймали батхерт не понимаю.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
28358 / 18888 / 7437
Регистрация: 22.10.2011
Сообщений: 33,031
Записей в блоге: 6
02.12.2013, 23:36 5
shs, вариантов, на самом деле, 2:

1) переходишь на чистый API, и делаешь:
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
25
26
27
28
29
LRESULT CALLBACK MyWndProc(HWND hWnd, UINT msg, WPARAM w, LPARAM l)
{
    WNDPROC Old_Proc = (WNDPROC)::GetWindowLong(hWnd, GWL_USERDATA);
    switch (msg)
    {
    case WM_MOVING:
        {
            LPRECT lpRect = (LPRECT)l;
            String s = String().sprintf(L"Position : %d - %d", lpRect->left,
                lpRect->top);
            SetWindowText(hWnd, s.c_str());
            return 1;
        }
    }
    return CallWindowProc(Old_Proc, hWnd, msg, w, l);
}
 
void __fastcall TForm1::Button4Click(TObject *Sender)
{
    TForm *MyNewForm = new TForm(this);
    // определяю компоненты формы и т. д.
    WNDPROC Old_Proc = (WNDPROC)::SetWindowLong(MyNewForm->Handle, GWL_WNDPROC,
        (LPARAM)MyWndProc);
    ::SetWindowLong(MyNewForm->Handle, GWL_USERDATA, (LPARAM)Old_Proc);
 
    MyNewForm->Show();
    // что-то делаю
    delete(MyNewForm);
}
2) перед созданием формы наследуешься от класса TForm в котором перекрываешь метод WndProc (либо карту сообщений, которую ты умеешь делать, сам сказал), и создаешь уже экземпляр класса-потомка, который будет делать то, что нужно...
2
shs
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 4
03.12.2013, 00:15  [ТС] 6
UI, спасибо.
Второй вариант, собственно, и так у меня есть, но хотелось попробовать обойтись без прямого наследования.
Поэтому сам пошел по второму варианту, т.е. API. Пока думал - получил готовое решение. Сижу, осмысливаю. Ещё раз спасибо.

Добавлено через 9 минут
Kulgar, если я ответил излишне резко - приношу извинения ! Это не предполагалось.
По сути. Если я присвою OnClick имя другой функции - я всё равно буду обрабатывать OnClick.
Меня интересовала в данном случае возможность обработки событий не предопределенных в TForm.
Наверное самый правильный вариант предложил UI, см выше. Спасибо.
0
Kulgar
509 / 194 / 26
Регистрация: 07.08.2013
Сообщений: 814
03.12.2013, 10:03 7
shs, не стоит, всё ок.
Цитата Сообщение от shs Посмотреть сообщение
Меня интересовала в данном случае возможность обработки событий не предопределенных в TForm.
Извините, этого нюанса в заглавии темы я не доглядел.
0
03.12.2013, 10:03
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2013, 10:03

Обработка сообщений/событий. Отслеживание в оборудовании
Мне необходимо отслеживать изменения в составе оборудования. Весь день лажу по инету - ищу, читаю -...

Обработка сообщений СУБД
Здравствуйте уважаемые форрумчане! В процессе написания приложения работающего с базой данных...

Создание и обработка динамической формы
Приветствую всех в своей теме. Сразу к делу, у меня есть форма, (сделана убого очень), поэтому, я...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.