Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1130822835
flatron84
2005-11-01 08:27
2005.12.04
Асемблер и Delphi


2-1132080872
Kirill_
2005-11-15 21:54
2005.12.04
Неравенства


14-1131786030
lookin
2005-11-12 12:00
2005.12.04
Общая проблема - отсутствие реального опыта


14-1131913036
Джо
2005-11-13 23:17
2005.12.04
Прививки от бешенства


14-1131974326
Piter
2005-11-14 16:18
2005.12.04
HEX кодирование





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский