Contributor: KANCA{ Hi Vit, : Anybody tied d'n'd any object from Delphi App (for example TListView) to : win Explorer, DeskTop? : How my App can catch the path? Here is a piece of code I had in my arhcives It shold work on D2 too --I havent checked. HTH Basri, kanca@ibm.net -------BEGIN CUT AND PASTE------------------- { This small app should answer some questions for you. If has quite a few nifty things it does too, such as shows you how to drag and drop from the file manager, owner drawn list boxes, etc. Run it and tell me what you think. Make sure you adjust your file manager when it comes up so that it doesn't cover up this program. When saving as a bitmap, remember to enter in an extension. I havn't figured out how to find the value of the SAVE FILE AS TYPE combo box... This work was originally created by Freddy Enok Hansson (100572,2032) to help me with some of my questions. I have modified and added to it to suit my needs. If you like what you see, drop him a note and tell him thanks. -Pat Buchanan 73072,2743- } unit Pat; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons; type TForm1 = class(TForm) BitBtn1: TBitBtn; ListBox1: TListBox; NumIcons: TLabel; Label1: TLabel; Label2: TLabel; SaveDialog1: TSaveDialog; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); procedure ListBox1DblClick(Sender: TObject); private { Private declarations } procedure WMDropFiles (var Msg: TMessage); message wm_DropFiles; public { Public declarations } end; var Form1: TForm1; implementation uses ShellAPI; {$R *.DFM} var Pic: TPicture; Fname : String; TempFile: array[0..255] of Char; Icon : TIcon; Drop : THandle; {Handle for Msg.wParam} procedure TForm1.WMDropFiles(var Msg: TMessage); var i,K, NumFiles, NameLength : integer; nIconsInFile : word; nTotal : word; begin try screen.cursor := crHourglass; ListBox1.clear; Drop := Msg.wParam; nTotal := 0; {Query how many files were dropped on the app} NumFiles := DragQueryFile(Msg.wParam, $FFFF, Nil, 0); for i := 0 to (NumFiles-1) do begin NameLength := DragQueryFile(Msg.wParam, i, Nil , 0); DragQueryFile(Msg.wParam, i, TempFile, NameLength+1); FName := StrPas(TempFile); {Query how many icons existin the file (-1)} nIconsInFile := ExtractIcon(HInstance, TempFile, $FFFF); nTotal := nTotal + nIconsInFile; for K := 0 to nIconsInFile-1 do begin {Extract the icon} Icon.Handle := ExtractIcon(HInstance, TempFile, K); {Create a TPicture instance} Pic := TPicture.Create; {Assign the icon.handle to the Pic.icon property} Pic.Icon := Icon; {Add the Filename and icon to the ListBox} ListBox1.Items.AddObject(ExtractFileName(FName), Pic); end; {For K} end; {For I} IF nTotal = 0 then NumIcons.Caption := 'None' ELSE NumIcons.Caption := IntToStr(nTotal); finally screen.cursor := crDefault; end; {main begin} end; {WMDropFiles} procedure TForm1.FormCreate(Sender: TObject); begin DragAcceptFiles(Handle, True); Icon := TIcon.Create; WinExec('winfile.exe', SW_RESTORE); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var I: Integer; begin DragFinish(Drop); for I := 0 to ListBox1.Items.Count - 1 do TPicture(ListBox1.Items.Objects[I]).Free; end; procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState); begin with ListBox1.Canvas do begin FillRect(Rect); Pic := TPicture(ListBox1.Items.Objects[Index]); Draw(Rect.Left, Rect.Top + 2, Pic.Graphic); TextOut(Rect.Left + 34, Rect.Top + 5, ListBox1.Items[Index]); end; end; procedure TForm1.ListBox1DblClick(Sender: TObject); var oIcon : TPicture; var oBitmap : TBitmap; begin oIcon := TPicture.create; oBitmap := TBitMap.create; IF SaveDialog1.Execute then WITH (Sender as TListBox) DO begin oIcon.Assign(TPicture(Items.Objects[ItemIndex])); {---------Save as an icon---------} IF ExtractFileExt(SaveDialog1.FileName) = '.ICO' then begin {Save the icon to the specified file} oIcon.icon.SaveToFile(SaveDialog1.Filename); ShowMessage(ExtractFileName(SaveDialog1.Filename) + ' has been saved as an ICON.'); end; {---------Save as a bitmap---------} IF ExtractFileExt(SaveDialog1.FileName) = '.BMP' then begin {Setup the bitmap size, so that it matches the icon} oBitmap.Width := Icon.Width; oBitmap.Height := Icon.Height; { Draw Icon on Bitmap } oBitmap.Canvas.Draw( 0, 0, oIcon.Graphic ); {Save the bitmap to the specified file} oBitmap.SaveToFile(SaveDialog1.Filename); ShowMessage(ExtractFileName(SaveDialog1.Filename) + ' has been saved as a BITMAP.'); end; end; {Clean up after yourself} oIcon.free; oBitmap.free; SaveDialog1.FileName := ''; end; end.