Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.08.19;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
1-60620
Relaxer
2002-08-08 14:33
2002.08.19
Хелп. Скролл


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


1-60641
Ghost.
2002-08-05 17:40
2002.08.19
Вопрос для тех кто работал с формами в DLL


1-60639
Leha-neo
2002-08-07 20:25
2002.08.19
Как считывать файлы...


3-60548
lety
2002-07-29 22:51
2002.08.19
Filter и строковые поля





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