Delphi 是否可以确定dbEdit中的文本是否比可见文本长?
在某些表单上,我使用的dbEdits有时不够宽,无法显示其字段可能包含的所有文本。对于他们,我有以下代码:Delphi 是否可以确定dbEdit中的文本是否比可见文本长?,delphi,user-interface,delphi-xe2,editcontrol,Delphi,User Interface,Delphi Xe2,Editcontrol,在某些表单上,我使用的dbEdits有时不够宽,无法显示其字段可能包含的所有文本。对于他们,我有以下代码: procedure Tgm12edLots.dbeLotNameMouseEnter(Sender: TObject); begin with dbeLotName do begin ShowHint := True; Hint := Text; end; end; 我希望避免显示所有文本是否可见的提示,但我不知道如何测试该条件 谢谢你的任何提示/建议 我认为这应
procedure Tgm12edLots.dbeLotNameMouseEnter(Sender: TObject);
begin
with dbeLotName do begin
ShowHint := True;
Hint := Text;
end;
end;
我希望避免显示所有文本是否可见的提示,但我不知道如何测试该条件
谢谢你的任何提示/建议 我认为这应该行得通
function CanShowAllText(Edit: TDBEdit):Boolean;
var
TextWidth:Integer;
VisibleWidth: Integer;
Bitmap: TBitmap;
const
//This could be worked out but without delphi I can't remember all that goes into it.
BordersAndMarginsWidthEtc = 4;
begin
Bitmap := TBitmap.Create;
try
Bitmap.Canvas.Font.Assign(Edit.Font);
TextWidth := Bitmap.Canvas.TextWidth(Edit.Text);
VisibleWidth := Edit.Width - BordersAndMarginsWidthEtc;
Result := TextWidth < VisibleWidth;
finally
Bitmap.Free;
end;
end;
函数CanShowAllText(编辑:TDBEdit):布尔值;
变量
text宽度:整数;
可视宽度:整数;
位图:TBitmap;
常数
//这是可以解决的,但没有德尔菲,我记不清其中的所有内容。
BordersAndMarginsWidthEtc=4;
开始
位图:=TBitmap.Create;
尝试
位图.Canvas.Font.Assign(编辑.Font);
TextWidth:=位图.Canvas.TextWidth(编辑.Text);
VisibleWidth:=编辑宽度-边框和边距宽度等;
结果:=文本宽度<可视宽度;
最后
位图。免费;
结束;
结束;
这里有一个快速版本(没有TBitmap
开销),它考虑了Edit
控件的边距(即EM\u 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;