Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
Внизреализовать подстрочный вывод текста Найти похожие ветки
← →
wsih © (2006-05-25 21:23) [0]Здраствуйте!
У меня сравнительно мало опыта в Delphi, (неожиданно для себя нахожу возможности, которые на несколько десятков а то и сотен строк сокращают код).
Стоит задача реализации подстрочного вывода текста на канву.
Есть какие нибуть идеи у кого-то?
← →
wsih © (2006-05-25 21:35) [1]Поправка - текста, который содержит в себе подстрочные символы.
И еще вопрос не в тему - это только у меня форум так странно обновляется или у всех?
← →
Loginov Dmitry © (2006-05-25 21:45) [2]Думаю, следует использовать
Canvas.TextOut и Canvas.Font
← →
Leonid Troyanovsky © (2006-05-25 22:16) [3]
> wsih © (25.05.06 21:35) [1]
> И еще вопрос не в тему - это только у меня форум так странно
> обновляется или у всех?
А в чем странности обновления кажутся выделяющимися среди всех?
--
Regards, LVT.
← →
wsih © (2006-05-25 22:40) [4]To Leonid Troyanovsky
http://www.delphimaster.ru/cgi-bin/forum.pl?n=0 - здесь у меня в данный момент самая свежая - ветка 25.05.06 21:14.
Свою ветку я нахожу только через поиск, и то она у меня только после нескольких обновлений выводит все ответы (я надеюсь)... Firefox, IE. Кеш чистил.
← →
wsih © (2006-05-25 22:45) [5]
> Loginov Dmitry © (25.05.06 21:45) [2]
> Думаю, следует использовать
> Canvas.TextOut и Canvas.Font
Разбивать строку посимвольно и после спец. символа или комбинации менять размер шрифта. А как вычислить координаты, по которым заканчивается "крупный" текст и начинается "мелкий"? Текст может выводится под углом.
← →
Leonid Troyanovsky © (2006-05-25 22:49) [6]
> wsih © (25.05.06 22:40) [4]
> у меня в данный момент самая свежая - ветка 25.05.06 21:
> 14.
Однако, в зависимости от часового пояса это может быть
актуальное время?
Ну, и кроме того, возможны административные проблемы,
фаревол, ISA (или как его там?) и тп.
--
Regards, LVT.
← →
Мефисто (2006-05-25 22:52) [7]wsih © (25.05.06 22:45) [5]
>> У меня сравнительно мало опыта в Delphi, (неожиданно для себя нахожу возможности,
>> которые на несколько десятков а то и сотен строк сокращают код).
Заявленные желания в данные рамки не укладываются :) Стандартных решений нет. Следовательно используем, чье-то готовое или свое (руги, мозг) :) Для реализации данной задачи требуется немало времени и усилий.
Поищите на королевстве дельфи. Там была какаято библиотечка реализующие данные возможности. Только я не помню, как она называлась.
← →
wsih © (2006-05-26 00:46) [8]Ну что-ж. Буду полагаться на свои руки и мозг.
Вот первые мои зарисовки наскоро. Выводит в нижнем регистре 1 символ после "_" в горизонтальной строке.
Для того, что бы это все повернуть на любой угол проще всего - повернуть картинку с изображением оного. Как проще всего (повторяюсь - виной всему депривация сна) - повернуть канву?
← →
wsih © (2006-05-26 00:47) [9]пардон - совсем плохой
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;
← →
Джо © (2006-05-26 00:51) [10]> Для того, что бы это все повернуть на любой угол проще всего
> - повернуть картинку с изображением оного.
Нет, проще всего сразу выводить текст под нужным углом.
Т.е, в таком роде:
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:55) [11]
> Нет, проще всего сразу выводить текст под нужным углом.
В моем случае - никак не проще... взгляните
y:=y+round(img2.Canvas.TextHeight(str[z])/2);
x:=x+img2.Canvas.TextWidth(str[z-1])+1;
← →
Джо © (2006-05-26 00:56) [12]> [11] wsih © (26.05.06 00:55)
> В моем случае - никак не проще... взгляните
И что это меняет, простите?
← →
wsih © (2006-05-26 01:02) [13]
> И что это меняет, простите?
> <Цитата>
Посмотрите, как работает процедура [9]
она конечно кривовата )...
Суть такова: взять символ из строки. если встречается символ "_" - поменять координату Y, добавить к координате x - размер предидущего символа, вывести символ
else востановить Y;добавить к координате x - размер предидущего символа; вывести символ
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c