Delphi应用程序检查表单实例是否已经以这种方式打开:
form := FindWindow(PAnsiChar(FormClassName), nil);
if form > 0 then
begin
SendMessage(form, WM_ACTIVATEAPP, 0, 0);
Result := True;
end else
Result := False
Run Code Online (Sandbox Code Playgroud)
问题是,当表单作为Delphi Designer窗口打开时,它表示表单是打开的.我刚刚失去了一些工作时间,因为当我打开一个表单并单击断点一个方法时,应用程序停止工作:-(
如果在Designer中创建表单类实例,如何使此函数返回false?
答:
opc0de的建议下面给了我一个很好的解决方案,所以我接受他的评论作为答案.我需要更改代码以遍历所有打开的表单.这是世界副本的快乐代码的最终版本:
function VerifyFormIsOpen(formClass: String): Boolean;
var
windowHndl, windowOld: HWND;
processId: Cardinal;
begin
windowOld := 0;
windowHndl := 0;
Result := False;
repeat
windowHndl := Windows.FindWindowEx(0, windowOld,
PAnsiChar(formClass), nil);
if (windowHndl > 0) then
begin
Windows.GetWindowThreadProcessId(windowHndl, processId);
if processId = Windows.GetCurrentProcessId() then
begin
Windows.SendMessage(windowHndl, Messages.WM_ACTIVATEAPP, 0, 0);
Result := True;
break;
end;
end;
windowOld := windowHndl;
until windowHndl = 0;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1638 次 |
| 最近记录: |