unit DropBtns; { (C) 1995, ingenieursbureau Office Automation All Rights Reserved Hereby the right to distribute this work electronically is granted, provided such is done for at most a nominal fee. Also the right is granted to store this work on a computer system. Finally the right is granted to incorporate this work into other work provided no fee is asked for this work. In all cases of distribution this work must be distributed in full, which specifically includes this notice. Liability is limited to the amount payed for this work. Legal jurisdiction is with the court of Leeuwarden, the Netherlands. } interface uses WinTypes, WinProcs, Messages, Classes, Controls, Forms, Graphics, StdCtrls, ExtCtrls, Buttons, ShellApi, SysUtils; type TDropButton = class(TBitBtn) protected procedure CreateParams(var Params : TCreateParams); override; procedure WMDropFiles(var Message : TMessage); message WM_DROPFILES; end; procedure Register; implementation procedure TDropButton.CreateParams(var Params : TCreateParams); begin inherited CreateParams(Params); with Params do begin ExStyle := ExStyle or WS_EX_ACCEPTFILES; end; end; procedure TDropButton.WMDropFiles(var Message : TMessage); var hDrop : THandle; nFiles, i, j, size : word; Glyphs : integer; {darned privates!} Pstr : PChar; begin hDrop := Message.WParam; Pstr := StrAlloc(256); Pstr[0] := chr(0); Message.Result := 0; {accept} try nFiles := DragQueryFile(hDrop, $FFFF, Pstr, size); dec(nFiles); for i := nFiles to nFiles do begin size := DragQueryFile(hDrop, i, nil, size); {don't ask} size := DragQueryFile(hDrop, i, Pstr, size+1); Glyph.LoadFromFile(StrPas(Pstr)); if Glyph.Width mod Glyph.Height = 0 then begin Glyphs := Glyph.Width div Glyph.Height; if Glyphs > 4 then Glyphs := 1; NumGlyphs := Glyphs; end; end; finally DragFinish(hDrop); StrDispose(Pstr); end; end; procedure Register; begin RegisterComponents('IBOA', [TDropButton]); end; end.