Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
1

Как экстренно остановить таймер?

18.09.2013, 17:41. Показов 6160. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста как экстренно остановить таймер. У меня такая ситуация, работает таймер в котором прописан sleep в 4 секунды, в это время работает второй таймер и проверяет какую-то ситуацию, if - если ситуация совпадает, then - тогда 2й таймер отключает 1й таймер Timer1.Enabled:=false; и запускает событие. Беда в том что это событие надо выполнить очень быстро, а он ждет завершение события 1ого таймера, а это как минимум 4 секунды прописанные в слипе. Как остановить 1й таймер полностью чтобы сбрасывал свое событие и выключался? Перерыл в инете кучу информации, killtimer, abort, exit, как это применить в моем случае не знаю подскажите пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2013, 17:41
Ответы с готовыми решениями:

Как остановить таймер, как только число появившихся кругов станет равно указанному в поле Edit
Добрый день. Помогите, пожалуйста. Программа рисует круги через заданный интервал времени. Число...

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

Как остановить таймер
Есть простая игрушка, где все происходит в таймере. Как после проигрыша выйти из таймера и...

Как остановить таймер?
Как остановить таймер? private void Window_Loaded(object sender, RoutedEventArgs e) {...

23
159 / 98 / 25
Регистрация: 07.03.2013
Сообщений: 513
Записей в блоге: 1
18.09.2013, 17:43 2
Проверь, есть ли такая функция: Timer1.kill, и если что используй в коде 2-го таймера вместо Timer1.Enabled:=false
0
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
18.09.2013, 17:44  [ТС] 3
Цитата Сообщение от Algoritmer Посмотреть сообщение
Проверь, есть ли такая функция: Timer1.kill
))))искал нету))))
0
Заблокирован
18.09.2013, 17:47 4
А вы плюньте на два таймера и оставьте один. Используйте счётчик и флаги.
0
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
18.09.2013, 17:50  [ТС] 5
Цитата Сообщение от Lirrk Посмотреть сообщение
А вы плюньте на два таймера и оставьте один. Используйте счётчик и флаги.
плюнуть конечно можно, но мне стало интересно, это может пригодиться везде, и мне очень интересно решение именно этой проблемы, часто сталкивался с данной проблемой.
0
159 / 98 / 25
Регистрация: 07.03.2013
Сообщений: 513
Записей в блоге: 1
18.09.2013, 17:51 6
А первый таймер отключать обязательно? Может быть можно просто паралельно выполнять желаемое событие? (например в другом потоке)
0
Заблокирован
18.09.2013, 17:54 7
DANNY4ever,
А это уже чушь - два таймера, да ещё синхронизировать их. Так никогда не делается. Таймер нужен не для этого.
0
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
18.09.2013, 17:55 8
А зачем в таймере еще и sleep?
0
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
18.09.2013, 18:01  [ТС] 9
Цитата Сообщение от Algoritmer Посмотреть сообщение
А первый таймер отключать обязательно? Может быть можно просто паралельно выполнять желаемое событие? (например в другом потоке)
первый таймер зажимает клавишу на клавиатуре "G" и ждет 4 секунды потом отжимает, 2й таймер должен нажать пробел, он не может нажать пробел пока 1й таймер не подождет 4 секунды, даже если во втором таймере прописать отжатие клавиши "G" он все равно сделает это через 4 секунды.

Добавлено через 1 минуту
Цитата Сообщение от Lirrk Посмотреть сообщение
DANNY4ever,
А это уже чушь - два таймера, да ещё синхронизировать их. Так никогда не делается. Таймер нужен не для этого.
а что нужно для этого? у меня 8 таймеров, если я все запихаю в 1 будет очень длинный код я в нем никогда не разберусь.

Добавлено через 1 минуту
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение
А зачем в таймере еще и sleep?
таймер нажимает на кнопку клавы и отпускает через 4 секунды, я не знаю как это сделать без слипа.
0
Заблокирован
18.09.2013, 18:02 10
DANNY4ever,
8???????
0
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
18.09.2013, 18:03  [ТС] 11
вот код если интересно
Delphi
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.Buttons,
  Vcl.ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Timer1: TTimer;
    Timer2: TTimer;
    Timer3: TTimer;
    Timer4: TTimer;
    Timer5: TTimer;
    Timer6: TTimer;
    Button2: TButton;
    Timer7: TTimer;
    Timer8: TTimer;
    Button3: TButton;
    Timer9: TTimer;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Timer4Timer(Sender: TObject);
    procedure Timer5Timer(Sender: TObject);
    procedure Timer6Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer7Timer(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Timer8Timer(Sender: TObject);
  private
    procedure wmhotkey (var mess:twmhotkey);message wm_hotkey;
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
   Form1: TForm1;
   dc1:hdc;
   dc2:hdc;
   dc3:hdc;
   dc4:hdc;
   dc5:hdc;
   Pixel1 : TColor;
   Pixel2 : TColor;
   Pixel3 : TColor;
   Pixel4 : TColor;
   Pixel5 : TColor;
 
implementation
 
{$R *.dfm}
procedure Tform1.wmhotkey(var mess: TWMHotKey);
   begin
      if mess.HotKey=1 then form1.Button1.Click;
      if mess.HotKey=2 then
         begin
            form1.Button2.Click;
            form1.Button3.Click;
            form1.BitBtn1.Click;
            form1.BitBtn2.Click;
            form1.BitBtn3.Click
         end;
      if mess.HotKey=3 then form1.BitBtn4.Click;
   end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
   begin
      form1.Label3.Caption:='БОТ ВКЛЮЧЕН';
      timer4.Enabled:=true;
   end;
 
 
procedure TForm1.BitBtn2Click(Sender: TObject);
   begin
      timer1.Enabled:=true;
   end;
 
procedure TForm1.BitBtn3Click(Sender: TObject);
   begin
      timer3.Enabled:=true;
   end;
 
procedure TForm1.BitBtn4Click(Sender: TObject);
   begin
      Form1.Label3.Caption:='БОТ ВЫКЛЮЧЕН';
      Timer4.Enabled:=false;
      Timer1.Enabled:=false;
      Timer3.Enabled:=false;
      Timer7.Enabled:=false;
      Timer8.Enabled:=false;
   end;
 
procedure TForm1.Button1Click(Sender: TObject);
   begin
      sleep(1000);
      keybd_event(ord('1'), MapVirtualKey(ord('1'), 0), 0, 0);
      keybd_event(ord('1'), 0, KEYEVENTF_KEYUP, 0);
      setcursorpos(346,327);
      mouse_event(mouseeventf_leftdown,0,0,0,0);
      mouse_event(mouseeventf_leftup,0,0,0,0);
      sleep(1000);
      keybd_event(ord('2'), MapVirtualKey(ord('2'), 0), 0, 0);
      keybd_event(ord('2'), 0, KEYEVENTF_KEYUP, 0);
      setcursorpos(350,327);
      mouse_event(mouseeventf_leftdown,0,0,0,0);
      mouse_event(mouseeventf_leftup,0,0,0,0);
      sleep(1000);
      keybd_event(ord('3'), MapVirtualKey(ord('3'), 0), 0, 0);
      keybd_event(ord('3'), 0, KEYEVENTF_KEYUP, 0);
      setcursorpos(354,327);
      mouse_event(mouseeventf_leftdown,0,0,0,0);
      mouse_event(mouseeventf_leftup,0,0,0,0);
   end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Timer7.Enabled:=true;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
form1.Timer8.Enabled:=true;
end;
 
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
   begin
      unregisterhotkey(handle,1);
      unregisterhotkey(handle,2);
      unregisterhotkey(handle,3);
      releasedc(0,dc4);
   end;
 
procedure TForm1.FormCreate(Sender: TObject);
   begin
      registerhotkey(Handle,1,mod_control,vk_F1);
      registerhotkey(Handle,2,mod_control,vk_F2);
      registerhotkey(Handle,3,mod_control,vk_F3);
   end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
   begin
      form1.Timer2.Enabled:=false;
      dc2:=getdc(0);
      Pixel2:=GetPixel(dc2,350,325);
      if (form1.Timer5.Enabled=false) and (form1.Timer6.Enabled=false) then
         begin
            if Pixel2<>$FFFFFF then
            begin
            releasedc(0,dc2);
            form1.Timer1.Enabled:=false;
            form1.Timer4.Enabled:=false;
            form1.Timer3.Enabled:=false;
            form1.Timer2.Enabled:=true;
            sleep(50)
            end;
         end;
      releasedc(0,dc2);
   end;
 
procedure TForm1.Timer2Timer(Sender: TObject);
   begin
       form1.Timer2.Enabled:=false;
       form1.Timer1.Enabled:=false;
       sleep(10);
       keybd_event(ord('2'), MapVirtualKey(ord('2'), 0), 0, 0);
       keybd_event(ord('2'), 0, KEYEVENTF_KEYUP, 0);
       keybd_event(71, 0, 0, 0);
       sleep(4000);
       keybd_event(71, 0, KEYEVENTF_KEYUP, 0);
       sleep(10);
       keybd_event(16, 0, 0, 0);
       keybd_event(66, 0, 0, 0);
       sleep(10);
       keybd_event(66, 0, KEYEVENTF_KEYUP, 0);
       keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
       sleep(10);
       setcursorpos(531,16);
       sleep(10);
       mouse_event(mouseeventf_leftdown,0,0,0,0);
       mouse_event(mouseeventf_leftup,0,0,0,0);
       sleep(10);
       keybd_event(84, 0, 0, 0);
       keybd_event(84, 0, KEYEVENTF_KEYUP, 0);
       form1.Timer4.Enabled:=true;
       form1.Timer1.Enabled:=true;
       form1.Timer3.Enabled:=true;
   end;
 
procedure TForm1.Timer3Timer(Sender: TObject);
   begin
      form1.Timer6.Enabled:=false;
      dc3:=getdc(0);
      Pixel3:=GetPixel(dc3,354,325);
      if (form1.Timer2.Enabled=false) and (form1.Timer5.Enabled=false) then
         begin
            if Pixel3<>$FFFFFF then
               begin
                  form1.Timer6.Enabled:=false;
                  form1.Timer1.Enabled:=false;
                  form1.Timer4.Enabled:=false;
                  form1.Timer6.Enabled:=true;
                  sleep(50)
               end;
         end;
      releasedc(0,dc3);
   end;
 
procedure TForm1.Timer4Timer(Sender: TObject);
   begin
      form1.Timer5.Enabled:=false;
      dc1:=getdc(0);
      Pixel1:=GetPixel(dc1,346,325);
      if (form1.Timer2.Enabled=false) and (form1.Timer6.Enabled=false) then
         begin
            if Pixel1<>$FFFFFF then
            begin
            releasedc(0,dc1);
            form1.Timer4.Enabled:=false;
            form1.Timer1.Enabled:=false;
            form1.Timer3.Enabled:=false;
            form1.Timer5.Enabled:=true;
            sleep(50)
            end;
         end;
      releasedc(0,dc1);
   end;
 
procedure TForm1.Timer5Timer(Sender: TObject);
   begin
       form1.Timer5.Enabled:=false;
       form1.Timer4.Enabled:=false;
       sleep(10);
       keybd_event(ord('1'), MapVirtualKey(ord('1'), 0), 0, 0);
       keybd_event(ord('1'), 0, KEYEVENTF_KEYUP, 0);
       keybd_event(71, 0, 0, 0);
       sleep(4000);
       keybd_event(71, 0, KEYEVENTF_KEYUP, 0);
       sleep(10);
       keybd_event(16, 0, 0, 0);
       keybd_event(66, 0, 0, 0);
       sleep(10);
       keybd_event(66, 0, KEYEVENTF_KEYUP, 0);
       keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
       sleep(10);
       setcursorpos(531,16);
       sleep(10);
       mouse_event(mouseeventf_leftdown,0,0,0,0);
       mouse_event(mouseeventf_leftup,0,0,0,0);
       sleep(10);
       keybd_event(84, 0, 0, 0);
       keybd_event(84, 0, KEYEVENTF_KEYUP, 0);
       form1.Timer4.Enabled:=true;
       form1.Timer1.Enabled:=true;
       form1.Timer3.Enabled:=true;
   end;
 
procedure TForm1.Timer6Timer(Sender: TObject);
   begin
       form1.Timer6.Enabled:=false;
       form1.Timer3.Enabled:=false;
       sleep(10);
       keybd_event(ord('3'), MapVirtualKey(ord('3'), 0), 0, 0);
       keybd_event(ord('3'), 0, KEYEVENTF_KEYUP, 0);
       keybd_event(71, 0, 0, 0);
       sleep(4000);
       keybd_event(71, 0, KEYEVENTF_KEYUP, 0);
       sleep(10);
       keybd_event(16, 0, 0, 0);
       keybd_event(66, 0, 0, 0);
       sleep(10);
       keybd_event(66, 0, KEYEVENTF_KEYUP, 0);
       keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
       sleep(10);
       setcursorpos(531,16);
       sleep(10);
       mouse_event(mouseeventf_leftdown,0,0,0,0);
       mouse_event(mouseeventf_leftup,0,0,0,0);
       sleep(10);
       keybd_event(84, 0, 0, 0);
       keybd_event(84, 0, KEYEVENTF_KEYUP, 0);
       form1.Timer4.Enabled:=true;
       form1.Timer1.Enabled:=true;
       form1.Timer3.Enabled:=true;
   end;
 
procedure TForm1.Timer7Timer(Sender: TObject);
   begin
      dc4:=getdc(0);
      Pixel4:=GetPixel(dc4,468,570);
      if Pixel4=$427B2C then
         begin
         form1.Timer1.Enabled:=false;
         form1.Timer2.Enabled:=false;
         form1.Timer3.Enabled:=false;
         form1.Timer4.Enabled:=false;
         form1.Timer5.Enabled:=false;
         form1.Timer6.Enabled:=false;
         form1.Timer8.Enabled:=false;
         keybd_event(71, 0, KEYEVENTF_KEYUP, 0);
         sleep(50);
         keybd_event(71, 0, KEYEVENTF_KEYUP, 0);
         sleep(50);
         keybd_event(32, 0, 0, 0);
         keybd_event(32, 0, KEYEVENTF_KEYUP, 0);
         sleep(50);
         keybd_event(32, 0, 0, 0);
         keybd_event(32, 0, KEYEVENTF_KEYUP, 0);
         sleep(50);
         keybd_event(84, 0, 0, 0);
         keybd_event(84, 0, KEYEVENTF_KEYUP, 0);
         form1.Timer1.Enabled:=true;
         form1.Timer3.Enabled:=true;
         form1.Timer4.Enabled:=true;
         form1.Timer8.Enabled:=true;
         end;
      releasedc(0,dc4);
end;
 
procedure TForm1.Timer8Timer(Sender: TObject);
begin
dc5:=getdc(0);
      Pixel5:=GetPixel(dc5,27,625);
      if Pixel5=$C6DCD7 then
            begin
            form1.Timer4.Enabled:=false;
            form1.Timer3.Enabled:=false;
            form1.Timer1.Enabled:=false;
            form1.Timer7.Enabled:=false;
            sleep(10);
            setcursorpos(174,683);
            sleep(500);
            mouse_event(mouseeventf_leftdown,0,0,0,0);
            mouse_event(mouseeventf_leftup,0,0,0,0);
            sleep(10);
            setcursorpos(71,68);
            sleep(500);
            mouse_event(mouseeventf_leftdown,0,0,0,0);
            mouse_event(mouseeventf_leftup,0,0,0,0);
            sleep(300);
            mouse_event(mouseeventf_leftdown,0,0,0,0);
            mouse_event(mouseeventf_leftup,0,0,0,0);
            form1.Timer4.Enabled:=true;
            form1.Timer3.Enabled:=true;
            form1.Timer7.Enabled:=true;
            form1.Timer1.Enabled:=true
            end;
      releasedc(0,dc5);
end;
 
end.
0
Заблокирован
18.09.2013, 18:13 12
Да говорят ва, элементарно.
У вас работает таймер. Он крутится постоянно. Скажем интервал у него 10 мс
4000 / 10 - получаем количество шагов таймера для 4 сек.
Где-то нажимается клавиша и устанавливается флаг удержания. По этому флагу начинает работать счётчик.
Как только пройдёт нужное количество шагов, клавиша опустится и сбросится флаг удержания.
Если за это время произойдёт проверка, она обнулит счётчик и счёт тут же остановиться.
Тут уж можно и флаг остановки поставить, и по этому флагу запустить событие.
0
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
18.09.2013, 18:17  [ТС] 13
Цитата Сообщение от Lirrk Посмотреть сообщение
Да говорят ва, элементарно.
У вас работает таймер. Он крутится постоянно. Скажем интервал у него 10 мс
4000 / 10 - получаем количество шагов таймера для 4 сек.
Где-то нажимается клавиша и устанавливается флаг удержания. По этому флагу начинает работать счётчик.
Как только пройдёт нужное количество шагов, клавиша опустится и сбросится флаг удержания.
Если за это время произойдёт проверка, она обнулит счётчик и счёт тут же остановиться.
Тут уж можно и флаг остановки поставить, и по этому флагу запустить событие.
ну так я не знаю как ставят эти флаги и принцип их работы))), подскажите пожалуйста, или ссылку с мануалом скиньте пожалуйста, я в delphi самоучка, знаю только элементарные основы.
0
Заблокирован
18.09.2013, 18:30 14
флаг, семафор, это обычная переменная типа boolean
Скажем её имя Pause
Вначале Pause:=false;
есть ещё счётчик tim_step;

Вот вы чем-то нажимаете клавишу...

~~~~~~~~~~~~~~~~~~~
И сразу
tim_step:= 4000 div Timer1.interval;
Pause:=true;//установка флага

А тут вот событие таймера
if Pause then begin
tim_step:= tim_step -1;
if tim_step = 0 then Pause:=false;
end;

Вот так запустили таймер. а через 4 секунды остановили его

Далее в этом же обработчике.
Ваша проверка.
Если всё в порядке то Pause:=false;
Всё, счётчик остановлен преждевременно.
Отпускаете клавишу
И запускайте событие.
0
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
18.09.2013, 18:43 15
Цитата Сообщение от DANNY4ever Посмотреть сообщение
таймер нажимает на кнопку клавы и отпускает через 4 секунды, я не знаю как это сделать без слипа.
Так и сделать задать таймеру 4 секунды, и после выполнить Enabled:=false таймера при старте опять задать Enabled:=true и через 4 секунды он опять выключиться сам

Добавлено через 4 минуты
Тут таймера только из за слипов путаются лучше и равда сделать один, а это все по отдельнм процедурам кинуть и через определенное положение счетчика вызывать их, и не много будет, а наоборот все в одном месте и видно что когда вызывается
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,255
18.09.2013, 18:47 16
Цитата Сообщение от DANNY4ever Посмотреть сообщение
первый таймер зажимает клавишу на клавиатуре "G" и ждет 4 секунды потом отжимает, 2й таймер должен нажать пробел
А зачем это все нужно? Может это можно сделать как-то не через задний проход?
0
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
18.09.2013, 19:08  [ТС] 17
Цитата Сообщение от Lirrk Посмотреть сообщение
флаг, семафор, это обычная переменная типа boolean
Скажем её имя Pause
Вначале Pause:=false;
есть ещё счётчик tim_step;

Вот вы чем-то нажимаете клавишу...

~~~~~~~~~~~~~~~~~~~
И сразу
tim_step:= 4000 div Timer1.interval;
Pause:=true;//установка флага

А тут вот событие таймера
if Pause then begin
tim_step:= tim_step -1;
if tim_step = 0 then Pause:=false;
end;

Вот так запустили таймер. а через 4 секунды остановили его

Далее в этом же обработчике.
Ваша проверка.
Если всё в порядке то Pause:=false;
Всё, счётчик остановлен преждевременно.
Отпускаете клавишу
И запускайте событие.
честно говоря мало что понял, покажите пожалуйста на конкретном коде

1й таймер
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.Timer2Timer(Sender: TObject);
   begin
       form1.Timer1.Enabled:=false;
       sleep(10);
       keybd_event(ord('2'), MapVirtualKey(ord('2'), 0), 0, 0);
       keybd_event(ord('2'), 0, KEYEVENTF_KEYUP, 0);
       keybd_event(71, 0, 0, 0);
       sleep(4000);
       keybd_event(71, 0, KEYEVENTF_KEYUP, 0);
       sleep(10);
       keybd_event(16, 0, 0, 0);
       keybd_event(66, 0, 0, 0);
       sleep(10);
       keybd_event(66, 0, KEYEVENTF_KEYUP, 0);
       keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
       sleep(10);
       setcursorpos(531,16);
       sleep(10);
       mouse_event(mouseeventf_leftdown,0,0,0,0);
       mouse_event(mouseeventf_leftup,0,0,0,0);
       sleep(10);
       keybd_event(84, 0, 0, 0);
       keybd_event(84, 0, KEYEVENTF_KEYUP, 0);
   end;
2й таймер
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure TForm1.Timer7Timer(Sender: TObject);
   begin
      dc4:=getdc(0);
      Pixel4:=GetPixel(dc4,468,570);
      if Pixel4=$427B2C then
         begin
         form1.Timer2.Enabled:=false;
         sleep(50);
         keybd_event(71, 0, KEYEVENTF_KEYUP, 0);
         sleep(50);
         keybd_event(32, 0, 0, 0);//клавиша пробел
         keybd_event(32, 0, KEYEVENTF_KEYUP, 0);//клавиша пробел
         sleep(50);
         keybd_event(84, 0, 0, 0);
         keybd_event(84, 0, KEYEVENTF_KEYUP, 0);
         form1.Timer2.Enabled:=true;
         end;
      releasedc(0,dc4);
end;
2й должен выключить 1й и нажать пробел без задержки а моментально

Цитата Сообщение от northener Посмотреть сообщение
А зачем это все нужно? Может это можно сделать как-то не через задний проход?
как? мне нужно нажатие этой клавиши в 4 секунды
0
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
18.09.2013, 19:36 18
Поставь таймеру 4 секунды и убери эти слипы и будет таймер тебе нажимать ее каждые 4 секунды без выключения и включения сто раз, а надо выключиш его и все

Добавлено через 1 минуту
Таймер для того и существует что срабатывает через определенное время.

Добавлено через 1 минуту
А так получается тебе таймер и не нужен, можеш просто в отдельной процедуре делать тоже самое. а время у тебя на слипах все держиться, и спрашивается зачем тебе в таком случае таймер. если он не работает как таймер?

Добавлено через 1 минуту
От сюда и виснет у тебя все, в таймере интервал стоит походу 1000. а ты его еще вешаеш на 4000 с лишним, поставь ему хоть время больше что б он не успевал срабатывать, и виснуть уже не будет.

Добавлено через 16 секунд
От сюда и виснет у тебя все, в таймере интервал стоит походу 1000. а ты его еще вешаеш на 4000 с лишним, поставь ему хоть время больше что б он не успевал срабатывать, и виснуть уже не будет.

Добавлено через 5 минут
Поставь таймеру интервал 4000

и запиши в него свое

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  keybd_event(ord('2'), MapVirtualKey(ord('2'), 0), 0, 0);
  keybd_event(ord('2'), 0, KEYEVENTF_KEYUP, 0);
  keybd_event(71, 0, 0, 0);
 
  keybd_event(71, 0, KEYEVENTF_KEYUP, 0);
 
  keybd_event(16, 0, 0, 0);
  keybd_event(66, 0, 0, 0);
 
  keybd_event(66, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
 
  setcursorpos(531,16);
 
  mouse_event(mouseeventf_leftdown,0,0,0,0);
  mouse_event(mouseeventf_leftup,0,0,0,0);
 
  keybd_event(84, 0, 0, 0);
  keybd_event(84, 0, KEYEVENTF_KEYUP, 0);
end;
включи и не выключай и увидиш что будет

Добавлено через 2 минуты
И тут же добавь с 7 таймера код и будет он работать моментально тут же и без задержки

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 dc4:=getdc(0);
      Pixel4:=GetPixel(dc4,468,570);
      if Pixel4=$427B2C then
         begin
 
         keybd_event(71, 0, KEYEVENTF_KEYUP, 0);
 
         keybd_event(32, 0, 0, 0);//клавиша пробел
         keybd_event(32, 0, KEYEVENTF_KEYUP, 0);//клавиша пробел
 
         keybd_event(84, 0, 0, 0);
         keybd_event(84, 0, KEYEVENTF_KEYUP, 0);
         end;
      releasedc(0,dc4);
Добавлено через 5 минут
Можеш сделать интервал меньше например как писали 10
и записать код

Delphi
1
2
3
4
5
inc(c);//глобальная переменная
if (c mod 400)=0 then
begin
тут выполняеш свои действия
end;
Также и на другой интервал, допустим на 5 сек

Delphi
1
2
3
4
if (c mod 500)=0 then
begin
тут выполняеш свои действия
end;
0
0 / 0 / 0
Регистрация: 16.09.2013
Сообщений: 13
18.09.2013, 19:52  [ТС] 19
Цитата Сообщение от Игорь[Igor] Посмотреть сообщение

Добавлено через 5 минут
Поставь таймеру интервал 4000

и запиши в него свое

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  keybd_event(ord('2'), MapVirtualKey(ord('2'), 0), 0, 0);
  keybd_event(ord('2'), 0, KEYEVENTF_KEYUP, 0);
  keybd_event(71, 0, 0, 0); //нажатие клавиши G
 
  keybd_event(71, 0, KEYEVENTF_KEYUP, 0);//отжатие клавиши G
 
  keybd_event(16, 0, 0, 0);
  keybd_event(66, 0, 0, 0);
 
  keybd_event(66, 0, KEYEVENTF_KEYUP, 0);
  keybd_event(16, 0, KEYEVENTF_KEYUP, 0);
 
  setcursorpos(531,16);
 
  mouse_event(mouseeventf_leftdown,0,0,0,0);
  mouse_event(mouseeventf_leftup,0,0,0,0);
 
  keybd_event(84, 0, 0, 0);
  keybd_event(84, 0, KEYEVENTF_KEYUP, 0);
end;
включи и не выключай и увидиш что будет
это бред мне нужно чтобы перед нажатием и отжатием клавиши G прошло 4 секунды, код который вы предоставили просто повторяет событие через 4 секунды, то-есть нажатие и отжатие клавиши будет моментальным, это не то что мне нужно!!!
0
726 / 478 / 130
Регистрация: 24.12.2008
Сообщений: 3,924
18.09.2013, 20:32 20
Сам ты бред, тебе уже показали как и это сделать.

сделай перед включением таймера нажатие а в нутри таймера выключение, и всего делов-то, способов много, невидиш кроме слипа ничего.
0
18.09.2013, 20:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.09.2013, 20:32
Помогаю со студенческими работами здесь

Как остановить таймер?
Здравствуйте. У меня проблема с таймером. Не знаю как его остановить через определенное время,...

Как остановить таймер?
Всем привет. Я тут не могу разобраться. Как остановить таймер. Вот код: internal void...

Как остановить таймер?
В одном из методов запускаю таймер командой. a1 = setTimeout(Change, tt * 500); При нажатии на...

Как остановить консольный таймер?
private static void TimerCallback(object o) { Game.Announce(); GC.Collect(); } ...


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

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