我创建了两个应用程序MainApps和SubApps,SubApps有一个模式类型对话框如登录/注销的形式等等。及其工作的罚款。

之后我把它连接到MainApps,该模式对话框显示了像正常的框形式。它的行为就像"对话。显示"而不是"对话。SHOWMODAL";

我使用德尔菲编译器

SubApps buttonclick;

  begin
    with TfrmDialog.Create(Self, dtLogout) do
    try
      iMsgResult := ShowModal;
    finally
      Free;
    end;
    if iMsgResult = mrOk then
    begin
      dmVoca.FHomeworkXMLDoc.Active := False;
      //Disabled Double Login
      dmVoca.tmrDoubleLogin.Enabled := False;
      ................
    end;  
  end;

MainApps ButtonClick

begin
setparent(findwindow(nil,'SubApps'),TabSheet1.Handle);
.........
end;
有帮助吗?

解决方案

不要惊奇,你是什么想是不寻常的。 ShowModal 实现模式的效果通过禁止所有的窗户调线,但该模式的形式。因为你的父形式不属于相同的线,甚至不相同的过程,它并不得到禁止。看看 DisableTaskWindows 在形式。考绩制度,以了解如何形式的无障碍的时候'ShowModal'被称为。

你必须制定自己的模式的程序;如果测试的应用程序是父在一个顶级的窗口那不是桌面上,禁止,窗口,如果是这种情况。

但如果我是你,我会认为在设计上首先,如果有什么,f。i., 你接近父母的形式,你怎么结束的父形成的过程?


编辑: 第3下面的评论-你可以尝试的具有模式"拥有"MainApps的形式。类似形式是拥有的应用程序主要形式的同时 MainFormOnTaskbar 是真实的。看看 拥有窗户窗口的功能 主题msdn。

var
  frmDialog: TfrmDialog;
begin
  [...]
  frmDialog := TfrmDialog.Create(Self, dtLogout);
  try
    SetWindowLong(frmDialog.Handle, GWL_HWNDPARENT, GetAncestor(Handle, GA_ROOT));
    iMsgResult := frmDialog.ShowModal;
    [...]


我谦恭地建议你去问一个问题上的一个建议的设计,为什么你想要实现的,例如,如果有关代码的再利用你可以主持您的SubApps形式在dll...这种设计是脆弱的,你可以继续运行到的问题与它...

其他提示

试着做你的windows“系统模式”,而不是“应用模式”。其实,我不知道,如果你甚至可以做到这一点。这可能是不可能的,或者是一个坏主意。事实上,整个问题让我“坏主意”的味道。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top