Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывести многострочный текст, под углом 
:(
    Опции темы
Illusion Dolphin
  Дата 1.4.2005, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



Собственно, всё просто: нужно вывести многострочный текст под углом. Пока ничего не выходит (а ручками разбивать на строки и выводить со смещением как-то некрасиво).


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Girder
Дата 2.4.2005, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 2
Всего: 155



Не понятно... куда ты его хочеш выводить... smile ну да ладно smile
Код
procedure StrRotated(Win:THandle;Font:HFont;Str:string;Ang:Extended);
var nXF,oXF:TXForm;
    s:TStrings;
    i:integer;
    r:TSize;
    DC:HDC;
    fNew,fOld:HFont;
begin
 DC:=GetDC(Win);
 fNew:=SendMessage(Win,WM_GETFONT,0,0);
 if fNew=0 then fNew:=Font;
 fOld:=SelectObject(DC,fNew);
 s:=TStringList.Create;
 s.Text:=Str;
 SetGraphicsMode(DC,GM_Advanced);
 GetWorldTransform(DC,oXF);
 nXF.eM11:=Cos(Ang*Pi/180);
 nXF.eM22:=Cos(Ang*Pi/180);
 nXF.eM12:=Sin(Ang*Pi/180);
 nXF.eM21:=-Sin(Ang*Pi/180);
 nXF.eDX:=0;
 nXF.eDY:=0;
 ModifyWorldTransform(DC,nXF,MWT_LEFTMULTIPLY);
 for i:=0 to s.Count-1 do
  begin
   GetTextExtentPoint32(DC,PChar(s.Strings[i]),Length(s.Strings[i]),r);
   TextOut(DC,0,i*r.cy,PChar(s.Strings[i]),Length(s.Strings[i]));
  end;
 SetWorldTransform(DC,oXF);
 s.Free;
 SelectObject(DC,fOld);
 ReleaseDC(Win,DC);
end;
Использование: StrRotated(Memo1.Handle,Memo1.Font.Handle,Memo1.text,20);
или
StrRotated(Form1.Handle,Form1.Font.Handle,Memo1.text,20);


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Illusion Dolphin
Дата 2.4.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



Цитата

а ручками разбивать на строки и выводить со смещением как-то некрасиво

Значит остановились именно на этом варианте smile (просто хотелочь что-то вроде DrawText, чтобы сразу с флагом переноса...)
Просто было неохоро разбивать на строки, ибо у меня текст выводится кроме всего прочего в определённом Rect, выходить за который низя - нужно переносить. Значит пошёл я разбивать вручную и переночить лишние словечки smile
НО! Нужно вывести текст БЕЗ ФОНА, т.е. как со стилем bsclear. Что-то пока не нахожу способа...


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Girder
Дата 2.4.2005, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 2
Всего: 155



Добавь: SetBkMode(DC, TRANSPARENT)

К примеру:
Код
...
 s.Text:=Str;
 SetBkMode(DC, TRANSPARENT);
 SetGraphicsMode(DC,GM_Advanced);
...



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Illusion Dolphin
Дата 2.4.2005, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 13
Всего: 63



Girder, да, я уже нашёл smile При этом даже не оьязательно юзать TextOut и GetTextExtentPoint32 - DrawText класно справляется с этим. Только слышал об ограничении ModifyWorldTransform в винь98... Если это так. то жаль :/


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Girder
Дата 3.4.2005, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 2
Всего: 155



Цитата(Illusion @ 2.4.2005, 20:58)
Если это так. то жаль :/
Ну... есть ещё же способы smile

Например, для текста(только текста) smile :
Код
procedure TForm1.Button1Click(Sender: TObject);
var LF:TLogFont;
    FontNew,FontOld:HFont;
    DC:HDC;
    s:string;
begin
 DC:=GetDC(Form1.Handle);
 SetBKMode(DC,Transparent);
 GetObject(Form1.Canvas.Font.Handle,SizeOf(LF),@LF);
 LF.lfEscapement:=-20*10;
 LF.lfOrientation:=-20*10;
 FillChar(LF.lfFaceName,Length(LF.lfFaceName),#0);
 LF.lfFaceName:='Microsoft Sans Serif'; // :)
 FontNew:=CreateFontIndirect(LF);
 FontOld:=SelectObject(DC,FontNew);
 s:='VVGGTTLL';
 TextOut(DC,0,0,PChar(s),Length(s));
 SelectObject(DC,FontOld);
 ReleaseDC(Form1.Handle,DC);
 DeleteObject(FontNew);
end;

PS: Не для каждого шрифта smile

Это сообщение отредактировал(а) Girder - 3.4.2005, 03:42


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.