- 在线时间
- 0 小时
- 最后登录
- 2007-9-23
- 注册时间
- 2004-9-10
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 9975 点
- 威望
- 7 点
- 阅读权限
- 150
- 积分
- 4048
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1893
- 主题
- 823
- 精华
- 2
- 分享
- 0
- 好友
- 0

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。
. c9 W. R7 e; _file://------------------------------------------------------------------------3 K3 C- Y% H7 c: D
<a>file://Unit1.h</A></P>
8 t' u6 a0 N- D( c< >#ifndef Unit1H
1 O! |) F. O6 L* ]3 C8 O6 R#define Unit1H
1 |3 ? |' T' bfile://------------------------------------------------------------------------
* }* U. m9 J; |4 X: {6 M0 A! Z#include <Classes.hpp>
: L: {* Q' b* U- v0 s, ]0 |: t#include <Controls.hpp>
3 p) }2 x0 {7 K: X* y* G6 k. k; E#include <StdCtrls.hpp>
! D, _- r8 P8 y: B% C#include <Forms.hpp>+ H2 `+ H3 @9 j/ c
#include <ExtCtrls.hpp>
* k2 I3 S8 e+ n6 p. `2 l#include <Graphics.hpp>/ W r# Y% ?( M, w# \7 v* U
#include <Menus.hpp>5 a0 u- L6 y( V: ]8 K U- |
#include <Dialogs.hpp>5 r* N+ k. ]/ |( R( i! u
#include <ExtDlgs.hpp>
6 j0 H1 p6 z* @9 A8 ofile://---------------------------------------------------------------------------; P0 z7 ~" K. f5 B; y; v4 W. s
class TForm1 : public TForm
8 O, m6 ]" P+ D/ U{
& l4 ]* ~$ \* T. m% d& p__published: // IDE-managed Components6 y- _5 M& @( P, A9 `4 o
TImage *Image1;
0 x- V& o" s, p5 m+ W& ` TPopupMenu *PopupMenu1;
6 x" s6 e8 s8 N+ Q" n" ?% L TMenuItem *Exit1;4 e. |' B8 N. N! X8 R* W0 [
TOpenPictureDialog *OpenPictureDialog1; Y7 B3 K0 v& }; }4 H9 N
TMenuItem *Open1;4 _ @+ r8 n8 L) C9 h' g
void __fastcall Exit1Click(TObject *Sender);; c9 y& c+ j+ ]5 _9 V/ b# ]0 Z- m
void __fastcall FormCreate(TObject *Sender);. w0 ]7 R3 @+ n
void __fastcall Image1MouseDown(TObject *Sender,
" \7 j+ D% d( n4 O' } TMouseButton Button, TShiftState Shift, int X, int Y);
7 r9 e7 \5 E* { void __fastcall Open1Click(TObject *Sender);' Q E. M4 a! D! D, D4 O6 H# G
private: // User declarations
+ l: \/ C* T0 C# d/ j void __fastcall BmpToRgn();
- U/ B/ i& E1 H9 _4 E5 rpublic: // User declarations
9 J. C$ ?% s/ g5 Q% s1 r3 }9 X, U$ V __fastcall TForm1(TComponent* Owner);6 k$ w& s4 M4 [7 N6 n
};6 \( I) O' F) `
file://---------------------------------------------------------------------------
# Z, T/ x9 E# \3 ~* Eextern PACKAGE TForm1 *Form1;* }7 c7 u U) }. T. j) o0 Y( @6 S
file://---------------------------------------------------------------------------, [9 B- |) I: r5 ?$ y
#endif</P>
& o+ i0 m& r. C6 o% [< >
* p+ N6 q* j+ x4 p" F<a>file://unit1.cpp</A>& D) b, R5 L+ V2 ?5 a
file://---------------------------------------------------------------------------</P>
' w0 K, G ^( \% d x! e< >#include <vcl.h>
f- K& {: f I1 T" g#pragma hdrstop</P>2 h, S# o7 I9 x' [
< >#include "Unit1.h"
8 K$ y3 P: e% L( f( ]1 K) N9 rfile://---------------------------------------------------------------------------" g3 e) T4 s& f, L! O9 x& C
#pragma package(smart_init)% }, w, l# u4 I, q# @
#pragma resource "*.dfm"
0 u% V$ d; @) B4 O" e& Z4 I: STForm1 *Form1;
; E- r5 [: p- B, T$ N. P% [- Efile://---------------------------------------------------------------------------
8 Y- K% `6 d* U__fastcall TForm1::TForm1(TComponent* Owner): T! M5 K6 ?0 V+ ^* n- J' z+ z5 T* s8 J
: TForm(Owner)
3 | a$ k& F6 p. i4 G' L+ z{9 b# v" I0 Q9 {. t, ~6 @! q
}
$ Z4 U7 S/ m% efile://---------------------------------------------------------------------------- U5 D6 W5 }: L. h" V
void __fastcall TForm1::Exit1Click(TObject *Sender)8 `2 S3 [6 I; M! }& T5 J7 M1 V
{
5 y- G- y1 @! v+ d6 A9 E4 R1 \; k Close();$ { U p1 o& {2 \
}
- F) R& J. Z1 d0 R! ?2 _8 L$ w; sfile://---------------------------------------------------------------------------</P>8 D4 S. k' M7 c2 K# H
< >void __fastcall TForm1::FormCreate(TObject *Sender)) s7 j; ^4 J4 }. a# R ]
{</P>
# I. X& f; a* H2 ~& [# q< >BmpToRgn();
@' H* D3 ?/ A6 ?}& h ?* U$ L1 {$ M; H( M
file://---------------------------------------------------------------------------</P>8 N5 C- p* e( s% A" \* G3 ]
< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,0 W: [+ W2 |1 q" q. O
TMouseButton Button, TShiftState Shift, int X, int Y)
+ f7 N& |& }1 g# f8 |& u2 w! ?{
% k/ Z! i& F% X; |& uif(Button == mbLeft)- q4 ^7 I% d0 r: F
{2 O# E) | k7 j1 d) t' r+ F
ReleaseCapture();+ U* o" x( H" P" d
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0); \& n3 g! U+ T9 i; w
}& N( t8 H7 Z+ A* n! A% v/ H% T
}) Y/ W5 c2 ^- }5 a
file://---------------------------------------------------------------------------
/ p0 L6 P: p4 ?. X/ P5 tvoid __fastcall TForm1::BmpToRgn()5 G% b1 u+ D0 [
{
# \5 }* `% f) Q% h# B- P6 I* q% mImage1->AutoSize=true;
5 s5 E" Q0 T+ u& u/ iForm1->AutoSize=true;
: T* b& V) s7 g1 Y: ^Form1->BorderStyle=bsNone;
5 F, h9 q" e: n: V% yTColor ColorKey=Image1->Canvas-> ixels[0][0];
9 M0 i' Z" p# C) \int x,y;: Q2 w% O; D# `) k
int l,r;
; H! m" @3 Y: ?POINT *a;9 p, u- G- j: n4 U4 }
bool lb,rb;* J1 G. x' f& q( Y. b1 m7 h
HRGN WndRgn,TempRgn;</P>
- o6 r8 F8 W- C& M6 u3 r; J& y< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)1 B- ^, U. I" C: k3 R
{- H+ G3 y2 R3 K( y) m8 j
ShowMessage("申请内存失败!");
4 j% q9 d2 @ c" L8 Y exit(0);/ l6 c0 e8 L T% h
}</P>
' K' F$ W# c6 L% f+ `' q< >l=0;r=Image1->Height*2-1;* j- N1 f+ }7 S; R$ ?* F
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>
8 I s4 i7 }0 E, L: ~< >for(y=0;y<Image1->Height;y++)
, s/ h; E; R1 |, U. b{
3 L/ }+ Q& T7 o3 s lb=true;
) B: @6 ]0 s& M8 Z1 T- d for(x=0;x<Image1->Width+1;x++), W. I0 w0 c2 }
if(Image1->Canvas-> ixels[x][y]!=ColorKey)3 B2 A; Q' L* B, x2 f4 ]7 b
{% Q% R% ~( R! Q2 r, q6 O8 C0 t [- L
a[l].x=x;
1 T2 o( o: O5 Y" J7 T4 s a[l].y=y;6 ~9 ~& }' z7 |
lb=false;( N! }# V! C/ p7 z
break;
8 y4 A& n @0 a2 V- o- h' [ }</P>3 ?4 C, t, j& u. T; \" _9 |
< > if(lb) a[l]=a[l-1];- I ]( O# N+ T- A0 J0 r- V
l++;) V0 N3 O* _' j
rb=true;</P>7 _6 ^4 @2 B. j4 c
< > for(x=Image1->Width;x>=0;x--)
7 U \. _" w y2 v1 H v: H! H. r$ k if(Image1->Canvas-> ixels[x][y]!=ColorKey)7 q2 K' n+ J; e( g1 z3 }, S& X8 E
{1 k) N8 G5 P+ |5 P W# U; }
a[r].x=x;3 l" P, m/ P U, f) B3 |+ {& [
a[r].y=y;8 J: j2 q) H8 r6 G! c
rb=false;
; e$ r3 C) A9 v' f break;
: B @. U( R u; v }: R1 _; \1 F+ b& ~! M6 l! M
if(rb) a[r]=a[r+1];7 ]% e6 N# Q6 E* T
r--;7 F7 l7 B! [( v4 H. m3 X& z4 [
}</P>
( E2 v3 L2 v2 @0 ^! q< >r=Image1->Height*2-1;5 X* a! S1 S) l# i/ T$ J5 ^
for(y=0;y<Image1->Height-1;y++)( X1 z1 M! U+ g* U D/ z2 t. i
{
0 L( V2 p+ a/ U7 _ b& Y+ c for(x=a[y].x;x<=a[r].x;x++)- g& h: n' y; ]# ^- m- X- z
if(Image1->Canvas-> ixels[x][y]==ColorKey)7 w j& ]2 Z" C2 |$ |
{2 C( l; H8 [% B( B& z
TempRgn=CreateRectRgn(x,y,x+1,y+1);
% t4 v6 N( q3 A# R CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);3 z; m% h) `8 `8 m, S
DeleteObject(TempRgn);: p. i W5 w# L: o! R3 j
}
$ R. e U6 X8 ?, O; I r--;
+ O! n% z2 s& S/ D E5 c}</P>9 t; I( Y6 p2 b; T" q
< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);; [0 m& g0 u3 ~$ O0 d
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
8 T+ n3 d/ l, @9 ICombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);/ c) S( @& A! Q& p1 y
DeleteObject(TempRgn);' b) ~, L2 d* q# G5 c: q: e
delete a;* @' y! `2 R1 p0 Y( ~( y! f
SetWindowRgn(Handle,WndRgn,true);3 U9 R/ \( }6 V" T7 E2 q
}</P>% z4 r, D! Y+ O \7 x
< >void __fastcall TForm1::Open1Click(TObject *Sender)9 {8 y- ~/ ]" U3 K2 c8 ]0 f9 i: a
{: j4 g' P; V' X
if(OpenPictureDialog1->Execute())
- R7 V) Y* q6 F# G% b+ g {
* W3 Q" F8 |+ B Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);3 v$ r ]6 m! J
BmpToRgn();& l5 u( V! O! S9 h9 `
}; ^+ t0 |; D/ U9 Q( Y9 W* U( H( h; e
}
& D: t5 i4 R% m# Y. t+ Wfile://---------------------------------------------------------------------------</P>2 v0 z* z/ `& C
< >对啦,图片的背景色要相同。
% V* h, ], U# d4 ~& N8 A图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>2 E7 H+ j4 y2 n
< >file://--------------------(一)为窗体背景增加渐变色(蓝)--------------- T- z; @- X \2 v
void __fastcall TForm1::FormPaint(省略)
: c9 \* U( F) l7 ?- ^! `$ a; n+ T{1 M+ D( N M+ N0 c% x( N
AnsiString ww;int bb;
' o ~' i$ M( E7 Z7 s# S7 B* y ww=AnsiString(Form1->Width/256);
& M8 g4 V+ W+ u$ Y2 I TRect MyRect;
4 s8 t* t+ K! I7 N2 r! B MyRect.left=0;/ D% _1 l O5 F' ~/ D
for(bb=0;bb<255;bb++)
0 c4 y8 U2 w' A3 g. ]5 B8 ~3 E {
9 d! u: B, @) n8 e: A Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);
. H% O- Q; s- O" v7 p6 \0 I% ` MyRect.top=bb*(ww.ToInt());
2 F8 e. u4 l8 f1 k/ h0 \( w& T MyRect.right=Form1->Width;4 }9 Y7 {& G; ^6 z% A# Y
MyRect.bottom=(bb+1)*(ww.ToInt());0 \" Q- e, ` l4 [ r
Form1->Canvas->FillRect(MyRect);
% |) o2 N* Z. s }3 ?( j- w* C4 u
} </P>
+ N. _7 U& G& N* Y& t2 K< >file://---------------透明窗体--------------------------
9 k3 s) M3 X" V* w+ Z! Jvoid __fastcall TForm1::Button1Click(TObject *Sender)
2 C( A* T9 { Y, k% m( t{
5 h, ?' A0 k. z4 q! s TRect *rctClient,*rctFrame;: k3 t$ E" Y/ N
HRGN hClient,hFrame;
* _+ g0 ?; q+ s+ e% f$ q POINT *lpTL,*lpBR;
; L$ z: B2 ~3 F( d2 r/ P% f rctFrame=new TRect;
l- [# y- `( T1 H: g$ Q4 [ rctClient=new TRect;( l; S/ Q7 r0 v. f$ m$ w/ m
lpTL=new POINT;6 d- l2 m; E6 `9 ~. F( U7 E: b
lpBR=new POINT;
. {' S! |" U# ]& T GetWindowRect(Form1->Handle,rctFrame);
4 s) C4 ?0 j: s7 p ::GetClientRect(Form1->Handle,rctClient);- k+ N! q2 R+ }1 M# r: H9 }
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;3 g8 C2 s8 W' h: T6 r. m* {0 m
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
9 {8 r2 |6 X, e9 Z* M< > ::ScreenToClient(Form1->Handle,lpTL);
: G, K9 M, \* W1 F% D ::ScreenToClient(Form1->Handle,lpBR);
1 M# x: O- B& Q- J. g, S: Z rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;
" ?5 p7 B* U: c; a0 P rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
/ _* L1 N, R8 u9 W rctClient->Left=abs(rctFrame->Left);
: `8 A8 O. \. P/ P7 ? rctClient->Top=abs(rctFrame->Top);5 f. l! W7 s( C" d- h# G! M
rctClient->Right=rctClient->Right+
: w, F9 i4 ?- A# z abs(rctFrame->Left);" j1 A: g# |! d. @2 h2 Y+ Z
rctClient->Bottom=rctClient->Bottom+. i/ r2 W8 j$ ]. N7 u M
abs(rctFrame->Top);2 r, l" M: p" j8 y9 P
rctFrame->Right=rctFrame->Right+
( Y& J8 _0 f2 E# f5 T abs(rctFrame->Left);! s9 [9 M: m) B( O. ~7 B. l$ A f0 s
rctFrame->Bottom=rctFrame->Bottom+9 W, L; ~: X) k- O' n0 r) ^' k
abs(rctFrame->top);
$ }5 z3 @" M( C g! h7 a9 Q7 Z rctFrame->Top=0;rctFrame->Left=0;</P>
8 N+ T- \2 n( U- n7 F< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,- z; Q0 w: X3 F6 x
rctClient->Right,rctClient->Bottom);
3 x& I" _; E) W+ i2 Y hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,' P* [5 v1 W; f- I9 b! X8 f; b
rctFrame->Right,rctFrame->Bottom);( i: U" \! D0 c, C
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
( l7 l; g, Z0 j) M2 J/ g2 t2 ` SetWindowRgn(Form1->Handle,hFrame,true);</P>
9 k p2 L9 x+ R2 F; R< >
+ K1 s# |4 S7 Z* s delete rctFrame;
1 @; @& ^2 F0 ]- O) v+ Z" @. R delete rctClient;* S$ a& ^; T/ `% {8 w, v
delete lpTL,lpBR;</P>& p9 |' R% \* v( E6 `& K
< >} </P> |
zan
|