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

Вниз

Вывод текста на 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
2-1301648853
Len
2011-04-01 13:07
2011.07.10
Приложение выдает ошибку missing drivernane property


9-1189378302
max_
2007-09-10 02:51
2011.07.10
текстура


15-1301148266
Учусь
2011-03-26 17:04
2011.07.10
[Fatal Error] Internal error: BC2241


15-1300809539
rxQ
2011-03-22 18:58
2011.07.10
ПО под GPL и платные компоненты


15-1300915800
Юрий
2011-03-24 00:30
2011.07.10
С днем рождения ! 24 марта 2011 четверг