собсно Drag&drop

Тема в разделе "Delphi - Система", создана пользователем vital, 18 май 2006.

  1. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    сосбно нужно перетащить из проводника файл в мою прогу и получить его имя и полный к нему путь.
    пс.
    сори за тупой вопрос, десятки раз на тыкался на его, никогда не думал, что понадобится это, а как понадобилось так не нашел.
     
  2. mikola1

    mikola1 Гость

    Вопрос не тупой. В книге Елманова "Delphi и технология COM" подробно расписана технология перетаскивания файлов из Explorer в приложение. Не поленись и посмотри там, думаю будет все работать без глюков..
     
  3. 13-

    13- Гость

    И в завершение реализация популярной задачи перетаскивания значков файлов на форму из Проводника. Для этого следует описать обработчик сообщения WM_DROPFILES

    private
    procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
    В OnCreate формы разрешить прием файлов


    DragAcceptFiles(Handle, true);

    и в OnDestroy отключить его

    DragAcceptFiles(Handle, False);

    Процедура обработки приема файлов может выглядеть так:

    procedure TForm1.WMDropFiles(var Msg: TWMDropFiles);
    const
    maxlen = 254;
    var
    h: THandle;
    //i,num:integer;
    pchr: array[0..maxlen] of char;
    fname: string;
    begin
    h := Msg.Drop;

    // дана реализация для одного файла, а
    //если предполагается принимать группу файлов, то можно добавить:
    //num:=DragQueryFile(h,Dword(-1),nil,0);
    //for i:=0 to num-1 do begin
    // DragQueryFile(h,i,pchr,maxlen);
    //...обработка каждого
    //end;

    DragQueryFile(h, 0, pchr, maxlen);
    fname := string(pchr);
    if lowercase(extractfileext(fname)) = '.bmp' then
    begin
    Image1.visible := True;
    OleContainer1.Visible := false;
    image1.Picture.LoadFromFile(fname);
    Panel3.Height := 300;
    end
    else if lowercase(extractfileext(fname)) = '.doc' then
    begin
    Image1.visible := False;
    OleContainer1.Visible := True;
    OleContainer1.CreateObjectFromFile(fname, false);
    Panel3.Height := 300;
    end
    else if lowercase(extractfileext(fname)) = '.htm' then
    ShellExecute(0, nil, pchr, nil, nil, 0)
    else if lowercase(extractfileext(fname)) = '.txt' then
    Memo2.Lines.LoadFromFile(fname)
    else
    Memo2.Lines.Add(fname);
    DragFinish(h);
    end;
    При перетаскивании на форму файла с расширением Bmp он отображается в Image1, находящемся на Panel3, Doc загружается в OleContainer, для Htm запускается Internet Explorer или другой браузер по умолчанию, Txt отображается в Memo2, а для остальных файлов в Memo2 будет просто показано имя.

    ©DelphiWorld.narod.ru
     
  4. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    DragQueryFile();
    что за функция?
    7 дельфи такой не знает..
     
  5. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    2 13-я_Drakosha
    не совсем это работает.

    2mikola1

    пасиб, книжку гуглом поищу.
    Может ты так знаешь ссылку?
     
  6. mikola1

    mikola1 Гость

    Если найдешь книжку в электронном варианте (pdf, djvu) дай знать, у меня она только в бумажном виде. Могу выслать на e-почту примеры из книги (исходные коды + exe). Все примеры с исходниками+exe в зазипованном варианте занимают 23Mb... Без exe будет меньше

    А еще неплохо почитать DelphiWorld...
     
  7. ????

    ???? Гость

    <!--QuoteBegin-mikola1+21:05:2006, 10:26 -->
    <span class="vbquote">(mikola1 @ 21:05:2006, 10:26 )</span><!--QuoteEBegin-->Если найдешь книжку в электронном варианте (pdf, djvu) дай знать
    [snapback]36281" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Ловите: http://www.natahaus.ru/2006/01/25/Delphi_i...logiya_COM.html 7,3 Мб Djvu (на сайте нужна регистрация для получения ссылки на скачку!!!! будут проблемы - говорите)
     
  8. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
    2mikola
    за сорц буду благодарен, можно без exe.
    vitalyhome@tut.by
    если пошлеш дай знать здесь.
    2????
    Cпасиб
    2all
    с задачей справился сам.
     
Загрузка...

Поделиться этой страницей