Вниз
Скачать: CL | DM;

Рисовать по региону   Найти похожие ветки 

← →
Jimmy   (2007-09-20 21:12) [0]

Создаю регион:
var  HRgn: THandle;
BeginPath(Image1.Canvas.Handle);
with Image1.Canvas do
  begin
  Font.Name  := "Comic Sans MS";
  Font.Size  := 64;
  Font.Style := [fsBold];
  Font.Color:=clBlack;
  TextOut(0, 0, "String");
  end;
EndPath(Image1.Canvas.Handle);
HRgn := PathToRegion(Image1.Canvas.Handle);
Что теперь нужно сделать, чтобы после команды например
Image1.Canvas.Rectangle(0,0,100,50);
прорисовка проходила только по области региона?


← →
antonn ©   (2007-09-20 21:14) [1]

давай еще раз, можно с картинками%)


← →
Anatoly Podgoretsky ©   (2007-09-20 21:33) [2]

> Jimmy  (20.09.2007 21:12:00)  [0]

Дать любую команду рисования, рисовать будет только внутри региона


← →
Jimmy   (2007-09-20 21:36) [3]

Однако этого не происходит. Что-то в моем коде не так.


← →
Однокамушкин   (2007-09-20 21:40) [4]

См. функцию SelectClipRgn... или сразу SelectClipPath, тогда PathToRegion можно не вызывать


← →
Jimmy   (2007-09-20 21:48) [5]

Добавил SelectClipRgn(Image1.Canvas.Handle,HRgn); получилось. Только регион задался вне текста, а мне нужно внутри.


← →
Однокамушкин   (2007-09-20 21:51) [6]


> Только регион задался вне текста, а мне нужно внутри.


Это у вас регион такой получился... Чтобы регион был внутри букв, перед TextOut добавьте вызов SetBkMode(Handle, TRANSPARENT);


← →
Jimmy   (2007-09-20 22:08) [7]

Все получилось! Большое спасибо! Но все же еще вопрос: Если в моем коде к строке TextOut(0, 0, "String"); добавить TextOut(0, 2, "String"); то пересечение выпадает из региона. Как этого избежать и не дадите ли какую-нибудь ссылочку на справку по регионам?


← →
Однокамушкин   (2007-09-20 22:14) [8]


> в моем коде к строке TextOut(0, 0, "String"); добавить TextOut(0,
>  2, "String"); то пересечение выпадает из региона.

В качестве идеи, не уверен, что получится: попробуйте перед выводом текста добавить ещё SetPolyFillMode(Handle, WINDING);

Если не получится, то придётся немного повозиться: сначала сделать регион с одной надписью, потом с другой, а потом объединить их функцией CombineRgn

> не дадите ли какую-нибудь ссылочку на справку по регионам?

Лучше MSDN ещё никто ничего не придумал: http://msdn2.microsoft.com/en-us/library/ms536684.aspx


← →
Инс ©   (2007-09-20 22:17) [9]


> [7] Jimmy   (20.09.07 22:08)

Попробуйте вставит вызов
SetPolyFillMode(Image1.Canvas.Handle,WINDING);


← →
Инс ©   (2007-09-20 22:18) [10]

Эх, долго искал... :)


← →
Однокамушкин   (2007-09-20 22:23) [11]


> Инс ©   (20.09.07 22:18) [10]
> Эх, долго искал... :)

Как говорят немцы, In grosse Familie kluvom klaz-kalz nicht!


← →
homm ©   (2007-09-20 22:24) [12]

> [11] Однокамушкин   (20.09.07 22:23)
> In grosse Familie kluvom klaz-kalz nicht

Кажется я расшифровал :) Круто.


← →
Инс ©   (2007-09-20 22:25) [13]


> Как говорят немцы, In grosse Familie kluvom klaz-kalz nicht!

:))) Учту!



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.015 c
2-1189832773
vegarulez
2007-09-15 09:06
2007.10.14
Вопрос про Button.Free


4-1176143482
pit94
2007-04-09 22:31
2007.10.14
Как определить перемен.окружения?


15-1190042067
Pdkle
2007-09-17 19:14
2007.10.14
Объясните, пожалуйста, устное решение задачи №2


2-1189680614
CheckIT
2007-09-13 14:50
2007.10.14
Уменьшение разрешения картинки


2-1189796974
AlRal
2007-09-14 23:09
2007.10.14
Поставить один GroupBox над другим




   Наверх