Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для iakymych
0 / 0 / 1
Регистрация: 06.10.2009
Сообщений: 12

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

06.10.2009, 14:04. Показов 2213. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В гугл не посылать я там уже бил)

Как сделать так чтоб при перетаскивании любого файла на обект Edit прописивался в Edit полний адресс файла. Зарание благодарю за ответ.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.10.2009, 14:04
Ответы с готовыми решениями:

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

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

Перетаскивание на Image
Ситуация: на Image нарисован прямоугольник(с помощью Rectangle, если это важно). Задача: передвинуть его с помощью мышки. Если не...

7
 Аватар для Tree
74 / 74 / 4
Регистрация: 31.05.2009
Сообщений: 243
06.10.2009, 21:44
1. Сначала в Unit.h (В заголовке) добавь:
C++
1
#include <shellapi.h>
2. Теперь там же добавь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TEdit *Edit1;
        void __fastcall FormCreate(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall TForm1(TComponent* Owner);
        void __fastcall WmDropFiles(TWMDropFiles& Message) ;
        BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
        END_MESSAGE_MAP(TForm)
};
3. Теперь в Unit.cpp добавь код при событии FormCreate:
C++
1
2
3
4
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  DragAcceptFiles(Handle, true) ;
}
4. И на конец сам код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//---------------------------------------------------------------------------
void __fastcall TForm1::WmDropFiles(TWMDropFiles& Message) 
{
  String FName ;
  char buff[MAX_PATH] ;
  HDROP hDrop = (HDROP)Message.Drop ;
  int nFiles = DragQueryFile(hDrop, -1, NULL, NULL) ;
  for(int i=0; i<nFiles; i++)
    {
      DragQueryFile(hDrop, i, buff, sizeof(buff)) ;
      FName = buff ;
      Edit1->Text = FName ;
    }
  DragFinish(hDrop) ;
}
//---------------------------------------------------------------------------
Юзай на здоровья.
1
 Аватар для iakymych
0 / 0 / 1
Регистрация: 06.10.2009
Сообщений: 12
07.10.2009, 14:12  [ТС]
Спасибо большое за помощь но это не совсем конечный результат того что я хотел получить.
Тут получаеться так что неважно куда потянуть файл на форме и адрес прописываеться в Edit1. А мне нужно чтоб только когда курсор находиться на Edit1 только тогда прописываеться адрес.
Я тут чу-чуть добавил
C++
1
int x,y;// Две глобальные переменные
Потом создал Собитие
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Edit1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
      if((X<=0)||(Y<=0)||(X>=356)||(Y>=16))
          {
            x=0;
            y=0;
           }
      else
           {
            x=X;
            y=Y;
            }
}
И добавил в функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::WmDropFiles(TWMDropFiles& Message)
{
  String FName ;
  char buff[MAX_PATH] ;
  HDROP hDrop = (HDROP)Message.Drop ;
  int nFiles = DragQueryFile(hDrop, -1, NULL, NULL) ;
  for(int i=0; i<nFiles; i++)
    {
      DragQueryFile(hDrop, i, buff, sizeof(buff)) ;
      FName = buff ;
 
   [B]if((x!=0)&&(y!=0))[/B]
     Edit1->Text = FName;
 
    }
  DragFinish(hDrop) ;
 
}
Но когда очень бистро потянуть курсор существует погрешности что параметры не будут равны
(X=0)||(Y=0)||(X=356)||(Y=16) может есть другой способ?
0
 Аватар для Tree
74 / 74 / 4
Регистрация: 31.05.2009
Сообщений: 243
07.10.2009, 20:06
C++
1
2
3
4
5
6
7
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
DragAcceptFiles(Edit1->Handle , true) ;
}
//---------------------------------------------------------------------------
1
 Аватар для iakymych
0 / 0 / 1
Регистрация: 06.10.2009
Сообщений: 12
08.10.2009, 10:28  [ТС]
Еще один маленький вопросик а как правильно прописать ету функцию под Edit1?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//---------------------------------------------------------------------------
void __fastcall TForm1::WmDropFiles(TWMDropFiles& Message) 
{
  String FName ;
  char buff[MAX_PATH] ;
  HDROP hDrop = (HDROP)Message.Drop ;
  int nFiles = DragQueryFile(hDrop, -1, NULL, NULL) ;
  for(int i=0; i<nFiles; i++)
    {
      DragQueryFile(hDrop, i, buff, sizeof(buff)) ;
      FName = buff ;
      Edit1->Text = FName ;
    }
  DragFinish(hDrop) ;
}
//---------------------------------------------------------------------------
0
 Аватар для Tree
74 / 74 / 4
Регистрация: 31.05.2009
Сообщений: 243
09.10.2009, 21:34
Честно говоря сам, вот только попарился и че-то не вышло.
Пробовал класс новый создать, ведь в коде (код.1) нужно указать объект, на который будет приходить сообщение:
C++
1
2
3
4
   /* Код.1 */      
        BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
        END_MESSAGE_MAP(TForm) // вот! Здесь, вместо TForm - пытался прописать Edit1
То оно там не хочет ставать - говорит имя класса в котором код (этот) лежит надо пропихнуть.
Пробовал новый клас (ТEdit) создать - создает. Только вот в Unit.cpp - не знал как на ф-цию с класса послаться. Попробовал создать как в TForm1 *Form1 - сделал аналогично:
C++
1
2
3
4
5
6
7
8
9
TForm1 *Form1;
TEdit *ClassTEdit;
...
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
DragAcceptFiles(ClassTEdit->Edit1->Handle , true) ; //кста, когда пишу: ClassTEdit->, то в списке есть Edit1)
}
//---------------------------------------------------------------------------
Все компилится, все нормально, но при запуске - ругается, говорит нету такого класа "TEdit".
----------------------------
Может я что-то не так делаю?
1
 Аватар для iakymych
0 / 0 / 1
Регистрация: 06.10.2009
Сообщений: 12
13.10.2009, 19:16  [ТС]
Да у меня тоже ничего не выходит... А через Dragdrop может можноо может кто-то знает как?
0
 Аватар для iakymych
0 / 0 / 1
Регистрация: 06.10.2009
Сообщений: 12
29.11.2009, 14:37  [ТС]
Может у ковото есть решение даной проблемы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.11.2009, 14:37
Помогаю со студенческими работами здесь

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

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

Перетаскивание файла в программу
Доброго времени суток!!! Как сделать, чтобы вместо OpenDialog достаточно было просто перетащить файл в программу и он на неё открылся-бы....

ListBox и перетаскивание элементов
Всем привет! Можете подкинуть код, для перестановки элементов ListBox а. Чтоб можно было перетягивать элементы меняя местами, а то чет...

Перетаскивание линий на TCanvas, мышью
Посоветуйте пожалуйста, как можно реализовать следующую задачу: например, мы нарисовали линию на TCanvas, затем хотим по нажатию мыши...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru