Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 对齐文本框_Windows_Delphi_Themes_C++builder - Fatal编程技术网

Windows 对齐文本框

Windows 对齐文本框,windows,delphi,themes,c++builder,Windows,Delphi,Themes,C++builder,我有一些(没有边框的文本框,背景与窗口的其余部分相同),我试图与标准的编辑控件+旋转按钮对齐,以表示一列数字,其中一列可以编辑: 我可以在Delphi/C++Builder表单设计器中手动对齐这些内容,但当我在不同版本的Windows或不同的DPI上查看表单时,文本不再右对齐,可能是因为旋转按钮间距、边框等不同 我可以使用EM_GETMARGINS来确定旋转按钮的宽度,但是如何确定编辑控件的边距和边框的大小呢?我尝试了EM_POSFROMCHAR、ClientToScreen、GetSyste

我有一些(没有边框的文本框,背景与窗口的其余部分相同),我试图与标准的编辑控件+旋转按钮对齐,以表示一列数字,其中一列可以编辑:

我可以在Delphi/C++Builder表单设计器中手动对齐这些内容,但当我在不同版本的Windows或不同的DPI上查看表单时,文本不再右对齐,可能是因为旋转按钮间距、边框等不同

我可以使用EM_GETMARGINS来确定旋转按钮的宽度,但是如何确定编辑控件的边距和边框的大小呢?我尝试了EM_POSFROMCHAR、ClientToScreen、GetSystemMetrics(SM_CXBORDER)、GetSystemMetrics(SM_CXEDGE)和gethememargins的各种组合,但到目前为止,我还没有找到一种有效的组合

更多详情:

  • 环境是Delphi/C++Builder XE2
  • 数据输出控件使用BorderStyle bsNone进行编辑
  • 编辑+旋转按钮是TJvSpinEdit。从源代码来看,它使用EM_SETMARGINS为其旋转按钮留出空间

使用Win32 API
GetWindowRect()
GetClientRect()方法。边界将是两个矩形之间的差异。不过,这只会给你一个边界。客户区内部可能会有额外的间距。

我之前试过,但没有成功。显然,当从TFrame的构造函数中完成时,它会失败,但当表单显示时,它会工作。仍然存在1个像素的差异;看起来它可能来自TJvSpinEdit的实现,尽管我看不到任何可能导致它的原因。然后尝试使用
EM\u GETRECT
消息。它返回编辑控件可以在其中呈现其文本的边框。如果可行,那么您可以定位控件,使其右侧矩形边缘对齐。如果您安装了VCL源代码,您也可以查看以下类的实现,这是表单设计器在“设计器指南”中计算各种对齐时使用的功能已启用:
DesignIntf.TBaseComponentGuidelines
DesignEditors.TComponentGuidelines
VCLEditors.TControlGuidelines
VCLEditors.TControlGuidelines
,但我会假设这是TJvSpinEdit的一些怪癖,我还没有找到。其他一切都在运转;非常感谢。