![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#31 |
Форумчанин
Регистрация: 01.06.2011
Сообщений: 215
|
![]()
а гдде описывается procedure DoTimer; virtual;?
|
![]() |
![]() |
![]() |
#32 |
Форумчанин
Регистрация: 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. |
![]() |
![]() |
![]() |
#33 |
Форумчанин
Регистрация: 01.06.2011
Сообщений: 215
|
![]()
толкь это у меня чисто потоковый юнит,и формы для него нет
куда мне это вставить?Timers[0] :=TTimer.Create(500); Timers[0].OnTimer:=OnTimer; при создании главной формы пойдет? |
![]() |
![]() |
![]() |
#34 |
Форумчанин
Регистрация: 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. |
![]() |
![]() |
![]() |
#35 |
Форумчанин
Регистрация: 01.06.2011
Сообщений: 215
|
![]() Код:
если да,то [Error] Unit2.pas(139): Undeclared identifier: '81' |
![]() |
![]() |
![]() |
#36 |
Форумчанин
Регистрация: 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. |
![]() |
![]() |
![]() |
#37 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Цитата:
Цитата:
Все что внутри Synchronize выполнятся в ОСНОВНОМ потоке. А сам поток ЖДЕТ пока это будет выполнено.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 23.06.2011 в 09:24. |
||
![]() |
![]() |
![]() |
#38 |
Форумчанин
Регистрация: 16.12.2009
Сообщений: 902
|
![]()
Потоки нужны для скорости выполнения определенных функций не грузя ресурсы формы и не подвешивая ее, он все берет на себя.
Без потока например циклы будут вешать форму хотя можно и application.ProcessMessages поставить в промежутке, а как быть с временными паузами например sleep он будет вешать визуальные действия формы Еще есть и много других функций которые работают в блокирующем режиме, тогда без потоков не обойтись. Согласен что проще пользоваться сообщениями прямо из потока. Последний раз редактировалось Aliens_wolfs; 23.06.2011 в 12:50. |
![]() |
![]() |
![]() |
#39 |
Форумчанин
Регистрация: 01.06.2011
Сообщений: 215
|
![]()
Aliens_wolfs,спасибо большое,работает)
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с потоком | 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 |