Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вывод текста на канве [D7, WinXP]


Страницы:   1 2

gtr86 ©   (2007-09-19 14:58:00) 

Здравствуйте уважаемые мастера, столкнулся с следующей проблемой: нужно реализовать небольшую прогу типа MSPaint, так вот, как добавить текст на канву как в паинте, т.е. сначала выделяется область для вводимого текста, после чего вводится сам текст.


Дельфин   (2007-09-26 10:31:00) [1]


> antonn ©   (25.09.07 12:36) [36]
> если испульзется 3Д


Почти угадал, 2Д. Не хочу последовать за кучей начинающих в таких делах - понапридумывать себе мега 3Д, перед которой все попадают на колени, а затем забросить, потому что оказалось сильно сложно. Хочу сначала сделать 2Д в стиле Fallout или хотя бы что-то вроде этого, а потом видно будет.


> homm ©   (25.09.07 12:41) [37]
> > [36] antonn ©   (25.09.07 12:36)> если испульзется 3Д
> Ты сабж читал? :)

Сам автор сабжа уже давно распрощался с этой темой. Я продолжил сюда писать, просто чтобы не заводить по сути такую же заново.


Дельфин   (2007-09-26 10:00:00) [2]

Все, уже не нужно. Написал программу, создающую BMP шрифт - супер! Без проблем можно работать со шрифтами, у которых различаются ширина разных символов, так что вообще отлично. Плюс проще находить символы - они расписаны не рядами, а в строчку. В общем - здорово! Приятно, когда сам находишь выход из ситуации.


antonn   (2007-09-25 13:10:00) [3]

мы уже давно то сабжа отошли :)


homm   (2007-09-25 12:41:00) [4]

> [36] antonn ©   (25.09.07 12:36)
> если испульзется 3Д

Ты сабж читал? :)


antonn   (2007-09-25 12:36:00) [5]


>
> А что, использовать тот Courier New, что в системе установлен,
>  религия не позволяет?

если испульзется 3Д то, как мне думается (я плохо знаю, но смею думать:)), было бы куда быстрее выводить буковки спрайтами, нагружая на этот процесс видеокарту, а не мучать "рендер" винды с процессором. К тому же на корейской винде не будет кракозябров со спрайтами %)


antonn   (2007-09-25 12:34:00) [6]


> Курьер могоширийный :)
>

мне пофиг, я показал как выводить, а там уж можно и сделать как себе удобней :)


homm   (2007-09-25 12:32:00) [7]

> [32] antonn ©   (25.09.07 12:31)

Курьер могоширийный :)


homm   (2007-09-25 12:31:00) [8]

> [31] Дельфин   (25.09.07 11:05)

А что, использовать тот Courier New, что в системе установлен, религия не позволяет?


antonn   (2007-09-25 12:31:00) [9]

можно и самому написать, примерно так:
procedure TForm1.Button1Click(Sender: TObject);
var i,w,h:integer; bt:tbitmap;
begin
bt:=tbitmap.Create;
try
 bt.Canvas.Font.Name:='Courier New';
 bt.canvas.Font.Size:=12;
 h:=0;
 w:=0;
for i:=32 to 255 do begin
 if(h<bt.Canvas.TextHeight(char(i))) then h:=bt.Canvas.TextHeight(char(i));
 w:=w+bt.Canvas.TextWidth(char(i));
end;
 bt.Width:=w;
 bt.Height:=h;
 w:=0;
for i:=32 to 255 do begin
 bt.Canvas.TextOut( w, h-bt.Canvas.TextHeight(char(i)), char(i));
 w:=w+bt.Canvas.TextWidth(char(i));
end;
 bt.SaveToFile('C:\111.bmp');
finally
 bt.Free;
end;
end;


Дельфин   (2007-09-25 11:05:00) [10]

Кстати, а где достать программу для создания таких шрифтов. Весь яндекс облазил - находил только версии, которые делают английскую раскладку шрифта, а мне нужна русская! Обычного Courier New.


antonn   (2007-09-23 22:14:00) [11]

mspaint как раз не зло, очень удобный, а главное очень быстрый и позволяет увеличивать в 10 раз и точно не промахиваясь работать с пикселями.


>
> То есть потом со шрифтом работают как со спрайтом? типа
> спрайт со множеством кадров анимации? Каждая анимация -
> отдельная буква, я правильно понимаю?

ээ, ну да, наверное:) просто берется позиция букквы в алфавите, умножается на ширину одной буквы в битмапе и координата Х готова (ну эт для моношириных шрифтов), а потом просто копируется куда нужно


Дельфин   (2007-09-23 15:58:00) [12]


> antonn ©   (22.09.07 19:43) [26]
> в пайнте.шрифты эти делают по простой причине - они не зависят
> от шрифтов системы, на них можно делать эффекты и они быстро
> рисуются.можно такое сделать и в дельфи, не сложно ведь

То есть потом со шрифтом работают как со спрайтом? типа спрайт со множеством кадров анимации? Каждая анимация - отдельная буква, я правильно понимаю?


{RASkov}   (2007-09-23 13:50:00) [13]

> [27] Denis_ ©   (23.09.07 12:43)
> паинт - тоже зло

Паинт - TPaintBox?
А что же не зло-то тогда? :)
И почему паинт - зло?
:)


Denis_   (2007-09-23 12:43:00) [14]


> > TImage - зло
>
> Это было в чей адрес? Я и не думал им пользоваться

Это было в адрес TImage'а.
паинт - тоже зло.


antonn   (2007-09-22 19:43:00) [15]

в пайнте.
шрифты эти делают по простой причине - они не зависят от шрифтов системы, на них можно делать эффекты и они быстро рисуются.
можно такое сделать и в дельфи, не сложно ведь


Дельфин   (2007-09-22 17:57:00) [16]

По поводу текста без ненужного фона... А как делают шрифт в играх? Типа я встречал файл *.bmp, в котором написан весь алфавит. И в игре он выводится нормально... В каких программах можно сделать такой файл содержаший весь алфавит?


Дельфин   (2007-09-22 17:52:00) [17]

А без компонентов, тем паче сторонних что никак невозможно вывести текст на канву без прямоугольника, в который он вписан? Что-то слабо верится...


> Fenik ©   (21.09.07 09:30) [22]
> TImage - зло

Это было в чей адрес? Я и не думал им пользоваться!


gtr86   (2007-09-22 15:56:00) [18]

Проблема с выводом текста на канву решен. Воспользовался компонентом CoolForm, в составе которого есть TransparentMemo. После выделения области для текста появляется TransparentMemo в который ввожу текст. По завершению ввода текста передаю лайны (TransparentMemo.lines.strings[]) TextRect'у. Скрываю TransparentMemo. Усе. Всем удачи.


Fenik   (2007-09-21 09:30:00) [19]

TImage - зло


Дельфин   (2007-09-20 22:57:00) [20]


> homm ©   (20.09.07 22:23) [20]
> > [19] Дельфин   (20.09.07 22:22)> Canvas.Brush.Style:=bsClear;
> а где Bitmap. ?

Ну конечно же Bitmap!


Bitmap.Canvas.Brus.Style:=bsClear;
Bitmap.Canvas.TextOut(110,204,Player.Name);


Тот же результат - фон - черный прямоугольник - текст


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо