|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не могу сообразить. Скриншот выделяемой области
Добрый день, форумчани. Есть скриншотер, написанный на основе урока из интернета.
Хочу дополнить возможности. В исходнике можно было делать скриншот, путём выделения слева направо(вниз) Поэкспериментировал, получилось еще и Справа налево(вверх) Но никак понять не могу, как можно реализовать выделение справа налево(вниз) и слева направо(вверх) FormMouseDown Код:
// флаг нажатия мыши isDown := true; // запоминаем текущие координаты downX := X; downY := Y; FormMouseUP Код:
var r: Trect; isDown := false; // Сбрасываем флаг // сохраняем координаты области if downX < X then // Слева направо(вниз) begin r.Left := downX; r.Top := downY; r.Right := X; r.Bottom := Y; end else begin // Справа налево(вверх) r.Left:=X; r.Top:=Y; r.Right:=downX; r.Bottom:=downY; end; Далее уже делается скриншот, по координатам Rect Мозг кипит. Как только не пробовал менять значения, проверять так же координаты Y Каждый раз получаю ошибку Запутался безвозвратно)))))))) помогите, будьте так добры)) |
#2
|
|||
|
|||
Зачем тебе знать кто и как выделял? у тебя есть две пары координат:
нажима и отжима. по ним и строй квадрат. те что ближе к 0.0 - верх-лево, вторые - низ-право Последний раз редактировалось nixon232, 10.06.2018 в 12:42. |
Этот пользователь сказал Спасибо nixon232 за это полезное сообщение: | ||
Tech N9ne (10.06.2018)
|
#3
|
|||
|
|||
Цитата:
Попытался, повозился, отложил... сейчас вернулся к этому проекту, и мозг уже сломан. по этому прошу как ребёнку, объяснить, как вычислить координаты прямоугольника, если downX и downY это точки начала, а X, Y точки конца. Повторю, имею вот такой код: Код:
Procedure MouseDown begin // устанавливаем флаг нажатия мыши в true isDown := true; // и запоминаем текущие координаты downX := X; downY := Y; end; Код:
Procedure MouseMove // если нажата клавиша мыши, то мы рисуем рамку выделения if isDown then begin Self.Canvas.Rectangle(downX, downY, X, Y); end; Код:
Procedure MouseUP // сбрасываем флаг isDown := false; // сохраняем координаты области if downX < X then // Слева направо(вниз) begin r.Left := downX; r.Top := downY; r.Right := X; r.Bottom := Y; end; if downX > X then begin // Справа налево(вверх) r.Left:=X; r.Top:=Y; r.Right:=downX; r.Bottom:=downY; end; какие координаты вписывать в rect, если выделение было слева на право (вверх), и справо налево (вниз) ??? nixon232, я так и не понял, будь добр, объясни Реально ребята, я много часов сидел над решением этой проблемы, но только запутал себя еще больше. |
#4
|
|||
|
|||
Так сойдет?
Код:
function GetRectByCoord(x1,y1,x2,y2 : Integer) : TRect; begin Result.Left := Min(x1,x2); Result.Right := Max(x1,x2); Result.Top := Min(y1,y2); Result.Bottom := Max(y1,y2); end; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Tech N9ne (29.10.2018)
|
#5
|
|||
|
|||
Цитата:
Undeclared identifier: 'Min' Undeclared identifier: 'Max' |
#6
|
|||
|
|||
Цитата:
Спасибо тебе большое, серьезно)) огромное просто! |
#7
|
|||
|
|||
Да неазчто...
Вроде то и так все понятно... |