8

我有以下允许从 Windows 删除文件的过程,删除工作正常,但是当我在运行时使用 ( TStyleManager.TrySetStyle(styleName)) 更改样式时,表单不再接受删除!这里到底有什么问题?

public //public section of the form
...
procedure AcceptFiles( var msg : TMessage ); message WM_DROPFILES;

...

procedure TMainFrm.AcceptFiles(var msg: TMessage);
 var
   i,
   fCount     : integer;
   aFileName : array [0..255] of char;
begin
   // find out how many files the form is accepting
   fCount := DragQueryFile( msg.WParam, {uses ShellApi is required...}
                            $FFFFFFFF,
                            acFileName,
                            255 );

  for I := 0 to fCount - 1 do
  begin
    DragQueryFile(msg.WParam, i, aFileName, 255);
    if UpperCase(ExtractFileExt(aFileName)) = '.MSG' then //accept only .msg files
    begin
       if not itemExists(aFileName, ListBox1) then// function checks whether the file was already added to the listbox
       begin
        ListBox1.Items.Add(aFileName);

       end
    end;
  end;
  DragFinish( msg.WParam );
end;

...

procedure TMainFrm.FormCreate(Sender: TObject);
begin
  DragAcceptFiles( Handle, True ); //Main form accepts the dropped files 
end;
4

1 回答 1

16

DragAcceptFiles(Handle, True);将表单当前使用的窗口句柄报告为接受文件。对窗体的某些更改会导致窗口句柄被销毁并重新创建,更改样式就是其中之一。发生这种情况时,FormCreate不会再次调用。当重新创建窗口句柄时,您还需要将新句柄报告为接受文件。您可以简单地将代码移动FormCreateCreateWnd

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  protected
    procedure CreateWnd; override;
  public
    { Public declarations }
  end;

implementation

procedure TForm1.CreateWnd;
begin
  inherited;
  DragAcceptFiles(Handle, True);
end;
于 2013-02-27T11:00:43.857 回答