Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

Как вывести текст на 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.034 c
14-1129747692
ArtemESC
2005-10-19 22:48
2005.11.13
Delphi environment


1-1130011760
starling13
2005-10-23 00:09
2005.11.13
строки из DLL


14-1129788075
dreamse
2005-10-20 10:01
2005.11.13
Проблема с доступом к сайту !


9-1120154182
cherep36
2005-06-30 21:56
2005.11.13
GLScene


1-1129788909
Zhekson
2005-10-20 10:15
2005.11.13
Как на определённое время повесить надпись поверх всех окон?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский