用户界面- Delphi DBLookupCombo总是重叠模态对话框



我正在使用Delphi XE2,我遇到了一个问题,在从DBLookupCombo框中选择一个选项时,将显示一个模态对话框。

然而,出现了一个问题,即当模态对话框显示时,LookupCombo将保持在模态对话框的顶部。

这只是一个小小的美容问题,但它让我发疯了。在组合上编程地使用'SendToBack'不起作用。 关于这个问题,我还能做些什么吗?

代码片段:

   else if (getUserName  <> cboUserName.Text) and (userHasPerm2 = 1) then
   begin
    ValidUser := false;
    frmValidateUser := TfrmValidateUser.Create(self);
    frmValidateUser.txtUsername.ReadOnly := true;
    frmValidateUser.txtUsername.enabled := false;
    frmValidateUser.FormStyle := fsStayOnTop;
    cboUsername.SendToBack;
    frmValidateUser.ShowModal;

因此,如果选择的用户不是登录的用户并且没有适当的权限,ValidateUser表单将以模式显示。正如你所看到的,我试着将from样式设置为'stay on top',并将组合框设置为'sendtoback',但没有成功。

弹出窗口(下拉矩形)的行为如下:将组合框发送到后面没有帮助,因为模态对话框不知道这个。

您可以尝试将frmValidateUser.FormStyle设置为fsStayOnTop。如果这没有帮助,那么你必须告诉Windows将对话框设置在very顶部:

SetWindowPos(frmValidateUser.Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE+SWP_NOSIZE);

但说实话,这不是一个好的解决方案。这个对话框还会隐藏其他可能从其他应用程序甚至Windows本身弹出的任何其他顶部消息。

你为什么不试着在下拉框消失后让对话框弹出呢?

更新:我试图复制的问题,通过创建一个简单的形式,只有一个组合框在它。在组合框的OnSelect-Event中,我简单地创建了一个相同表单的新实例,并使其出现在与组合框相同的坐标处;

procedure TForm1.ComboBoxSelect(Sender: TObject);
Var
  f : TForm1;
  p : TPoint;
begin
  f := TForm1.Create(nil);
  p := ComboBox.ClientToScreen(point(0,0));
  f.Left := p.x;
  f.Top := p.y;
  f.ShowModal;
end;

(请原谅这些愚蠢的变量名称,但是对于这样一个简单的测试,我认为它是可以的)。

应用程序按预期工作。选择条目后,下拉菜单消失,显示新表单。

相关内容

  • 没有找到相关文章

最新更新