Форум: "Основная";
Текущий архив: 2003.03.24;
Скачать: [xml.tar.bz2];
ВнизПоворот текста из нескольких строк в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c