Текущий архив: 2005.12.04;
Скачать: CL | DM;
Вниз
TLogFont (вывод текста по 90 градусов) Найти похожие ветки
← →
DelphiLexx © (2005-11-07 16:40) [0]Перед мной встала следующая задача:
Есть прямоугольник (в вертикальном расположении) известна его ширина - width и высота - height. Есть текст, хрянящийся в переменной fRawName. Необходимо вывести этот текст в этот прямоугольник см.рис. http://www.rsdn.ru:80/File/26841/picture.bmp
Как все это реализовать программно желательно в виде процедуры (с параметрами height: integer; width: integer; fRawName: text)?
← →
Джо © (2005-11-07 16:48) [1]Предлагаю такой подход. Вывести перевернутую надпись на канву метафайла (TMetafileCanvas). Для разворота шрифта можно использовать примерно такую функцию:
procedure RotateFont (AFont: TFont; Angle: Integer);
var
LogFont : TLogFont;
begin
GetObject(AFont.Handle, SizeOf(TLogFont), @LogFont);
LogFont.lfEscapement := Angle*10;
AFont.Handle := CreateFontIndirect(LogFont);
end;
Затем этот метафайл вывести с растяжением/сжатием в целевой прямоугольник, используя StretchDraw. Масштабироваться будет векторная картинка, поэтому "артефактов" сжатия/растяжения видно не будет.
← →
DelphiLexx © (2005-11-07 17:17) [2]
> Вывести перевернутую надпись на канву метафайла (TMetafileCanvas).
>
А на PaintBox"е это реально сделать, если да, то как.
← →
Джо © (2005-11-07 17:37) [3]Вся возня с метафайлом нужна только для того, чтобы "вписывать" строку в заданный прямоугольник. Если достаточно просто вывести развернутый текст начиная с определенной позиции, то не нужно ничего усложнять, достаточно RotateFont. Т.е, процедура вывода надписи на канву с заданным направлением текста в указанную точку будет выглядеть как-то так:
type
// направление надписи: сверху-вниз или снизу-вверх
TVerticalDirection = (vdUpBottom,vdBottomUp);
procedure DrawTextVertically (X,Y: Integer; AText: string; ACanvas: TCanvas;
Direction: TVerticalDirection);
var
Angle: Integer;
SavedDC: HDC;
begin
// сохраняем состояние канвы
SavedDC := SaveDC (ACanvas.Handle);
try
Angle := 90;
if Direction = vdUpBottom then
Angle := -Angle;
// описание этой процедуры я привел выше
RotateFont(ACanvas.Font,Angle);
ACanvas.TextOut(X,Y,AText);
finally
// восстановим предыдущее состояние канвы, т.е, до разворота шрифта
RestoreDC(ACanvas.Handle,SavedDC);
end;
end;
Пример вывода на TImage:
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.Font.Name := "Tahoma";
Image1.Canvas.Font.Size := 16;
DrawTextVertically(50,50,"Брюква",Image1.Canvas,vdUpBottom);
end;
← →
Джо © (2005-11-07 17:40) [4]
> [2] DelphiLexx © (07.11.05 17:17)
> А на PaintBox"е это реально сделать, если да, то как.
Отчего же нереально? Реально. Нужно всего-лишь представлять принцип работы с этим компонентом.
← →
DelphiLexx © (2005-11-07 17:43) [5]
> Вся возня с метафайлом нужна только для того, чтобы "вписывать"
> строку в заданный прямоугольник
Мне как раз-то и нужно вписать в заданный прямоугольник. В качестве прямоугольника выступает TPanel на которой лежит TPaintBox.Align := alClient. А у PaintBox"a TMetafileCanvas нету, да и входные параметры
TMetafileCanvas.Create не очень меня устраивают. Так как быть.
← →
DelphiLexx © (2005-11-07 17:44) [6]
> Отчего же нереально? Реально. Нужно всего-лишь представлять
> принцип работы с этим компонентом.
Програмно не могли бы показать?
Страницы: 1 вся ветка
Текущий архив: 2005.12.04;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.065 c