- 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
223 lines
7.0 KiB
ObjectPascal
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.
|