Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сформировать форму по картинке... или хотя бы круглую сделать! / 3 сообщений из 3, страница 1 из 1
09.10.2004, 14:47:42
    #32731059
Slam_VS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сформировать форму по картинке... или хотя бы круглую сделать!
Как сделать круглую или овальную форму? Ну и наверно нет смысла, но всё-таки, если... может можно сделать форму по картинке?
В C++Builder`e функция выглядит так:
Код: plaintext
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
HRGN CreateRgnFromBitmap(Graphics::TBitmap *bmp, TPoint pPoint, bool bEqaul = true)
{
int f, x, y;
bool b = false;
HRGN Rgn, ResRgn = CreateRectRgn( 0 ,  0 ,  0 ,  0 );
for (y =  0 ; y < bmp->Height; y++)
 for (x =  0 ; x < bmp->Width; x++) 
 {
   if (!bEqaul^(bmp->Canvas->Pixels[x][y] != bmp->Canvas->Pixels[pPoint.x][pPoint.y])) 
   {
     if (!b) 
      {  f = x; b = true; }
     else
       if (x == (bmp->Width -  1 )) 
       {
         Rgn = CreateRectRgn(f, y, x, y +  1 );
         CombineRgn(ResRgn, ResRgn, Rgn, RGN_OR);
         b = false;
       }
   }
   else
     if (b)
     {
       Rgn = CreateRectRgn(f, y, x, y +  1 );
       CombineRgn(ResRgn, ResRgn, Rgn, RGN_OR);
       b = false;
     }
 }
return ResRgn;
}

а в Delphy так:
Код: plaintext
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
HRGN CreateRgnFromBitmap(LPTSTR szFileName = NULL, UINT Num = NULL, LPPOINT pPoint = NULL, BOOL bEqaul =  1 )
{
    HBITMAP hBmp;

    if (strlen(szFileName))
    {
        hBmp = (HBITMAP)LoadImage( NULL, szFileName, IMAGE_BITMAP,  0 ,  0 , LR_LOADFROMFILE ); 
        if (!hBmp) 
        {
            MessageBox(hWND, "There is not bitmap", "Error", MB_OK | MB_ICONEXCLAMATION);
            hBmp = LoadBitmap(hInst, MAKEINTRESOURCE(Num));
            strcpy(szFileName, "");
        }
    }
    else if (Num) 
    {
        hBmp = LoadBitmap(hInst, MAKEINTRESOURCE(Num));
    }
    else 
        return  0 ;

    if (!hBmp)
    {
        MessageBox(hWND, "Can't load bitmap", "Error", MB_OK | MB_ICONSTOP);
        CloseWindow(hWND); 
    }

    BITMAP bi;
    GetObject(hBmp, sizeof(BITMAP), &bi); // получаем размеры битмапы...
    int iScreenWidth = GetSystemMetrics(SM_CXSCREEN);
    int iScreenHeight = GetSystemMetrics(SM_CYSCREEN);
    RECT R;
    GetWindowRect(hWND, &R);

    MoveWindow(hWND, 
                    R.left, 
                    R.top, 
                    bi.bmWidth,
                    bi.bmHeight,
                     1 ); // меняем размеры окна

    BYTE bpp;
    DWORD e;
    DWORD f, t;
    INT x, y;
    bool b = false;
    HRGN Rgn, ResRgn = CreateRectRgn(  0 ,  0 ,  0 ,  0  ); 
    
    GetObject( hBmp, sizeof( BITMAP ), &bi ); 
    bpp = bi.bmBitsPixel >>  3 ;
    
    BYTE *pBits = new BYTE[ bi.bmWidth * bi.bmHeight * bpp ];
    int p = GetBitmapBits( hBmp, bi.bmWidth * bi.bmHeight * bpp, pBits ); 
    
   
    if ( pPoint == NULL || pPoint->x >= bi.bmWidth || pPoint->y >= bi.bmHeight )
        e = *(DWORD*)pBits;
    else
        e = *(DWORD*)(pBits + (pPoint->y * bi.bmWidth + pPoint->x) * bpp );
    
    e <<=  32  - bi.bmBitsPixel;

    if (bEqaul) 
    {
        for ( y =  0 ; y < bi.bmHeight; y++ )
            for ( x =  0 ; x < bi.bmWidth; x++ )
            {
                 
                t = *(DWORD*)(pBits + (y * bi.bmWidth + x) * bpp) << ( 32  - bi.bmBitsPixel);
                    if ( t == e )
                    {
                        if ( !b )
                        {
                            f = x;
                            b = true;
                        }
                        else if ( x == (bi.bmWidth -  1 ) )
                        {
                            Rgn = CreateRectRgn( f, y, x, y +  1  );
                            CombineRgn( ResRgn, ResRgn, Rgn, RGN_OR );
                            b = false;
                        }
                    }
                    else if ( b )
                    {
                        Rgn = CreateRectRgn( f, y, x, y +  1  );
                        CombineRgn( ResRgn, ResRgn, Rgn, RGN_OR );
                        b = false;
                    }
            }
    }
    else 
    {
        for ( y =  0 ; y < bi.bmHeight; y++ )
            for ( x =  0 ; x < bi.bmWidth; x++ )
            {
                t = *(DWORD*)(pBits + (y * bi.bmWidth + x) * bpp) << ( 32  - bi.bmBitsPixel);
                    if ( t != e )
                    {
                        if ( !b )
                        {
                            f = x;
                            b = true;
                        }
                        else if ( x == (bi.bmWidth -  1 ) )
                        {
                            Rgn = CreateRectRgn( f, y, x, y +  1  );
                            CombineRgn( ResRgn, ResRgn, Rgn, RGN_OR );
                            b = false;
                        }
                    }
                    else if ( b )
                    {
                        Rgn = CreateRectRgn( f, y, x, y +  1  );
                        CombineRgn( ResRgn, ResRgn, Rgn, RGN_OR );
                        b = false;
                    }
            }
    }
    delete pBits; 
    return ResRgn; 
}
Если есть такой маньяк, чтобы на басик переделать, ... я буду очень благодарен!!!
...
Рейтинг: 0 / 0
09.10.2004, 14:59:40
    #32731067
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сформировать форму по картинке... или хотя бы круглую сделать!
Поищи на сайте русьимпорта
там были примеры круглой формы
и даже с дыркой навроде бублика.
...
Рейтинг: 0 / 0
11.10.2004, 09:58:17
    #32731552
Bor-L
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сформировать форму по картинке... или хотя бы круглую сделать!
http://www.hiprog.com/access/article.asp?idd=93
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сформировать форму по картинке... или хотя бы круглую сделать! / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]