Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

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

 
grol ©   (2005-11-13 18:58) [0]

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


 
MBo ©   (2005-11-13 19:35) [1]

>А необходимо, чтоб эллипс комбинировался с прямоугольником.
CombineRgn


 
grol ©   (2005-11-13 21:15) [2]

Это понятно, что есть такая процедура комбинирования, а вот меня интересует, как к уже существующему региону, отображенному на форме, добавить еще один регион. Пример:
//в бутоне

var
rectrg:HRGN;
begin
rectrg:=createrectrgn(0,0,width,heigth); //регион формы
//потом комбинирую с прямоугольником, про который я говорил с самого
//начала с помощью CombineRgn и отображаю
setwindowrgn(handle,rectrg,true);
//то у меня отображается всего лишь прямоугольник,а эллипса уже нет,
//а мне это не нужно
...
end;

Почему так происходит я догадываюсь, т.к. когда я создаю RectRg регион формы, то он не сохраняет, изменения, которые уже были сделаны.


 
злобная танька   (2005-11-13 21:46) [3]

по логике вещей если есть SetWindowRgn то значит есть и GetWindowRgn!
попробуй вызови эту функцию.. Если получится - полученный регион комбайнь со своим прямоугольником и делай Set...


 
Grol ©   (2005-11-14 21:43) [4]

:) Как нестранно, но я уже этой функцией пытался возвратить регион формы,  у меня почему-то не получается. Смотрел эта процедура вообще не изменяет ту переменную в которую я хочу сохранить регион формы. :(((
Не знаю что делать...


 
wicked ©   (2005-11-15 02:01) [5]

> Grol ©   (14.11.05 21:43) [4]

> :) Как нестранно, но я уже этой функцией пытался возвратить
> регион формы,  у меня почему-то не получается. Смотрел эта
> процедура вообще не изменяет ту переменную в которую я хочу
> сохранить регион формы. :(((
> Не знаю что делать...

как ни странно - читать msdn.... там всё черным по белому написано - GetWindowRgn достает из окна копию региона и помещает её в тот хендл региона, который ей должен подсунуть программист.... хендл тот программист и должен создать, например, создав пустой регион - CreateRectRgn(0, 0, 0, 0)..... т.о. переменных она не меняет, а вот данные, которые лежат в памяти GDI - да....
и пример там дан, краткий и понятный....

любите хелп - оно рулёз..... (цы) непомнюктотоместный


 
злобная танька ©   (2005-11-15 09:15) [6]

Вот пример из MSDN переведен в меру способностей:

procedure TForm1.Button1Click(Sender: TObject);
var
 regionType: Integer;
 rgn: HRGN;
begin
 rgn := CreateRectRgn(0,0,0,0);
 regionType := GetWindowRgn(Handle, rgn);
 if (regionType <> ERROR) then
   ShowMessage("rgn contains window region");
 DeleteObject(rgn);
end;


не работает!
что не так?


 
MBo ©   (2005-11-15 09:32) [7]

>злобная танька
А так?

rgn := CreateRoundRectRgn(0,0,700,400,100,100);
SetWindowRgn(Handle,rgn,True);
rgn := CreateRectRgn(0,0,0,0);
regionType := GetWindowRgn(Handle, rgn);
if (regionType <> ERROR) then
  ShowMessage("rgn contains window region");
DeleteObject(rgn);


 
злобная танька ©   (2005-11-15 09:46) [8]


> MBo ©   (15.11.05 09:32) [7]

работает. тоись первоначально у формы никакого региона и нету вообще. фигня какая то.

вопрос по DeleteObject:
а между строками
SetWindowRgn(Handle,rgn,True);
и
rgn := CreateRectRgn(0,0,0,0);
не нужно разве делитнуть rgn?


 
MBo ©   (2005-11-15 12:55) [9]

>не нужно разве делитнуть rgn?
Нет. После SetWindowRgn регионом распоряжается система.

Это видно, если попробовать убрать строку rgn := CreateRectRgn(0,0,0,0) - GetWindowRgn вернет ошибку.



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

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

Наверх




Память: 0.49 MB
Время: 0.108 c
14-1131523560
ASP_
2005-11-09 11:06
2005.12.04
DBF И Delphi


2-1132406247
Дева
2005-11-19 16:17
2005.12.04
О логах


14-1131911939
Piter
2005-11-13 22:58
2005.12.04
Почему мьютексы уникальны только в пределах сеанса?


14-1131587946
vidiv
2005-11-10 04:59
2005.12.04
Культура мысли


14-1131642620
as_us
2005-11-10 20:10
2005.12.04
Где достать инфу