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

Вниз

реализовать подстрочный вывод текста   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.039 c
15-1149854370
RomanH
2006-06-09 15:59
2006.07.09
Помогите с конвертацией JP2


1-1148834816
Mixa
2006-05-28 20:46
2006.07.09
построение графиков Chart


2-1150833840
Glivera
2006-06-21 00:04
2006.07.09
Сохранение Excel документа


1-1148686286
wsih
2006-05-27 03:31
2006.07.09
Сортировака TreeView


2-1151128286
JEK_DELPHI
2006-06-24 09:51
2006.07.09
Как можна из приложения запустить *.chm