D6: Курсор не изменяется...
От: dimushkin Россия http://www.thefrogsoft.com
Дата: 03.07.02 18:50
Оценка:
что имеем : D6, PaintBox, MouseMove у этого PaintBox

Жму на ЛЕВУЮ (это критично так как с Правой таких проблем нет) кнопку

во время движения жму на CTRL проверяю Shift на [ssLeft, ssCtrl] короче все верно
и меняю курсор и ноль эмоций.
причем менять этот долбаный курсор менял отовсюду и по маус муву и из потока отслеживая GetKey пока кнопка нажата не изменяется как только отпускаю то все ок — меняется... только мне нужно чтобы он менялся пока она нажата причем туда-сюда в зависимости от нажатой клавиши

в пошаговом режмме меняется а на экране нет
с правой повторюсь все ОК
Screen.Cursor проблему решил но возникли другие из за этого...

почитал конфу там у чувака в Билдере такие же проблемы были но там ее не решили (он тоже на Screen->Cursor пересел )

Заранее благодарен за ответ, Дмитрий
www.thefrogsoft.com/ru
www.thefrogsoft.com/en
Re: D6: Курсор не изменяется...
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.07.02 03:44
Оценка:
Здравствуйте dimushkin, Вы писали:

D>что имеем : D6, PaintBox, MouseMove у этого PaintBox


D>Жму на ЛЕВУЮ (это критично так как с Правой таких проблем нет) кнопку


D>во время движения жму на CTRL проверяю Shift на [ssLeft, ssCtrl] короче все верно

D>и меняю курсор и ноль эмоций.
D>причем менять этот долбаный курсор менял отовсюду и по маус муву и из потока отслеживая GetKey пока кнопка нажата не изменяется как только отпускаю то все ок — меняется... только мне нужно чтобы он менялся пока она нажата причем туда-сюда в зависимости от нажатой клавиши

D>в пошаговом режмме меняется а на экране нет

D>с правой повторюсь все ОК
D>Screen.Cursor проблему решил но возникли другие из за этого...

D>почитал конфу там у чувака в Билдере такие же проблемы были но там ее не решили (он тоже на Screen->Cursor пересел )


D>Заранее благодарен за ответ, Дмитрий

Попробуй вызывать Application.ProcessMessages сразу после смены курсора. Возможно, нажатие Ctrl приводит к впаданию в режим захвата мыши (Mouse Capture) и сообщения смены курсора не обрабатываются приложением.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: D6: Курсор не изменяется...
От: Mike, однако Россия  
Дата: 04.07.02 04:13
Оценка:
Здравствуйте Sinclair, Вы писали:

S>Здравствуйте dimushkin, Вы писали:


D>>что имеем : D6, PaintBox, MouseMove у этого PaintBox


D>>Жму на ЛЕВУЮ (это критично так как с Правой таких проблем нет) кнопку


D>>во время движения жму на CTRL проверяю Shift на [ssLeft, ssCtrl] короче все верно

D>>и меняю курсор и ноль эмоций.
D>>причем менять этот долбаный курсор менял отовсюду и по маус муву и из потока отслеживая GetKey пока кнопка нажата не изменяется как только отпускаю то все ок — меняется... только мне нужно чтобы он менялся пока она нажата причем туда-сюда в зависимости от нажатой клавиши

D>>в пошаговом режмме меняется а на экране нет

D>>с правой повторюсь все ОК
D>>Screen.Cursor проблему решил но возникли другие из за этого...

D>>почитал конфу там у чувака в Билдере такие же проблемы были но там ее не решили (он тоже на Screen->Cursor пересел )


D>>Заранее благодарен за ответ, Дмитрий

S>Попробуй вызывать Application.ProcessMessages сразу после смены курсора. Возможно, нажатие Ctrl приводит к впаданию в режим захвата мыши (Mouse Capture) и сообщения смены курсора не обрабатываются приложением.
Насколько я помню, Mouse Capture в Delphi происходит всегда проверяется очень просто — кидаем на форму TLabel, в котором, в событии OnMouseMove отображаем координаты, которые прилетают в событие. Даже если мышь уйдет за пределы Label'а (при нажатой на Label'е левой кнопке мыши), координаты будут меняться! (по крайней мере, так было в D3, D4, D5, D6) и наоборот — жмем мышь в другом месте, наводимся на Label — ноль эмоций...
А Application.ProcessMessages — не помагает. что делать в данном случае — не могу сказать — копать надо...
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[3]: D6: Курсор не изменяется...
От: Hacker_Delphi Россия  
Дата: 04.07.02 04:44
Оценка:
Здравствуйте Mike, однако, Вы писали:

MО>Здравствуйте Sinclair, Вы писали:


S>>Здравствуйте dimushkin, Вы писали:


D>>>что имеем : D6, PaintBox, MouseMove у этого PaintBox


D>>>Жму на ЛЕВУЮ (это критично так как с Правой таких проблем нет) кнопку


D>>>во время движения жму на CTRL проверяю Shift на [ssLeft, ssCtrl] короче все верно

D>>>и меняю курсор и ноль эмоций.
D>>>причем менять этот долбаный курсор менял отовсюду и по маус муву и из потока отслеживая GetKey пока кнопка нажата не изменяется как только отпускаю то все ок — меняется... только мне нужно чтобы он менялся пока она нажата причем туда-сюда в зависимости от нажатой клавиши

D>>>в пошаговом режмме меняется а на экране нет

D>>>с правой повторюсь все ОК
D>>>Screen.Cursor проблему решил но возникли другие из за этого...

D>>>почитал конфу там у чувака в Билдере такие же проблемы были но там ее не решили (он тоже на Screen->Cursor пересел )


D>>>Заранее благодарен за ответ, Дмитрий

S>>Попробуй вызывать Application.ProcessMessages сразу после смены курсора. Возможно, нажатие Ctrl приводит к впаданию в режим захвата мыши (Mouse Capture) и сообщения смены курсора не обрабатываются приложением.
MО>Насколько я помню, Mouse Capture в Delphi происходит всегда проверяется очень просто — кидаем на форму TLabel, в котором, в событии OnMouseMove отображаем координаты, которые прилетают в событие. Даже если мышь уйдет за пределы Label'а (при нажатой на Label'е левой кнопке мыши), координаты будут меняться! (по крайней мере, так было в D3, D4, D5, D6) и наоборот — жмем мышь в другом месте, наводимся на Label — ноль эмоций...
MО>А Application.ProcessMessages — не помагает. что делать в данном случае — не могу сказать — копать надо...

Решение есть !!! в той же ситуации с Label'ом пишем в обработчике FormCreate:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Label1.ControlStyle := Label1.ControlStyle - [csCaptureMouse]; 
end;

И все работает!!! правда при выходе за границы Label'а координаты перестают обновляться...
P.S. спасибо Sinclair за помощь в поисках истины...
Mike, Однако...
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[4]: СПАСИБО !!!!
От: dimushkin Россия http://www.thefrogsoft.com
Дата: 04.07.02 18:45
Оценка:
Здравствуйте Hacker_Delphi, Вы писали:

HD>Решение есть !!! в той же ситуации с Label'ом пишем в обработчике FormCreate:

HD>
HD>procedure TForm1.FormCreate(Sender: TObject);
HD>begin
HD>  Label1.ControlStyle := Label1.ControlStyle - [csCaptureMouse]; 
HD>end; 
HD>

HD>И все работает!!! правда при выходе за границы Label'а координаты перестают обновляться... :shuffle:
HD>P.S. спасибо Sinclair за помощь в поисках истины...
HD>Mike, Однако... :))

СПАСИБО МУЖИКИ, ВЫРУЧИЛИ !!!.
www.thefrogsoft.com/ru
www.thefrogsoft.com/en
Re[4]: D6: Курсор не изменяется...
От: dimushkin Россия http://www.thefrogsoft.com
Дата: 11.07.02 07:57
Оценка:
Здравствуйте Hacker_Delphi, Вы писали:

....


Проблему можно решить еще более красивее тем более что предложенный Вами вариант доставил Маасс побочных проблем :-)

SetCursor() и все работает. :-)
www.thefrogsoft.com/ru
www.thefrogsoft.com/en
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.