Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Как вывести текст на Canvas в столбик с выравниванием по ширине ?   Найти похожие ветки 

 
X-Fi   (2005-10-16 01:19) [0]

Как в Интернет Эксплорере. Может кто-нибудь написал такую полезную функцию ? Или может она есть в какой-нибудь известной библиотечке ?


 
X-Fi   (2005-10-17 01:25) [1]

Up


 
Кефир87 ©   (2005-10-17 02:07) [2]

Ну вот TextWidth и TextHeight а думать за тебя лень 8)


 
Джо ©   (2005-10-17 02:51) [3]


>  Может кто-нибудь написал такую полезную функцию ?

В этой "полезной функции" от силы строк десять. Ну вот, именно 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;


 
MBo ©   (2005-10-17 06:20) [4]

>Джо ©   (17.10.05 02:51) [3]
Это выравнивание по центру.


 
X-Fi   (2005-10-17 06:29) [5]

Эта функция лишь центрирует текст. А надо сделать выравнивание по ширине. То есть это подбор расстояний между словами.

Аналог <p Align=justify> в hmtl.


 
Gydvin ©   (2005-10-17 14:00) [6]

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);
!!!!


 
Джо ©   (2005-10-17 14:43) [7]


>  [4] MBo ©   (17.10.05 06:20)

А, неправильно прочитал вопрос.


 
X-Fi   (2005-10-18 01:38) [8]


> Gydvin ©   (17.10.05 14:00) [6]
>
> 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);
> !!!!


Ну, так кто нибудь это сделал?


 
Джо ©   (2005-10-18 03:09) [9]


>  [8] X-Fi   (18.10.05 01:38)
> Ну, так кто нибудь это сделал?

Ну, я сделал. Графическая библиотека для поддержки отчетов в своей программе. Могу продать исходники, недёшево.


 
имя   (2005-10-18 05:00) [10]

Удалено модератором


 
Джо ©   (2005-10-18 05:05) [11]

Вот интересно, почему большинство известных мне хамов еще и двоечники? Тенденция, однако.


 
Antonn ©   (2005-10-18 07:05) [12]

X-Fi   (16.10.05 1:19)
будешь хамить, по жизни влипнешь...

Как вывести текст на Canvas в с выравниванием по ширине за счет пробелов м/у словами?
Примерно так:
procedure _TextOut(Canvas:Tcanvas; _x,_y:integer; _Width:integer; _text:string);
var i,i_last,i_count,i_wid,_summ:integer; _semafore,_semaforeS:boolean;
begin
i_count:=0;
_text:=_text+" ";
for i:=1 to length(_text) do
 if (_text[i]=" ") then i_count:=i_count+1;
i_wid:=((_Width-canvas.TextWidth(_text)) div (i_count-1))+canvas.TextWidth(" ");
_semafore:=false;_semaforeS:=false;i_last:=0; _summ:=0;
for i:=1 to length(_text) do begin
if (_text[i]=" ") then begin
if _semaforeS then begin
    canvas.TextOut(_summ+_x,_y,copy(_text,i_last+1,i-i_last-1));
    _summ:=_summ+i_wid+canvas.TextWidth(copy(_text,i_last+1,i-i_last-1));
   end;
_semafore:=true; i_last:=i; _semaforeS:=false;
end else _semaforeS:=true;
end;
end;
(c) antonn


использование:
_TextOut(Image2.Picture.Bitmap.Canvas,50,50,200,"test slovo fuflo bla-bla-bla d7");


 
X-Fi   (2005-10-19 01:39) [13]


> Antonn ©   (18.10.05 07:05) [12]
>
> X-Fi   (16.10.05 1:19)
> будешь хамить, по жизни влипнешь...


По себе судишь. Если влип ты, то это не значит что влипнет кто-то другой.
Программист программисту рознь. Если программисты маленькие и слабые, а есть большие и сильные.

> Примерно так:
А где же перенос ? В хтмл <p Align=justify> переносит длинный текст на следующую строку.

Кстати, советую освоить правила стилистического оформления кода. А то ведь сам потом не разберёшься в своём коде.

Не в обиду.


 
Gydvin ©   (2005-10-19 06:19) [14]

X-Fi   (19.10.05 01:39)

Даа, тяжелый случай


 
Antonn ©   (2005-10-19 09:33) [15]

X-Fi   (19.10.05 1:39) [13]
Кстати, советую освоить правила стилистического оформления кода. А то ведь сам потом не разберёшься в своём коде.

превосходно разбираюсь, потому так и пишу, для себя ведь. Хотя мог бы и не постить, если другим так трудно разобраться(и если действительно нужно разбираться)...

А где же перенос ?
а я только запостил функцию растягивания текста, а остальное - сам, не так уж и сложно.


 
Fenik ©   (2005-10-19 18:25) [16]

> Джо ©  (17.10.05 02:51) [3]
> 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;


Каков велосипед :))
А есть такая чудная функция DrawText и флажок к ней DT_CENTER.


 
X-Fi   (2005-10-20 01:44) [17]


> Antonn ©   (19.10.05 09:33) [15]
> а я только запостил функцию растягивания текста, а остальное
> - сам, не так уж и сложно.


А я думал, что это ты так спасовал перед трудностью.

> превосходно разбираюсь, потому так и пишу, для себя ведь

А по моему ты лукавишь. Этот стиль называется "стена текста", он непонятен никому.


 
Antonn ©   (2005-10-20 01:58) [18]

X-Fi   (20.10.05 1:44) [17]
А я думал, что это ты так спасовал перед трудностью.

ничуть, у меня это заняло около 20 минут. Но постить не буду.

> А по моему ты лукавишь. Этот стиль называется "стена
> текста", он непонятен никому.

он мне понятен, код писан для себя, а не для кого-то. Тут, кстати, урезан, поэтому один семафор лишний.


 
X-Fi   (2005-10-20 05:17) [19]


> Antonn ©   (20.10.05 01:58) [18]
>
> X-Fi   (20.10.05 1:44) [17]
> А я думал, что это ты так спасовал перед трудностью.
> ничуть, у меня это заняло около 20 минут. Но постить не
> буду.


Тогда зачем писал ?


> > А по моему ты лукавишь. Этот стиль называется "стена
> > текста", он непонятен никому.
>
> он мне понятен, код писан для себя, а не для кого-то.


А по моему ты лукавишь. Психика работает у всех по одним законам, и ты не исключение.


 
Antonn ©   (2005-10-20 06:38) [20]

X-Fi   (20.10.05 5:17) [19]
Тогда зачем писал ?

А я для себя писал, интересно стало. Типа тренировки. Уже нашел ей применение в одном из проектов.

> А по моему ты лукавишь. Психика работает у всех по
> одним законам, и ты не исключение.

Причем тут психика? Не нравится форматирование - переворматируй. А лучше сотри его и пиши сам.


 
X-Fi   (2005-10-20 06:44) [21]


> Antonn ©   (20.10.05 06:38) [20]
>
> X-Fi   (20.10.05 5:17) [19]
> Тогда зачем писал ?
> А я для себя писал, интересно стало.


Вот видишь, это я тебе сделал интересно.


> Причем тут психика?


А при том. Что на её основании и были написаны правила оформления кода. И те, кто говорят, что правила нафиг ненужны, и что у них психика какая то особенная - врут.


 
Antonn ©   (2005-10-20 06:54) [22]

X-Fi   (20.10.05 6:44) [21]
Вот видишь, это я тебе сделал интересно.

ну и?

> И те, кто говорят, что правила нафиг ненужны,

я не говорил что они нафиг не нужны. я говорил, что разбираюсь в коде собственного написания.


 
X-Fi   (2005-10-20 07:49) [23]


> Antonn ©   (20.10.05 06:54) [22]
>
> X-Fi   (20.10.05 6:44) [21]
> Вот видишь, это я тебе сделал интересно.
> ну и?


А ты мне нет. Неблагодарный !


 
Antonn ©   (2005-10-20 08:04) [24]

X-Fi   (20.10.05 7:49) [23]
смотри пост [14]


 
X-Fi   (2005-10-21 02:41) [25]


> Antonn ©   (20.10.05 08:04) [24]
> X-Fi   (20.10.05 7:49) [23]
> смотри пост [14]


Мало того, что ты неблагодарный, так ещё и хам. Ну-ну. Пусть к тебе относятся также. С хамством и недавая тебе ничего взамен.


 
Zeqfreed ©   (2005-10-21 14:26) [26]

X-Fi   (21.10.05 2:41) [25]
А можно я чего-нибудь взамен дам? А именно, оч-чень полезную ссылку: http://lleo.aha.ru/na/



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.087 c
14-1129723404
ECM
2005-10-19 16:03
2005.11.13
"Верный вопрос"


2-1130168260
serko
2005-10-24 19:37
2005.11.13
Экспорт данных в Excel


14-1130140271
syte_ser78
2005-10-24 11:51
2005.11.13
какие базы (локальные) поодерживают украинскую локализацию?


2-1129541678
ZaW
2005-10-17 13:34
2005.11.13
Защищенные методы


2-1130077522
Vir
2005-10-23 18:25
2005.11.13
MS Excel