Подскажите, пожалуйста, можно ли без лишних извращений (фразу на слова разбить, вычислить длины слов, по циклу рассчитать координаты...) вывести текст в прямоугольнике в столик?
Может, есть символ специальный для перевода на новую строку, а дальше TextRect?
Написать надо на картинке...
Как на Canvas текст в столбик написать?
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 74
- Зарегистрирован: 10 май 2006, 12:19
- Откуда: Санкт-Петербург
- Контактная информация:
Во-первых, у канвы есть метод TextWidth, который возвращает длину текста в пикселях, а, во-вторых, для переноса на новую строку используется компбинация символов #13#10 (именно в такой последовательности)
-
- Сообщения: 273
- Зарегистрирован: 30 июн 2005, 14:53
может это чем поможет:
пример вызова функции событие OnDrawCell компонента StringGrid:
обрати внимание на возможные значения параметра uFormat
Код: Выделить всё
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;
Код: Выделить всё
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;
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
О параметрах функции DrawText и DrawTextEx смотрите справку по Win32.
Эта функция умеет переносить текст по словам, заменять "&" на подчеркивание, выравнивать текст по горизонтали и по вертикали, а также (при выводе путей к файлам) автоматически вставлять многоточие в середину пути, если текст не помещается в прямоугольник.... Короче много чего умеет.
Эта функция умеет переносить текст по словам, заменять "&" на подчеркивание, выравнивать текст по горизонтали и по вертикали, а также (при выводе путей к файлам) автоматически вставлять многоточие в середину пути, если текст не помещается в прямоугольник.... Короче много чего умеет.