Форум: "WinAPI";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
ВнизGetTextExtentPoint32 при Найти похожие ветки [fsItalic]
← →
Krants © (2007-08-31 16:15) [0]есть функция(
GetTextExtentPoint32
) выдающая размеры форматированного текста,function TForm1.GetPWithStr(str:string; const ufont:TFont): integer;
var
DC : HDC;
size : TSize;
SaveFont : HFONT;
begin
DC:=GetDC(0);
SaveFont:=SelectObject(DC,uFont.Handle);
GetTextExtentPoint32(DC,PChar(str),Length(str),size);
SelectObject(DC,SaveFont);
ReleaseDC(0,DC);
result:=size.cx;
end;
(исходный код есть в StdCtrls)
решил проверить работу данной функции:var
s:ShortString;
i:integer;
begin
randomize;
s:="hfghfhawetjytjkli;pADFd,nmfgfyutyut";
s[0]:=Char(random(20));
label1.Caption:=s;
label1.Repaint;
memo1.Text:=memo1.Text//+s
+" "+inttostr(Label1.Width)
+" "+inttostr(GetPWithStr(s,label1.Font))
+" "+inttostr(Label1.Width-GetPWithStr(s,label1.Font))
+#13#10;
refresh;
canvas.MoveTo(Label1.Left,Label1.Top+20);
canvas.LineTo(Label1.Left+GetPWithStr(s,label1.Font),Label1.Top+20);
хорошо работает при различных шрифтах и высоте теста, но вот при изменении стиля на fsBold или fsItalic имеются небольшие различия. можете проверить, выше представлен весь код.
помогите плз разобраться в чем может быть причина такой вот некорректности функции)
← →
Dib@zol © (2007-08-31 16:36) [1]Возможно, проблема в том, что ты проставляешь италик уже после измерения. У меня всё точно.
← →
Krants © (2007-08-31 16:57) [2]
> Dib@zol © (31.08.07 16:36) [1]
> Возможно, проблема в том, что ты проставляешь италик уже
> после измерения. У меня всё точно.
италик ставлю заранее, и в десигне и в р-тайме... хотя заметил что эта неточность бевает не для всех шрифтов.FontDialog1.Font:=Label1.Font;
if not FontDialog1.Execute then exit;
caption:=FontDialog1.Font.Name;
Label1.Font:=FontDialog1.Font;
Полазил на делфикиндом, там не однократно рассматривался, этот вопрос, но конкретного и нормально работающего решения не имеется(
Хотя странно, функцияGetTextExtentPoint32
также исп. в ТLabel, и выводит с пом. ее полный текст.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c