Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 13.04.2010, 00:39   #1
Karyuudo
Форумчанин
 
Регистрация: 17.02.2008
Сообщений: 53
Репутация: 10
По умолчанию Вопрос про 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
Репутация: 138
По умолчанию

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

Код:

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
Репутация: 10
По умолчанию

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

сначала кнопка установления координат и нахождения цвета в этих точках и записывания в эдиты:
Код:

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
Репутация: 138
По умолчанию

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

Цитата:
Сообщение от 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
Репутация: 138
По умолчанию

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

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

Цитата:
Сообщение от 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, 15:11   #8
sohibnut
 
Аватар для sohibnut
 
Регистрация: 15.01.2018
Адрес: bukhara
Сообщений: 9
Репутация: 10
По умолчанию

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



Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно ускорить GetPixel snow_max Общие вопросы C/C++ 3 06.02.2010 19:18
Pixels[][] или GetPixel(hdc,x,y) Nick0 C++ Builder 5 12.12.2009 17: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




11:44.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
лучший хостинг
Выбираем лучший хостинг: рейтинг ТОП 10
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru