Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как в С++ Builder 6 сделать фигурную форму?

83K
27 июня 2012 года
banassi
2 / / 27.06.2012
ребят помогите! у меня Windows7 и Borland C++ Builder 6, как сделать фигурную форму. Вот что нарыл:

Вариант 1

void UnNormalForm (TForm1* Form1, Graphics::TBitmap* BMP, TColor Transparent)
{
Form1->BorderStyle = bsNone;
Form1->Height = BMP->Height;
Form1->Width = BMP->Width;

HRGN Result=CreateRectRgn (0, 0, 0, 0);
for(int i=0; i!=BMP->Height; ++i)
{
int beg=0;
while(beg!=BMP->Width)
{

while(beg!=BMP->Width && BMP->Canvas->Pixels[beg]==Transparent)
{

++beg;
}

int end=beg;
while(end!=BMP->Width && BMP->Canvas->Pixels[end]!=Transparent)
{
++end;
}
if(beg!=end)
{
HRGN tmp = CreateRectRgn (beg, i, end, i+1);
CombineRgn(Result, Result, tmp, RGN_OR);

DeleteObject(tmp);
beg=end;
}
}
}
SetWindowRgn (Form1->Handle, Result, true);
}

Вариант 2

HRGN Reg1 = CreateRectRgn(0, 0, Width/2, Height/2);
HRGN Reg2= CreateRoundRectRgn (0, 0, Width/2, Height/2, 50, 50);
HRGN Reg3= CreateEllipticRgn(0, 0, Width/2, Height/2);

POINT p[5];
{
p[0] = Point(100, 0);
p[1] = Point(Width-100, 0);
p[2] = Point(Width, Height/2);
p[3] = Point(Width/2, Height);
p[4] = Point(0, Height/2);};
HRGN Reg4 = CreatePolygonRgn(p, 5, ALTERNATE);

но ни что из этого не работает(
подскажите как, а если не сложно скинте работающую программу с коментариями! Спасибо!
446
28 июня 2012 года
Meander
487 / / 04.09.2011
Смысл простой:
1. Загрузить рисунок bmp
2. Если цвет пикселя рисунка равен цвету который приняли за прозрачный,
то сделать соответствующий пиксель канвы прозрачным.
3. В раздел
 
Код:
private:    // User declarations
пишем объявление:
 
Код:
Graphics::TBitmap* Picture;// указатль на рисунок
TColor             Transparent;// цвет прозрачности
void UnNormalForm();//наша функция
4. В cpp файле пишем:
Код:
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{//выделяем память под битмап
Picture = new Graphics::TBitmap();
//загружаем картинку
Picture->LoadFromFile("pic.bmp");//картинка должна быть
//устанавливаем прозрачный цвет
Transparent = clRed;//на картинке должны быть области RGB(255,0,0)
//настройка стиля и размера формы
Height = Picture->Height;  Width  = Picture->Width;
UnNormalForm();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{//освободим память от картинки
Picture->Free();
}
//---------------------------------------------------------------------------
void TForm1::UnNormalForm(){//реализация функции
HRGN Result=CreateRectRgn (0,0,0,0);
for(int i=0;i != Picture->Height;++i)
{
 int beg=0;
 while(beg!=Picture->Width)//цикл сканирующий картинку
 {//и ищущий пиксели цвета Transparent
  while( beg != Picture->Width && Picture->Canvas->Pixels[beg][i] == Transparent)
    ++beg;
  int end = beg;
  while( end != Picture->Width && Picture->Canvas->Pixels[end][i] != Transparent)
    ++end;
  if(beg != end)
  {
   HRGN tmp = CreateRectRgn (beg,i,end,i+1);//если регионы есть
   CombineRgn(Result,Result,tmp,RGN_OR);//запомнить их
   DeleteObject(tmp);
   beg = end;
  }
 }//сканирующий цикл
}
SetWindowRgn (Handle,Result,true);//применить к окну
}
//---------------------------------------------------------------------------
83K
28 июня 2012 года
banassi
2 / / 27.06.2012
Огромное спасибо Meander!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог