Форум: "Прочее";
Текущий архив: 2011.07.10;
Скачать: [xml.tar.bz2];
ВнизВывод текста на TCanvas с обтеканием картинки? Найти похожие ветки
← →
Baks (2011-03-28 22:45) [0]Подскажите, как лучше сделать вывод текста на TCanvas с обтеканием картинки? Например, нужно вывести текст и рядом картинку.
← →
KilkennyCat © (2011-03-28 22:46) [1]winapi drawtext dt_calcrect
← →
Dimka Maslov © (2011-03-29 00:23) [2]Canvas.Draw
Canvas.TextRect
← →
Baks (2011-03-29 00:41) [3]Эти функции вычисляют размер прямоугольника для текста и выводят в нём текст. А при обтекании получается как бы два разных прямоугольника. Одина рядом с текстом, а другой под картинкой, продолжение текста. Получается, что текст нужно вывести на двух разных прямоугольниках.
Вот как это сделать? Хотелось бы по подробней.
← →
KilkennyCat © (2011-03-29 01:19) [4]
> Вот как это сделать? Хотелось бы по подробней.
что подробнее? как сравнить несколько прямоугольников? это же примитивная математика. Необходимые функции указаны, задача далее никакого отношения к программированию не имеет, и в частности, к Делфи.
← →
Anatoly Podgoretsky © (2011-03-29 09:06) [5]> Baks (29.03.2011 00:41:03) [3]
Если ОДИНА. то ДРУГАЯ прямоугольник
← →
han_malign (2011-03-29 14:32) [6]
> Получается, что текст нужно вывести на двух разных прямоугольниках.
> Вот как это сделать? Хотелось бы по подробней.
- вычисляешь сколько текста поместится в первый, остальное выводишь во второй.
DrawText - DT_MODIFYSTRING
DrawTextEx - DRAWTEXTPARAMS.uiLengthDrawn
← →
Baks (2011-03-29 18:55) [7]DrawText с DT_MODIFYSTRING приводит к AV.
DrawText(PaintBox1.Canvas.Handle, PChar(Str), Length(Str), Rct, DT_MODIFYSTRING);
← →
Игорь Шевченко © (2011-03-29 19:03) [8]
> DrawText с DT_MODIFYSTRING приводит к AV.
RTFM:
"DT_MODIFYSTRING Modifies the specified string to match the displayed text. This value has no effect unless DT_END_ELLIPSIS or DT_PATH_ELLIPSIS is specified. "
← →
Baks (2011-03-29 19:23) [9]DrawText(PaintBox1.Canvas.Handle, PChar(Str), Length(Str), Rct, DT_MODIFYSTRING or DT_END_ELLIPSIS);
Тот же AV
← →
clickmaker © (2011-03-29 19:31) [10]Str как объявлена? не const ли часом?
← →
Baks (2011-03-29 19:47) [11]var
Rct: TRect;
Str: String;
begin
Str := "Подскажите, как лучше сделать вывод текста на TCanvas с
обтеканием картинки?";
Rct := PaintBox1.ClientRect;
DrawText(PaintBox1.Canvas.Handle, PChar(Str), Length(Str), Rct, DT_MODIFYSTRING or DT_END_ELLIPSIS);
Если Str := "", то AV нет, а если текст присвоен, то AV.
← →
Baks (2011-03-29 19:57) [12]Попробовал вывести на Canvas формы, текст выводится но Access Violation in ntdll.dll
← →
DiamondShark © (2011-03-29 19:58) [13]
> Str := "Подскажите, как лучше сделать вывод текста на TCanvas
> Если Str := "", то AV нет, а если текст присвоен, то AV.
А если перед DrawText добавить UniqueString(Str)?
← →
Baks (2011-03-29 20:09) [14]UniqueString(Str);
Теперь всё хорошо! А почему так? Никогда такого не встречал.
← →
Baks (2011-03-29 20:12) [15]Вот в справке написано:
Only in cases where an application casts a string to a PChar and then modifies the contents of the string must UniqueString be used.
← →
DiamondShark © (2011-03-29 20:13) [16]
> Baks (29.03.11 20:09) [14]
> А почему так?
Потому что литеральные строки находятся в области памяти, доступной только для чтения.
← →
Игорь Шевченко © (2011-03-29 20:13) [17]ну и в чем проблема ?
ясно же написано: "Только в тех случаях, когда применение бросает строку PChar, а затем изменяет содержание строка должна быть использована UniqueString"
← →
Baks (2011-03-29 20:19) [18]
> DiamondShark [16]
Спасибо, теперь понятно.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2011.07.10;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c