首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi DBLookupCombo always overlapping模式对话框

Delphi DBLookupCombo always overlapping模式对话框
EN

Stack Overflow用户
提问于 2012-12-31 18:24:09
回答 1查看 503关注 0票数 0

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

但是,出现了一个问题,即当显示模式对话框时,LookupCombo将保留在模式对话框的顶部。

这只是一个小小的美容问题,但它让我发疯。在组合框上以编程方式使用'SendToBack‘没有任何效果。

关于这个问题,我还能做些什么?

代码片段:

代码语言:javascript
复制
   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”,并将combobox设置为“sendtoback”,但没有成功。

EN

回答 1

Stack Overflow用户

发布于 2012-12-31 19:17:35

弹出窗口(下拉矩形)的行为如下所示。将组合框放在后面没有帮助,因为模式对话框不知道这一点。

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

代码语言:javascript
复制
SetWindowPos(frmValidateUser.Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOMOVE+SWP_NOSIZE);

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

为什么不在下拉列表消失后让对话框弹出呢?

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

代码语言:javascript
复制
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;

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14100369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档