![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
длина строки в пикселях [D7, XP]
Sergey2 © (2007-10-23 11:57:00)Так как же всё таки это сделать в дельфи ?
ALogFont.lfHeight := 12;
ALogFont.lfWidth := 5;
ALogFont.lfOrientation := 0;
ALogFont.lfEscapement := 0;
ALogFont.lfWeight := FW_MEDIUM;
ALogFont.lfItalic := 0;
ALogFont.lfUnderline := 0;
ALogFont.lfStrikeOut := 0;
ALogFont.lfCharSet := RUSSIAN_CHARSET;
ALogFont.lfOutPrecision := 0;
ALogFont.lfClipPrecision := 0;
ALogFont.lfQuality := 0;
ALogFont.lfPitchAndFamily := FF_SCRIPT;
ALogFont.lfFaceName := 'Verdana';
Font := CreateFontIndirect(ALogFont);
....
s := 'длина строки';
_length := ??
Sergey2 (2007-10-23 12:10:00) [1]>>Однокамушкин
спасибо! исчерпывающе.
Игорь Шевченко (2007-10-23 12:08:00) [2]Если с VCL, то
function GetTextWidthInPixels(AText: string; AControl: TControl): integer;
var
propInfo: PPropInfo;
thisFont: TFont;
begin
Result := 0;
propInfo := GetPropInfo(AControl.ClassInfo, 'Font');
if propInfo <> nil then begin
thisFont := TFont(GetObjectProp(AControl, 'Font'));
if Assigned(thisFont) then
with TControlCanvas.Create do
try
Control := AControl;
Font.Assign(thisFont);
Result := TextWidth(AText);
finally
Free;
end;
end;
end;
Однокамушкин (2007-10-23 12:06:00) [3]Если без VCL
var
Sz: TSize;
SelctObject(DC, Font);
GetTextExtentPoint32(DS, s, Length(s), Sz);
_length := Sz.cx;
Если с VCL
Canvas.Font.Handle := Font;
_length := Canvas.TextWidth(s);
Если сосем точно надо, вызывайте ещё функцию GetCharABCWidths для учёта выступающих за знакоместо частей первого и последнего символа
Desdechado (2007-10-23 11:58:00) [4]DrawText ( DT_CALCRECT )