![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
canvas.textWidth для разных стилей
novichek © (2010-01-18 22:31:00)Устанавливаю стиль в fsItalic.
canvas.textWidth возвращает то же самое что и при отсутствии стиля.
В результате конец текста обрезан немного.
Подскажите пожалуйста, с чем связано, что для одного шрифта результат вроде бы правильный, для другого нет..
в процессе мучения, из-за выхода текста за размеры, набросал для теста:
procedure TForm1.Button1Click(Sender: TObject);
const
// test = 'Проверка связи ры ры ры рычаг';
test = 'test test test test';
var
bmp: TBitmap;
x1, x2, x3, x4: Integer;
procedure drawbmp(offset: Integer);
begin
bmp.Canvas.FillRect(bmp.Canvas.ClipRect);
bmp.Canvas.TextOut(0, 0, test);
form1.Canvas.Draw(0, offset, bmp);
end;
begin
bmp:= TBitmap.Create;
bmp.Canvas.Brush.Color:= clBlack;
bmp.Canvas.Font.Color:= clWhite;
bmp.Canvas.Font.Name:= 'Comic Sans MS';
bmp.Canvas.Font.Size:= 40;
bmp.Height:= bmp.Canvas.TextHeight('Py');
bmp.Canvas.Font.Style:=[];
x1:= bmp.Canvas.TextWidth(test);
bmp.Width:= x1;
drawbmp(0);
bmp.Canvas.Font.Style:=[fsItalic];
x2:= bmp.Canvas.TextWidth(test);
bmp.Width:= x2;
drawbmp(bmp.Height + 10);
bmp.Canvas.Font.Style:=[fsBold];
x3:= bmp.Canvas.TextWidth(test);
bmp.Width:= x3;
drawbmp(bmp.Height*2 + 10*2);
bmp.Canvas.Font.Style:=[fsBold, fsItalic];
x4:= bmp.Canvas.TextWidth(test);
bmp.Width:= x4;
drawbmp(bmp.Height*3 + 10*3);
bmp.Free;
ShowMessage('[] - '+IntToStr(x1)+', [fsItalic] - '+IntToStr(x2)+', [fsBold] - '+IntToStr(x3)+', [fsBold, fsItalic] - '+IntToStr(x4));
end;
с чего и сделал вывод, что возвращаемые значения ширины немного не понятные..
как узнать для данного шрифта правильный размер при fsItalic ?
Игорь Шевченко (2010-01-18 22:42:00) [41]
> canvas.textWidth возвращает то же самое что и при отсутствии
> стиля.
Было бы странно обратное.
http://www.rsdn.ru/forum/winapi/1098456.flat.aspx