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

Вниз

Срочно надо! Вопрос по нестандартным формам   Найти похожие ветки 

 
I__am   (2002-08-07 19:59) [0]

Доброй ночи всем! Мастера, подскажите плз, как мне сделать нестандартную форму, например окно в форме овала или треугольника или вообще в форме рисунка? Заранее благодарю!


 
V.Turecky   (2002-08-07 20:34) [1]

Почитай это:
Уже и не помню откуда информация.

ЭЛЛИПСОВИДНОЕ ОКНО

--------------------------------------------------------------------------------



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




Сначала в частных объявлениях (после слова private) объявляем процедуру:

private
procedure WMNCHitTest(var M:TWMNCHitTest);message wm_NCHitTest;


Затем в разделе implementation описываем её так:

implementation
{$R *.DFM}
procedure TForm1.WMNCHitTest(var M:TWMNCHitTest);
begin
inherited;
if M.Result=htClient then M.Result:=htCaption;
end;


Далее самое главное. По созданию окна (событие OnCreate) пишем следующий код:

procedure TForm1.FormCreate(Sender: TObject);
var
hsWindowRegion:Integer;
begin
hsWindowRegion:=CreateEllipticRgn(50,50,350,200);
SetWindowRgn(Handle,hsWindowRegion,true);
end;


Как это сделано?

Сначала мы объявляем переменную типа Integer, называем её hsWindowRegion.В неё в дальнейшем мы поместим дескриптор созданного региона. Затем, с помощью функции CreateEllipticRgn создаём регион эллипсовидной формы. В скобках ей указываем координаты для построения эллипса. В зависимости от того, какие значения вы укажите, такого размера и создастся ваш эллипс. После того, как регион создан, осталось только применить его к форме. Это делается с помощью следующего кода:

SetWindowRgn(Handle,hsWindowRegion,true);

Вышеуказанной функции в качестве параметров нужно указать три вещи. Это:

1) дескриптор окна,

2) дескриптор применяемого региона и

3) указать будет ли перерисован регион (true - истина, false - ложь)


 
Слесарь Матерящийся   (2002-08-07 20:34) [2]

Можно поискать компонент TSkinForm или подобный.

Если особые навороты не требуются -- можно обойтись Win API:

CreateRectRgn(), CreateRoundRgn() ,... -- создать регионы

затем CombineRgn() -- скомбинировать

и, наконец, SetWindowRgn() -- назначить регион для окна.


 
I__am   (2002-08-08 18:54) [3]

Бошое пасиба! Очень помогли!



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

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

Наверх




Память: 0.45 MB
Время: 0.007 c
1-60693
Ksion
2002-08-06 12:06
2002.08.19
Люди помогите! Мне надо преобразовать данные типа String в Stream


6-60775
Alex-Alexeev
2002-06-06 13:34
2002.08.19
Название сетевое ресурса в локальное имя папки


7-60886
Сявчик
2002-06-01 08:21
2002.08.19
EXE


14-60823
Alx2
2002-07-23 13:38
2002.08.19
Задачка


14-60847
MJH
2002-07-18 03:15
2002.08.19
Закон о тишине





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский