|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Распознавание цвета пикселя на картинке и перемещение объекта по форме
Есть две процедуры - это распознавание цвета пикселя на картинке и перемещение объекта по форме. Как прописать что бы распознавание цвета начиналось только после начала перемещения объекта и координаты XY брались с него же? То есть, я выделяю объект начинаю его перемещать и пока зажата левая кнопка мыши, цвет пикселя распознается.
Вот код: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Label1: TLabel; Shape1: TShape; procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; col: TColor; Flag: boolean; X0,Y0: integer; implementation {$R *.dfm} //---------------------------------------------------------------------- procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin col := Image1.Picture.Bitmap.Canvas.Pixels[x,y]; label1.Caption:= IntToStr(col); Shape1.Brush.Color:= col; end; //---------------------------------------------------------------------- //---------------------------------------------------------------------- procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Flag := Button = mbLeft; if Flag then begin x0 := x; y0 := y end; end; procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Flag then with TControl(Sender) do begin Left := Left + x - x0; Top := Top + y - y0; end; end; procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Flag := false end; //------------------------------------------------------------------------ end. lmikle: пользуемся тегами. Последний раз редактировалось lmikle, 20.09.2017 в 17:44. |
#2
|
||||
|
||||
Да вроде и так всё для поставленной задачи имеется, только нужно содержимое процедуры двига мышки от первого имиджа переместить в блок проверки нажатия ЛКМ в аналогичной процедуре от второго имиджа
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
Пробовал, программа начинает показывать такие цвета, которых нет в данной точке. Поэтому на форуме и написал, может быть что то упускаю...
|
#4
|
|||
|
|||
Да, упустил.
Посмотри координаты, которые ты получаешь. Они - глобальные (если я правильно помню). Т.е. тебе надо их преобразовать в координаты твоего приложения/компонента. Для этого надо в нужных местах вызвать ScreenToClient() |
#5
|
||||
|
||||
Цитата:
Код:
procedure Image2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var s: TImage absolute Sender; begin if Flag then s.SetBounds(s.Left+X-x0, s.Top+Y-y0, s.Width, s.Height); end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |