![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
реализовать подстрочный вывод текста [D7]
wsih © (2006-05-25 21:23:00)Здраствуйте!
У меня сравнительно мало опыта в Delphi, (неожиданно для себя нахожу возможности, которые на несколько десятков а то и сотен строк сокращают код).
Стоит задача реализации подстрочного вывода текста на канву.
Есть какие нибуть идеи у кого-то?
wsih (2006-05-26 01:02:00) [1]
> И что это меняет, простите?
> <Цитата>
Посмотрите, как работает процедура [9]
она конечно кривовата )...
Суть такова: взять символ из строки. если встречается символ "_" - поменять координату Y, добавить к координате x - размер предидущего символа, вывести символ
else востановить Y;добавить к координате x - размер предидущего символа; вывести символ
Джо (2006-05-26 00:56:00) [2]> [11] wsih © (26.05.06 00:55)
> В моем случае - никак не проще... взгляните
И что это меняет, простите?
wsih (2006-05-26 00:55:00) [3]
> Нет, проще всего сразу выводить текст под нужным углом.
В моем случае - никак не проще... взгляните
y:=y+round(img2.Canvas.TextHeight(str[z])/2);
x:=x+img2.Canvas.TextWidth(str[z-1])+1;
Джо (2006-05-26 00:51:00) [4]> Для того, что бы это все повернуть на любой угол проще всего
> - повернуть картинку с изображением оного.
Нет, проще всего сразу выводить текст под нужным углом.
Т.е, в таком роде:
var
LogFont : TLogFont;
...
with Canvas do
begin
GetObject(Font.Handle, SizeOf(TLogFont), @LogFont);
LogFont.lfEscapement := FontAngle*10;
Font.Handle := CreateFontIndirect(LogFont);
TextOut...
...
wsih (2006-05-26 00:47:00) [5]пардон - совсем плохой
procedure TForm1.Button1Click(Sender: TObject);
var
str:string;
x,y,i,z,l:integer;
flag:boolean;
begin
str:='X_i+Z_i:=Y_q';
x:=10;
y:=10;
z:=1;
flag:=false;
l:=Length(str);
for i:=0 to l-1 do begin
if z<l then begin
if Str[Z]='_' then
begin
if flag=false then begin
y:=y+round(img2.Canvas.TextHeight(str[z])/2);
x:=x+img2.Canvas.TextWidth(str[z-1])+1;
img2.Canvas.Font.Size:=round(img2.Canvas.Font.Size/10);
end else x:=x+img2.Canvas.TextWidth(str[z-1])+1;
flag:=true;
inc(z);
img2.Canvas.TextOut(x,y,String(str[z]));
inc(z);
end
else begin
flag:=false;
y:=10;
img2.Canvas.Font.Size:=15;
x:=x+img2.Canvas.TextWidth(Str[z-1])+1;
img2.Canvas.TextOut(x,y,String(str[z]));
inc(z);
end;
end;
end;
end;
wsih (2006-05-26 00:46:00) [6]Ну что-ж. Буду полагаться на свои руки и мозг.
Вот первые мои зарисовки наскоро. Выводит в нижнем регистре 1 символ после "_" в горизонтальной строке.
Для того, что бы это все повернуть на любой угол проще всего - повернуть картинку с изображением оного. Как проще всего (повторяюсь - виной всему депривация сна) - повернуть канву?
Мефисто (2006-05-25 22:52:00) [7]wsih © (25.05.06 22:45) [5]
>> У меня сравнительно мало опыта в Delphi, (неожиданно для себя нахожу возможности,
>> которые на несколько десятков а то и сотен строк сокращают код).
Заявленные желания в данные рамки не укладываются :) Стандартных решений нет. Следовательно используем, чье-то готовое или свое (руги, мозг) :) Для реализации данной задачи требуется немало времени и усилий.
Поищите на королевстве дельфи. Там была какаято библиотечка реализующие данные возможности. Только я не помню, как она называлась.
Leonid Troyanovsky (2006-05-25 22:49:00) [8]
> wsih © (25.05.06 22:40) [4]
> у меня в данный момент самая свежая - ветка 25.05.06 21:
> 14.
Однако, в зависимости от часового пояса это может быть
актуальное время?
Ну, и кроме того, возможны административные проблемы,
фаревол, ISA (или как его там?) и тп.
--
Regards, LVT.
wsih (2006-05-25 22:45:00) [9]
> Loginov Dmitry © (25.05.06 21:45) [2]
> Думаю, следует использовать
> Canvas.TextOut и Canvas.Font
Разбивать строку посимвольно и после спец. символа или комбинации менять размер шрифта. А как вычислить координаты, по которым заканчивается "крупный" текст и начинается "мелкий"? Текст может выводится под углом.
wsih (2006-05-25 22:40:00) [10]To Leonid Troyanovsky
http://www.delphimaster.ru/cgi-bin/forum.pl?n=0- здесь у меня в данный момент самая свежая - ветка 25.05.06 21:14.
Свою ветку я нахожу только через поиск, и то она у меня только после нескольких обновлений выводит все ответы (я надеюсь)... Firefox, IE. Кеш чистил.
Leonid Troyanovsky (2006-05-25 22:16:00) [11]
> wsih © (25.05.06 21:35) [1]
> И еще вопрос не в тему - это только у меня форум так странно
> обновляется или у всех?
А в чем странности обновления кажутся выделяющимися среди всех?
--
Regards, LVT.
Loginov Dmitry (2006-05-25 21:45:00) [12]Думаю, следует использовать
Canvas.TextOut и Canvas.Font
wsih (2006-05-25 21:35:00) [13]Поправка - текста, который содержит в себе подстрочные символы.
И еще вопрос не в тему - это только у меня форум так странно обновляется или у всех?