Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизРабота с регионами Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c