Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.04;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2008.05.04;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
15-1206251473
Cyrax
2008-03-23 08:51
2008.05.04
"Сотрудник" (учебного заведения) по-английски....


15-1201816478
Eraser
2008-02-01 00:54
2008.05.04
Remote Office Manager - бета тестирование 2


15-1206106402
boriskb
2008-03-21 16:33
2008.05.04
самые сомнительные достижения в сфере информационных технологий


2-1207431431
Danco
2008-04-06 01:37
2008.05.04
Помогите пожалуйста со сравнением двух рисунков.


2-1207568244
azamatufa
2008-04-07 15:37
2008.05.04
Редактирование даты в БД