Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Oxico127
0 / 0 / 0
Регистрация: 01.04.2018
Сообщений: 11
1

Перетаскивание на Image

01.05.2018, 15:28. Просмотров 792. Ответов 2
Метки нет (Все метки)

Ситуация: на Image нарисован прямоугольник(с помощью Rectangle, если это важно).
Задача: передвинуть его с помощью мышки.
Если не затруднит, пришлите, пожалуйста, код.
Заранее благодарю!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2018, 15:28
Ответы с готовыми решениями:

Как вставить Jpeg в Image? И какие форматы можно вставить в Image?
Подскажите как вставить Jpeg в Image? И какие форматы можно вставить в Image? ...

Как обрезать Image (bitmap) в другой Image (bitmap)
Не получается никак пробовал с помощью Canvas->CopyRect. Вот метод где первый...

Перетаскивание
В гугл не посылать я там уже бил) Как сделать так чтоб при перетаскивании...

Наложение Image на Image
Ребят. Такая проблема. У меня рандомным образом задаются координаты для 5...

Универсальное перетаскивание
В общем есть такое перетаскивание.как можно его сделать универсальным? ну т.е....

2
TrollHammer
289 / 201 / 88
Регистрация: 22.02.2018
Сообщений: 605
Записей в блоге: 2
03.05.2018, 09:55 2
Лучший ответ Сообщение было отмечено Oxico127 как решение

Решение

1. Храним координаты прямоугольника в массиве.
2. В событии OnMouseMove определяем, что зажата левая кнопка.
3. Засекаем начальное положение курсора, отслеживаем смещение, прибавляем к координатам прямоугольника и и переримовываем

Добавлено через 15 часов 15 минут
Грубо набросал первое, что пришло в голову

Добавлено через 7 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TPoint rc[2];
int oX, oY;
int nX, nY;
bool flag;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
     rc[0]=TPoint(10,10);
     rc[1]=TPoint(50,50);
 
       Image1->Canvas->Rectangle(rc[0].x, rc[0].y, rc[1].x, rc[1].y);
       flag=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
    if(flag){
     rc[0].x=(X-oX);
     rc[1].x=(X-oX)+50;
     rc[0].y=(Y-oY);
     rc[1].y=(Y-oY)+50;
 
       Label1->Caption=AnsiString(rc[0].x)+"   "+AnsiString(rc[0].y);
       Label2->Caption=AnsiString(rc[1].x)+"   "+AnsiString(rc[1].y);
 
      Image1->Canvas->Rectangle(rc[0].x, rc[0].y, rc[1].x, rc[1].y);
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
     if(Button == mbLeft)
     {
         oX=nX=X;
         oY=nY=Y;
         flag=true;
     }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
     flag=false;
}
//---------------------------------------------------------------------------
Добавлено через 32 минуты
И для красоты в OnMouseMove сделать проверку, что курсор в прямоугольник попал
C++
1
2
  
   if(flag && abs(rc[0].x-X)<50 && abs(rc[0].y-Y)<50)
Добавлено через 5 часов 53 минуты
Так еще интереснее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TPoint rc[2];
int oX, oY;
int nX, nY;
bool flag;
 
void fClearCanvas(TCanvas *cv, int H, int W)
{
    TColor oldPen=cv->Pen->Color;
    TColor oldBr=cv->Brush->Color;
 
    cv->Pen->Color=clWhite;
    cv->Brush->Color=clWhite;
    cv->Brush->Style=bsSolid;
 
    cv->Rectangle(0,0,W,H);
 
    cv->Pen->Color=oldPen;
    cv->Brush->Color=oldBr;
   //   cv->Brush->Style=bsClear;
}
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
     rc[0]=TPoint(10,10);
     rc[1]=TPoint(50,50);
 
       Image1->Canvas->Rectangle(rc[0].x, rc[0].y, rc[1].x, rc[1].y);
       flag=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X,
          int Y)
{
    if(flag && abs(rc[0].x-X)<50 && abs(rc[0].y-Y)<50){
     rc[0].x=X-25;
     rc[1].x=X+25;
     rc[0].y=Y-25;
     rc[1].y=Y+25;
 
      fClearCanvas(Image1->Canvas, Image1->Height, Image1->Width);
      Image1->Canvas->Rectangle(rc[0].x, rc[0].y, rc[1].x, rc[1].y);
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
     if(Button == mbLeft)
         flag=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
     flag=false;
}
//---------------------------------------------------------------------------
А можно вообще на рабочем столе рисовку сделать
1
Oxico127
0 / 0 / 0
Регистрация: 01.04.2018
Сообщений: 11
20.05.2018, 21:17  [ТС] 3
Для начала, огромное Вам спасибо, выручили!
Разрешите Вас еще раз побеспокоить
У Вас квадрат заранее нарисован в одном определенном месте. Как осуществить следующее:
Положение прямоугольника задается с помощью мыши, более того, его размер задается пользователем.
Rectangle (X, Y, X+45*r, Y+20*r)
r - коэффициент размера, так сказать

Добавлено через 2 часа 33 минуты
Все, с задачей справился сам, спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2018, 21:17

перетаскивание обьектов
Ребят как можно сделать перетаскивание image в пределах формы???

Перетаскивание формы
Всем доброго времени суток. Я кинул на форму компонент TImege на его...

Перетаскивание файлов на формочку
В общем необходимо что б когда файл перетаскиваешь на форму, то оно записывало...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru