IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

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

> Builder 6.0
сообщение
Сообщение #1


Fanat
***

Группа: Пользователи
Сообщений: 261
Пол: Мужской
Реальное имя: Сергей

Репутация: -  5  +


Хочу сделать следуюшее...чтобы по определенным клавишам двигалася напиример Button1,
а по другим Button2...написал примерно так


void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
bool &Handled)
{
// Memo1->Lines->Add(Msg.wParam);
const nStep = 1;
switch(Msg.wParam)
{
case 40: Button1->Top += nStep;
break;
case 38: Button1->Top -= nStep;
break;
case 37: Button1->Left -= nStep;
break;
case 39: Button1->Left += nStep;
break;

case 83: Button2->Top += nStep;
break;
case 87: Button2->Top -= nStep;
break;
case 65: Button2->Left -= nStep;
break;
case 68: Button2->Left += nStep;
break;

}



Но теперь пока одна кнопка движеться вторая не будет...как реализовать независимое движение?..
может как то через много поточность?..можно для каждой кнопки писать свой поток и в нём ждать нажатия определённой кнопки и его уже орабатывать...но как ето сделать?..

Сообщение отредактировано: Fanat -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
можно для каждой кнопки писать свой поток и в нём ждать нажатия определённой кнопки и его уже орабатывать...
Угу... Чтобы наконец убедиться, что весь GUI должен всегда работать в одном потоке, иначе проблем не оберешься... Вообще-то можно сделать и так:

typedef struct {
int x, y;
bool b;
} RMove;

RMove moving[2];

void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
{
switch(Msg.message) {
case WM_KEYDOWN:
// Ну, ты же понимаешь, что все это можно записать и намного короче,
// добавив одну-единственную функцию, правда? Это - просто пример...
switch(Msg.wParam) {
case 40:
{
moving[0].x = 0; moving[0].y = 1;
Handled = moving[0].b = true; break;
}
case 38:
{
moving[0].x = 0; moving[0].y = -1;
Handled = moving[0].b = true; break;
}
case 37:
{
moving[0].x = -1; moving[0].y = 0;
Handled = moving[0].b = true; break;
}
case 39:
{
moving[0].x = 1; moving[0].y = 0;
Handled = moving[0].b = true; break;
}

case 83:
{
moving[1].x = 0; moving[1].y = 1;
Handled = moving[1].b = true; break;
}
case 87:
{
moving[1].x = 0; moving[1].y = -1;
Handled = moving[1].b = true; break;
}
case 65:
{
moving[1].x = -1; moving[1].y = 0;
Handled = moving[1].b = true; break;
}
case 68:
{
moving[1].x = 1; moving[1].y = 0;
Handled = moving[1].b = true; break;
}
}

break;
case WM_KEYUP:
switch(Msg.wParam) {
case 40: case 38:
case 37: case 39:
{
Handled = true;
moving[0].b = false; break;
}
case 83: case 87:
case 65: case 68:
{
Handled = true;
moving[1].b = false; break;
}
}

break;
}
}


void MoveButton(TButton *button, RMove r) {
const int nStep = 1;
button->Left += nStep * r.x;
button->Top += nStep * r.y;
}


// Таймер установлен на 0,1 секунды...
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if(moving[0].b) {
MoveButton(Button1, moving[0]);
}
if(moving[1].b) {
MoveButton(Button2, moving[1]);
}
}
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Fanat   Builder 6.0   31.01.2008 21:41
volvo   Угу... Чтобы наконец убедиться, что весь GUI долже…   31.01.2008 23:32
Fanat   Да...так работает..=) Хотелось бы всё таки узнать…   1.02.2008 3:16
volvo   Ты действительно этого хочешь? Тогда посмотри прис…   1.02.2008 5:29
Fanat   Ты действительно этого хочешь? Тогда посмотри при…   1.02.2008 15:53
volvo   Поменял в Execute() условие выхода на ... } whi…   1.02.2008 16:24
Fanat   Поменял в Execute() условие выхода на ... } wh…   1.02.2008 16:34
volvo   Должны... Но их должна завершить система, а это тр…   1.02.2008 16:47
Fanat   Должны... Но их должна завершить система, а это т…   1.02.2008 17:10
volvo   Ну, например, вот так: const int dirLt = 0; const …   1.02.2008 18:45
Fanat   А что значит строчка __property TDir GetState = …   2.02.2008 7:01
volvo   Угу... Именно свойства. А что непонятно? Описываеш…   2.02.2008 8:22
Fanat   Угу... Именно свойства. А что непонятно? Описывае…   2.02.2008 17:27
volvo   Можно. Только тогда придется делать: Handled =…   2.02.2008 17:41
Fanat   Можно. Только тогда придется делать: Handled …   2.02.2008 18:01


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 10.09.2025 22:52
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name