Содержание материала

 

procedure TForm1.Panel2MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

const

SC_DragMove = $F012;

begin

ReleaseCapture;

Panel2.Perform(WM_SysCommand, SC_DragMove, 0);

end;

 

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

 

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

 

В заключение хочу выразить благодарность Игорю Шевченко и Максиму Власову за ценные советы при подготовке примеров... Автор статьи:  Борис Новгородов,

 

 

Взято с сайта www.emanual.ru

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить