Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.14;
Скачать: 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 вся ветка

Текущий архив: 2007.10.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
1-1185882922
oxffff
2007-07-31 15:55
2007.10.14
Статический вызов виртуального метода.


15-1189636957
Бакук
2007-09-13 02:42
2007.10.14
Англия-Россия-3:0


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


3-1181379653
Девушка
2007-06-09 13:00
2007.10.14
странное поведение interbase?


2-1190047625
Johnnnn
2007-09-17 20:47
2007.10.14
TidPop3