![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Да неазчто...
Вроде то и так все понятно... |