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

Вниз

Совет: Окно произволльной формы   Найти похожие ветки 

 
Batoon   (2004-07-30 21:22) [0]

Я так посмотрел, посмотрел, почитал, почитал и понял...
А понял я, что чтобы сделать окно произвольной формы надо помучаться.
Есть конечно способы, там, например, строить точки и через полигон выводить все, есть способы, к

которым надо иметь математический подход. Но вот совершенно случайно на своей 7 делфе обнаружил,

как сделать окно произвольной формы при помощи.... КИСТОЧКИ ... :) Да-Да. При помощи кисточки

или любого другого инструмента в ЛЮБОМ графическом редакторе (хоть в Paint"е, хоть в

Potoshope"е).
Объясняю.
Делать пробовал только на 7 версии Делфи.

Так, значит:
1.Запускаем Делфю
2.В свойствах у формы выставляем TransparentColor:=False; TransparentColorValue:=clWindowFrame;
3.Открываем Paint(например), выбираем цвет rgb(0,128,128) и заливаем всю форму фтим цветом.
4.Выбираем другой цвет, кисть и рисуем, что хотим(цвет, который rgb(0,128,128) сотрется на

форме)
5.Сохраняем картинку и загружаем ее в TImage в Делфи.
6.Transparent:=false у TImage
7.Запускаем  прогу и ...............:)
Вот и все.


 
Кириешки ©   (2004-07-30 21:45) [1]

Вот отстой, я хотел засунуть сюда свою форму код которой длиной в 27 листов А4 в распечатанном виде со шрифтом в 11.
А мне говорят превышение длины сообщения. А теперь оказалось что я ее строил зря, что есть более простые методы? Вот отстой!!!


 
sniknik ©   (2004-07-30 21:48) [2]

это будет прямоугольная форма просто с видимым кривым рисунком. нарисуй дырку в форме и попробуй через нее кликнуть на просвечивающийся ярлычек. че не получается? то то же. ;о))


 
parovoZZ ©   (2004-07-30 21:53) [3]

Регион он и в Африке регион. А прозрачный цвет это всего лишь прозрачный цвет.


 
Юрий Зотов ©   (2004-07-30 21:55) [4]

> Кириешки

Окно непрямоугольной формы делается с помщью SetWindowRgn. Причем регион можно строить математикой, как здесь:
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=903
а можно и по картинке.


 
Кириешки ©   (2004-07-30 22:04) [5]

>Юрий Зотов ©   (30.07.04 21:55) [4]

А я ручками делал
Вот начало :

const
 n = 462;
var
 nn : integer;
 ResultReg, Reg : HRGN;
 P : array[0..n-1] of TPoint;
begin
 //Put Ellipse
 //инициализация ResultReg
 ResultReg := CreateEllipticRgn(22,63,590,351);
 //Put Ellipse
 Reg := CreateEllipticRgn(21,206,23,208);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_DIFF);
 //Put polygon
 nn := 4;
 P[0] := Point(22,206);
 P[1] := Point(22,208);
 P[2] := Point(620,208);
 P[3] := Point(620,206);
 Reg := CreatePolygonRgn(P, nn, ALTERNATE);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_DIFF);
 //Put Ellipse
 Reg := CreateEllipticRgn(619,206,621,208);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_DIFF);
 //Put Ellipse
 Reg := CreateEllipticRgn(305,64,307,66);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_DIFF);
 //Put polygon
 nn := 4;
 P[0] := Point(305,65);
 P[1] := Point(305,351);
 P[2] := Point(307,351);
 P[3] := Point(307,65);
 Reg := CreatePolygonRgn(P, nn, ALTERNATE);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_DIFF);
 //Put Ellipse
 Reg := CreateEllipticRgn(305,350,307,352);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_DIFF);
 //Put Ellipse
 Reg := CreateEllipticRgn(134,35,478,379);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_DIFF);
 //Put Ellipse
 Reg := CreateEllipticRgn(3,186,45,228);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(566,185,610,229);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(148,135,152,139);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put polygon
 nn := 4;
 P[0] := Point(150,135);
 P[1] := Point(150,139);
 P[2] := Point(463,139);
 P[3] := Point(463,135);
 Reg := CreatePolygonRgn(P, nn, ALTERNATE);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(461,135,465,139);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(461,135,465,139);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put polygon
 nn := 4;
 P[0] := Point(463,135);
 P[1] := Point(463,139);
 P[2] := Point(105,139);
 P[3] := Point(105,135);
 Reg := CreatePolygonRgn(P, nn, ALTERNATE);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(103,135,107,139);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(141,263,145,267);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put polygon
 nn := 4;
 P[0] := Point(143,263);
 P[1] := Point(143,267);
 P[2] := Point(485,267);
 P[3] := Point(485,263);
 Reg := CreatePolygonRgn(P, nn, ALTERNATE);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(483,263,487,267);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(129,207,133,211);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put polygon
 nn := 4;
 P[0] := Point(129,209);
 P[1] := Point(129,209);
 P[2] := Point(133,209);
 P[3] := Point(133,209);
 Reg := CreatePolygonRgn(P, nn, ALTERNATE);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(129,207,133,211);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(131,203,135,207);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put polygon
 nn := 4;
 P[0] := Point(131,205);
 P[1] := Point(131,205);
 P[2] := Point(135,205);
 P[3] := Point(135,205);
 Reg := CreatePolygonRgn(P, nn, ALTERNATE);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(131,203,135,207);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(129,203,133,207);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put polygon
 nn := 4;
 P[0] := Point(129,205);
 P[1] := Point(129,205);
 P[2] := Point(133,205);
 P[3] := Point(133,205);
 Reg := CreatePolygonRgn(P, nn, ALTERNATE);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(129,203,133,207);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(127,195,131,199);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put polygon
 nn := 4;
 P[0] := Point(127,197);
 P[1] := Point(127,215);
 P[2] := Point(131,215);
 P[3] := Point(131,197);
 Reg := CreatePolygonRgn(P, nn, ALTERNATE);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);
 //Put Ellipse
 Reg := CreateEllipticRgn(127,213,131,217);
 CombineRgn(ResultReg,ResultReg,Reg,RGN_OR);

ну и так далее, в общем длинная фигня.



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

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

Наверх




Память: 0.49 MB
Время: 0.03 c
8-1085583870
Dr.Alex
2004-05-26 19:04
2004.08.15
MPEG TO AVI


4-1088606277
Lin
2004-06-30 18:37
2004.08.15
Хук на WM_NCPAINT


1-1091205920
DreymanD
2004-07-30 20:45
2004.08.15
Глючит открытие файлов способом ShellExecute


14-1090841946
Ega23
2004-07-26 15:39
2004.08.15
Опять DOS-атака?


3-1090221107
Nurali
2004-07-19 11:11
2004.08.15
paradox