purebasic.info

PureBasic forum
Текущее время: Пт янв 19, 2018 6:46 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
СообщениеДобавлено: Пн окт 19, 2015 7:42 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 540
Благодарил (а): 53 раз.
Поблагодарили: 15 раз.
Пункты репутации: 5
Поиск по форуму вообще промолчал на эту тему.

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


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн окт 19, 2015 10:05 am 
Не в сети
док

Зарегистрирован: Пн сен 27, 2010 10:30 am
Сообщений: 143
Откуда: Уренгой
Благодарил (а): 0 раз.
Поблагодарили: 10 раз.
Пункты репутации: 5
Код:
1
2
3
4
5
6
7
8
9
10
 
Temp.POINT
Repeat
  If GetAsyncKeyState_(#VK_RBUTTON)=-32767 ; Жмем на правую кнопку мышки.
    GetCursorPos_(Temp)
  Debug GetPixel_(GetDC_(0),Temp\x,Temp\y)
 EndIf
 Delay(100)
Until GetAsyncKeyState_(#VK_ESCAPE) ; Прога закроется при шажатии кнопку "Esc" на клавиатуре.
 



Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Вт окт 20, 2015 7:10 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 540
Благодарил (а): 53 раз.
Поблагодарили: 15 раз.
Пункты репутации: 5
Спасибо, буду пробовать.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср окт 21, 2015 7:47 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 540
Благодарил (а): 53 раз.
Поблагодарили: 15 раз.
Пункты репутации: 5
Код работает сам по себе, всё нормально воззвращает, но если засунуть его в программу, то работает только в окне программы, а нужно именно вне окна программы.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср окт 21, 2015 8:13 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
newJS писал(а):
Код работает сам по себе, всё нормально воззвращает, но если засунуть его в программу, то работает только в окне программы, а нужно именно вне окна программы.

Правильно, ты же обрабатываешь события только в своей программе. И твоя программа не знает, что мышка где то ещё щёлкает.
Нужно проверять If GetAsyncKeyState_(#VK_RBUTTON)=-32767
вне зависимости событий окна - например по таймеру или установить периодичность жестко в WaitWindowEvent(10)
Или в отдельном потоке процедуру проверки запускать.

_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт окт 22, 2015 5:59 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 540
Благодарил (а): 53 раз.
Поблагодарили: 15 раз.
Пункты репутации: 5
Виталь, спасибо, не уверен что разберусь, но попробовать попробую.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт окт 22, 2015 7:55 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
newJS писал(а):
Виталь, спасибо, не уверен что разберусь, но попробовать попробую.

Что тут разбираться?
Только не удобно на правую кнопку жать - почти во всех программах есть контекстное меню, которое выскакивает,
лучше Ctrl жать ИМХО.
А можно и вообще ни чего не жать, определять цвет автоматически.

Вот все три метода
1. Принудительно генерируем события нашего окна:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Temp.POINT
OpenWindow(0,0,0,300,200,"ColorPic",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StickyWindow(0, 1)
 
Repeat
  event=WaitWindowEvent(10)
  If GetAsyncKeyState_(#VK_CONTROL)=-32767 ; Жмем на Ctrl
    GetCursorPos_(Temp)
    col=GetPixel_(GetDC_(0),Temp\x,Temp\y)
    SetWindowTitle(0, "RGB = "+ Str(Red(col))+","+Str(Green(col))+","+Str(Blue(col)))
    SetWindowColor(0,col)
 EndIf
 
Until Event = #PB_Event_CloseWindow



2. Событие генерирует таймер окна
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Global Temp.POINT
OpenWindow(0,0,0,300,200,"ColorPic",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
AddWindowTimer(0,0,100)
StickyWindow(0, 1)
 
Procedure GetColor()
  GetCursorPos_(Temp)
  col=GetPixel_(GetDC_(0),Temp\x,Temp\y)
  SetWindowColor(0,col)
  SetWindowTitle(0, "RGB = "+ Str(Red(col))+","+Str(Green(col))+","+Str(Blue(col)))
EndProcedure
 
Repeat
  Event=WaitWindowEvent()
  If Event = #PB_Event_Timer And EventTimer()=0
    GetColor()
  EndIf
 
Until Event = #PB_Event_CloseWindow
 
 



3. Определяем цвет в отдельном потоке

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Global Temp.POINT
OpenWindow(0,0,0,300,200,"ColorPic",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StickyWindow(0, 1)
 
Procedure GetColor(*val)
  Repeat
  GetCursorPos_(Temp)
  col=GetPixel_(GetDC_(0),Temp\x,Temp\y)
  SetWindowTitle(0, "RGB = "+ Str(Red(col))+","+Str(Green(col))+","+Str(Blue(col)))
  SetWindowColor(0,col)
  Delay(100)
  ForEver
EndProcedure
 
CreateThread(@GetColor(),0)
 
Repeat
  Event=WaitWindowEvent()
   
Until Event = #PB_Event_CloseWindow


_________________
read-only


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт окт 22, 2015 8:17 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 540
Благодарил (а): 53 раз.
Поблагодарили: 15 раз.
Пункты репутации: 5
kvitaliy писал(а):
Что тут разбираться?

Это для тебя обученного. :oops:

kvitaliy писал(а):
Только не удобно на правую кнопку жать

Ещё как не удобно, можно попробовать в настройки вывести выбор кнопки. Есть варианты.

Всё сгрёб, пойду пробовать.
Пасиб.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт окт 22, 2015 3:08 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
newJS
Глянь вот тут
Отличная утиль для получения цвета пикселя + увеличение области экрана

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 23, 2015 5:54 am 
Не в сети
профессор

Зарегистрирован: Вт май 13, 2014 4:12 am
Сообщений: 540
Благодарил (а): 53 раз.
Поблагодарили: 15 раз.
Пункты репутации: 5
pablov, спасибо, но вчера уже всё сделал по Виталиному коду, получилось даже лучше чем я думал.
Сегодня только морду поправлю и готово.
А нерусский код гляну, может там какая интересная идея есть.

P.S.
Криворукие неруси, задолбался ту простыно прокручивать....


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB