Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.03.2012, 15:59
Intripio Intripio вне форума
Прохожий
 
Регистрация: 23.03.2012
Сообщения: 8
Репутация: 10
По умолчанию Delphy 7 Вопрос по картинкам

Доброе время суток! Есть форма, на форме создан Image, а в него вставлена картинка, которая представляет собой график. Как сделать так, чтобы при наведении на сия график по нему бегала красная точка?

P.S. нужно сделать не для всего графика, а скажем для 5 точек на графике.....
Изображения
Тип файла: jpg график.jpg (31.4 Кбайт, 15 просмотров)
Тип файла: jpg чтобы было.jpg (31.5 Кбайт, 15 просмотров)
Ответить с цитированием
  #2  
Старый 27.03.2012, 16:38
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Нужно знать функцию, по которой построен график, тоесть, зависимость X от Y. А дальше дело техники.
Ответить с цитированием
  #3  
Старый 27.03.2012, 17:49
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Да не нужно здесь функции, он ведь Image вставил а не TChart. Если картинка не масштабируется, то просто записываем константный массив нужных точек на графике и по событию MouseMove для Image проверяем текущие координаты мыши и точки из массива. Совпали - рисуем точку, причем желательно в режиме XOR, тогда ее легче будет потом стереть.
Если картинка масштабируется, то уже хуже т.к. придется высчитывать новые координаты с учетом искажений вызванных масштабированием, но тоже реально.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 27.03.2012, 17:51
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

если график обвести цветной линией, то можно вычислить где рисовать эту красную точку
Ответить с цитированием
  #5  
Старый 27.03.2012, 18:11
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Ну вот, судя по ответам, нужно взять карандаш в руку, и дорисовать точку. Я просто предьявил самый оптимальный вариант, но если функция неизвестна - то, конечно, можно и вручную...
Ответить с цитированием
  #6  
Старый 28.03.2012, 11:08
Intripio Intripio вне форума
Прохожий
 
Регистрация: 23.03.2012
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Да не нужно здесь функции, он ведь Image вставил а не TChart. Если картинка не масштабируется, то просто записываем константный массив нужных точек на графике и по событию MouseMove для Image проверяем текущие координаты мыши и точки из массива. Совпали - рисуем точку, причем желательно в режиме XOR, тогда ее легче будет потом стереть.
Если картинка масштабируется, то уже хуже т.к. придется высчитывать новые координаты с учетом искажений вызванных масштабированием, но тоже реально.

Можно какой нибудь банальный пример пары точек с применением XOR...картинка не маштабируется...

Последний раз редактировалось Intripio, 28.03.2012 в 11:12.
Ответить с цитированием
  #7  
Старый 28.03.2012, 12:12
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

PHP код:
const 5;
var 
pointTRect;

procedure draw(canvastcanvaswhatTRect);
begin
  canvas
.Pen.Mode := pmXor;
  
canvas.Brush.Color := clAqua;  // на белом - красный
  
canvas.Rectangle(what);
end;

procedure TForm1.Image1MouseMove(SenderTObjectShiftTShiftStateX,
  
YInteger);
begin
  draw
(Image1.Canvaspoint);
  
point := rect(x-ry-rx+ry+r);
  
draw(Image1.Canvaspoint);
end
Ответить с цитированием
Этот пользователь сказал Спасибо Pyro за это полезное сообщение:
Intripio (28.03.2012)
  #8  
Старый 28.03.2012, 14:47
Intripio Intripio вне форума
Прохожий
 
Регистрация: 23.03.2012
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pyro
PHP код:
const 5;
var 
pointTRect;

procedure draw(canvastcanvaswhatTRect);
begin
  canvas
.Pen.Mode := pmXor;
  
canvas.Brush.Color := clAqua;  // на белом - красный
  
canvas.Rectangle(what);
end;

procedure TForm1.Image1MouseMove(SenderTObjectShiftTShiftStateX,
  
YInteger);
begin
  draw
(Image1.Canvaspoint);
  
point := rect(x-ry-rx+ry+r);
  
draw(Image1.Canvaspoint);
end

Спасибо! Примерно понял как все работает.
Теперь вопрос в другом. Как сделать так, чтобы при нажатии левой кнопкой мыши данная точка оставалась там где произошло нажатие. Чтобы при дальнейшем MouseMove по картинке точка не бегала за мышью.
Ответить с цитированием
  #9  
Старый 28.03.2012, 14:51
Intripio Intripio вне форума
Прохожий
 
Регистрация: 23.03.2012
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Pyro
PHP код:
const 5;
var 
pointTRect;

procedure draw(canvastcanvaswhatTRect);
begin
  canvas
.Pen.Mode := pmXor;
  
canvas.Brush.Color := clAqua;  // на белом - красный
  
canvas.Rectangle(what);
end;

procedure TForm1.Image1MouseMove(SenderTObjectShiftTShiftStateX,
  
YInteger);
begin
  draw
(Image1.Canvaspoint);
  
point := rect(x-ry-rx+ry+r);
  
draw(Image1.Canvaspoint);
end

Спасибо! Примерно понял как все работает.
Правда если в Image вставлена картинка, то ругается на строчку draw(Image1.Canvas, point); (((((((((

А как сделать так, чтобы от этой точки еще спускались прямые на ось X и на ось Y (ну чтобы пользователь мог примерно увидеть где ставит точку). Спасибо!!!!

Последний раз редактировалось Intripio, 28.03.2012 в 14:58.
Ответить с цитированием
  #10  
Старый 28.03.2012, 14:55
Intripio Intripio вне форума
Прохожий
 
Регистрация: 23.03.2012
Сообщения: 8
Репутация: 10
По умолчанию

Чтобы было вот так...
Изображения
Тип файла: jpg пример.jpg (31.8 Кбайт, 8 просмотров)
Ответить с цитированием
  #11  
Старый 28.03.2012, 15:33
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

странно, у меня не выдаёт ошибки
вобще наверно, лучше эту картинку оцифровать в массив, или узнать функцию, а то получается обман пользователя
и основы дельфи тоже не помешали бы
Ответить с цитированием
  #12  
Старый 28.03.2012, 15:36
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Если в Image вставлена картинка, то, кажись, нужно использовать Image1.Picture.Bitmap.Canvas для рисования.
Ответить с цитированием
  #13  
Старый 29.03.2012, 11:12
Intripio Intripio вне форума
Прохожий
 
Регистрация: 23.03.2012
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от YVitaliy
Если в Image вставлена картинка, то, кажись, нужно использовать Image1.Picture.Bitmap.Canvas для рисования.

Можете на каком нибудь примере показать.....спасибо!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:09.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025