Componentes.Terceros.Mustan.../official/1.7.0/EasyListview/Demos/DragDrop/OLE DragDrop/Unit1.pas
david 778b05bf9f Importación inicial
- Mustangpeak Common Library - 1.7.0
  - EasyListview - 1.7.0

git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.Mustangpeak@2 60b41242-d4b9-2247-b156-4ccd40706241
2007-09-11 08:33:06 +00:00

223 lines
7.0 KiB
ObjectPascal

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, EasyListview, ActiveX, ShlObj, MPCommonUtilities,
MPDataObject, ImgList, MPCommonObjects;
type
TForm1 = class(TForm)
EasyListview1: TEasyListview;
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
cbViews: TComboBox;
ImageListSmall: TImageList;
ImageListLarge: TImageList;
ImageListExLarge: TImageList;
procedure EasyListview1OLEDragEnter(Sender: TCustomEasyListview;
DataObject: IDataObject; KeyState: TCommonKeyStates; WindowPt: TPoint;
AvailableEffects: TCommonDropEffects;
var DesiredDropEffect: TCommonDropEffect);
procedure EasyListview1OLEDragOver(Sender: TCustomEasyListview;
KeyState: TCommonKeyStates; WindowPt: TPoint;
AvailableEffects: TCommonDropEffects;
var DesiredDropEffect: TCommonDropEffect);
procedure EasyListview1OLEDragLeave(Sender: TCustomEasyListview);
procedure EasyListview1OLEDragDrop(Sender: TCustomEasyListview;
DataObject: IDataObject; KeyState: TCommonKeyStates; WindowPt: TPoint;
AvailableEffects: TCommonDropEffects;
var DesiredDropEffect: TCommonDropEffect);
procedure cbViewsChange(Sender: TObject);
procedure EasyListview1OLEDragStart(Sender: TCustomEasyListview;
ADataObject: IDataObject; var AvailableEffects: TCommonDropEffects;
var AllowDrag: Boolean);
procedure EasyListview1OLEGetData(Sender: TCustomEasyListview;
const FormatEtcIn: tagFORMATETC; var Medium: tagSTGMEDIUM;
var Handled: Boolean);
procedure EasyListview1OLEQueryData(Sender: TCustomEasyListview;
const FormatEtcIn: tagFORMATETC; var FormatAvailable,
Handled: Boolean);
procedure FormShow(Sender: TObject);
procedure EasyListview1OLEDragEnd(Sender: TCustomEasyListview;
ADataObject: IDataObject; DragResult: TCommonOLEDragResult;
ResultEffect: TCommonDropEffects; KeyStates: TCommonKeyStates);
procedure EasyListview1OLEGetCustomFormats(Sender: TCustomEasyListview;
var Formats: TFormatEtcArray);
private
{ Private declarations }
public
{ Public declarations }
DataObj: IDataObject;
function GetHDropFormat: TFormatEtc;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.GetHDropFormat: TFormatEtc;
begin
Result.cfFormat := CF_HDROP; // This guy is always registered for all applications
Result.ptd := nil;
Result.dwAspect := DVASPECT_CONTENT;
Result.lindex := -1;
Result.tymed := TYMED_HGLOBAL
end;
// **********************************************
// Events to make the EasyListview a Drag TARGET
// **********************************************
procedure TForm1.EasyListview1OLEDragEnter(Sender: TCustomEasyListview;
DataObject: IDataObject; KeyState: TCommonKeyStates; WindowPt: TPoint;
AvailableEffects: TCommonDropEffects;
var DesiredDropEffect: TCommonDropEffect);
begin
DataObj := DataObject;
// See if the DataObject contains something we can deal with
if Succeeded(DataObj.QueryGetData(GetHDropFormat)) then
DesiredDropEffect := cdeCopy
else
DesiredDropEffect := cdeNone
end;
procedure TForm1.EasyListview1OLEDragOver(Sender: TCustomEasyListview;
KeyState: TCommonKeyStates; WindowPt: TPoint;
AvailableEffects: TCommonDropEffects;
var DesiredDropEffect: TCommonDropEffect);
begin
// See if the DataObject contains something we can deal with
if Succeeded(DataObj.QueryGetData(GetHDropFormat)) then
DesiredDropEffect := cdeCopy
else
DesiredDropEffect := cdeNone
end;
procedure TForm1.EasyListview1OLEDragLeave(Sender: TCustomEasyListview);
begin
DataObj := nil;
end;
procedure TForm1.EasyListview1OLEDragDrop(Sender: TCustomEasyListview;
DataObject: IDataObject; KeyState: TCommonKeyStates; WindowPt: TPoint;
AvailableEffects: TCommonDropEffects;
var DesiredDropEffect: TCommonDropEffect);
var
HDrop: TCommonHDrop;
Item: TEasyItem;
Column: TEasyColumn;
i: Integer;
begin
DesiredDropEffect := cdeNone;
// See if the DataObject contains something we can deal with
if Succeeded(DataObj.QueryGetData(GetHDropFormat)) then
begin
HDrop := TCommonHDrop.Create;
try
if HDrop.LoadFromDataObject(DataObject) then
begin
EasyListview1.Items.Clear;
Column := EasyListview1.Header.Columns.Add;
Column.Width := 300;
Column.Caption := 'Filename';
for i := 0 to HDrop.FileCount - 1 do
begin
Item := EasyListview1.Items.Add;
Item.Caption := HDrop.FileName(i);
if DirectoryExists(Item.Caption) then
Item.ImageIndex := 0
else
Item.ImageIndex := 1
end;
DesiredDropEffect := cdeCopy;
end
finally
HDrop.Free
end
end
end;
procedure TForm1.cbViewsChange(Sender: TObject);
begin
EAsyListview1.View := TEasyListStyle(cbViews.ItemIndex)
end;
procedure TForm1.EasyListview1OLEGetData(Sender: TCustomEasyListview;
const FormatEtcIn: tagFORMATETC; var Medium: tagSTGMEDIUM;
var Handled: Boolean);
var
HDrop: TCommonHDrop;
i: Integer;
List: TSTringList;
begin
if FormatEtcIn.cfFormat = CF_HDROP then
begin
HDrop := TCommonHDrop.Create;
List := TStringList.Create;
try
for i := 0 to EasyListview1.Items.Count - 1 do
List.Add(EasyListview1.Items[i].Caption);
HDrop.AssignFiles(List);
Medium.tymed := TYMED_HGLOBAL;
Medium.stm := nil;
Medium.stg := nil;
Medium.hGlobal := HDrop.HDropStruct;
Handled := True;
finally
List.Free;
HDrop.Free
end
end
end;
// **********************************************
// Events to make the EasyListview a Drag SOURCE
// **********************************************
procedure TForm1.EasyListview1OLEQueryData(Sender: TCustomEasyListview;
const FormatEtcIn: tagFORMATETC; var FormatAvailable, Handled: Boolean);
begin
if FormatEtcIn.cfFormat = CF_HDROP then
begin
FormatAvailable := True;
Handled := True;
end
end;
procedure TForm1.EasyListview1OLEDragStart(Sender: TCustomEasyListview;
ADataObject: IDataObject; var AvailableEffects: TCommonDropEffects;
var AllowDrag: Boolean);
begin
AllowDrag := True;
AvailableEffects := [cdeCopy, cdeMove, cdeLink]
end;
procedure TForm1.FormShow(Sender: TObject);
begin
FillStringsWithEasyListStyles(cbViews.Items);
cbViews.ItemIndex := Ord(EasyListview1.View);
end;
procedure TForm1.EasyListview1OLEDragEnd(Sender: TCustomEasyListview;
ADataObject: IDataObject; DragResult: TCommonOLEDragResult;
ResultEffect: TCommonDropEffects; KeyStates: TCommonKeyStates);
begin
DataObj := nil;
end;
procedure TForm1.EasyListview1OLEGetCustomFormats(
Sender: TCustomEasyListview; var Formats: TFormatEtcArray);
begin
SetLength(Formats, Length(Formats) + 1);
Formats[Length(Formats)-1] := GetHDropFormat;
end;
end.