Нестандартный компонент TFMDDForm


{

FMDDFORM.PAS—форма, обрабатывающая сообщение WM_DROPFILES.

Автор: Джим Мишель

Дата последней редакции: 27/04/97



} unit fmddform; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, FMDD1; type TFMDDEvent = procedure (Sender: TObject; DragDropInfo : TDragDropInfo) of object; TFMDDForm = class(TForm) private { Private declarations } FOnFMDD : TFMDDEvent; procedure WMDropFiles (var Message: TMessage);
message WM_DROPFILES; protected { Protected declarations } public { Public declarations } constructor Create(AOwner: TComponent);
override; destructor Destroy; override; published { Published declarations } property OnFMDD: TFMDDEvent read FOnFMDD write FOnFMDD; end; procedure Register; implementation constructor TFMDDForm.Create(AOwner: TComponent);
begin inherited Create (AOwner);
FMDD1.AcceptDroppedFiles (Handle);
end; destructor TFMDDForm.Destroy; begin FMDD1.UnacceptDroppedFiles (Handle);
inherited Destroy; end; procedure TFMDDForm.WMDropFiles (var Message: TMessage);
var DragDropInfo : TDragDropInfo; begin if assigned (FOnFMDD) then begin DragDropInfo := FMDD1.GetDroppedFiles (Message.wParam);
FOnFMDD (Self, DragDropInfo);
DragDropInfo.Free; end; end; procedure Register; begin RegisterComponents("Samples", [TFMDDForm]);
end; end.

Недостаток такого подхода заключается в том, что вам придется создавать нестандартную версию каждой формы, которая должна обрабатывать сообщения WM_DROPFILES. Даже если у вас хватит смелости влезть в исходный текст TWinControl и создать событие OnFMDD, чтобы все оконные элементы знали о существовании сообщения WM_DROPFILES, из этого все равно ничего не выйдет. Дело в том, что сама среда Delphi использует эти элементы и не поймет, что делать в случае их изменения.

Впрочем, даже если бы вы каким-нибудь чудом смогли изменить TWinControl, это не принесет никакой пользы в ситуации, когда элемент должен реагировать на несколько пользовательских сообщений, значения которых определяются только при выполнении программы. Требуется более универсальное и гибкое решение.



Содержание раздела