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

Вниз

Поворот текста из нескольких строк в TPicture...   Найти похожие ветки 

 
Slym ©   (2003-03-11 19:48) [0]

Требуется нарисовать строку со стилем WordWrap (разбиение на строки если не входит) повернутую на 90 градусов...
Сей код не рисует! Помогите мастаки...

var
LogFont:TLogFont;
Pic:TPicture;
R:TRect;
begin
GetObject(Self.Font.Handle,SizeOf(TLogFont),@LogFont);
LogFont.lfEscapement:=900;
pic:=TPicture.Create;
pic.Bitmap.Canvas.Font.Handle:=CreateFontIndirect(LogFont);

r:=pic.Bitmap.Canvas.ClipRect;
DrawText(pic.Bitmap.Canvas.Handle,PChar(str),-1,R,DT_CENTER or DT_WORDBREAK or DT_CALCRECT);
pic.Bitmap.Height:=r.Right;
pic.Bitmap.width:=r.Bottom;
DrawText(pic.Bitmap.Canvas.Handle,PChar(str),-1,R,DT_TOP or DT_CENTER or DT_WORDBREAK);
// далее с картинкой работаю по назначению
pic.Free;
end;


 
Slym ©   (2003-03-12 11:31) [1]

Ну никто не знает? Неверю!


 
Cobalt ©   (2003-03-12 12:36) [2]

В каком смысле "не рисует"?
Может, надо работать с объектом TImage, который размещен на форме, а не убивается сразу после отрисовки?


 
REA ©   (2003-03-12 12:45) [3]

pic.Bitmap.Canvas.ClipRect; - а он не пустой?
Хотя наверно не важно.
Что на выходе первого draw? Не исключено что DT_CENTER и DT_WORDBREAK не дружат.
А горизонтально все работает?
Не исключено, что после изменения размеров image пропадает font, выбранный для него, поскольку Delphi его может не запомнить.
Вобщем вопросов больше чем ответов...


 
Slym ©   (2003-03-12 13:55) [4]

Горизонтально работает...
Вертикально "тоже" (никаких ош. не выдает... WinAPI (DrawText) говорит "Все ОК"), но белая канва на выходе... или обрывок текста посредь канвы (повернутый)...

begin
GetObject(Self.Font.Handle,SizeOf(TLogFont),@LogFont);
LogFont.lfEscapement:=900;
pic:=TPicture.Create;//TPicture никакой не Image.
pic.Bitmap.Canvas.Font.Handle:=CreateFontIndirect(LogFont);

r:=pic.Bitmap.Canvas.ClipRect;//не обращайте внимания... нужен просто ненулевой рект, без нее след строка сработает неправильно
DrawText(pic.Bitmap.Canvas.Handle,PChar(str),-1,R,DT_CENTER or DT_WORDBREAK or DT_CALCRECT);//Вычисляет размер ректа для отрисовки, и без центровки тоже не работает...
//Вычисляет правильно!!!
pic.Bitmap.Height:=r.Right;
pic.Bitmap.width:=r.Bottom;
Изменяем размер картинки согласно вычисленным размерам
DrawText(pic.Bitmap.Canvas.Handle,PChar(str),-1,R,DT_CENTER or DT_WORDBREAK);
// далее с картинкой работаю по назначению
//т.е. рисую ее где надо и где ненадо
pic.Free;//картинка больше ненужна
end;


 
REA ©   (2003-03-12 14:39) [5]

Все же я бы попробовал установить pic.Bitmap.Canvas.Font.Handle во второй раз на всякий случай...
По идее ничего больше не должно мешать...



Страницы: 1 вся ветка

Текущий архив: 2003.03.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
7-76686
Timon
2003-01-10 19:55
2003.03.24
Модем


1-76462
SKing
2003-03-12 09:19
2003.03.24
Смоделировать свойство AutoSize для CheckBox?


1-76431
Юров Владимир
2003-03-10 22:14
2003.03.24
PHP&Delphi


14-76588
Mantic0re
2003-03-03 07:12
2003.03.24
16К - минимум для экзешника под дельфи ?!


14-76612
igorr
2003-03-07 15:29
2003.03.24
HTML Flash