Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/50: Рейтинг темы: голосов - 50, средняя оценка - 4.52
2 / 2 / 0
Регистрация: 25.05.2009
Сообщений: 59

Drag and drop!

07.05.2011, 22:56. Показов 9951. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Парни может у кого есть пример или что кодик какой как реализовать drag and drop с заменой. Т.е. допустим я перетаскиваю объект одного типа на другой и он должен меняться позициями с ним. Как такое сделать??
И кстати для динамических объектов drag and drop ни чем ни отличается или все же надо менять что-то?
Пожалуйсто помогите!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2011, 22:56
Ответы с готовыми решениями:

Drag&Drop
Как перенести из TreeView1 текст в Edit1 !?!?!?

Drag&Drop
Здравствуйте:) Уже месяц работаю над текстовым редактором. Встал вопрос: например на рабочем столе файл. Как реализовать...

Drag Drop файлов
Делаю вот так: : class TForm1 : public TForm { private: void __fastcall WMDropFiles(TWMDropFiles message); public: ...

4
11 / 11 / 0
Регистрация: 01.05.2011
Сообщений: 32
07.05.2011, 23:23
Цитата Сообщение от CARTMEN Посмотреть сообщение
Парни может у кого есть пример или что кодик какой как реализовать drag and drop с заменой. Т.е. допустим я перетаскиваю объект одного типа на другой и он должен меняться позициями с ним. Как такое сделать??
И кстати для динамических объектов drag and drop ни чем ни отличается или все же надо менять что-то?
Пожалуйсто помогите!
Может поможет, когда-то делал для себя…
Lab_5.rar
1
2 / 2 / 0
Регистрация: 25.05.2009
Сообщений: 59
07.05.2011, 23:32  [ТС]
Спасибо может пригодится, но меня инетересует другое кое-что!
0
11 / 11 / 0
Регистрация: 01.05.2011
Сообщений: 32
07.05.2011, 23:59
В А.Я.Архангельский "Программирование в C++ Builder 6", Москва - 2003 г. по этой теме очень хорошо написано.
1
2 / 2 / 0
Регистрация: 25.05.2009
Сообщений: 59
08.05.2011, 03:14  [ТС]
Уже читаю сижу))

Добавлено через 2 часа 18 минут
Во почти сделал! Кому надо то вот:
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
void __fastcall TForm1::FormShow(TObject *Sender)
{
 for(int i=0;i<ko;i++) {
   Panel[i]= new TPanel(Form1);
   Panel[i]->Parent=Form1;
   Panel[i]->Name="Panel"+IntToStr(i);
   Panel[i]->Caption=IntToStr(i);
   Panel[i]->Height=30;
   Panel[i]->Width=350;
   Panel[i]->Left=8;
   Panel[i]->Top=i*Form1->Height/ko;
 
   Panel[i]->OnMouseDown=PanelMouseDown;
   Panel[i]->OnMouseUp=PanelMouseUp;
   Panel[i]->OnMouseMove=PanelMouseMove;
 
   PanelTop[i]=Panel[i]->Top;
 }
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::PanelMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 TPanel *PNL = dynamic_cast<TPanel*>(Sender);
 if (move) {
  PNL->SetBounds(PNL->Left,
                       PNL->Top + Y - YO, PNL->Width,PNL->Height) ;
 }
}
 
 
//---------------------------------------------------------------------------
void __fastcall TForm1::PanelMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 TPanel *PNL = dynamic_cast<TPanel*>(Sender);
 if (Button == mbLeft) {
   XO = X;
   YO = Y;
   move = true;
   PNL->BringToFront();
 }
}
Когда переставляешь верхний объект вместо нижнего то все норм, а когда нижний вместо верхнего то бьет ошибку! Не могу въехать в чем дело!
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
//---------------------------------------------------------------------------
void __fastcall TForm1::PanelMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 move=0;
 int Sidx;
 TPanel *PNL = dynamic_cast<TPanel*>(Sender);
 for (int i=0;i<ko;i++){
   if (i==PNL->Caption.ToInt()) {
     Sidx=i;
   }
   else if (((PNL->Top>=Panel[i]->Top) &&(PNL->Top<=Panel[i]->Top+Panel[i]->Height))
   ||((PNL->Top<=Panel[i]->Top)   && (PNL->Top+PNL->Height>=Panel[i]->Top)) ) {
 
       PChC=PanelTop[i];
       PChS=PanelTop[Sidx];// в этой строке ошибка!
       PanelTop[Sidx]=PChC;
       PanelTop[i]=PChS;
 
       PNL->Top=PanelTop[Sidx];
       PNL->Caption=AnsiString(i);
       Panel[i]->Top=PanelTop[i];//smena mest
       Panel[i]->Caption=AnsiString(Sidx);
   }
 }
}
Добавлено через 56 минут
Короче мучался я, сгонял в толчок и придумал как сделать)) И сделал)) и работает)) если кому-то надо то вот код:
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TPanel *Panel[20];
int PanelTop[20],PChC,PChS;
int XO, YO, SY;
bool move = false;
int ko=5;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormShow(TObject *Sender)
{
 for(int i=0;i<ko;i++) {
   Panel[i]= new TPanel(Form1);
   Panel[i]->Parent=Form1;
   Panel[i]->Name="Panel"+IntToStr(i);
   Panel[i]->Caption=IntToStr(i);
   Panel[i]->Height=30;
   Panel[i]->Width=350;
   Panel[i]->Left=8;
   Panel[i]->Top=i*Form1->Height/ko;
 
   Panel[i]->OnMouseDown=PanelMouseDown;
   Panel[i]->OnMouseUp=PanelMouseUp;
   Panel[i]->OnMouseMove=PanelMouseMove;
 
   PanelTop[i]=Panel[i]->Top;
 }
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::PanelMouseMove(TObject *Sender,
      TShiftState Shift, int X, int Y)
{
 TPanel *PNL = dynamic_cast<TPanel*>(Sender);
 if (move) {
  PNL->SetBounds(PNL->Left,
                       PNL->Top + Y - YO, PNL->Width,PNL->Height) ;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PanelMouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 /*move=0;
 int Sidx;
 TPanel *PNL = dynamic_cast<TPanel*>(Sender);
 for (int i=0;i<ko;i++){
   if (i==PNL->Caption.ToInt()) {
     Sidx=i;
   }
   else if (PNL!=Panel[i])
   if (((PNL->Top>=Panel[i]->Top) &&(PNL->Top<=Panel[i]->Top+Panel[i]->Height))
   ||((PNL->Top<=Panel[i]->Top)   && (PNL->Top+PNL->Height>=Panel[i]->Top)) ) {
 
       PChC=PanelTop[i];
       PChS=PanelTop[Sidx];
       PanelTop[Sidx]=PChC;
       PanelTop[i]=PChS;
 
       PNL->Top=PanelTop[Sidx];
       PNL->Caption=IntToStr(i);
       Panel[i]->Top=PanelTop[i];//smena mest
       Panel[i]->Caption=IntToStr(Sidx);
   }
 } */
 
 move=0;
 bool chgd=false;
 int Sidx;
 TPanel *PNL = dynamic_cast<TPanel*>(Sender);
 for (int i=0;i<ko;i++){
   if (i==PNL->Caption.ToInt())
     i++;
   if (((PNL->Top>=Panel[i]->Top) &&(PNL->Top<=Panel[i]->Top+Panel[i]->Height))
   ||((PNL->Top<=Panel[i]->Top)   && (PNL->Top+PNL->Height>=Panel[i]->Top)) ) {
 
       PChS=PanelTop[PNL->Caption.ToInt()];
       PChC=PanelTop[Panel[i]->Caption.ToInt()];
       PanelTop[PNL->Caption.ToInt()]=PChC;
       PanelTop[Panel[i]->Caption.ToInt()]=PChS;
 
       PNL->Top=PanelTop[PNL->Caption.ToInt()];
       Panel[i]->Top=PanelTop[Panel[i]->Caption.ToInt()];
       
       chgd=1;
       break;
     }
 }
 if (!chgd) PNL->Top=PanelTop[PNL->Caption.ToInt()];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PanelMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
 TPanel *PNL = dynamic_cast<TPanel*>(Sender);
 if (Button == mbLeft) {
   XO = X;
   YO = Y;
   move = true;
   PNL->BringToFront();
   SY=PNL->Top;
 }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.05.2011, 03:14
Помогаю со студенческими работами здесь

Drag-and-Drop по сетке
Подскажите, как перемещать компоненты по форме с привязкой к сетке?

Drag Drop Dock
есть ли толковая литература или интересные статьи по этому методу мне нужно просто реализовать перетаскивание картинки по форме только...

не работает Drag and Drop
Мне для программы нужно использовать Drag and Drop я нашёл https://www.cyberforum.ru/cpp-builder/thread81001.html, и сделал всё так как...

Drag and Drop на панель с компонентами
Есть ListBox содержащий список названий объектов. Также есть Panel на которой находится много компонентов. Эта Panel показывает более...

ListBox с мультивыбором, Drag and Drop
Написал код для перетаскивания строк из одного Listbox в другой...не пойму почему выбивает ошибку в этой строчке for ( int i=0;...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru