請問要如何才能製作出任何形狀的form |
|
ayukawa
一般會員 ![]() ![]() 發表:16 回覆:5 積分:4 註冊:2002-07-13 發送簡訊給我 |
|
andersonhsieh
版主 ![]() ![]() ![]() ![]() ![]() 發表:33 回覆:531 積分:439 註冊:2002-06-10 發送簡訊給我 |
引言:
-------------------------------------------------------------------------------- 要去那孬下徭可庨作出任何形螷orm的元件! 哈哈哈!我是天才 -------------------------------------------------------------------------------- 我在e的站找到一?揃料緻你╪珙搰幋r
摘 要:如何能使窗體的外形象bitmap里的圖片?
關鍵字:TBitmap掃描線RGB
類 別:圖形 下面的例子說明如何使窗體的外形象bitmap里的圖片(掃描線)。bitmap 中的圖片必須含有除了白色以外的其它顏色,背景必須
是白色,因為這將被過濾掉。 例子
------- Global Variables
----------------
(在窗體的當前聲明中)
SourceBitmap : TBitmap; Procedures
----------
(Form的Public聲明部分)
procedure GetColor(const SLine : PByteArray; const L: Integer;
,var R: Integer,var C: TColor); function GetColorOf(ScanLine: PByteArray; X : Word): TColor; 在窗體的OnCreate事件下加入
------------------------------------------
var
NewRgn, RowRgn, ScanRgn : HRGN;
Rows, Left, Right : Integer;
Line : PByteArray;
SourceColor : TColor;
begin
SourceBitmap := TBitmap.Create;
SourceBitmap.LoadFromFile(''example.bmp'');
NewRgn := CreateRectRgn(0,0,0,0);
For Rows := 0 To SourceBitmap.Height - 1 Do
Begin
RowRgn := CreateRectRgn(0,Rows,0,Rows);
Line := SourceBitmap.Scanline[Rows];
Left := 0; Right := 0;
repeat
GetColor(Line,Left,Right,SourceColor);
If (SourceColor <> clWhite) Then
Begin
ScanRgn := CreateRectRgn(Left,Rows,Right 1,Rows 1);
CombineRgn(RowRgn,RowRgn,ScanRgn,RGN_OR);
DeleteObject(ScanRgn);
End;
CombineRgn(NewRgn,NewRgn,RowRgn,RGN_OR);
DeleteObject(RowRgn);
while (right >= SourceBitmap.Width);
End;
SetWindowRgn(Handle,NewRgn,True);
end; 在GetColor過程中:
-------------------------
var
Column : integer;
CompareColor : TColor;
begin
Column := L;
CompareColor := GetColorOf(SLine,L);
repeat
Inc(Column);
until (CompareColor <> GetColorOf(SLine,Column))
or (Column >= SourceBitmap.Width);
R := column - 1;
C := CompareColor;
end; 函數GetColorOf中:
--------------------------
var
Red, Green, Blue : Byte;
begin
If SourceBitmap = nil then exit;
If (X > SourceBitmap.Width) then Exit;
Result := clBlack;
Red := ScanLine[X * 3];
Green := ScanLine[X * 3 1];
Blue := ScanLine[X * 3 2];
If ((Red >= 138) and (Green >= 138) and (Blue >= 138)) Then
Result := clWhite
end; @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@ |
hxf_wolf
一般會員 ![]() ![]() 發表:7 回覆:38 積分:9 註冊:2002-03-14 發送簡訊給我 |
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
ayukawa
一般會員 ![]() ![]() 發表:16 回覆:5 積分:4 註冊:2002-07-13 發送簡訊給我 |
|
danny
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 可是~~~~沒有免費的嗎?~~~~ 我也有抓不少個any shape form的元件,但都是要錢的 麻煩各位網友幫幫忙 可提供免費的any shape form元件!謝謝!BITRGN.ZIP http://www.vclxx.org/DELPHI/D32FREE/BITRGN.ZIP TBitmapRgn 是提供製作不規則形狀視窗、並具透明效果 TForm 的非視覺化元件 ( 附原始程式碼 ),作者 : Carlos P?rez Sancho。 BMP2RGN.ZIP http://www.vclxx.org/DELPHI/D32FREE/BMP2RGN.ZIP Bmp2Rgn 單元提供製作不規則形狀視窗、並具透明效果 TForm 的函式庫 ( 1.0 版,附原始程式碼 ),作者 : Tomasz Kustra。 BMPRGN.ZIP http://www.vclxx.org/DELPHI/D32FREE/BMPRGN.ZIP BmpRgn 是能夠輕易製作 TForm 透明效果的單元,可搭配 .BMP 檔案製作出非矩形樣式的 TForm ( 1.0 版,附原始程式碼 ),作者 : Gunter Richter。
------
將問題盡快結案也是一種禮貌! |
kecc
一般會員 ![]() ![]() 發表:1 回覆:4 積分:1 註冊:2002-07-05 發送簡訊給我 |
|
lcjan
初階會員 ![]() ![]() 發表:11 回覆:60 積分:29 註冊:2002-03-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |