![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вывести текст на Canvas в столбик с выравниванием по ширине ? [D7, ME]
X-Fi © (2005-10-16 01:19:00)Как в Интернет Эксплорере. Может кто-нибудь написал такую полезную функцию ? Или может она есть в какой-нибудь известной библиотечке ?
Gydvin (2005-10-17 14:00:00) [21]X-Fi (17.10.05 06:29) [5]
Аналог <p Align=justify> в hmtl.
Ну и перебери код чтоб выравнивалось влево, а перед отрисовкой в каждой строке выясняй, колво слов-букв и сответственно занимаемое ими место textwidth, бери ширину канваса, отними суммарную ширину слов дели на колво слов-1, получишь растояние между словами-буквами (a). и далее все просто.
textout(x,y,string1);
textout(x+textwidth(string1)+a,y,string2);
!!!!
X-Fi (2005-10-17 06:29:00) [22]Эта функция лишь центрирует текст. А надо сделать выравнивание по ширине. То есть это подбор расстояний между словами.
Аналог<p Align=justify>в hmtl.
MBo (2005-10-17 06:20:00) [23]>Джо © (17.10.05 02:51) [3]
Это выравнивание по центру.
Джо (2005-10-17 02:51:00) [24]
> Может кто-нибудь написал такую полезную функцию ?
В этой "полезной функции" от силы строк десять. Ну вот, именно 10 и вышло ;-)
procedure DrawCenteredText (Left,Top,Width: Integer; AStrings: TStrings; ACanvas: TCanvas);
var
I: Integer;
begin
for I := 0 to AStrings.Count-1 do
begin
ACanvas.TextOut ((Left + Width div 2)-(ACanvas.TextWidth(AStrings[I]) div 2), Top, AStrings[I]);
Inc(Top,ACanvas.TextHeight('Qq'));
end;
end;
Usage:
procedure TForm1.Button1Click(Sender: TObject);
begin
DrawCenteredText(5,20,200,Memo1.Lines,Image1.Canvas);
Image1.Canvas.MoveTo(5,20);
Image1.Canvas.LineTo(5,200);
Image1.Canvas.MoveTo(200,20);
Image1.Canvas.LineTo(200,200);
end;
Кефир87 (2005-10-17 02:07:00) [25]Ну вот TextWidth и TextHeight а думать за тебя лень 8)
X-Fi (2005-10-17 01:25:00) [26]Up