//只有重载Button;
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;type
  TNewButton = class(TButton)
    procedure WMHotKey(var Mse: TMessage); message WM_HOTKEY;
  private
    FOnRegisterError: TNotifyEvent;
    FIsRegister: Boolean;
    procedure SetIsRegister(const Value: Boolean);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property OnRegisterError: TNotifyEvent read FOnRegisterError write FOnRegisterError;
    property IsRegister: Boolean read FIsRegister write SetIsRegister;
  end;  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    FNewButton: TNewButton;
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}{ TNewButton }constructor TNewButton.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Parent := TWinControl(AOwner); //有父窗体才能Register
  IsRegister := RegisterHotKey(Handle, 0, MOD_ALT or MOD_CONTROL, 65);
end;destructor TNewButton.Destroy;
begin
  if FIsRegister then UnregisterHotKey(Handle, 0);
  inherited;
end;procedure TNewButton.SetIsRegister(const Value: Boolean);
begin
  FIsRegister := Value;
  if (not FIsRegister) and Assigned(FOnRegisterError) then
    FOnRegisterError(Self);
end;procedure TNewButton.WMHotKey(var Mse: TMessage);
var
  AType :TMsgDlgType;
  AButtons: TMsgDlgButtons;
  WResult: Word;
begin
  Self.Visible := True;
  AType := mtConfirmation;
  AButtons := mbYesNoCancel;
  WResult := MessageDlg('运行结束吗?', AType, Abuttons, 0);
  if WResult = mrYes then TForm(Parent).Close;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  FNewButton := TNewButton.Create(Self);
  FNewButton.Visible := True;
  FNewButton.Left := 10;
  FNewButton.Top := 10;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
  FNewButton.Free;
end;end.

解决方案 »

  1.   

    你可以重建一个单元
    把它注册到Delphi的控件板上
    //可以参照我的...
    unit DragFile;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ShellApi, ExtCtrls;type
      TDragFile = class(TWinControl)
      private
        FFileNames: TStringList;
        FOnDragFile: TNotifyEvent;
        FActive: Boolean;
        FImage: TImage;
        { Private declarations }
        procedure WMDROPFILES(var Msg: TMessage); message WM_DROPFILES;
        procedure SetActive(const Value: Boolean);
      protected
        { Protected declarations }
      public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
        property FileNames: TStringList read FFileNames;
        property Image: TImage read FImage write FImage;
      published
        { Published declarations }
        property Active: Boolean read FActive write SetActive default False;
        property Color default clBtnFace;
        property ParentColor default False;
        property OnDragFile: TNotifyEvent read FOnDragFile write FOnDragFile;
      end;procedure Register;implementationprocedure Register;
    begin
      RegisterComponents('Samples', [TDragFile]);
    end;{ TDragFile }constructor TDragFile.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      Width := 100;
      Height := 100;
      FFileNames := TStringList.Create;
      FImage := TImage.Create(Self);
      FImage.Parent := Self;
      FImage.Align := alClient;
    end;destructor TDragFile.Destroy;
    begin
      FFileNames.Free;
      FImage.Free;
      inherited;
    end;procedure TDragFile.SetActive(const Value: Boolean);
    begin
      if FActive = Value then Exit;
      FActive := Value;
      DragAcceptFiles(Handle, FActive);
    end;procedure TDragFile.WMDROPFILES(var Msg: TMessage);
    var
      hDrop: THandle;
      fName: array[0 ..MAX_PATH] of Char;
      NumberOfFiles: Integer;
      fCounter: Integer;
    begin
      hDrop := Msg.wParam;
      NumberOfFiles := DragQueryFile(hDrop, $FFFFFFFF, fName, MAX_PATH);
      FFileNames.Clear;
      for fCounter := 0 to Pred(NumberOfFiles) do
      begin
        DragQueryFile(hDrop, fCounter, fName, MAX_PATH);
        FFileNames.Add(fName);
      end;
      DragFinish(hDrop);
      if Assigned(FOnDragFile) then FOnDragFile(Self);
    end;end.