【发布时间】: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 的资源以确保。