Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Работа с регионами


Автор: Grol 13.11.2005, 18:56
Добрый вечер. Возник такой вопрос: По Formcreat'у отображаю на форме какой-нибудь регион. Без разницы какой, ну например эллипс, т.е. форма ввиде эллипса. Забыл сказать на форме кнопка есть. В ней код создания еще одного региона (прямоугольник, но только размерами меньше, чем у самой формы) для отображения на форме. Так вот когда скомпилил прогу форма стала ввиде эллипса, нажимаю на кнопку --> форма меняет свой вид, эллипс пропадает, а прямоугольник появляется . А необходимо, чтоб эллипс комбинировался с прямоугольником. А как это сделать я не знаю, точнее не знаю нужной процедуры. Подскажите пожалуйста как это сделать. Спасибо заранее.

Автор: p0s0l 13.11.2005, 20:11
CombineRgn
http://vingrad.ru/DELPHI-DELPHI-002170

Автор: s-mike 13.11.2005, 20:12
Читай справку по работе с регионами, есть такая функция CombineRgn.

Автор: Grol 13.11.2005, 21:53
Мастера я наверное плохо описал свою проблему и ВЫ меня не поняли. smile Комбинировать регионы я умею. Проблема в следующем:
Когда я загружаю прогу, выполняется процедура создания регион ввиде эллипса. Вот formcreate:
Код

var 
 ellRg:HRGN;
begin
...
ellRg:=CreateEllipseRGN(100,100,width-100,heigth-100); //помойму так пишется
try
setwindowRGN(handle,ellrg,true);
finally
deleteobject(ellrg);
end;
end;

Значит прога загрузилась форма ввиде эллипса. Жму на кнопку. В кнопке:
Код

var
  RectFormRG:HRGN;
  Rect:HRGN;
begin
RectFormRG:=createrectRGN(0,0,width,heigth);
rect:=createrectRGN(20,20,width-20,heigth-20)
CombineRgn(RectFormRG,RectFormRG,rect,RGN_OR);
//в выше приведенной процедуре по идее (я так думаю) должен был объединится эллипс
// с прямоугольником
setwindowRGN(handle,rectformRg,true);
end;

Думаю, что сейчас будет понятно. То есть мне надо Комбинировать регион формы с новым регионом. А проблема возникает откуда взять этот регион формы.

Автор: p0s0l 14.11.2005, 10:04
GetWindowRgn:
Код
var
  RectFormRG:HRGN;
  Rect:HRGN;
begin
RectFormRG:=createrectRGN(0,0,0,0);
GetWindowRgn(handle, RectFormRG);
rect:=createrectRGN(20,20,width-20,height-20);
CombineRgn(RectFormRG,RectFormRG,rect,RGN_OR);
//в выше приведенной процедуре по идее (я так думаю) должен был объединится эллипс
// с прямоугольником
setwindowRGN(handle,rectformRg,true);
DeleteObject...

Автор: Grol 14.11.2005, 21:46
ща попробую, smile)) спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)