Форум: "Начинающим";
Текущий архив: 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