Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
15-1150095145
Sasha:)
2006-06-12 10:52
2006.07.09
Помогите плиз!


2-1150795567
Lex_!
2006-06-20 13:26
2006.07.09
Картинки в MSSQL2000


2-1150960522
Квэнди
2006-06-22 11:15
2006.07.09
Проблема с свойствами объекта


1-1147980331
S@shka
2006-05-18 23:25
2006.07.09
Как корректно заточить прогу под WindowsXP


2-1151080131
resuS
2006-06-23 20:28
2006.07.09
Сортировка по алфавиту





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский