Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Нарисовать форматированный текст


Автор: terek111 7.4.2007, 01:12
Как нарисовать на канве форматированный текст?

Допустим есть нарисованный прямоугольник, как в него врисовать текст так что бы он был перенесен по строчкам.

Автор: ama_kid 7.4.2007, 09:11
Смотри функцию http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_0odw.asp с параметром DT_WORDBREAK

Автор: terek111 7.4.2007, 13:29
ama_kid спасибо.

А как DrawText  в билдаре использовать то? Что то подключать надо? можно маленький примерчик?

Автор: ama_kid 7.4.2007, 14:24
terek111
Билдера под рукой нету, скажу навскидку - подключать надо Windows.h (как и для всех API-шных функций), но скорее всего он автоматом уже подключен (если ты, конечно, пишешь обычное VCL-приложение)... Пример приведу на Дельфи, на билдере всё точно так же (тока учесть надо особенности синтаксиса и сделать правильное приведение типов). Идея должна быть понятна...
Код
procedure TForm1.Button1Click(Sender: TObject);
var
 Rect:TRect;
 s:PAnsiChar;
begin
 Rect.Left:=10;Rect.Right:=110;Rect.Top:=10;Rect.Bottom:=110;
 s:=AllocMem(35);
 ZeroMemory(s,35);
 StrCopy(s,'My Text String is very long...');
 DrawText(Form1.Canvas.Handle,s,StrLen(s),Rect,DT_WORDBREAK);
 FreeMem(s);
end;

Автор: Klin 7.4.2007, 16:19
Перевожу smile
Код

 char  *text ="Это пример очень хорошего текста, который поможет каждому, кто попробует им воспользоваться.";
 TRect *Rect = new TRect;
 Rect->Left=10; Rect->right=110; Rect->Top=10; Rect->Bottom=110;
 Canvas->Rectangle(Rect->Left-2,Rect->Top-2,Rect->Right,Rect->Bottom);
 DrawText(Canvas->Handle,text,AnsiString(text).Length(),Rect,DT_WORDBREAK);
 delete Rect;

Автор: terek111 7.4.2007, 21:49
Просто гениально ama_kid и Klin большое спасибо!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)