Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 387

Раздел: Delphi » Прочее
/ вопрос открыт /

Приветствую, уважаемые эксперты!
Возможно ли заставить исчезнуть курсор мыши в чужом приложении?
Возможно есть аналог ShowCursor для чужих приложений?
PS В данном случае чужое приложение - браузер Opera в котором проигрывается флеш.

Ins Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Ins (статус: 1-ый класс)
Вопрос отправлен: 8 июня 2011, 01:10
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: ierihon1

Здравствуйте, Игорь Александров
ич!
Всё таки я нашёл способ решения этой проблемы, вместо того чтобы совсем прятать курсор он будет убираться в такой угол в котором он не будет вден и это поможет избежать проблем с его появлением. на форме должны быть два таймера я задал первому интервал 7000 а второму 500.
вот обработчики события OnTime:

procedure TForm2.Timer1Timer(Sender: TObject);
var Point:TPoint;
begin
GetCursorPos(Point);
X1:=point.X;
Y1:=point.Y;
timer2.Enabled:=True;
Timer1.Enabled:=False;
end;
 
procedure TForm2.Timer2Timer(Sender: TObject);
var Point:TPoint;
begin
GetCursorPos(Point);
X2:=point.X;
Y2:=point.Y;
if (X1=X2) and (Y1=Y2) then
SetCursorPos(Screen.Width-1,0)
else
Timer1.Enabled:=True;
end;

Ответ отправил: ierihon1 (статус: 1-ый класс)
Время отправки: 8 июня 2011, 11:28
Оценка за ответ: 4

Комментарий к оценке: Прошу прощения, но это совсем не то что я хочу сделать. Если просто перемещать - то вполне хватает и одного таймера. Ставлю 4 за желание помочь)

Мини-форум вопроса

Всего сообщений: 23; последнее сообщение — 15 июня 2011, 01:37; участников в обсуждении: 4.

Страницы: [1] [2] [Следующая »]

ierihon1

ierihon1 (статус: 1-ый класс), 8 июня 2011, 09:58 [#1]:

А нужно чтобы он исчез именно когда открывается флещ проигрыватель?
Вадим К

Вадим К (статус: Академик), 8 июня 2011, 10:14 [#2]:

Заставить то исчезнуть можно, но зачем?
Галочка "подтверждения прочтения" - вселенское зло.
ierihon1

ierihon1 (статус: 1-ый класс), 8 июня 2011, 10:17 [#3]:

наверно чтобы видео не мешал смотреть))
Ins

Ins (статус: 1-ый класс), 8 июня 2011, 10:36 [#4]:

Вы правы, что бы не мешал смотреть ^^
Идея весьма незамысловата. Каждые n секунд будут проверятся координаты мыши. Если не изменились - скрыть курсор. Про движении мыши показать.
ierihon1

ierihon1 (статус: 1-ый класс), 8 июня 2011, 10:40 [#5]:

ну это хорошая идея... но всё равно придётся проверять заголовок окна а для этого нужно проверять заголовок активного окна.. для этого есть специальная функция, сейчас попробую что нибудь настрочить)
Ins

Ins (статус: 1-ый класс), 8 июня 2011, 10:46 [#6]:

получить хендл - не есть проблема. Не знаю как заставить исчезнуть. Можно конечно нацарапать свой браузер, но не хочется "изобретать велосипед"
ierihon1

ierihon1 (статус: 1-ый класс), 8 июня 2011, 10:50 [#7]:

а как называется сайт на котором будет просматриваться видео? для браузера это очень важно..
Вадим К

Вадим К (статус: Академик), 8 июня 2011, 10:52 [#8]:

Никогда подобной проблемы не возникало - курсор сам пропадает.
Но кто мешает менять не курсор для приложения, а общесистемый и менять его на специально заготовленный пустой курсор?
Галочка "подтверждения прочтения" - вселенское зло.
ierihon1

ierihon1 (статус: 1-ый класс), 8 июня 2011, 11:30 [#9]:

Игорь Александрович: И еще.. совсем забыл написать это в ответе: второй таймер должен быть выключен по умолчанию его будет включать первый таймер.
И ещё не мало важное переменный X1,X2,Y1,Y2 должы быть объявлены как глобальные переменные челочисленного типа.
Ins

Ins (статус: 1-ый класс), 8 июня 2011, 11:43 [#10]:

Адрес сайта значения не имеет. Как я уже писал получить хендл или заголовок окна - не проблема.
Вадим К:
Если Вы имеете ввиду функцию SetSystemCursor то если честно не особо понял как с ее помощью убрать курсор..
Ins

Ins (статус: 1-ый класс), 8 июня 2011, 11:46 [#11]:

ierihon1 прошу прощения, но как организовать проверку я и сам знаю. Интересует как убрать курсор в чужом окне или сделать его невидимым
Вадим К

Вадим К (статус: Академик), 8 июня 2011, 11:52 [#12]:

Посмотрел в msdn - и вспомнил - там есть специальная функция ShowCursor. Казалось бы, а где функция HideCursor? а она и не нужна, потому что просто нужно правильно передать параметр.
ShowCursor(True); показать курсор
ShowCursor(False); скрыть курсор
Галочка "подтверждения прочтения" - вселенское зло.
ierihon1

ierihon1 (статус: 1-ый класс), 8 июня 2011, 12:08 [#13]:

ShowCursor скрывает кусор только в пределах окна приложения... на сколько я знаю... я пытался это использовать..
Ins

Ins (статус: 1-ый класс), 8 июня 2011, 12:10 [#14]:

ierihon1: Вот моё решение подобным образом
procedure TForm109.Timer1Timer(Sender: TObject);
Var
pt:TPoint;
x,y:integer;
begin
GetCursorPos(pt);
if (pt.X<>x) and (pt.y<>y) then
    Begin
    x:=pt.X;
    y:=pt.Y;
    End                    else
SetCursorPos(Screen.Width-1,0);
end;
Ins

Ins (статус: 1-ый класс), 8 июня 2011, 12:12 [#15]:

Вадим К: Действительно данная функция действует только на свое приложение (
ierihon1

ierihon1 (статус: 1-ый класс), 8 июня 2011, 12:52 [#16]:

Нужно искать функцию которая вообще отключит курсор.. а эта делает его всего лишь невидимым..
Вадим К

Вадим К (статус: Академик), 8 июня 2011, 13:01 [#17]:

Если курсор отключить - то уже нельзя будет получать его координаты. Вы уверенны, что Вам это нужно? Но так и не понятно, зачем это делать.
Проверил у себя - при полноэкранном режиме просмотра флеша, курсор сам скрывается.
Галочка "подтверждения прочтения" - вселенское зло.
ierihon1

ierihon1 (статус: 1-ый класс), 8 июня 2011, 13:21 [#18]:

ну так сначала определяются координаты а потом уже отключается курсор, значит и не нужны координаты после его выключения, только будет одна проблема... как его включить обратно...
ierihon1

ierihon1 (статус: 1-ый класс), 8 июня 2011, 13:23 [#19]:

вот кое что нагуглил
//Выключение курсора
procedure TForm1.Button1Click(Sender: TObject);
var CState: integer;
begin
  CState:= ShowCursor(True);
  while Cstate >= 0 do 
    Cstate := ShowCursor(False);
end;
 
//Включение курсора
procedure TForm1.Button2Click(Sender: TObject);
var Cstate : integer;
begin
  Cstate := ShowCursor(True);
  while CState<0 do 
    CState:=ShowCursor(True);
bnd;
Ins

Ins (статус: 1-ый класс), 8 июня 2011, 13:33 [#20]:

ierihon1: Если он станет невидимым - меня это вполне устроит
Вадим К: К сожалению у меня он не скрывается =\

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.02 сек.