Главная страница
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.013 c
15-1206189724
Rouse_
2008-03-22 15:42
2008.05.04
Вакансия Delphi программист


15-1206016036
@!!ex
2008-03-20 15:27
2008.05.04
Добавить в res файл полноцветную иконку.


15-1206382954
oxffff
2008-03-24 21:22
2008.05.04
The Unicode Shift


2-1207540343
Armond
2008-04-07 07:52
2008.05.04
TChart


15-1206414440
Slider007
2008-03-25 06:07
2008.05.04
С днем рождения ! 25 марта 2008 вторник