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

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

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

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

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

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

а гдде описывается procedure DoTimer; virtual;?
spydark91 вне форума Ответить с цитированием
Старый 23.06.2011, 00:37   #32
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

property OnTimer: TNotifyEvent read FOnTimer write FOnTimer;
Это событие создано мною содержащая (Sender: TObject) можно название любое другое задать. когда срабатывает виртуальная процедура procedure DoTimer; тоже название может быть любым,
то происходит работа с внешней процедурой if Assigned(FOnTimer) then
FOnTimer(Self); передающая объект (Sender: TObject) для работы в потоке
Это искуственно созданая процедура.
Без этой процедуры поток не будет работать с процедурой на форме

По событию можно работать так например

// прописать строку в TForm1
public
procedure ProcessFormMessages(var Msg: tMsg; var Handled: Boolean);
end

procedure TForm1.ProcessFormMessages(var Msg: tMsg; var Handled: Boolean);
begin
{ проверка наличия системного сообщения }
case Msg.wParam of
VK_ESCAPE: //Нажата кнопка ESC;
end;
{ сообщаем о том, что сообщение обработано }
Handled := True;
end;
end;

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

толкь это у меня чисто потоковый юнит,и формы для него нет
куда мне это вставить?Timers[0] :=TTimer.Create(500);
Timers[0].OnTimer:=OnTimer;
при создании главной формы пойдет?
spydark91 вне форума Ответить с цитированием
Старый 23.06.2011, 00:54   #34
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Замени у себя
Timers:=TTimer.Create;
и
Timers.OnTimer:=OnTimer;
на
Timers[0] :=TTimer.Create(500);
Timers[0].OnTimer:=OnTimer;
и добавь
Timers[1] :=TTimer.Create(10);
Timers[1].OnTimer:=OnKeyState;

Можно расположить и при создании формы и при нажатии кнопки

Я в коде указал красным шрифтом что нужно заменить или добавить, весь код не меняй нужно только подправить его

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

Код:
procedure TForm2.ProcessFormMessages(var Msg: tMsg; var Handled: Boolean);
begin
case Msg.wParam of
VK_ESCAPE:esc:=true; end;
81:q=true;  end;
87:w:=true; end;

Handled := True;
end;
так?
если да,то [Error] Unit2.pas(139): Undeclared identifier: '81'
spydark91 вне форума Ответить с цитированием
Старый 23.06.2011, 07:50   #36
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

С сообщениями события на клавиши не будет работать когда форма не в фокусе.
Здесь лучше ловушку поставить на эти клавиши

попробуй так

//В TForm1 добавь процедуру
private
//процедура для ловушки сообщений с клавиатуры
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//Захватываем Клавишу Esc
RegisterHotKey(handle,27, 0, 27);
//Захватываем Клавишу Q
RegisterHotKey(handle,81, 0, 81);
//Захватываем Клавишу W
RegisterHotKey(handle,87, 0, 87);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
//Освобождаем Клавишу Esc
UnRegisterHotKey(handle,27);
//Освобождаем Клавишу Q
UnRegisterHotKey(handle,81);
//Освобождаем Клавишу W
UnRegisterHotKey(handle,87);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
var
esc,q,w:boolean;
begin
//Ваш код
if getasynckeystate(27) <> 0 then esc:=true;
if getasynckeystate(81) <> 0 then q:=true;
if getasynckeystate(87) <> 0 then w:=true;
if (esc=true) and (w=true) then begin
showmessage('Клавиши esc+w');
form2.b6;
end;
if (esc=true) and(q=true) then begin
showmessage('Клавиши esc+q');
form2.b5;
end;
end;

Последний раз редактировалось Aliens_wolfs; 23.06.2011 в 12:11.
Aliens_wolfs вне форума Ответить с цитированием
Старый 23.06.2011, 09:10   #37
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
ошибка [Error] Unit1.pas(52): Not enough actual parameters на строкеpostmessage(.WM_USER+1, p, unit2.stat);
PostMessage(statysbusy.handle, WM_USER+1, p, unit2.stat);

Цитата:
а если просто наделать процедур и использовать Synchronize? как тут
тогда зачем нужны потоки.
Все что внутри Synchronize выполнятся в ОСНОВНОМ потоке.
А сам поток ЖДЕТ пока это будет выполнено.
программа — запись алгоритма на языке понятном транслятору

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

Потоки нужны для скорости выполнения определенных функций не грузя ресурсы формы и не подвешивая ее, он все берет на себя.

Без потока например циклы будут вешать форму хотя можно и application.ProcessMessages поставить в промежутке, а как быть с временными паузами например sleep он будет вешать визуальные действия формы
Еще есть и много других функций которые работают в блокирующем режиме, тогда без потоков не обойтись.

Согласен что проще пользоваться сообщениями прямо из потока.

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

Aliens_wolfs,спасибо большое,работает)
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