Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вывести текст на Canvas в столбик с выравниванием по ширине ? [D7, ME]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо