Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Рисовать по региону [D6, XP]


Jimmy ©   (2007-09-20 21:12:00) 

Создаю регион:
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);
прорисовка проходила только по области региона?


Инс   (2007-09-20 22:25:00) [1]


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

:))) Учту!


homm   (2007-09-20 22:24:00) [2]

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

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


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


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

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


Инс   (2007-09-20 22:18:00) [4]

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


Инс   (2007-09-20 22:17:00) [5]


> [7] Jimmy   (20.09.07 22:08)

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


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


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

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

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

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

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


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

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


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


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


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


Jimmy   (2007-09-20 21:48:00) [9]

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


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

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


Jimmy   (2007-09-20 21:36:00) [11]

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


Anatoly Podgoretsky   (2007-09-20 21:33:00) [12]

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

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


antonn   (2007-09-20 21:14:00) [13]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо