Форум: "Основная";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
ВнизВ Label обрезается текст при стиле Italic Найти похожие ветки
← →
Дмитрий_177 (2006-04-17 23:38) [0]При некоторых шрифтах например "Arial Black" при стиле Italic в Label часть текста (справа) обрезается... AutoSize не помогает... Как с этим бороться?
← →
TUser © (2006-04-18 09:16) [1]Последняя буква немного режется. Ставь Label1.Width := Label1.Width + Label1.Font.Size div 2; или что-то подобное.
← →
Юрий Иванов (2006-04-18 09:37) [2]Проще всего добавить в конец текста Caption один пробел справа.
← →
kilkennyCat © (2006-04-18 09:39) [3]
> Юрий Иванов (18.04.06 09:37) [2]
а если в ентой лабели используется перенос строк?
← →
GrayFace © (2006-04-18 09:47) [4]Не использовать Autosize.
А чтобы точно вычислить размер надо использовать GetCharABCWidthsFloat. Потом отнять левый отступ (A) первого символа и правый отступ (C) последнего.
← →
Дмитрий_177 (2006-04-19 02:52) [5]А как GetCharABCWidthsFloat пользоваться? У меня так AV выскакивает
var
F: ABCFloat;
begin
GetCharABCWidthsFloat(Label1.Canvas.Handle, 1, Length(Label1.Caption), F);
Мне бы определять ширину текста в пикселях... А еще от чего A и C отнимать я что-то не понял?
← →
проходил мимо (2006-04-19 12:35) [6]Передавать-то надо указатель на структуру ABCFloat.
← →
GrayFAce © (2006-04-22 09:01) [7]Дмитрий_177 (19.04.06 02:52) [5]
> GetCharABCWidthsFloat(Label1.Canvas.Handle, 1, Length(Label1.Caption), F);
Сам подумай - какой смысл подавать Length(Label1.Caption), не подавая самого Label1.Caption? На самом деле параметры FirstChar и LastChar - это коды символов. А буфер должен содержать LastChar-FirstChar+1 структур ABCFloat. Так что пиши примерно так:
var
First, Last: ABCFloat; s:string;
begin
s:=Label1.Caption;
Canvas.Font:=Label1.Font;
GetCharABCWidthsFloat(Canvas.Handle, ord(s[1]), ord(s[1]), First);
GetCharABCWidthsFloat(Canvas.Handle, ord(s[length(s)]), ord(s[length(s)]), Last);
Result:=Canvas.TextWidth(Label1.Caption)-First.abcfA-Last.abcfC;
> А еще от чего A и C отнимать я что-то не понял?
От TextWidth(Label1.Caption).
> проходил мимо (19.04.06 12:35) [6]
> Передавать-то надо указатель на структуру ABCFloat.
Там стоит const ABCFloatStructs. Это значит передача и так идет по ссылке. Кстати, должен стоять var, иначе нелогично.
← →
Дмитрий_177 (2006-04-23 20:46) [8]Попробовал сейчас хотябы просто во втором Label2 отобразить ширину текста из Label1: Arial Black, fsItalic (последний символ обрезается)
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
First, Last: ABCFloat;
begin
s := Label1.Caption;
Canvas.Font := Label1.Font;
GetCharABCWidthsFloat(Canvas.Handle, ord(s[1]), ord(s[1]), First);
GetCharABCWidthsFloat(Canvas.Handle, ord(s[length(s)]), ord(s[length(s)]), Last);
Label2.Caption := FloatToStr(Canvas.TextWidth(Label1.Caption) - First.abcfA - Last.abcfC);
end;
Всеравно в Label2 отображается такая же ширина что и Label1 с AutoSize...
← →
GrayFace © (2006-04-25 09:32) [9]А ты попробуй сменить цвет фона Label1 - наверное, с одной стороны обрезается, а с другой остается пустое место. При отрисовке надо делать TextOut(x+First.abcfA, y);
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c