собсно Drag&drop

vital

Больной Компом Детектед
29.01.2006
2 432
40
codeby.net
#1
сосбно нужно перетащить из проводника файл в мою прогу и получить его имя и полный к нему путь.
пс.
сори за тупой вопрос, десятки раз на тыкался на его, никогда не думал, что понадобится это, а как понадобилось так не нашел.
 
M

mikola1

Гость
#2
сосбно нужно перетащить из проводника файл в мою прогу и получить его имя и полный к нему путь.
пс.
сори за тупой вопрос, десятки раз на тыкался на его, никогда не думал, что понадобится это, а как понадобилось так не нашел.
Вопрос не тупой. В книге Елманова "Delphi и технология COM" подробно расписана технология перетаскивания файлов из Explorer в приложение. Не поленись и посмотри там, думаю будет все работать без глюков..
 
1

13-

Гость
#3
И в завершение реализация популярной задачи перетаскивания значков файлов на форму из Проводника. Для этого следует описать обработчик сообщения 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
 

vital

Больной Компом Детектед
29.01.2006
2 432
40
codeby.net
#4
DragQueryFile();
что за функция?
7 дельфи такой не знает..
 

vital

Больной Компом Детектед
29.01.2006
2 432
40
codeby.net
#5
2 13-я_Drakosha
не совсем это работает.

2mikola1

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

mikola1

Гость
#6
пасиб, книжку гуглом поищу.
Может ты так знаешь ссылку?
Если найдешь книжку в электронном варианте (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 (на сайте нужна регистрация для получения ссылки на скачку!!!! будут проблемы - говорите)
 

vital

Больной Компом Детектед
29.01.2006
2 432
40
codeby.net
#8
2mikola
за сорц буду благодарен, можно без exe.
vitalyhome@tut.by
если пошлеш дай знать здесь.
2????
Cпасиб
2all
с задачей справился сам.