作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在某些表单上,我的 dbEdits 有时不够宽,无法显示其字段可能包含的所有文本。对于他们,我有以下代码:
procedure Tgm12edLots.dbeLotNameMouseEnter(Sender: TObject);
begin
with dbeLotName do begin
ShowHint := True;
Hint := Text;
end;
end;
我想避免显示所有文本是否可见的提示,但我不知道如何测试该条件。
感谢您的任何提示/建议!
最佳答案
这是一个快速版本(没有 TBitmap
开销),它考虑了 Edit
控件的边距(即 EM_SETMARGINS
)。
使用下面的IsEditTextOverflow
来确定文本是否溢出可见区域。
type
TCustomEditAccess = class(TCustomEdit);
function EditTextWidth(Edit: TCustomEdit): Integer;
var
DC: HDC;
Size: TSize;
SaveFont: HFont;
begin
DC := GetDC(0);
SaveFont := SelectObject(DC, TCustomEditAccess(Edit).Font.Handle);
GetTextExtentPoint32(DC, PChar(Edit.Text), Length(Edit.Text), Size);
SelectObject(DC, SaveFont);
ReleaseDC(0, DC);
Result := Size.cx;
end;
function EditVisibleWidth(Edit: TCustomEdit): Integer;
var
R: TRect;
begin
SendMessage(Edit.Handle, EM_GETRECT, 0, LPARAM(@R));
Result := R.Right - R.Left;
end;
function IsEditTextOverflow(Edit: TCustomEdit): Boolean;
begin
Result := EditTextWidth(Edit) > EditVisibleWidth(Edit);
end;
关于delphi - 是否可以确定 dbEdit 中的文本是否比可见文本长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9941787/
在某些表单上,我的 dbEdits 有时不够宽,无法显示其字段可能包含的所有文本。对于他们,我有以下代码: procedure Tgm12edLots.dbeLotNameMouseEnter(Sen
我使用 adodb/dbgo 进行编程并尝试使用此代码: procedure TfrMain.dbeNoMejaKeyPress(Sender: TObject; var Key: Char); be
我是一名优秀的程序员,十分优秀!