Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 870

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
помогите найти способ для решения такой задачи:
на канве строится какое либо изображение график функции или что какя либо картинка, но при этом некоторые части например графика не выходят за пределы канвы и их не видно. Как сделать чтобы при нажатии мыши на канве можно было двигать изображение чтобы не видимые части изображения попадали в обзор. Такое я часто встречал во многих Flash играх.

ierihon1 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 29 декабря 2010, 18:27
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 36; последнее сообщение — 2 января 2011, 17:25; участников в обсуждении: 5.

Страницы: [« Предыдущая] [1] [2]

ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 21:04 [#21]:

так непонятно как зацепить изменение x и y..
7Ghost

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

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 21:14 [#23]:

а это в какой процедуре прописать?
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 21:16 [#24]:

в MouseMove в блоке:

if b = true then
begin

Здесь описываем эти процедуры

end;
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 21:19 [#25]:

Блин да она же у вас просто график функции строит!!!!)))) Можно использовать компонент TChart же!!!! Да и не мучится с Canvas
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 21:21 [#26]:

а что если взять за "эталон" координаты в которых нажата мышь взять новые координаты после перемещения найти разницу в координатах и сместить програмно изображение на канве?
7Ghost

7Ghost (статус: 1-ый класс), 29 декабря 2010, 21:23 [#27]:

Можно и так... Но лучше компонента TChart чтобы построить график не найти да и не создать
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 21:25 [#28]:

ну там есть недостатки.. слишком массивный... и у него туго с графиками обратных тригонометрических функций...
ierihon1

ierihon1 (статус: 1-ый класс), 29 декабря 2010, 21:29 [#29]:

если есть желание, то можете посмотреь програмку для которой я хочу сделать это перемещение изображения))
http://depositfiles.com/files/iqymgyyuv
КМ

КМ (статус: Посетитель), 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

ierihon1 (статус: 1-ый класс), 30 декабря 2010, 07:51 [#31]:

у меня как ни странно изображение тоже в TImage строится
КМ

КМ (статус: Посетитель), 30 декабря 2010, 11:37 [#32]:

Ну тогда вообще никаких проблем не должно быть, копируешь функции, добавляешь 2 глобальные переменные и двигаешь на здоровье :-)
ierihon1

ierihon1 (статус: 1-ый класс), 30 декабря 2010, 17:36 [#33]:

но такой метод я уже реализововал... он мне показался слишком неудобным...
Вадим К

Вадим К (статус: Академик), 30 декабря 2010, 18:04 [#34]:

делается так:
- в памяти строиться все изображение. при перетасовывании копируется нужный кусок.
либо
- после перетаскивания определяются новые координаты области просмотра и график рисуется по новому.
Галочка "подтверждения прочтения" - вселенское зло.
ierihon1

ierihon1 (статус: 1-ый класс), 1 января 2011, 06:04 [#35]:

легко сказать, а как сделать?
min@y™

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]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 25 апреля 2026, 19:27
Выполнено за 0.03 сек.