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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2010, 00:39   #1
Karyuudo
Пользователь
 
Регистрация: 17.02.2008
Сообщений: 53
По умолчанию Вопрос про getpixel

нужно сделать условие, типа если цвет в такой-то точке не совпадает с цветом указанным в эдите то прервать цикл.. о столкнулся с таким вот затруднением...


Код:
GetCursorPos (mish);
edit13.text:=inttostr(mish.X);
edit14.text:=inttostr(mish.Y);
 HC := CreateDC('Display', nil, nil, nil);
edit15.Text:=inttostr(GetPixel(HC,strtoint(edit13.text),strtoint(edit14.text)));
showmessage (inttostr(GetPixel(HC,1067,624)));
DeleteDC(HC);
Если навести курсором в какую-нибудь точку экрана и нажать энтер, то прога в эдите15 показывает цвет, куда наведен курсор
После чего появляется сообщение 1184431.
Но если курсор навести прямо на точку 1067, 624 то оба варианта покажут 1381841, хотя не обязательно на ту точку наводить, во втором случает такой результат будет если просто навести на ту кнопку.. Ниче не понимаю..
Karyuudo вне форума Ответить с цитированием
Старый 13.04.2010, 05:29   #2
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

у меня работает вот так:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  pt: Tpoint;
  ColorPix: integer;
begin

  GetCursorPos(pt);
  {GetDC(0) - HDC рабочего стола}
  ColorPix:= GetPixel(GetDC(0), pt.X, pt.Y); 
  Edit1.Text:=IntToStr(ColorPix);

end;
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Старый 13.04.2010, 12:14   #3
Karyuudo
Пользователь
 
Регистрация: 17.02.2008
Сообщений: 53
По умолчанию

попробовал сделать по аналогии, но всеравно тот же результат:

сначала кнопка установления координат и нахождения цвета в этих точках и записывания в эдиты:
Код:
procedure TForm1.Button5Click(Sender: TObject);
begin
showmessage (' Наведите курсор на ... и нажмите Enter');
GetCursorPos (mish);
edit8.text:=inttostr(mish.X);
edit9.Text:=inttostr(mish.Y);
Edit12.Text:=IntToStr(GetPixel(GetDC(0), mish.X, mish.Y));
end;
получаются некоторые значения:
1068, 621 и 2963691

Еще сделал кнопку:
Код:
procedure TForm1.Button8Click(Sender: TObject);
begin
showmessage (inttostr(GetPixel(GetDC(0),strtoint(edit8.text),strtoint(edit9.text))));
end;
Которая теоретически должна показывать тоже, что и в эдите12, но показывает другое:2502596 причем куда бы не навел, кроме той области с кнопкой, там в той области показывает 2963691, даже если цвета там совсем разные..
Karyuudo вне форума Ответить с цитированием
Старый 13.04.2010, 12:23   #4
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Если хочешь отлавливать координаты мыши по всему экрану, а не только на своей форме, то помести код (который я написал выше) в обработчик таймера. интервал таймера поставь = 1.
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Старый 13.04.2010, 13:25   #5
Karyuudo
Пользователь
 
Регистрация: 17.02.2008
Сообщений: 53
По умолчанию

Цитата:
Сообщение от MaxNik2009 Посмотреть сообщение
Если хочешь отлавливать координаты мыши по всему экрану, а не только на своей форме, то помести код (который я написал выше) в обработчик таймера. интервал таймера поставь = 1.
спасибо, только я не пойму как использовать этот таймер?
Он просто показывает цвет точки, где находится мышка.. Но мне то нужно сделать такое:


1. Один раз устанавливается точка на экране и записывается в эдиты её цвет и координаты (кнопку для этого уже написал выше)
2. Навести мышку на координаты из пункта 1 и узнать цвет точки в этих координатах
3. Сделать сравнение, если цвет из пункта 1 совпадает с пунктом 2, то что-то сделать.. (прервать цикл, break)

2 и 3й пункт выполняется я так понял например таким кодом:
Код:
pt.X:=strtoint(edit1.text);
pt.Y:=strtoint(edit2.text);
ColorPix:= GetPixel(GetDC(0), pt.X, pt.Y);
if edit3.text=inttostr(ColorPix) then break
Еще заметил такую странность..
сначало не совпадает.. но если нажать Enter и запустить еще раз, тогда координаты совпадают. Пробовал сделать цикл для второй компнки тип 2 раза повторить, но не помогает..
Karyuudo вне форума Ответить с цитированием
Старый 13.04.2010, 14:06   #6
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Посмотри в прикрепленных.. так тебе надо?
p.s. комментировать некогда было... если не поймешь то за комментирую.
Вложения
Тип файла: rar Pixels.rar (3.6 Кб, 51 просмотров)
принимаю благодарности в письменном виде( весы слева)...

Последний раз редактировалось MaxNik2009; 13.04.2010 в 14:08.
MaxNik2009 вне форума Ответить с цитированием
Старый 16.01.2018, 12:55   #7
FreshLik
Новичок
Джуниор
 
Регистрация: 27.07.2016
Сообщений: 1
По умолчанию

Цитата:
Сообщение от Karyuudo Посмотреть сообщение
спасибо, только я не пойму как использовать этот таймер?
Он просто показывает цвет точки, где находится мышка.. Но мне то нужно сделать такое:


1. Один раз устанавливается точка на экране и записывается в эдиты её цвет и координаты (кнопку для этого уже написал выше)
2. Навести мышку на координаты из пункта 1 и узнать цвет точки в этих координатах
3. Сделать сравнение, если цвет из пункта 1 совпадает с пунктом 2, то что-то сделать.. (прервать цикл, break)

2 и 3й пункт выполняется я так понял например таким кодом:
Код:
pt.X:=strtoint(edit1.text);
pt.Y:=strtoint(edit2.text);
ColorPix:= GetPixel(GetDC(0), pt.X, pt.Y);
if edit3.text=inttostr(ColorPix) then break
Еще заметил такую странность..
сначало не совпадает.. но если нажать Enter и запустить еще раз, тогда координаты совпадают. Пробовал сделать цикл для второй компнки тип 2 раза повторить, но не помогает..
Подскажи пожалуйста, как исправил эту шляпу)
FreshLik вне форума Ответить с цитированием
Старый 16.01.2018, 14:11   #8
sohibnut
Пользователь
 
Аватар для sohibnut
 
Регистрация: 15.01.2018
Сообщений: 32
По умолчанию

какая шляпа?
sohibnut вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно ускорить GetPixel snow_max Общие вопросы C/C++ 3 06.02.2010 18:18
Pixels[][] или GetPixel(hdc,x,y) Nick0 C++ Builder 5 12.12.2009 16:09
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос про IP ЧИЖ Работа с сетью в Delphi 1 23.06.2008 13:53
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24