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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2011, 23:15   #21
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

После каждого label ставь sleep(Примерно 500);- можно подобрать задержку. У тебя через label быстро информация проходит нужна задержка чтобы увидеть информацию
Aliens_wolfs вне форума Ответить с цитированием
Старый 22.06.2011, 23:34   #22
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

да,спасибо,работает
можешь помочь со вторым потоком?(там где про getasynckeystate)
spydark91 вне форума Ответить с цитированием
Старый 22.06.2011, 23:35   #23
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Сейчас попробуем разобраться
getasynckeystate это проверка состояния клавиши как я понял?

Последний раз редактировалось Aliens_wolfs; 22.06.2011 в 23:38.
Aliens_wolfs вне форума Ответить с цитированием
Старый 22.06.2011, 23:39   #24
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

да,там если нажаты esc+q то выполняется щелчек на одну кнопку,если ESC+W,то на другую
если я вставляю это просто в таймер,то все ок,но с потоком какаято фигня
таймер нельзя,тк он будет тормащить программу
spydark91 вне форума Ответить с цитированием
Старый 22.06.2011, 23:52   #25
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Попробуй так
Оставь предыдущий код так как есть, только подправь новые значения

Код:
//Объявляем в TForm1
 public
    procedure OnTimer(Sender: TObject);
    procedure OnKeyState(Sender: TObject);//Добавляем новую функцию
  end;

  //Поток
TTimer = class(TThread)
//Событие
FOnTimer:TNotifyEvent;
FTick:integer;//Добавляем изменяемое значение в sleep потока
protected
procedure Execute; override;
//Функция события
procedure DoTimer; virtual;
public
constructor Create(Tick: integer=5); virtual;//Изменяем функцию. Добавляем изменяемое значение в sleep по умолчанию 5
destructor Destroy; override;
published
property OnTimer: TNotifyEvent read FOnTimer write FOnTimer;
end;

var
  Form1: TForm1;
Timers: array[0..2]of TTimer;// Меняем значения в Имени потока


constructor TTimer.Create(Tick: integer=5);
begin
inherited Create(True);
FreeOnTerminate := True; //Для уничтожения потока когда он остановлен
FTick:=Tick;//значение sleep потока
resume; //запускаем поток
end;

procedure TTimer.Execute;
begin
//Крутим поток
while not Terminated do
begin
//Вызываем функцию
Synchronize(DoTimer);
sleep(FTick);
end;
end;


//Добавляем функцию для нового события
procedure TForm1.OnKeyState(Sender: TObject);
var esc,q,w:boolean;
begin
//Ваш код
if getasynckeystate($1b) <> 0 then esc:=true;
if getasynckeystate($51)<>0 then q:=true;
if getasynckeystate($57)<>0 then w:=true;
if settings.CheckBox7.Checked=true then
  begin
    if (esc=true) and (w=true) then
      form2.b6;
  end;
if (esc=true) and(q=true) then
  form2.b5;
end; 

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//Создаем поток работающий с функцией OnTimer и запускаем его
Timers[0] :=TTimer.Create(500);
Timers[0].OnTimer:=OnTimer;//передаем работу функции TForm1.OnTimer потоку
//Создаем поток работающий с функцией OnKeyState и запускаем его
Timers[1] :=TTimer.Create(10);
Timers[1].OnTimer:=OnKeyState;//передаем работу функции TForm1.OnKeyState потоку
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//Останавливаем потоки
Timers[0].Terminate;
Timers[1].Terminate;
end;

Последний раз редактировалось Aliens_wolfs; 23.06.2011 в 12:35.
Aliens_wolfs вне форума Ответить с цитированием
Старый 22.06.2011, 23:59   #26
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

мне надо чтобы не только на форме ловилось,но и если форма не имеет фокуса
spydark91 вне форума Ответить с цитированием
Старый 23.06.2011, 00:00   #27
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

Код:
Timers[1].OnTimer:=OnKeyState; //перенаправить событие в TForm1
как это"перенаправляем",можешь объяснить?

Последний раз редактировалось spydark91; 23.06.2011 в 00:05.
spydark91 вне форума Ответить с цитированием
Старый 23.06.2011, 00:18   #28
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Timers[1] это уже новый поток он создан на основе TTimer потока

Попробуй код, если не будут перехватываться то можно попробовать без потока с помощью событий но это уже другой код будет

Последний раз редактировалось Aliens_wolfs; 23.06.2011 в 12:45.
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.06.2011, 00:25   #29
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

а можно с помощью событий? мне давно интересно было как винда оюрабатывает события кнопок
spydark91 вне форума Ответить с цитированием
Старый 23.06.2011, 00:28   #30
spydark91
Форумчанин
 
Регистрация: 01.06.2011
Сообщений: 215
По умолчанию

объясни плиз
Код:
property OnTimer: TNotifyEvent read FOnTimer write FOnTimer;
spydark91 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с потоком Yur@ Общие вопросы Delphi 3 02.06.2011 12:46
Проблема с потоком timur oO Помощь студентам 2 14.04.2010 17:02
Delphi Проблема с потоком TreadProblem Помощь студентам 1 07.03.2010 17:59
Проблема с потоком Araver Общие вопросы Delphi 4 16.10.2007 04:30