【问题标题】:Style of UpDown control doesn't match the Edit boxUpDown 控件的样式与编辑框不匹配
【发布时间】:2017-06-23 16:26:29
【问题描述】:

我正在使用以下代码创建一个 Edit 和一个 UpDown 控件:

procedure TForm1.CreateWnd;
begin
  inherited;
  Edit1 := CreateWindowEx (WS_EX_CLIENTEDGE, 'EDIT', '',
    WS_VISIBLE or WS_CHILD or ES_LEFT or ES_AUTOHSCROLL,
    10, 10, 100, 24, Handle, 0, hInstance, nil);
  UpDown1 := CreateWindowEx (0, UPDOWN_CLASS, nil,
    WS_VISIBLE or WS_CHILD or UDS_ALIGNRIGHT or UDS_ARROWKEYS
    or UDS_NOTHOUSANDS or UDS_HOTTRACK or UDS_SETBUDDYINT,
    0, 0, 0, 0, Handle, 0, hInstance, nil);
  SendMessage (UpDown1, UDM_SETBUDDY, Edit1, 0);
end;

Edit 看起来有 3D 边框,而 UpDown 没有。

更新:(部分复制/粘贴自我下面的评论)

从编辑中删除WS_EX_CLIENTEDGE 使它看起来就像一个填充的白色矩形(无边框)。另外,现在编辑中的文本显得太高了,所以我必须处理WM_NCCALCSIZE 消息或任何修复它的方法。

如果我然后添加WS_BORDER 标志,结果几乎是所需的,除了灰色比需要的颜色深,然后在表单中的某些用户活动(包括用鼠标光标悬停编辑)之后,不必要的边框的垂直部分出现在 UpDown 控件的左侧。

第三张截图需要至少 10 个声望才能发布。好吧,想象一下向上/向下按钮的左边缘有一条垂直线。它的颜色和边框一样,所以我可以假设它是边框的一部分。

【问题讨论】:

  • 嗯,它有 WS_EDGE_CLIENTEDGE 而另一个没有。
  • @SertacAkyuz,是的,我也想过,应该提到。发布后可能会想到...从编辑中删除WS_EX_CLIENTEDGE 使它看起来就像一个填充的白色矩形(无边框)。如果我然后添加WS_BORDER 标志,结果几乎是所需的,除了灰色比需要的颜色深,然后在表单中的某些用户活动之后,边框的不必要的垂直部分出现在 UpDown 控件的左侧.截图:unsee.cc/dinamegounsee.cc/tizeposa
  • 这不是一个真正的德尔福问题。这是一个纯粹的 Win32 问题。如果您正确地完成了这项工作,那么您现在已经解决了所有问题。使用 TnT 控件。
  • WS_EX_CLIENTEDGE 是正确的。您的编辑控件没有主题,这意味着它不是 Common Controls v6 之一。 Common Controls v6 自己处理WS_EX_CLIENTEDGE 并绘制主题边框,这是上下控件正常使用的。不过我对 Delphi 一无所知,所以我不知道如何修复它(或者 Delphi 是否重新创建了我在内部描述的任何功能)。
  • @andlabs 不假设。查看 EXE 的资源以确保。

标签: delphi winapi themes edit


【解决方案1】:

当 WM_CTLCOLOREDIT 消息处理不当时可能会发生这种情况。例如返回无效的画笔。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多