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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2015, 13:03   #21
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Просто уточнение, что во внутреннем представлении цвет хранится в формате BGR, а не RGB. Это надо бы уже знать.
Arigato вне форума Ответить с цитированием
Старый 02.04.2015, 14:20   #22
adkomissarov
Пользователь
 
Регистрация: 21.01.2015
Сообщений: 37
По умолчанию

Как заставить всё это дело работать 1 раз, и ждать другого цвета? А то получается таймер с интервалом сканит пиксель и в зависимости от цвета выполняет заданные действия. Как сделать, чтобы нашел цвет - сделал дело и успокоился пока не поймал другой цвет. А то выходит он хватает тот же цвет и опять дублирует заданные действия.
Код HTML:
procedure TForm1.Button1Click(Sender: TObject);
begin
tmr2.interval:=5*1000;
tmr2.Enabled:= True;
end;


procedure TForm1.tmr2Timer(Sender: TObject);
var
DC: HDC;
Color: Cardinal;
begin
DC :=GetDC(0);
Color := GetPixel(DC, 484, 395);
ReleaseDC(0,DC);

if Color=343806 then begin
SetCursorPos(480, 450);
mouse_event(MOUSEEVENTF_LEFTDOWN,48 0,450,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,480, 450,0,0);
Sleep(2000);
SetCursorPos(770, 450);
mouse_event(MOUSEEVENTF_LEFTDOWN,77 0,450,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,770, 450,0,0);
end;

if Color=381259 then begin
SetCursorPos(580, 450);
mouse_event(MOUSEEVENTF_LEFTDOWN,58 0,450,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,580, 450,0,0);
Sleep(2000);
SetCursorPos(870, 450);
mouse_event(MOUSEEVENTF_LEFTDOWN,87 0,450,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,870, 450,0,0);
end;


if Color=9830400 then begin
SetCursorPos(380, 450);
mouse_event(MOUSEEVENTF_LEFTDOWN,38 0,450,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,380, 450,0,0);
Sleep(2000);
SetCursorPos(670, 450);
mouse_event(MOUSEEVENTF_LEFTDOWN,67 0,450,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,670, 450,0,0);
end;
adkomissarov вне форума Ответить с цитированием
Старый 02.04.2015, 14:24   #23
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Поймал цвет - запомни, в таймере проверяй - совпадает или нет, изменился - новые действия и опять запомнил
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.04.2015, 14:26   #24
adkomissarov
Пользователь
 
Регистрация: 21.01.2015
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Поймал цвет - запомни, в таймере проверяй - совпадает или нет, изменился - новые действия и опять запомнил
Если не трудно, то можно код, как запомнить? А то я совсем новичок.
adkomissarov вне форума Ответить с цитированием
Старый 02.04.2015, 14:31   #25
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Если не трудно, то можно код, как запомнить?
Код:
Tmr1.Tag:= Color;  // например
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.04.2015, 14:40   #26
adkomissarov
Пользователь
 
Регистрация: 21.01.2015
Сообщений: 37
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Код:
Tmr1.Tag:= Color;  // например
А как сравнивать? Точнее как заставить ожидать пока не смениться память таймера.

Последний раз редактировалось adkomissarov; 02.04.2015 в 14:42.
adkomissarov вне форума Ответить с цитированием
Старый 02.04.2015, 15:01   #27
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

после ReleaseDC(0,DC);
Код:
if Tmr1.Tag = Color
  then Exit; // например
при запуске таймера:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
tmr2.interval:=5*1000;
tmr2.Enabled:= True;
tmr.Tag:= -1; // так надо!
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 02.04.2015, 15:08   #28
adkomissarov
Пользователь
 
Регистрация: 21.01.2015
Сообщений: 37
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
после ReleaseDC(0,DC);
Код:
if Tmr1.Tag = Color
  then Exit; // например
при запуске таймера:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
tmr2.interval:=5*1000;
tmr2.Enabled:= True;
tmr.Tag:= -1; // так надо!
end;
Спасибо огромное! Еще бы что значит -1 понять и вообще супер)

Последний раз редактировалось adkomissarov; 02.04.2015 в 15:11.
adkomissarov вне форума Ответить с цитированием
Старый 02.04.2015, 15:35   #29
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от adkomissarov Посмотреть сообщение
Еще бы что значит -1 понять и вообще супер)
Такого цвета не бывает
northener вне форума Ответить с цитированием
Старый 02.04.2015, 15:46   #30
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Еще бы что значит -1 понять и вообще супер)
У тебя там компайлер не выдаёт warning типа "combined signed and unsigned widened both operands..."?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение цвета определенной строки в richedit qwas777 Общие вопросы Delphi 3 28.01.2013 13:55
Как сделать скриншот определенной части экрана? JonMagon Помощь студентам 11 13.05.2011 09:45
выбор определенной области с таблицы сергей7 Microsoft Office Excel 5 07.03.2011 21:35
AutoIt Подсчет кол-ва пикселей определенного цвета в определенной области активного окна z3xix13 Помощь студентам 0 02.10.2010 14:27
Чтение области экрана АлМазСофт Помощь студентам 5 28.01.2010 12:52