|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Вывод текста и HTML-кода на Canvas
Доброго времени суток!
1. Каким образом можно нарисовать (вывести) текст на Canvas с переносом строки, т.е. определенной ширины (подобно WordWrap в Label), и узнать его высоту в пикселах? 2. Как вывести текст на Canvas, исходя из HTML-кода, т.е. применяя теги: <b>, <font>, <i>, <quote> и т.д.? 3. Совместить 1-ый и 2-ой пункты??? Если можно исходники киньте, или помогите разобраться. Заранее спасибо! |
#2
|
||||
|
||||
Код:
var S: String; R: TRect; H: Integer; H := DrawText(Canvas.Handle, PChar(S), Length(S), R, DT_WORDBREAK or DT_NOCLIP); ShowMessage('Высота текста = ' + IntToStr(H)); |
#3
|
||||
|
||||
1.
Код:
type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure TForm1.FormPaint(Sender: TObject); var s: String; rct: TRect; w, h: Integer; begin w:=100; // исходная ширина прямоугольника с текстом h:=0; // высота не нужна пока s:='Каким образом можно нарисовать (вывести) текст на Canvas с переносом строки, т.е. определенной ширины (подобно WordWrap в Label), и узнать его высоту в пикселах?'; rct.Left:=100; // коорд. X для вывода прямоугольника с текстом rct.Top:=100; // коорд. Y для вывода прямоугольника с текстом rct.Right:=rct.Left+w; rct.Bottom:=rct.Top+h; // вычислим размеры прямоугольника DrawText(Canvas.Handle, PChar(s), -1, rct, DT_CALCRECT or DT_WORDBREAK); // нарисуем текст DrawText(Canvas.Handle, PChar(s), -1, rct, DT_WORDBREAK); end; 2. парсить текст и применять Canvas.Font.Style:=[fsBold, fsItalic]; 3. 1+2 Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 14.06.2011 в 09:32. |
#4
|
||||
|
||||
ryderx34 и NumLock, спасибо очень помогли.
|
#5
|
|||
|
|||
A если все ручками сделать то как-то так получится...
Код:
Function WordWrapTextToCanvas(aCanvas:TCanvas; aText:String; X,Y,RigthBord:Integer; LS:Real):boolean; var i,W,W1,Spc,XX:Integer; S:String; aT:array of String; begin W:=aCanvas.TextWidth(aText); Spc:=aCanvas.TextWidth(' '); XX:=X; W1:=0; S:=''; aText:=aText+' '; if W>RigthBord then begin for i:=1 to Length(aText) do begin if aText[i]<>' ' then S:=S+aText[i] else begin SetLength(aT,Length(aT)+1); aT[Length(aT)-1]:=S; S:=''; end; end; for i:=0 to Length(aT)-1 do begin W1:=W1+aCanvas.TextWidth(aT[i]); if W1>RigthBord then begin Y:=Round(Y+(aCanvas.TextHeight(aT[i])*LS)); X:=XX; W1:=0; end; aCanvas.textOut(X,Y,aT[i]); X:=X+Spc+aCanvas.TextWidth(aT[i]); end; Result:=true; end else aCanvas.TextWidth(aText); end; Код:
procedure TForm1.Button1Click(Sender: TObject); var S: String; X,Y,L: Integer; begin Image1.Width:=583; Image1.Canvas.Font.Size:=14; X:=20; L:=Image1.Width-60; Y:=20; S:='Это очень длинная строка, возможно самая длинная, которую когда либо писали в Delphi'; WordWrapTextToCanvas(Image1.Canvas,S,X,Y,L,1.1); //Отрисовка текста end; aCanvas = Канва на которую выносим текст aText = Текст X = Отступ от левой границы канвы Y = Отступ от верхней границы канвы RigthBord = Отступ от правой границы канвы LS = Межстрочный интервал Последний раз редактировалось Janom, 14.06.2011 в 10:54. |
#6
|
||||
|
||||
Спасибо. Тема закрыта.
|