Как на Canvas текст в столбик написать?

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
ElenaA
Сообщения: 15
Зарегистрирован: 09 июн 2006, 10:00

Подскажите, пожалуйста, можно ли без лишних извращений (фразу на слова разбить, вычислить длины слов, по циклу рассчитать координаты...) вывести текст в прямоугольнике в столик?
Может, есть символ специальный для перевода на новую строку, а дальше TextRect?
Написать надо на картинке...
vunder
Сообщения: 74
Зарегистрирован: 10 май 2006, 12:19
Откуда: Санкт-Петербург
Контактная информация:

Во-первых, у канвы есть метод TextWidth, который возвращает длину текста в пикселях, а, во-вторых, для переноса на новую строку используется компбинация символов #13#10 (именно в такой последовательности)
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

может это чем поможет:

Код: Выделить всё

function MDrawText(const hDC:LongWord;const s:string;lpRect:TRect;const uFormat:UINT):integer;
var
  ss:string;
  i,h:integer;
function DrawSText(const hDC:LongWord;const s:string;lpRect:TRect;const uFormat:UINT):integer;
var
  P:array[0..255] of Char;
begin
  StrPCopy(P, s);
  Result:=DrawText(hDC, P, -1, lpRect, uFormat);
end;
begin
  Result:=0;
  ss:=s;
  i:=Pos(#13#10,ss);
  While i>0 do
    begin
      h:=DrawSText(hDC, Copy(ss,1,i-1), lpRect, uFormat);
      lpRect.Top:=lpRect.Top+h;
      Result:=Result+h;
      Delete(ss,1,i+1);
      i:=Pos(#13#10,ss);
    end;
  If ss<>'' then Result:=Result+DrawSText(hDC, ss, lpRect, uFormat);
end;
пример вызова функции событие OnDrawCell компонента StringGrid:

Код: Выделить всё

procedure TForm1.sgAmplificationDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  With Sender as TStringGrid, Canvas do
    begin
      Brush.Color:=BackgroundColor;
      Pen.Color:=BackgroundColor;
      Rectangle(Rect);
      Rect.Top:=Rect.Top+1;
      Font.Color:=clWindowText;
      MDrawText(Handle, Cells[ACol,ARow], Rect, DT_WORDBREAK or DT_CENTER);
    end;
end;
обрати внимание на возможные значения параметра uFormat
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

О параметрах функции DrawText и DrawTextEx смотрите справку по Win32.
Эта функция умеет переносить текст по словам, заменять "&" на подчеркивание, выравнивать текст по горизонтали и по вертикали, а также (при выводе путей к файлам) автоматически вставлять многоточие в середину пути, если текст не помещается в прямоугольник.... Короче много чего умеет.
Ответить