Цвет точки под кусором мышки

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Ответить
lillgrinn
новенький
Сообщения: 17
Зарегистрирован: 12.10.2007 11:14:28

Цвет точки под кусором мышки

Сообщение lillgrinn »

На форме имется TImage. В него загружен рисунок. На рисунке имеется область закрашенная одним цветом.
Делаем клик мышкой на этой области или проводим мышкой по этой области.
Как получить цвет под указателем мышки?

P.S.: Все это под Linux-ом.
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Код: Выделить всё

var
  MyColor: TColor;
  ...
  ...
procedure TMyForm.MyImageMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  MyColor := MyImage.Canvas.Pixels[X, Y];
end;
:wink:
lillgrinn
новенький
Сообщения: 17
Зарегистрирован: 12.10.2007 11:14:28

Сообщение lillgrinn »

Хорошо. Спасибо.
А в OnClick никак не получится? Мне важно чтобы был именно клик (нажал-отпустил) в пределах заданной области.
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

А что мешает в OnMouseDown запомнить координаты курсора, а в OnClick использовать?
lillgrinn
новенький
Сообщения: 17
Зарегистрирован: 12.10.2007 11:14:28

Сообщение lillgrinn »

iskander писал(а):А что мешает в OnMouseDown запомнить координаты курсора, а в OnClick использовать?

Ну, не хотелось бы лишний раз глобальные переменные вводить. Или можно как-то иначе?
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

может Вас устроит тупо обрабатывать OnMouseUp? Со стороны будет очень похоже на клик.
По вопросу - не обязательно сохранять положение в глобальной переменной - вполне можете завести для этого приватное поле формы. Все-равно работа с гуем работает в один поток, так что о синхронизации доступа можно не беспокоиться.
Ну и можете использовать объект Mouse, чтобы получать координаты курсора в OnClick, но с ними придётся провести некоторые действия, чтобы определить положение

Код: Выделить всё

Procedure TForm1.FormClick(Sender: TObject);
Begin
  Caption := Format('Global(%d, %d); Form(%d, %d);',
    [Mouse.CursorPos.X, Mouse.CursorPos.Y,
    Mouse.CursorPos.X - Left, Mouse.CursorPos.Y - Top]);
end;               
lillgrinn
новенький
Сообщения: 17
Зарегистрирован: 12.10.2007 11:14:28

Сообщение lillgrinn »

Спасибо всем!
Ответить