Главная страница
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.009 c
2-1207665127
arinyshka
2008-04-08 18:32
2008.05.04
вставка и считывание картинки в бд ms sql


2-1207738292
F@T@L_Err0r
2008-04-09 14:51
2008.05.04
Компоненты Сокет


15-1206025445
Jeer
2008-03-20 18:04
2008.05.04
Открылся математический форум


2-1207560659
AndrewG
2008-04-07 13:30
2008.05.04
InterBase 6.5


6-1185889040
keal
2007-07-31 17:37
2008.05.04
алгоритм работы сетевого чата на основе UDP