Конференция "WinAPI" » Драг энд Дроп [D7, WinXP]
 
  • apic (26.01.12 05:54) [0]
    Доброго времени суток. Мне нужно наваять следующее: на форме есть либо TListBox, TListView. Эти списки заполнены какими то просто текстовыми значениями, так вот мне нужно, чтобы я мог выделить нужную мне строку и перетянуть в проводник, ну а дальше в зависимости от того что и куда я перетянул, я буду делать определенные действия (создавать файлы к примеру в той папке, куда я перетянул пункт "меню" и т.д.). Как такое вообще реализовать, я даже не знаю как запрос написать в поисковиках. В общей сложности мне нужно отслеживать значение которое я перетянул, и путь (каталог), куда я это перетянул, ну было бы еще хорошо отследить какая клавиша была зажата при перетаскивании (ctrl, shift). Очень буду благодарен за конкретный кусок кода. Заранее спасибо!
  • MBo © (26.01.12 08:05) [1]
    Drag and Drop Component Suite
  • apic (26.01.12 16:08) [2]
    Нет, пожалуйста, не предлагайте готовые компоненты! Очень буде благодарен коду, желательно по проще, не не компоненты. Хочется знать что ты делаешь и что бы это работало на чистом Делфи без дополнительных компонентов. Даже если код у компонентов открытый будет, разбираться с ним для меня крайне проблематично.
  • MBo © (26.01.12 16:38) [3]
  • apic (31.01.12 10:57) [4]
    Такие добрые все. Сами кто нибудь смог понять из этой статьи?
  • Сергей М. © (31.01.12 11:11) [5]
    Разбираться с открытым кодом компонентов тебе проблематично.

    Разбираться со статьей, помогающей разбираться с открытым кодом компонентов для тебя тоже проблематично.

    Что тогда не проблематично-то ?)
  • AV © (31.01.12 12:10) [6]
    проще нельзя, имхо 6)

     TForm1 = class(TForm)
       btn1: TButton;
       mmo1: TMemo;
       procedure btn1Click(Sender: TObject);
       procedure mmo1DragOver(Sender, Source: TObject; X, Y: Integer;
         State: TDragState; var Accept: Boolean);
       procedure mmo1DragDrop(Sender, Source: TObject; X, Y: Integer);
     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.btn1Click(Sender: TObject);
    begin
     TButton(Sender).BeginDrag(true);
    end;

    procedure TForm1.mmo1DragOver(Sender, Source: TObject; X, Y: Integer;
     State: TDragState; var Accept: Boolean);
    begin
      Accept := Source is TButton;
    end;

    procedure TForm1.mmo1DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
     mmo1.Lines.Add( TButton(Source).Caption);
    end;
  • Сергей М. © (31.01.12 12:17) [7]

    > AV ©   (31.01.12 12:10) [6]
    > проще нельзя


    Алё, гараж) ..Ему между своим приложением и чужим - explorer.exe - нужно таскать-бросать.. А не внутри своего приложения)
  • AV © (31.01.12 13:07) [8]
    гараж на связи :)

    ну вот так тогда

     Procedure WMDropFiles(var Msg: TMessage); message wm_DropFiles;

    procedure TSubject.WMDropFiles(var Msg: TMessage);
    var
     Filename: array[0 .. 256] of Char;
     FileStr: string;
    begin
     DragQueryFile( THandle(Msg.WParam), 0, Filename, sizeof(Filename) ) ;
     FileStr:=LowerCase(StrPas(FileName));
     FlashWindow(MainForm.Handle,true);
     DragFinish(THandle(Msg.WParam));
  • Сергей М. © (31.01.12 13:42) [9]

    > AV ©   (31.01.12 13:07) [8]


    Это сюда оттуда.
    А туда отсюда ?)
  • MBo © (31.01.12 14:57) [10]
    Если я правильно помню, то для данной задачи нужно реализовать интерфейсы IDropSource и IDataObject (реализация второго  - довольно объемная задача)
  • AV © (31.01.12 15:22) [11]

    > А туда отсюда ?)

    SaveToFile :)
    Ни разу не приходилось файл из приложения кидать куда то.

    >  нужно реализовать интерфейсы IDropSource

    бегло просмотрев, вроде да
  • Плохиш © (31.01.12 20:27) [12]

    > apic   (31.01.12 10:57) [4]
    >
    > Такие добрые все. Сами кто нибудь смог понять из этой статьи?
    >

    По приведённым в статье словам гугля выдаст много ссылок на готовые примеры, и даже для делфи. Но сантехникам в программировании поиск не доступен, им кода подавай.
 
Конференция "WinAPI" » Драг энд Дроп [D7, WinXP]
Есть новые Нет новых   [134430   +4][b:0][p:0.001]