Главная страница
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.02 c
14-76623
SPeller
2003-03-07 17:11
2003.03.24
С праздником, дорогие женщины!


1-76410
sagchat
2003-03-13 16:26
2003.03.24
if x>5 and x<15 then


9-76255
Madburro
2002-08-24 22:16
2003.03.24
GLScene - попадание


8-76514
roman_tutov
2002-12-07 18:28
2003.03.24
Video for Delphi:)


1-76452
R
2003-03-12 01:37
2003.03.24
Удаление ключа в реестре