![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
Fanat |
![]()
Сообщение
#1
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Хочу сделать следуюшее...чтобы по определенным клавишам двигалася напиример Button1,
а по другим Button2...написал примерно так
Но теперь пока одна кнопка движеться вторая не будет...как реализовать независимое движение?.. может как то через много поточность?..можно для каждой кнопки писать свой поток и в нём ждать нажатия определённой кнопки и его уже орабатывать...но как ето сделать?.. Сообщение отредактировано: Fanat - 31.01.2008 17:41 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата можно для каждой кнопки писать свой поток и в нём ждать нажатия определённой кнопки и его уже орабатывать... Угу... Чтобы наконец убедиться, что весь GUI должен всегда работать в одном потоке, иначе проблем не оберешься... Вообще-то можно сделать и так:typedef struct { |
Fanat |
![]()
Сообщение
#3
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Да...так работает..=)
Хотелось бы всё таки узнать как сделать через потоки... мне непонятно к в потоке узнать что нажата клавиша?.. А зачем Handled ( - признак обработки события) выставлять в true?.. Цитата // Ну, ты же понимаешь, что все это можно записать и намного короче, // добавив одну-единственную функцию, правда? Это - просто пример... Я как то об этом не задумывался даже... ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Хотелось бы всё таки узнать как сделать через потоки... Ты действительно этого хочешь? Тогда посмотри присоединенный файл, там описание того, как это можно сделать. Один из способов, скажем так...![]() Цитата А зачем Handled ( - признак обработки события) выставлять в true?.. Затем, что если ты этого не сделаешь, и у тебя на форме будет, например, Edit, и фокус будет на нем, то этот Edit будет заполняться символами, которые ты вводишь (нажимая клавишу). А если ничего из текстовых контролов не будет - то программа будет пищать. А установкой Handled = true ты говоришь обработчику ApplicationMessage, что это событие уже обработано, дальше по цепочке его передавать не надо... |
Fanat |
![]()
Сообщение
#5
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Ты действительно этого хочешь? Тогда посмотри присоединенный файл, там описание того, как это можно сделать. Один из способов, скажем так... ![]() Затем, что если ты этого не сделаешь, и у тебя на форме будет, например, Edit, и фокус будет на нем, то этот Edit будет заполняться символами, которые ты вводишь (нажимая клавишу). А если ничего из текстовых контролов не будет - то программа будет пищать. А установкой Handled = true ты говоришь обработчику ApplicationMessage, что это событие уже обработано, дальше по цепочке его передавать не надо... Да...интересно..я вроде во всём разобрался... И я так понимаю Sleep(100); чтобы мы успели нажать какую либо кнопку...но при етом слишком скорость маленькая...а при Sleep(10) у меня в конце концов всё таки зависало =(... А вообще при отключения Sleep кнопки почему то движуться с разными скоростями и зависает быстро..=( Не мог бы ты привести пример ещё какого либо способа... (не обязательно на счёт данной задачи...я могу разобраться и сам попрбовать сделать..=)...в общем как тебе удобней...) Сообщение отредактировано: Fanat - 1.02.2008 11:54 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата а при Sleep(10) у меня в конце концов всё таки зависало =(... Поменял в Execute() условие выхода на ...(как я мог написать там Suspended - не понимаю ![]() |
Fanat |
![]()
Сообщение
#7
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Поменял в Execute() условие выхода на ...(как я мог написать там Suspended - не понимаю ![]() Да..так лучше... Теперь написал...они же и так сами должны завершаться при завершении приложения?.. |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Должны... Но их должна завершить система, а это требует дополнительного времени, будет подвисать при выходе. А если ты напишешь
for(int i = num_threads - 1; i >= 0; i--) {, то дело пойдет быстрее... |
Fanat |
![]()
Сообщение
#9
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Должны... Но их должна завершить система, а это требует дополнительного времени, будет подвисать при выходе. А если ты напишешь for(int i = num_threads - 1; i >= 0; i--) {, то дело пойдет быстрее... Понятно...А как отловить нажатие двух кнопок сразу?..хочу добавить движение по диагоналям... А какой компонент лучше использовать для движения?...хочу написать что то вроде Ice hockey, так что это могут быть и TPanel и просто прямоугольник нарисованый... |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата А как отловить нажатие двух кнопок сразу?..хочу добавить движение по диагоналям... Ну, например, вот так:const int dirLt = 0;"... И всего делов..." (С) "И.В. меняет профессию" ![]() |
Fanat |
![]()
Сообщение
#11
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
А что значит строчка
Это мы свойства добавляем?..синтаксис не понятен..=( И:
<< это что значит?.. |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата Это мы свойства добавляем? Угу... Именно свойства. А что непонятно? Описываешь свойство (имя и тип), и указываешь что для чтения обращение к свойству аналогично обращению к FState. Поскольку нет write=, то это свойство только для чтения. И не является свойством "по умолчанию".Цитата << это что значит?.. для типа Set перегружены операторы << (через него реализовано добавление элемента в множество) и >> (извлечение элемента из множества, если он там присутствует) |
Fanat |
![]()
Сообщение
#13
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Угу... Именно свойства. А что непонятно? Описываешь свойство (имя и тип), и указываешь что для чтения обращение к свойству аналогично обращению к FState. Поскольку нет write=, то это свойство только для чтения. И не является свойством "по умолчанию". Вроде разобрался...а почему используется свойство?...можно так
Через свойство лучше чем то?.. Цитата для типа Set перегружены операторы << (через него реализовано добавление элемента в множество) и >> (извлечение элемента из множества, если он там присутствует) Понял... |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата можно так Можно. Только тогда придется делать:TDir GetState() {return FState;}; Handled = thr[thread_n]->SetState( , правда? А не боишься, что у тебя будет постоянно создаваться новая копия множества, и ты потом получишь тормоза при выходе из программы? А при работе с __property ты работаешь с одной и той же переменной... |
Fanat |
![]()
Сообщение
#15
|
![]() Fanat ![]() ![]() ![]() Группа: Пользователи Сообщений: 261 Пол: Мужской Реальное имя: Сергей Репутация: ![]() ![]() ![]() |
Можно. Только тогда придется делать: Handled = thr[thread_n]->SetState( , правда? Ну это понятно... Цитата А не боишься, что у тебя будет постоянно создаваться новая копия множества, и ты потом получишь тормоза при выходе из программы? А при работе с __property ты работаешь с одной и той же переменной... Я так понимаю что они создаються при возвращении значения...но разве эта копия будет существовать до самого выхода из программы?..они не будут удаляться при выходе за '}' ?.. Согласен, что твой вариант работать все равно будет лучше... ![]() |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 21:28 |