Форум: "Основная";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
ВнизРабота с TCanvas Найти похожие ветки
← →
SamProf © (2005-12-01 23:58) [0]Мастера, у меня есть Rect некоторой области куда нужно намалювать текст на канве.
Мне нужно вписать эго в этот rect по вертикали и горизонтали.
Т.е. мне нужно узнать такой size фонта, чтобы длина этого текста была не больше, чем rect.right-rect.left, а высота не больше, чем rect.bottom-rect.top.
А потом ещё можно, чтобы при выводе, этот текст не затирал белым всю область на которой этот текст малюется, т.е. примерно, как установить св-во transperent?
Спасибо!
← →
stef © (2005-12-02 01:28) [1]я бы делал так. изобразил бы этот текст на другой канве, а затем используя блиттинг или тот же copyrect наложил бы второй на первый предварительно масштабируя его под нужные размеры. Хороший город Севастополь - завидую тебе.
← →
ЮЮ © (2005-12-02 03:06) [2]Задаешь ширину, вызываешь DrawText с нужными аргументами + DT_CALCRECT. Смотришь вычисленные высоту и ширину. Если больше заданной, уменьшаешб размер фонта и повторяешь.
← →
SamProf © (2005-12-03 11:53) [3]Я сделал вот так вот:
procedure texttorect(c:TCanvas;r:TRect;s:string;dx,dy:Integer);
var
h1:Integer;
sx,sy:Integer;
begin
c.Font.Height:=(r.Bottom-r.Top)-2*dy;
h1:=abs(c.Font.Size);
inc(h1);
repeat
dec(h1);
C.Font.Height:=h1;
until ((C.TextWidth(s)<(r.Right-r.Left)-2*dx)and(c.TextHeight(s)<(r.Bottom-r.Top)-2*dy))or(h1=0);
if h1<>0 then
begin
sx:=c.TextWidth(s);
sx:=r.Left+(r.Right-r.Left-sx) div 2;
sy:=c.TextHeight(s);
sy:=r.Top+(r.Bottom-r.Top-sy) div 2;
C.TextOut(sx,sy,s);
end;
end;
Но данная процедура работает достаточно медленно при большой высоте и небольшой ширине.
> Хороший город Севастополь - завидую тебе.
Хорошо там, где нас нет!
← →
Наиль © (2005-12-03 14:07) [4]1. Лучше оценить во сколько раз текст выше и шире прямоугольника, а потом разделить размер шрифта на большую из величин.
2. Brush.Style:=bsClear - уберёт фон под текстом
3. В приведёном примере это не существенно, а вообще не стоит вычислять высоту и ширину прямоугольника так часто.
← →
Наиль © (2005-12-03 14:07) [5]1. Лучше оценить во сколько раз текст выше и шире прямоугольника, а потом разделить размер шрифта на большую из величин.
2. Brush.Style:=bsClear - уберёт фон под текстом
3. В приведёном примере это не существенно, а вообще не стоит вычислять высоту и ширину прямоугольника так часто.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c