powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сформировать форму по картинке... или хотя бы круглую сделать!
3 сообщений из 3, страница 1 из 1
Сформировать форму по картинке... или хотя бы круглую сделать!
    #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
Сформировать форму по картинке... или хотя бы круглую сделать!
    #32731067
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поищи на сайте русьимпорта
там были примеры круглой формы
и даже с дыркой навроде бублика.
...
Рейтинг: 0 / 0
Сформировать форму по картинке... или хотя бы круглую сделать!
    #32731552
Bor-L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://www.hiprog.com/access/article.asp?idd=93
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сформировать форму по картинке... или хотя бы круглую сделать!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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