Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1300809539
rxQ
2011-03-22 18:58
2011.07.10
ПО под GPL и платные компоненты


15-1300469572
tesseract
2011-03-18 20:32
2011.07.10
На чистых прудах не только оказывается пивбары есть :-)


15-1300947070
OW
2011-03-24 09:11
2011.07.10
Как бы Вы написали и почему?


15-1300952862
oxffff
2011-03-24 10:47
2011.07.10
Сегодня полетит к нам Ижемский ТУ-154М


8-1212730666
DJ Kondakov
2008-06-06 09:37
2011.07.10
Проигрывание AVI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский