1
我试图关闭所有一次,他断开形式的服务器德尔福 - 印地关闭所有相关客户
这个动作将是在服务器端是与客户端的形式形式。
我(在运行时已知对我来说)为每个客户端,例如部分独特的标题
窗体标题1:
ServiceA - ClientABC
窗体标题2:
ServiceB - ClientABC
什么我已经知道的仅仅是- ClientABC
部分。
因此,当客户端ClientABC
断开形式我的服务器我想关闭服务器端所有相关的打开窗体。
procedure TIdServer.ClientRemove(const AContext: TIdContext);
var
sTitle: string;
function CloseChildForm(Wnd: HWND; Param: LPARAM): BOOL; stdcall;
begin
if Pos(sTitle, _GetWindowTitle(Wnd)) <> 0 then
PostMessage(Wnd, WM_CLOSE, 0, 0);
Result := True;
end;
begin
sTitle := TMyContext(AContext).Uniquename {ClientABC}
if Assigned(FListView) then begin
TThread.Queue(nil,
procedure
var
i: Integer;
begin
EnumWindows(@CloseChildForm, 0);
.......
end;
end
);
end;
end;
我的问题是CloseChildForm
函数总是空字符串里面sTitle
。
我打电话ClientRemove
在IdServerDisconnect
程序
procedure TIdServer.IdServerDisconnect(AContext: TIdContext);
begin
TMyContext(AContext).Queue.Clear;
........
ClientRemove(AContext);
end;
谁能告诉我有什么错吗?
为什么不只是给'TMyContext'自己的关联窗口列表?当窗口打开时,将其添加到客户端的列表中。当窗口关闭时,将其从客户端列表中删除。当客户端断开连接时,通过列表关闭所有仍然打开的窗口。你应该**保持跟踪你的窗户,而不是**狩猎**。 –