Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Drag and Drop, Как наладить Drop между программами 
:(
    Опции темы
astranom
Дата 23.1.2006, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.10.2004

Репутация: нет
Всего: нет



Собственно Drag & Drop внутри программы сделал.
А как сделать, чтобы из блокнота можно было бы бросить тест в RichEdit.
Или из explorera бросить файл txt в тот же RichEdit.
PM MAIL   Вверх
Artemon
Дата 23.1.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Используй ф-ии WinApi
DragAcceptFiles и DragQueryFile


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
SenkraD
Дата 3.2.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Вот пример из моего простого многооконого приложения типа текстового редактора!
Вот это в хэдэр
Код

     #include <shellapi.h>
     private:
    void _fastcall WmDropFiles(TWMDropFiles& Message);
     public:
          BEGIN_MESSAGE_MAP
          MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, WmDropFiles)
          END_MESSAGE_MAP(TForm)



Ну а вот и сама функции и так остальное
Код

      //Опредиление Функции WmDropFiles
      void _fastcall TMainForm::WmDropFiles(TWMDropFiles& Message)
      {
            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;
                 //Создать новое окно и загрузить файл в RichEdit1
                 CreateMDIChild(FName);  //Заголовок - имя файла
                 Child->RichEdit1->Lines->LoadFromFile(FName);
             }
             DragFinish(hDrop);  //Перенос завершён
      }
      //Разрешение поринимать файлы
      void __fastcall TMainForm::FormCreate(TObject *Sender)
      {
            DragAcceptFiles(Handle, true); //Окно готово к приему
      }

Ну вот -файлы забрасываются на ура.
А вот что ты имееш ввиду текст? Я выделяю текст в блокноте и при попытке его перенести с него слетает выделение! обьясни может чемто помогу


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Alca
Дата 22.6.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Как сделать, чтобы перетаскивать можно было только  в текстовое поле TEdit (а не на форму)?  


--------------------
PM WWW ICQ Skype Jabber   Вверх
586
Дата 23.6.2006, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Пример:
Дано: TForm *Form1, TEdit *Edit1

Код
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
long pEditProc;

// PROTOTYPES
int __stdcall EditProc(HWND, UINT, WPARAM, long);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 pEditProc=SetWindowLong(Edit1->Handle, GWL_WNDPROC, (long)EditProc);
 DragAcceptFiles(Edit1->Handle, 1);
}
//---------------------------------------------------------------------------

int _stdcall EditProc(HWND hWnd, UINT uMsg, WPARAM wParam, long lParam)
{
 if(uMsg==WM_DROPFILES)
 {
  char buff[260];
  DragQueryFile((void*)wParam, 0, buff, 260);
  Form1->Edit1->Text=buff;
  //SetWindowText(hWnd, buff);   // Если ф-ция общая для Edit'ов
  DragFinish((void*)wParam);
 }
 return CallWindowProc((FARPROC)pEditProc, hWnd, uMsg, wParam, lParam);
}

Это для одного файла. Для нескольких пиши свой алгоритм.  

Это сообщение отредактировал(а) 586 - 23.6.2006, 12:44
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.