Form Skin 不規則表單的快速顯示程式 |
尚未結案
|
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
存成的BMP原圖:
執行之後:
庵幫你貼上圖片 哈哈 使用方式 請參考
如何發表一篇圖文並茂的文章?
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=7332 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
引言: 存成的BMP原圖: 執行之後: 庵幫你貼上圖片 哈哈 使用方式 請參考 如何發表一篇圖文並茂的文章? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=7332 ********************************************************* 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together! 希望能大家敞開心胸,將知識寶庫結合一起感謝您,我知道了!! |
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
palw 網友 使用站內 搜索文章 鍵入 透明 搜尋:透明 本次搜尋共找到80筆 裡面有你要的解答 還有 建議使用小畫家 因為其他繪圖軟體之色票比較好 一但使用 會顯示嚴重
鋸齒狀 所以使用小畫家編修才能與2000的api色階較符合 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
palw
初階會員 發表:45 回覆:89 積分:26 註冊:2003-02-24 發送簡訊給我 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
庵不會寫只能說 用api指定某一顏色為去背顏色 此顏色為三原色之一 如此即可應用 不規則表單 表單內定值需設定不指定 如果 你要使用演算法把它描繪 精準去背 這樣會粉困難喔 使用元件是最快速方式 請搭配 天使 的透明範例
如何將From視窗的底色便成透明
http://delphisearch.ktop.com.tw/search.asp?MethodStr=DOIT&SearchStr=透明&MyGood=N&memberid=411
【分享】耍花招系列, 怎麼把自己的AP透明化
http://delphi.ktop.com.tw/topic.php?topic_id=21524
【問題】Form 變成半透明為何Win2000沒問題,Win98下執行會有錯誤
http://delphi.ktop.com.tw/topic.php?topic_id=26411
【Delphi】【問題】如果製造透明效果
http://delphi.ktop.com.tw/topic.php?topic_id=27566
請問要如何才能製作出任何形狀的form
http://delphi.ktop.com.tw/topic.php?topic_id=19527
[推薦] C Builder中不規則窗體的快速顯示
http://delphi.ktop.com.tw/topic.php?topic_id=19817
【BCB】【問題】請問如何將多邊形著色
http://delphi.ktop.com.tw/topic.php?topic_id=25976 如果仍不行 看來你可能要上傳檔案至求助區 可以先去請教那 RaynorPao 版主 問問他 h sir版主 剛好有事 哈哈 謝謝了 *********************************************************
哈哈&兵燹
最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知
K.表Knowlege 知識,就是本站的標語:Open our mind to make knowledge together!
希望能大家敞開心胸,將知識寶庫結合一起
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
builder78
初階會員 發表:36 回覆:100 積分:47 註冊:2003-02-03 發送簡訊給我 |
用你的圖來作範例~~勿怪^^
//我用BCB5寫的~~以下為原始碼~~
HRGN __stdcall GetPictureRegion( HBITMAP, COLORREF, COLORREF);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//載入圖片(注意一下圖片背景顏色以配合描邊函數)
Image1->Picture->LoadFromFile("test.bmp");
Image1->AutoSize = true;
Image1->Transparent = true;
Form1->AutoSize = true;
Form1->BorderStyle = bsNone;
HBITMAP h = Image1->Picture->Bitmap->Handle;
HRGN hrgn = GetPictureRegion(h,0x0,0x0); //呼叫描邊函數(設圖片背景為黑色)
//若圖片背景為白色將上一行改成 HRGN hrgn = GetPictureRegion(h,0x00ffffff,0x0);
SetWindowRgn(Handle,hrgn,true);
}
//---------------------------------------------------------------------------
HRGN __stdcall GetPictureRegion( HBITMAP hBmp, COLORREF cTransparentColor,
COLORREF cTolerance )
/**第一個參數: bmp 的 handle 第二個參數: 背景色 第三個參數: 容錯度 **/
{
HRGN hRgn = NULL;
if (hBmp)
{
HDC hMemDC = CreateCompatibleDC(NULL);
if (hMemDC)
{
BITMAP bm;
GetObject(hBmp, sizeof(bm), &bm);
BITMAPINFOHEADER RGB32BITSBITMAPINFO = {
sizeof(BITMAPINFOHEADER),
bm.bmWidth,
bm.bmHeight,
1,
32,
BI_RGB,
0,
0,
0,
0,
0
};
VOID * pbits32;
HBITMAP hbm32 = CreateDIBSection(hMemDC, (BITMAPINFO
*)&RGB32BITSBITMAPINFO, DIB_RGB_COLORS, &pbits32, NULL, 0); if (hbm32)
{
HBITMAP holdBmp = (HBITMAP)SelectObject(hMemDC, hbm32);
HDC hDC = CreateCompatibleDC(hMemDC);
if (hDC)
{
BITMAP bm32;
GetObject(hbm32, sizeof(bm32), &bm32);
while (bm32.bmWidthBytes % 4)
bm32.bmWidthBytes++;
HBITMAP holdBmp = (HBITMAP)SelectObject(hDC, hBmp);
BitBlt(hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, hDC, 0, 0,
SRCCOPY);
#define ALLOC_UNIT 100
DWORD maxRects = ALLOC_UNIT;
HANDLE hData = GlobalAlloc(GMEM_MOVEABLE, sizeof(RGNDATAHEADER) +
(sizeof(RECT) * maxRects));
RGNDATA *pData = (RGNDATA *)GlobalLock(hData);
pData->rdh.dwSize = sizeof(RGNDATAHEADER);
pData->rdh.iType = RDH_RECTANGLES;
pData->rdh.nCount = pData->rdh.nRgnSize = 0;
SetRect(&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
BYTE lr = GetRValue(cTransparentColor);
BYTE lg = GetGValue(cTransparentColor);
BYTE lb = GetBValue(cTransparentColor);
BYTE hr = (BYTE)min(0xff, lr + GetRValue(cTolerance));
BYTE hg = (BYTE)min(0xff, lg + GetGValue(cTolerance));
BYTE hb = (BYTE)min(0xff, lb + GetBValue(cTolerance));
BYTE *p32 = (BYTE *)bm32.bmBits + (bm32.bmHeight - 1) *
bm32.bmWidthBytes;
for (int y = 0; y < bm.bmHeight; y++)
{
for (int x = 0; x < bm.bmWidth; x++)
{
int x0 = x;
LONG *p = (LONG *)p32 + x;
while (x < bm.bmWidth)
{
BYTE b = GetRValue(*p);
if (b >= lr && b <= hr)
{
b = GetGValue(*p);
if (b >= lg && b <= hg)
{
b = GetBValue(*p);
if (b >= lb && b <= hb)
break;
}
}
p++;
x++;
}
if (x > x0)
{
if (pData->rdh.nCount >= maxRects)
{
GlobalUnlock(hData);
maxRects += ALLOC_UNIT;
hData = GlobalReAlloc(hData,
sizeof(RGNDATAHEADER) + (sizeof(RECT) * maxRects), GMEM_MOVEABLE);
pData = (RGNDATA *)GlobalLock(hData);
}
RECT *pr = (RECT *)&pData->Buffer;
SetRect(&pr[pData->rdh.nCount], x0, y, x, y+1);
if (x0 < pData->rdh.rcBound.left)
pData->rdh.rcBound.left = x0;
if (y < pData->rdh.rcBound.top)
pData->rdh.rcBound.top = y;
if (x > pData->rdh.rcBound.right)
pData->rdh.rcBound.right = x;
if (y+1 > pData->rdh.rcBound.bottom)
pData->rdh.rcBound.bottom = y+1;
pData->rdh.nCount++;
if (pData->rdh.nCount == 2000)
{
HRGN h = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) +
(sizeof(RECT) * maxRects), pData);
if (hRgn)
{
CombineRgn(hRgn, hRgn, h, RGN_OR);
DeleteObject(h);
}
else
hRgn = h;
pData->rdh.nCount = 0;
SetRect(&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
}
}
}
p32 -= bm32.bmWidthBytes;
}
HRGN h = ExtCreateRegion(NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) *
maxRects), pData);
if (hRgn)
{
CombineRgn(hRgn, hRgn, h, RGN_OR);
DeleteObject(h);
}
else
hRgn = h;
SelectObject(hDC, holdBmp);
DeleteDC(hDC);
}
DeleteObject(SelectObject(hMemDC, holdBmp));
}
DeleteDC(hMemDC);
}
}
return hRgn;
}
|
builder78
初階會員 發表:36 回覆:100 積分:47 註冊:2003-02-03 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |