我有以下允许从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;
答案 0 :(得分:16)
DragAcceptFiles(Handle, True);
将表单的当前使用的窗口句柄报告为接受文件。对表单进行一些更改会导致窗口句柄被销毁并重新创建,并且更改样式就是其中之一。发生这种情况时,不会再次调用FormCreate
。重新创建窗口句柄时,您还需要将新句柄报告为接受文件。您只需将FormCreate
中的代码移至CreateWnd
即可:
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;