Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2015, 14:59   #1
sherlocked
Новичок
Джуниор
 
Регистрация: 16.01.2015
Сообщений: 2
Вопрос Рисую линии поверх картинки при перемещении картинки линии исчезают(

Подскажите пожалуйста как сделать так чтобы при перемещении картинки линии которые я нарисовал поверх неё закрепились на картинке..ну чтоб картинка вместе с нарисованными линиями перемещалась...
Есть ли вообще такая тема чтоб закрепить линии прямо на картинке или делать так чтоб при перемещении картинки надо отслеживать координаты и отрисовывать линии по ходу перемещения...
так я сделал перемещение картинки(x0 и y0 это координаты курсора во время MouseDown а r и t координаты левого верхнего угла картинки(изначально равны нулям после первого перемещения присваиваю r и t текущие координаты угла картинки, присваивание делаю в обработчике события MouseUp)
Код:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
if ssleft in shift then
begin
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
Image1.Canvas.Draw(r+(x-x0),t+(y-y0),bmp);
end;

Последний раз редактировалось Stilet; 16.01.2015 в 16:38.
sherlocked вне форума Ответить с цитированием
Старый 16.01.2015, 15:50   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

тебе надо на картинку наложить компонент PaintBox, В этом компоненте рисовать свои линии. но сам компонент своими размерами должен быть как и картинка
Код:
PaintBox1.Width:=Image1.Width;
PaintBox1.Height:=Image1.Height;
и ещё он должен перемещаться вслед за картинкой.
Код:
PaintBox1.Top:=Image1.Top;
PaintBox1.Left:=Image1.Left;
причём тебе эту проверку надо сделать в обработчике, когда изменяется положение картинки Image1 на форме. то есть, даже если чуть сдвинул, хоть на пиксель, тут же сдвигать PaintBox и перерисовывать линии.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 16.01.2015, 16:18   #3
sherlocked
Новичок
Джуниор
 
Регистрация: 16.01.2015
Сообщений: 2
По умолчанию

Я создал PaintBox сделал размеры как у Image(я присваиваю размеры в обработчике в которой я картинку загружаю) и этот компонент перемещается вслед за имэджем..только теперь линии вообще не рисуются и перемещение пропало....
вот какие изменения сделал:
Код:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
if ssleft in shift then
begin
Image1.Canvas.Rectangle(0,0,Image1.Width,Image1.Height);
Image1.Canvas.Draw(r+(x-x0),t+(y-y0),bmp);
PaintBox1.Top:=Image1.Top;
PaintBox1.Left:=Image1.Left;
end;
Вот так я рисую(просто Image1 на PaintBox1 поменял и всё))
Код:
PaintBox1.Canvas.Pen.Width:=3;
        PaintBox1.Canvas.Pen.Color:=clred;
        PaintBox1.Canvas.MoveTo(NKX,NKY);
        PaintBox1.Canvas.LineTo(x,y);
может надо как то совместить имэдж с пэинтбоксом или я не знаю как(

Последний раз редактировалось Stilet; 16.01.2015 в 16:39.
sherlocked вне форума Ответить с цитированием
Старый 16.01.2015, 18:32   #4
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

вот, для примера накидал тебе проект. в Image загружаешь рисунок 123. и компилируешь - на рисунке он тебе отрисует линию чёрную. по нажатию кнопки рисунок переместиться и линия тоже. добавил процедуру перерисовки procedure TForm1.PaintBox1Paint(Sender: TObject);
разберёшься - там не более 30 строк кода
Вложения
Тип файла: rar перерисовка.rar (178.2 Кб, 24 просмотров)
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 16.01.2015, 19:37   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Так устроит? Без дополнительных компонентов типа PaintBox и всяких прочих...
Код:
var
  Form1: TForm1;
  x0,y0: integer;
  move: boolean;

implementation

{$R *.dfm}

...
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered:=True;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if Button<>mbLeft then   
move:=False else   
begin   
move:=True;
x0:=x;
y0:=y;
end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
move:=False;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if move then
Image1.SetBounds(Image1.Left+x-x0, Image1.Top+y-y0, Image1.width, Image1.height);
end;

//Тут в качестве примера просто рисуем линию на Image1
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.Pen.Width:=3;
Image1.Canvas.Pen.Color:=clred;
Image1.Canvas.MoveTo(20,20);
Image1.Canvas.LineTo(120,120);
end;

Последний раз редактировалось kropotkina-alice; 16.01.2015 в 19:40.
kropotkina-alice вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фон поверх картинки bamvam HTML и CSS 1 07.01.2014 00:01
Delphi 7,как сделать так чтоб при перемещении определенной картинки на другую открывалась форма(подробнее в описании) daniil4326 Компоненты Delphi 3 22.12.2012 14:32
Сделать из линии, толщиной в несколько пикселей, линии, толщиной 1 пиксель. ImmortalAlexSan Общие вопросы Delphi 12 25.10.2012 19:05
Рисование линии поверх формы и лейблов Abbath1349 Общие вопросы .NET 0 30.03.2011 07:04
текст поверх картинки Viteef HTML и CSS 3 29.06.2007 16:58