|
Вопрос # 4 870/ вопрос решён / |
|
Доброго времени суток, уважаемые эксперты!
помогите найти способ для решения такой задачи:
на канве строится какое либо изображение график функции или что какя либо картинка, но при этом некоторые части например графика не выходят за пределы канвы и их не видно. Как сделать чтобы при нажатии мыши на канве можно было двигать изображение чтобы не видимые части изображения попадали в обзор. Такое я часто встречал во многих Flash играх.
 |
Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 29 декабря 2010, 18:27
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 36; последнее сообщение — 2 января 2011, 17:25; участников в обсуждении: 5.
Страницы: [« Предыдущая] [1] [2]
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 21:04 [#21]:
так непонятно как зацепить изменение x и y..
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 21:11 [#22]:
var
MyMouse: TMouse;
XM, YM : Integer;
begin
XM := MyMouse.CursorPos.x; //Координаты мыши по X
YM := MyMouse.CursorPos.y; // по Y соответственно
end;
Как я говорил возьмите эталонную точку (0,0) это верхний левый угол формы(окна) и координаты получить затем введите переменную целого типа и заносите в нее координаты мыши и сравнивайте посредством if XM <> и все ОК.
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 21:14 [#23]:
а это в какой процедуре прописать?
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 21:16 [#24]:
в MouseMove в блоке:
if b = true then
begin
Здесь описываем эти процедуры
end;
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 21:19 [#25]:
Блин да она же у вас просто график функции строит!!!!)))) Можно использовать компонент TChart же!!!! Да и не мучится с Canvas
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 21:21 [#26]:
а что если взять за "эталон" координаты в которых нажата мышь взять новые координаты после перемещения найти разницу в координатах и сместить програмно изображение на канве?
|
|
7Ghost (статус: 1-ый класс), 29 декабря 2010, 21:23 [#27]:
Можно и так... Но лучше компонента TChart чтобы построить график не найти да и не создать
|
|
ierihon1 (статус: 1-ый класс), 29 декабря 2010, 21:25 [#28]:
ну там есть недостатки.. слишком массивный... и у него туго с графиками обратных тригонометрических функций...
|
|
КМ (статус: Посетитель), 30 декабря 2010, 05:10 [#30]:
Было дело, я реализовывал такую функцию в проге по рпботе с картой. Только там изображение поещалось в TImage, который в свою очередь был в помещен в TScrollBox.
Вот код процедур мыши:
procedure TMapForm.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
ScrollX:= X; // глобальная переменная
ScrollY:= Y; // глобальная переменная
end;
end;
procedure TMapForm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (ssLeft in Shift) then
begin
ScrollBox1.HorzScrollBar.Position:= ScrollBox1.HorzScrollBar.Position + (ScrollX - X);
ScrollBox1.VertScrollBar.Position:= ScrollBox1.VertScrollBar.Position + (ScrollY - Y);
end;
end;
можно что то подобное реализовать и на TPaintBox
|
|
ierihon1 (статус: 1-ый класс), 30 декабря 2010, 07:51 [#31]:
у меня как ни странно изображение тоже в TImage строится
|
|
КМ (статус: Посетитель), 30 декабря 2010, 11:37 [#32]:
Ну тогда вообще никаких проблем не должно быть, копируешь функции, добавляешь 2 глобальные переменные и двигаешь на здоровье
|
|
ierihon1 (статус: 1-ый класс), 30 декабря 2010, 17:36 [#33]:
но такой метод я уже реализововал... он мне показался слишком неудобным...
|
|
Вадим К (статус: Академик), 30 декабря 2010, 18:04 [#34]:
делается так:
- в памяти строиться все изображение. при перетасовывании копируется нужный кусок.
либо
- после перетаскивания определяются новые координаты области просмотра и график рисуется по новому.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
ierihon1 (статус: 1-ый класс), 1 января 2011, 06:04 [#35]:
легко сказать, а как сделать?
|
|
min@y™ (статус: Доктор наук), 2 января 2011, 17:25 [#36]:
Цитата (Вадим К):
делается так: - в памяти строиться все изображение. при перетасовывании копируется нужный кусок. либо - после перетаскивания определяются новые координаты области просмотра и график рисуется по новому.
Полностью поддерживаю.
Цитата (ierihon1):
легко сказать, а как сделать?
Ты прав, сделать трудно, если нет опыта. Но опыт приходит с годами, и для его получения нужно, как ни странно, писать программы (бесконечная рекурсия такая). Здесь тебе не будут говорить всё в деталях, т.к. теория займёт не один мегабайт текста. Для начала ищи инфу по работе с Canvas. Используй TPaintBox, TBitmap, TScrollBox. Помни, что построение изображения должно идти ТОЛЬКО в памяти (TBitmap), а только потом полностью выводиться на экран PaintBox.Canvas.Draw().
Вот примерно так. Подробности зависят только от поставленной задачи.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
8 января 2011, 01:03: Статус вопроса изменён на решённый (изменил автор вопроса — ierihon1)
Страницы: [« Предыдущая] [1] [2]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|