gpt4 book ai didi

delphi - 在运行时更改 Delphi 样式不允许将文件拖放到表单中

转载 作者:行者123 更新时间:2023-12-03 14:46:06 26 4
gpt4 key购买 nike

我有以下过程,允许从窗口中删除文件,删除工作正常,但是当我使用 (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;

最佳答案

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;

关于delphi - 在运行时更改 Delphi 样式不允许将文件拖放到表单中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15110144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com