Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2008, 00:03   #1
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию SetTimer, KillTimer

Уважаемые програмеры... Подскажите как сделать фичу стаймером. Если курсор мыши выходит за пределы формы слева возвратить в label значение 1, если сверху - 2, если снизу - 3, справа 4. При этом в каждом из случаев при выходе за пределы формы надо запустить таймер и вывести в другой label increment(x). При возврате мыши в облать формы остановить таймер. С обычным TTimer я бы сделал. Но как сделать при помощи settimer, killtimer понятия не имею (с api никогда не работал так как новичок в этом деле). Помогите решить вопрос, а то завтра сдавать ...
NeiL вне форума Ответить с цитированием
Старый 05.03.2008, 00:16   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

NeiL, уточните, в чём именно сложность. Эти таймеры ничем не отличаются друг от друга, кроме того, что в VCL таймер создается/уничтожается в кострукторе/деструкторе, а в API - вручную, по желанию заказчика...
B_N вне форума Ответить с цитированием
Старый 05.03.2008, 00:28   #3
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию

Не могу понять что описывать в процедуре TIMERPROC и вообще для чего она нужна.
NeiL вне форума Ответить с цитированием
Старый 05.03.2008, 00:42   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

TimerProc можно не использовать, она не обязательна. В этом случае таймер просто будет отправлять WM_TIMER тому окну, для которого он зарегистрирован (первый параметр в SetTimer). Она, как правило, нужна когда таймер не привязывают к какому-то определенному окну, Как я понял, это не Ваш случай. А если будете использовать ее, то в API она определяется так:
Код:
VOID CALLBACK TimerProc(          HWND hwnd,
    UINT uMsg,
    UINT_PTR idEvent,
    DWORD dwTime
);
на паскаль это можно грубо перевести как
Код:
procedure MyTimerProc(hWnd : HWND; uMsg, idEvent, dwTime : cardinal); stdcall;
- Просто нужно определить такую процедуру (не в классе!!!) и передать ее адрес последним параметром в SetTimer - она будет автоматически вызываться таймером. Первый параметр - окно, к которому привязан таймер, второй - всегда WM_TIMER, третий - идентификатор таймера (тот же, что и в SetTimer), четвертый - то же, что возвращает GetTickCount - количество миллисекунд, прошедших со старта системы.
B_N вне форума Ответить с цитированием
Старый 05.03.2008, 00:51   #5
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
TimerProc можно не использовать, она не обязательна. Просто нужно определить такую процедуру (не в классе!!!) и передать ее адрес последним параметром в SetTimer - она будет автоматически вызываться таймером.
.
Я вообщем-то так и делал. Просто я считал что ее неиспользование является ошибкой, хотя ошибок как таковых и небыло.
Спасибо за совет теперь все стало ясно.
NeiL вне форума Ответить с цитированием
Старый 05.03.2008, 07:37   #6
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

http://www.programmersforum.ru/attac...9&d=1199691941
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц