Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.07.2009, 00:33
Аватар для xaknik
xaknik xaknik вне форума
Прохожий
 
Регистрация: 28.06.2009
Сообщения: 7
Репутация: 10
Вопрос Разпознования цвета в точке

Как сделать прогу чтобы она могла распознавать в, какой точке, какой цвет, И возможно ли это сделать вопще?? Уже всё облазил ни где не могу найти... .
Ответить с цитированием
  #2  
Старый 02.07.2009, 02:15
Аватар для xaknik
xaknik xaknik вне форума
Прохожий
 
Регистрация: 28.06.2009
Сообщения: 7
Репутация: 10
По умолчанию

Ауууу!!!!!!!! Что на форуме ваще ни кого нет??
__________________
Всем привет xDDD
Ответить с цитированием
  #3  
Старый 02.07.2009, 05:57
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

В какой точке-то? В Антарктиде цвет в основном белый например...
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #4  
Старый 02.07.2009, 08:55
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Одно время было интересно — написала программку определения цвета пиксела в точке расположения указателя мыши. На Win32 API.
Код:
program ScanClr;

uses
  Windows,
  Messages,
  SysUtils;

{$R *.res}

const
  WNDCLASSNAME = 'ScanClr';

var
  Inst: Cardinal;
  TimerId: Cardinal;
  WndClass: TWndClass;
  HndlW, HndlE: HWnd;
  Msg: TMsg;
  ScreenDC: HDC;

  procedure Bye;
  begin
    ReleaseDC(0, ScreenDC);
    KillTimer(HndlW, TimerId);
    Halt;
  end;

  function WindowProc(HandleWnd, Messg, wPrm, lPrm: Longint): Longint; stdcall;
  var
    pt: TPoint;
    clr, hex: Cardinal;
    EditData: THandle;
    EditTxt: PChar;
  begin
    Result := DefWindowProc(HandleWnd, Messg, wPrm, lPrm);
    case Messg of
      WM_TIMER:
        begin
          { При срабатывании таймера получаем цвет пикселя под курсором и
            вписываем его шестнадцатеричное значение в поле 'Edit' }
          GetCursorPos(pt);
          clr := GetPixel(ScreenDC, pt.X, pt.Y);
          hex := GetBValue(clr) or (GetGValue(clr) shl 8) or (GetRValue(clr) shl 16);
          SetWindowText(HndlE, PChar(IntToHex(hex, 6)));
        end;

      WM_KEYUP:
        begin
          if wPrm <> VK_SPACE then Exit;
          { Если событие вызвано клавишей 'Пробел', то копируем из поля 'Edit'
            в буфер строку, содержащую шестнадцатеричное значение цвета }
          EditData := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, 8);
          EditTxt := GlobalLock(EditData);
          GetWindowText(HndlE, EditTxt, 7);
          GlobalUnlock(EditData);
          OpenClipboard(0);
          EmptyClipboard();                   
          SetClipboardData(CF_TEXT, EditData);
          CloseClipboard();
          GlobalFree(EditData);
        end;

      WM_DESTROY: Bye();
    end;
  end;

begin
  Inst := GetModuleHandle(nil);

  WndClass.style := CS_HREDRAW or CS_VREDRAW;
  WndClass.lpfnWndProc := @WindowProc;
  WndClass.hInstance := Inst;
  WndClass.hbrBackground := COLOR_WINDOW;
  WndClass.lpszClassName := @WNDCLASSNAME[1];
  WndClass.hCursor := LoadCursor(0, IDC_ARROW);
  RegisterClass(WndClass);

  HndlW := CreateWindowEx(WS_EX_TOPMOST, @WNDCLASSNAME[1], @WNDCLASSNAME[1],
                          WS_POPUPWINDOW or WS_CAPTION, 1, 1, 200, 200, 0, 0,
                          Inst, nil); // окно будет всегда сверху (WS_EX_TOPMOST)

  HndlE := CreateWindow(PChar('EDIT'), PChar('FFFFFF'),
                        WS_VISIBLE or WS_CHILD or  ES_READONLY or ES_CENTER,
                        10, 5, 100, 21, HndlW, 0, Inst, nil);

  ShowWindow(HndlW, SW_SHOWNORMAL);
  UpdateWindow(HndlW);

  ScreenDC := GetDC(0); // контекст экрана
  TimerId := SetTimer(HndlW, 1, 100, nil);

  while (GetMessage(Msg, 0, 0, 0)) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg);
  end;

  ReleaseDC(0, ScreenDC);
  KillTimer(HndlW, TimerId);
  Halt;

end.

Последний раз редактировалось Nyctos Kasignete, 02.07.2009 в 08:57.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter