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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。% l( L" B; ?/ n3 `
file://------------------------------------------------------------------------/ u: H' c1 S+ `7 u
<a>file://Unit1.h</A></P>
9 m, r w; D( c< >#ifndef Unit1H# `% P2 t7 B/ t2 \. J9 k. H; ~
#define Unit1H. d1 x) \) q: b8 f) @
file://------------------------------------------------------------------------
* R8 H7 c0 W" |#include <Classes.hpp>1 b; K# m4 [& U- [* C
#include <Controls.hpp>5 a5 _' U" R; k1 W% V
#include <StdCtrls.hpp>7 p% T) b! h$ z$ v5 f6 ^
#include <Forms.hpp># K2 @; d1 u1 Q
#include <ExtCtrls.hpp>
0 x* u6 X* Z9 S& b0 E0 Q( {% ]#include <Graphics.hpp>
; ?/ K+ V# x S$ j/ v0 ~1 I#include <Menus.hpp>
. M# z. j# `6 | q#include <Dialogs.hpp>& O- U, i# w) v# t
#include <ExtDlgs.hpp>
! G2 I) P' r9 E: H* J, wfile://---------------------------------------------------------------------------3 R7 H1 t7 s. w: ~8 m
class TForm1 : public TForm/ L4 L+ H; X4 {" |
{
! `+ C' Y! `0 P3 U/ l# b__published: // IDE-managed Components
+ Q' u) M5 V d& [" Y' Q, Z( r TImage *Image1;) H7 ^; f: m/ {" Y, \% b$ m
TPopupMenu *PopupMenu1;& i: m( s1 J* i- L
TMenuItem *Exit1;
) f. P3 m$ }( Y2 L% j+ a- ^ TOpenPictureDialog *OpenPictureDialog1;
3 u. P/ d7 ]5 M TMenuItem *Open1;
9 Z. b. V: ~8 w( c& Y$ A2 l void __fastcall Exit1Click(TObject *Sender);' C" N7 d6 S" u" ~0 B; ?
void __fastcall FormCreate(TObject *Sender);0 E$ ^% z' b; Z# `( W) O2 Z4 Y" q
void __fastcall Image1MouseDown(TObject *Sender,8 i- p4 {" t( G: G! d, y
TMouseButton Button, TShiftState Shift, int X, int Y);1 u, Y; [ ]8 {% }5 W6 _ x8 ^
void __fastcall Open1Click(TObject *Sender);& v* I0 }3 ~4 t) {7 d1 y3 l
private: // User declarations
) `$ a3 l1 G T* C0 a void __fastcall BmpToRgn();
1 ?* b, }* u8 A' I. ]1 @4 m* p+ rpublic: // User declarations
* x, F1 I" K# g- ] M __fastcall TForm1(TComponent* Owner);
; m# q7 b' Z; T3 g- Q% b: N};; O5 u9 U6 }# z! N3 J+ z
file://---------------------------------------------------------------------------
3 w% v* ^3 r$ {. o4 nextern PACKAGE TForm1 *Form1;! L( F( q; S3 O* y2 i" n
file://---------------------------------------------------------------------------* a+ e' F6 R9 k
#endif</P>
# J' \7 [8 Y' t/ k< >
2 m2 ~+ W: \3 p4 T. e2 y<a>file://unit1.cpp</A>
/ M- J. P' s* {( S W" g9 ^' Y. ffile://---------------------------------------------------------------------------</P>
! d8 M/ A2 ]" W" U< >#include <vcl.h># j: f' _3 a" U9 J7 j- d
#pragma hdrstop</P>
# j6 z* Y' r7 y& [; ?* Z# l< >#include "Unit1.h"
5 T$ a1 \2 k! M. F) v9 c" I. `0 wfile://---------------------------------------------------------------------------
& V) n9 x) f9 V$ U5 E- W#pragma package(smart_init)
" V" b2 w, g& o% O o z#pragma resource "*.dfm"
) o: a7 L% n/ v! PTForm1 *Form1;
9 w+ g9 W( @7 k) u8 g7 ~file://--------------------------------------------------------------------------- h2 Q4 E7 @6 L& {& Y: y
__fastcall TForm1::TForm1(TComponent* Owner)( r2 t" Z" M, p; Y7 b
: TForm(Owner)' m' J5 _- F, S! w4 l
{
4 j5 V+ g* N% ]}
4 `0 h1 N1 K' S/ g* I& Ffile://---------------------------------------------------------------------------7 ?7 B) r( ], H# }& [4 @
void __fastcall TForm1::Exit1Click(TObject *Sender)- e& m' X+ H0 P& `5 |
{
( X6 E; G* o5 ~. T Close();
6 O x: j5 T! t3 R2 j5 j}
" B9 r5 |9 V/ E5 x- U* nfile://---------------------------------------------------------------------------</P>
$ {' f9 G. B3 z- X ^< >void __fastcall TForm1::FormCreate(TObject *Sender)) t' ?* S0 t4 p* Y0 B( u
{</P>
& y3 X0 a! { [) @! U, c& d |< >BmpToRgn();. ]5 T2 {6 r! U7 e0 H. P0 ^5 ^7 ^' q
}
0 g" v. S; ~8 Y$ \" S9 Wfile://---------------------------------------------------------------------------</P>4 e) _% H0 k8 ~* X
< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,
0 o2 [5 ^, ]8 A+ B TMouseButton Button, TShiftState Shift, int X, int Y)
- y: ~, s2 V$ b7 b- T( w4 ?& X{2 }* e) P) A3 W( J6 M, v
if(Button == mbLeft)
, V/ M. P$ x) |$ M4 O1 L. X {; f# i3 }( p5 R; N) R7 N6 k; q$ t
ReleaseCapture();
`! v( Y5 f" C o6 w Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);9 }6 F( D* X% f# R+ a) g
}3 j5 x6 U& T' \ ~: M5 A
}8 _& d$ M8 {. y5 Q% ~
file://---------------------------------------------------------------------------- p! |9 B, u( c/ R
void __fastcall TForm1::BmpToRgn()
$ w X3 a r$ e6 x, b) C, H{) P3 w8 a0 S R8 o" x) p
Image1->AutoSize=true;3 X) `; Y7 @& d& d8 k
Form1->AutoSize=true;$ j6 r E9 Y* K V
Form1->BorderStyle=bsNone;
8 L. E8 S; m1 s+ S3 c+ u! i/ {5 LTColor ColorKey=Image1->Canvas-> ixels[0][0];) v0 z: n% {& k6 b i$ x9 n
int x,y;
7 e( u( X. v' d1 @int l,r;% F* O' n' r) \6 \6 F
POINT *a;
1 `: e. S% H( o$ Ebool lb,rb;- B- u# L. n* d+ c3 `
HRGN WndRgn,TempRgn;</P>
. C, W* f3 }2 R( I+ T< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)
& O- u: c- K2 m{
% v5 g0 J- }9 i/ @4 i/ ^ ShowMessage("申请内存失败!");4 t) Q/ \0 i e' v& B
exit(0);) W& D4 ?/ T8 ^$ r& b6 |/ b
}</P>3 C9 @% Z3 \. i. [( d
< >l=0;r=Image1->Height*2-1;5 O( a/ H! J% ^: _
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>1 q2 e% o$ h; N4 F, b& p
< >for(y=0;y<Image1->Height;y++)1 f7 k, `1 K! n, |
{" Z2 P, P. d, m& `% A6 t2 `+ G) \
lb=true;
7 S( q! X. ^3 H for(x=0;x<Image1->Width+1;x++)
2 H4 ~! R/ w6 c- K; F if(Image1->Canvas-> ixels[x][y]!=ColorKey)8 ], u' m9 R# x5 O. [' Z
{* p% u1 f) ~. o$ }( y$ X# \
a[l].x=x;
6 W/ L6 l1 n+ k c a[l].y=y;+ o, ?: ^( G7 y$ |5 L
lb=false;
" }8 E0 h8 k U2 t break;
4 b# B* `9 T3 G% ` q: y% B' Y }</P>
' W) n9 @+ A L5 f/ K1 I8 ? J< > if(lb) a[l]=a[l-1];0 i; f/ _+ {1 Q" d6 \
l++;
- O/ r# g! i1 e$ S9 y* | rb=true;</P>
# {/ ]2 k3 e9 U( N$ M) t% x# ]< > for(x=Image1->Width;x>=0;x--)
, j6 i1 [1 D5 C% ] if(Image1->Canvas-> ixels[x][y]!=ColorKey)
& T# m6 V1 E8 X, b J8 ` {
4 ]( u) V; n( Q8 b a[r].x=x;" h8 ~1 ?8 `8 V! e/ q/ Z5 d$ E
a[r].y=y;) L$ @8 w* G6 C6 e8 t5 f* D- {% `5 o
rb=false;$ e5 y/ _3 P5 a2 j
break;
3 k2 k# y( D9 }$ N/ e }
; S; h% n9 l. y if(rb) a[r]=a[r+1];% c9 c& d' Y+ C' n: [& p" l
r--;
3 L( e/ A; y3 N! K$ Y* [}</P>/ @ A4 \- s! v7 y [2 q; t
< >r=Image1->Height*2-1;( t/ m! ?: I% n$ R3 \
for(y=0;y<Image1->Height-1;y++)
6 m8 P' u; g2 Z5 l+ _{
' d3 W2 y$ ~$ B j! k I9 J. [ for(x=a[y].x;x<=a[r].x;x++)8 U0 k- H( f8 |% a
if(Image1->Canvas-> ixels[x][y]==ColorKey)4 I; u8 r1 ~ }7 }- V
{7 Q0 {9 m3 m0 `: `& O" d9 @1 P d
TempRgn=CreateRectRgn(x,y,x+1,y+1);, Y& x+ Z- F+ q- x" v
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);+ \1 |' m; U( m4 P8 k6 d* v' f
DeleteObject(TempRgn);
/ f; Q% R" C! R* X( d }
' _, }4 l, y2 Q e7 l r--;
9 ~+ |" }! @1 P# k' F: E}</P>
* U% x0 ` o/ V8 c) z$ Z< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);
. T4 T l$ E2 H! jTempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
& u+ j+ Q7 T8 d$ hCombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);) d3 k2 W( q( q: m, U% p6 O: c
DeleteObject(TempRgn);
) l! P5 }: |# M$ x5 pdelete a;9 s7 \2 Q! S( E* E* S
SetWindowRgn(Handle,WndRgn,true);
3 A# s/ @# o) P# o}</P>+ ?3 W. \/ U! h$ ^8 M1 f" C' j
< >void __fastcall TForm1::Open1Click(TObject *Sender)
F, `$ K3 G) j W- Z; `9 l{
5 H# D2 y* ^6 G- K' B) I: {, S if(OpenPictureDialog1->Execute())2 U: r/ A5 i; Z' @
{
) w4 ], A4 K0 G# c% y% T Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);: m Q* B* L. c2 c! G) m8 H8 R
BmpToRgn();
0 s" u" w" ?0 M }
. x3 | P8 a( _0 G}% M: B( z# w3 F/ X h2 ^
file://---------------------------------------------------------------------------</P>( `6 y2 h, O' |' Q& k* @! n
< >对啦,图片的背景色要相同。
1 q% p0 C9 h, M( a图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
6 A4 x, }/ I& _* t+ ^9 P< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------4 f& Y: q1 W$ |# R0 d' S r
void __fastcall TForm1::FormPaint(省略)
! D1 }' ]+ V- x6 }. M9 w{6 I/ p+ S, |9 m% ^ D( r
AnsiString ww;int bb;# Y8 ^- Q4 M% N1 E K
ww=AnsiString(Form1->Width/256);
, ~1 v; E+ R7 m& C9 {- I1 d3 [ TRect MyRect;
' V, Y+ q& [; N3 F" f MyRect.left=0;5 [0 N9 Z* \$ m: [% f
for(bb=0;bb<255;bb++)' z$ W) S- z/ `4 |- X) p3 Z
{
" S. i) r; T; o- B$ m; ~ Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);' h: o. s, B7 J0 T
MyRect.top=bb*(ww.ToInt());
; b; a2 K- P/ {* \6 R2 {0 W MyRect.right=Form1->Width;2 D( ]3 z* g4 z5 |6 N6 J9 ^' n
MyRect.bottom=(bb+1)*(ww.ToInt()); Z' ? o m) W
Form1->Canvas->FillRect(MyRect);
# t- i( p, G2 H8 }! U; v" b6 K }+ F3 B9 k; p7 e, Z
} </P>1 I5 c' v0 g* k8 m1 V
< >file://---------------透明窗体--------------------------
* e4 o- Z: M2 xvoid __fastcall TForm1::Button1Click(TObject *Sender)6 y& s: w6 [6 z, o
{
$ ?( o& m$ q) U; B& T, G& d( F TRect *rctClient,*rctFrame;- J$ w3 [& S2 g( Z: H" ?! O% ]& L
HRGN hClient,hFrame;
2 V8 s" ?( _& Y POINT *lpTL,*lpBR;
& [+ G" \2 i h/ V$ A rctFrame=new TRect;. @+ Y0 ?0 j: A! J. s m& N8 e2 Y
rctClient=new TRect;
. l; T3 @0 H. J/ g. Z6 w lpTL=new POINT;/ V, K w. V$ h+ L4 n8 ]
lpBR=new POINT;% f. F3 x' \; G$ r( `
GetWindowRect(Form1->Handle,rctFrame);& W, `/ b5 I- ~( N
::GetClientRect(Form1->Handle,rctClient);
( Z0 C* I; L* l' G lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;0 Z, k6 O0 K' \2 q/ d! v" y+ @
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P> F4 | x& b- g
< > ::ScreenToClient(Form1->Handle,lpTL);9 F% h/ D* S v7 w
::ScreenToClient(Form1->Handle,lpBR);
4 B1 Y" _ I; K( e rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;
0 j1 I* W1 U3 Z rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
, Z: z; R- X8 [9 L) M' x rctClient->Left=abs(rctFrame->Left);/ O! v+ H) i" g$ R/ M
rctClient->Top=abs(rctFrame->Top);
5 k P$ Y) m+ t1 V& k% { rctClient->Right=rctClient->Right+
1 {+ E2 r* H" _& O abs(rctFrame->Left);
; l( S- g' @* m, R rctClient->Bottom=rctClient->Bottom+! f. h' B0 m4 s) P- q
abs(rctFrame->Top);$ r5 p4 ^1 f& u1 [" n) B
rctFrame->Right=rctFrame->Right+
0 V0 P! \# }/ E8 e( |7 L! B abs(rctFrame->Left);) P" v/ b' d- F' @0 O! x
rctFrame->Bottom=rctFrame->Bottom+" ~ X& l8 n$ p4 t- ^. J- K$ r
abs(rctFrame->top);
4 j3 X) ]+ B4 l, s rctFrame->Top=0;rctFrame->Left=0;</P>
1 {4 E& Z z0 U< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,' N" M& ]) Y: m5 E2 B/ Z2 z- r
rctClient->Right,rctClient->Bottom);
/ p: Q, {2 M8 o hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,. d; i% c) V) `- o2 j) d
rctFrame->Right,rctFrame->Bottom);: b& Y/ `; G7 K7 y# Q! @
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
1 S& @, i- f7 p* Y- |! r SetWindowRgn(Form1->Handle,hFrame,true);</P>4 P1 c$ y) y: A4 s" f* D
< >
( H" {5 a! N" f% U, n) Z% s. }* W delete rctFrame;
; c3 |! @5 y; T3 L' r6 w G( O3 J delete rctClient;
- M8 z" r0 S- q9 m5 ~ delete lpTL,lpBR;</P>1 V# X y0 p/ I# E. d3 V7 C: Y
< >} </P> |
zan
|