ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Формы причудливых форм Delphi
  #1  
Старый 02.12.2009, 19:44
DeaD_MoroZ
Banned
Регистрация: 03.11.2009
Сообщений: 112
Провел на форуме:
98006

Репутация: 17
Отправить сообщение для DeaD_MoroZ с помощью ICQ
По умолчанию Формы причудливых форм Delphi

Давайте тут выкладывать регионы для рисования интересных форм???

вот например, бабочка

Код:
procedure TForm1.FormCreate(Sender: TObject); 
var 
  R1, R2 : HRgn; 
  P : array [0..2] of TPoint; 
  X : Word; 
begin 
  // левое верхнее крыло 
  R1 :=CreateEllipticRgn(Round(-Width*0.4), 
  0,Round(Width*0.49),Round(Height*1.1)); 
  // правое верхнее крыло 
  R2 :=CreateEllipticRgn(Round(Width*0.51), 
  0,Round(Width*1.4),Round(Height*1.1)); 
  CombineRgn(R2,R1,R2,RGN_OR); 
  // отсекаем лишнее от верхних крыльев, 
  // остаются линзы на пересечении эллипсов 

  R1 :=CreateEllipticRgn(0,Round(-Height*0.3), 
  Width,Round(Height*0.71)); 
  CombineRgn(R1,R1,R2,RGN_AND); 

  //эллипс - основа нижних крыльев 
  R2 :=CreateEllipticRgn(Round(Width*0.1), 
  Round(Height*0.65), Round(Width*0.9), Height); 
  CombineRgn(R1,R1,R2,RGN_OR); 
  // вырезаем эллипс - разрез между нижних крыльев 
  R2 :=CreateEllipticRgn(Round(Width*0.3), 
  Round(Height*0.7), Round(Width*0.7), Round(Height*1.5)); 
  CombineRgn(R1,R1,R2,RGN_DIFF); 

  // вертикальный эллипс - туловище бабочки 
  R2 :=CreateEllipticRgn(Round(Width*0.46),  
  Round(Height*0.3), Round(Width*0.54),  
  Round(Height*0.8)); 
  CombineRgn(R1,R1,R2,RGN_OR); 

  // голова - круг; за основу берем меньшую 
  // из двух величин - высоты и ширины окна  
  X := Width; 
  if Height < X then X := Height; 
  X := Round(X/18); 
  R2 :=CreateEllipticRgn(Round(Width*0.5)-X,  
  Round(Height*0.3)-X, Round(Width*0.5)+X,  
  Round(Height*0.3)+X); 

  CombineRgn(R1,R1,R2,RGN_OR); 

  // левый усик 
  P[0] := Point(Round(Width*0.5), Round(Height*0.3)); 
  P[1] := Point(Round(Width*0.35), Round(Height*0.01)); 
  P[2] := Point(Round(Width*0.355)+1, 0); 
  R2 := CreatePolygonRgn(P, 3, WINDING); 
  CombineRgn(R1,R1,R2,RGN_OR); 

  // правый усик 
  P[0] := Point(Round(Width*0.5), Round(Height*0.3)); 
  P[1] := Point(Round(Width*0.655+1), Round(Height*0.01)); 
  P[2] := Point(Round(Width*0.65), 0); 
  R2 := CreatePolygonRgn(P, 3, WINDING); 

  CombineRgn(R1,R1,R2,RGN_OR); 

  // острие на крыле слева снизу 
  P[0] := Point(Round(Width*0.15), Height); 
  P[1] := Point(Round(Width*0.2), Round(Height*0.8)); 
  P[2] := Point(Round(Width*0.3), Round(Height*0.9)); 
  R2 := CreatePolygonRgn(P, 3, WINDING); 
  CombineRgn(R1,R1,R2,RGN_OR); 

  // острие на крыле справа снизу 
  P[0] := Point(Round(Width*0.85), Height); 
  P[1] := Point(Round(Width*0.8), Round(Height*0.8)); 
  P[2] := Point(Round(Width*0.7), Round(Height*0.9)); 

  R2 := CreatePolygonRgn(P, 3, WINDING); 
  CombineRgn(R1,R1,R2,RGN_OR); 

  // Назначаем полученный регион форме 
  SetWindowRgn(Handle, R1, True); 
end;
кто может нарисовать бутылку???

Последний раз редактировалось slesh; 03.12.2009 в 11:00.. Причина: [code][/code]
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Литература Delphi Sams С/С++, C#, Delphi, .NET, Asm 2 19.03.2010 19:46
Скачать Delphi 7, помощь. _casper_ С/С++, C#, Delphi, .NET, Asm 20 08.12.2009 04:54
Books PSalm69 Избранное 248 27.10.2009 04:52
Virus.Win32.Induc.a – новый вирус для Delphi ErrorNeo Уязвимости 37 26.08.2009 00:33
Virus.Win32.Induc.a или "Снова записки новичка" _=(mac)=_ Защита ОС: вирусы, антивирусы, файрволы. 5 24.08.2009 23:34



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ