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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。: d% a" { ^. q% B2 A/ B L
file://------------------------------------------------------------------------8 i5 p- s! B8 I. \% N/ f
<a>file://Unit1.h</A></P>0 b# A% Y6 Z" R4 b
< >#ifndef Unit1H
4 f/ W. l7 X5 Q+ b#define Unit1H6 G5 x* s+ M7 o$ h9 I4 {
file://------------------------------------------------------------------------
1 |0 U( J0 f. q5 \4 U/ M#include <Classes.hpp>
2 _4 h# N5 Z% \% T) `#include <Controls.hpp>" v D$ i1 a+ X4 Y6 R. P7 h1 q
#include <StdCtrls.hpp>
0 C/ f1 i, j% A) a#include <Forms.hpp>
. y+ m/ A. B8 r2 B8 h5 q#include <ExtCtrls.hpp>9 n5 O: k; x. @
#include <Graphics.hpp>+ @: [( [0 Q" ]1 C& T0 I$ b
#include <Menus.hpp>( i2 F: ?/ H/ ]2 m# P# Q
#include <Dialogs.hpp> T% K. L R- o# F
#include <ExtDlgs.hpp>$ ?$ x" e; O$ G0 ?" ?( x- ~( y
file://---------------------------------------------------------------------------9 f m9 _8 C {8 K6 g
class TForm1 : public TForm
' s8 t2 B" M0 y1 }$ T{6 i9 Y8 \( K# c7 @& E
__published: // IDE-managed Components
7 u1 m# R2 e/ d TImage *Image1;8 A; x3 ?" V7 r1 k/ u- x
TPopupMenu *PopupMenu1;3 `) H; z5 o7 J1 l8 {8 J+ E# y
TMenuItem *Exit1;$ _& [' n0 u1 L
TOpenPictureDialog *OpenPictureDialog1;
( f, v1 f V! C/ h# P- t4 I TMenuItem *Open1;
/ C1 E5 a$ o: h+ j& z void __fastcall Exit1Click(TObject *Sender);: u2 _2 \, _5 v) s5 W% c4 Y
void __fastcall FormCreate(TObject *Sender);
# \3 x8 m5 Z- [4 g) d& g void __fastcall Image1MouseDown(TObject *Sender,% e' O0 a6 m L6 p) a% S4 V
TMouseButton Button, TShiftState Shift, int X, int Y);' R j: ?; P: K3 h% `4 v
void __fastcall Open1Click(TObject *Sender);
# f* [, N- T- }2 m, y& m1 vprivate: // User declarations
1 h+ r) F+ ?7 H) r, \ void __fastcall BmpToRgn();) _, M1 g5 `, n$ s# Q6 a8 p
public: // User declarations
6 p4 Y% W* _) {+ n* c __fastcall TForm1(TComponent* Owner);
* c" l# l+ B# ^# o};
3 f% X3 a* H) Efile://---------------------------------------------------------------------------
. w( u: a c. m5 V3 ~6 i3 D/ T1 `extern PACKAGE TForm1 *Form1;
* q; f7 `/ d; X; i/ b. cfile://---------------------------------------------------------------------------
, c( c5 e& g7 X1 q# `+ |/ z#endif</P>
( t+ Q$ F6 Z' z" Q. v C/ z< >. t7 y5 Z/ @. G& I# j
<a>file://unit1.cpp</A>
5 l9 T! V( e8 z- F5 p" d% i+ r+ zfile://---------------------------------------------------------------------------</P>, Y1 o, }/ z; Z6 j4 d
< >#include <vcl.h>8 f8 M8 Z, n6 n v5 k( A { B
#pragma hdrstop</P>
, E t1 v7 e( p4 C" z: F N< >#include "Unit1.h"$ o7 U- d7 Q" C) b% A: @+ G: p- b& z
file://---------------------------------------------------------------------------
% u) r# L+ C+ T% Z' O#pragma package(smart_init)
) } o& g- U9 j#pragma resource "*.dfm"4 q7 Y" I. H+ X6 o/ x/ @& M% X
TForm1 *Form1;
2 ?9 |# c) G; u, sfile://---------------------------------------------------------------------------/ M, r, f# U. X* k% R
__fastcall TForm1::TForm1(TComponent* Owner)/ v" {0 f- T+ d: ?" H
: TForm(Owner)
O$ {# Z$ M& W4 B0 z: L{
! C) U" l3 `0 Z5 \: V$ X}5 H8 F1 o, X& C4 M4 Q% t$ K% t
file://---------------------------------------------------------------------------
& d- P; L3 g$ M8 f. dvoid __fastcall TForm1::Exit1Click(TObject *Sender)3 G0 t/ y! `+ S7 a0 ` E E( ]: {
{9 n5 W9 f& R6 O2 b
Close();( P; O4 A0 z; P9 F
}! Y8 t4 C" q }
file://---------------------------------------------------------------------------</P>
2 S$ e: K$ m- v( y6 x< >void __fastcall TForm1::FormCreate(TObject *Sender)
& E8 f% a1 ]1 s2 v" l0 v{</P>
/ J: i7 P# J( }. d; Z0 M< >BmpToRgn();$ q4 _5 Z$ \' {1 G5 O* T& ?2 P) j+ f9 _
}: k5 z/ D, f+ L- G
file://---------------------------------------------------------------------------</P>
' M* X1 V9 f. T( U. n4 H4 R0 E< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,
: H( h9 H# f' I TMouseButton Button, TShiftState Shift, int X, int Y)8 D2 Y; G) W5 Y- T, L s
{
2 D, s }) P+ j9 G( gif(Button == mbLeft)
/ y6 C0 e/ s# t6 R+ o {
8 @2 y0 l" P# g/ D @0 x ReleaseCapture();
K+ J7 f$ u Y% ~3 D9 }2 o+ t Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
. B- F' R1 b) A% k: i2 R0 o }
{6 F! F5 P2 R0 w3 j R( b6 u}9 f2 V4 W2 O& `2 j
file://---------------------------------------------------------------------------1 L h( ^0 d# F, x w
void __fastcall TForm1::BmpToRgn()
' L" t! n5 W; \- C{
& D6 O4 V, b/ H5 T( y$ TImage1->AutoSize=true;2 K& G f: s. ^9 }+ g$ }" b6 y
Form1->AutoSize=true;
* ~ E0 x! l" W2 ^ ]Form1->BorderStyle=bsNone;
, ]9 D' L( L2 iTColor ColorKey=Image1->Canvas-> ixels[0][0];
/ s5 g6 ^6 t' |3 xint x,y;& a) W9 Z' P2 Q) q# j+ w" O
int l,r;
7 |2 T1 R s3 F7 F, P [. ?- ~5 cPOINT *a;3 H$ O( [9 \) O( N
bool lb,rb;9 ?. r5 l, p( O) E
HRGN WndRgn,TempRgn;</P>$ e7 { Z/ G& l0 D
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)7 \# o5 ?2 h6 X* K% q& v3 N; d
{7 W, X3 n# C3 Z j v8 E
ShowMessage("申请内存失败!");3 v1 n, }9 `! A( i) J R& s7 i+ b5 P
exit(0);
- z8 o9 [1 {. O1 `}</P>+ W8 U0 E* f8 Z
< >l=0;r=Image1->Height*2-1;
5 n9 D1 z3 I# k' t/ F) jWndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>' I1 x6 p2 ^1 v
< >for(y=0;y<Image1->Height;y++)
: c+ F1 k( r6 X$ a5 c0 e{, u1 U% d' [ V, w: {& ?7 P+ O
lb=true;
( o/ e9 d [' w+ S& \8 Z for(x=0;x<Image1->Width+1;x++)
* Z% F9 \8 o6 v' X' `& v! ` if(Image1->Canvas-> ixels[x][y]!=ColorKey)) H4 p* z7 L! m3 ~, H$ Z: P5 W' A8 y
{
" N8 z& g; a; {) q# ^( s0 W3 V) x a[l].x=x;8 g! d2 I+ p5 a4 ]4 w; N
a[l].y=y;
( e. G' ~$ k6 f3 O" m$ J lb=false;. q/ z! T1 |7 h- Z$ ^
break;
2 }' L2 P* |! ^4 t }</P>
9 j, ]+ `/ V; B4 C4 E, ~. A< > if(lb) a[l]=a[l-1];1 {. J" b; y( C" X2 F+ y; h
l++;5 l, Y& x' k4 I S
rb=true;</P>
" J# O' W6 C9 B, v$ ]/ z8 c/ I< > for(x=Image1->Width;x>=0;x--)( c* x/ Q/ X+ F* m& x
if(Image1->Canvas-> ixels[x][y]!=ColorKey)/ v" N8 A+ i1 Q: `" a. Y! }7 m
{2 l4 I( {( C8 T1 H. Z$ n
a[r].x=x;- {! }* v4 v, F `* [& D* {
a[r].y=y;7 x$ l Z* ]1 o2 ^- T3 `& L# s
rb=false;
9 G* N M, d# C0 E" n4 ^: X/ ?/ l break;7 C4 m7 z. ]" M/ o& A& s+ C
}* ~( }; P, q+ X
if(rb) a[r]=a[r+1];
% k; j' z# d) l- d& x- H- f$ ^1 f r--;, b* {" V# `; O. U& e! ?
}</P># t$ e3 ?/ p' {* x
< >r=Image1->Height*2-1;
/ s1 [' n) ], R) ufor(y=0;y<Image1->Height-1;y++)4 a3 {: R: \6 q+ u5 B
{
. w' C; o* c6 ^; E+ e0 P- d2 n for(x=a[y].x;x<=a[r].x;x++)5 \. P) t0 ?1 n' f/ z- Y6 `: e% r
if(Image1->Canvas-> ixels[x][y]==ColorKey)/ F4 a w. f# d/ r" E
{
. F1 ?8 {" t; u TempRgn=CreateRectRgn(x,y,x+1,y+1);/ B5 ~7 d& }/ g q2 \' y" _3 F
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);3 Q( n+ m) p! W7 }- ?; {
DeleteObject(TempRgn);
{ Z. V% c, p: V* c q# _ }
3 j! q+ C) a5 V1 s7 _% V# H# p3 A r--;
) e) R5 t8 ~1 i; [( [}</P>
# y) h% ^0 T4 T< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);
: O( J. p; D! s0 E5 T6 P2 xTempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
7 {9 L6 v/ K8 h/ O# OCombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
7 L4 ?2 N5 q3 V9 b/ x! w7 x# hDeleteObject(TempRgn);5 ^' L0 [/ g7 ]6 |0 \ ]
delete a;
$ s) U$ O6 E- U8 VSetWindowRgn(Handle,WndRgn,true);
; g/ @# e, b! B" V* F4 ^7 s}</P>
. Q R9 ]$ t0 R {# q) m< >void __fastcall TForm1::Open1Click(TObject *Sender)
9 r( u2 M6 S _3 M$ C{
4 i2 K+ x: X. s) w6 [ if(OpenPictureDialog1->Execute())
5 f9 H* w, ]9 J! y/ V& n4 G; X {) M- G# e! S2 Z
Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);- p" F( H9 X. [, |* U$ X
BmpToRgn();
$ y% S$ v( F' F7 X+ g6 c% W+ A }
+ _, p$ U2 _: b& h2 n6 P& R% k}
6 \+ f; W0 O9 m; _& ?3 J* Hfile://---------------------------------------------------------------------------</P>
/ p8 I7 S# T% Q4 ~+ |: X< >对啦,图片的背景色要相同。; `, a: E% R; ?4 ~: \
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>: K, g+ t$ K( z: R$ H$ C4 i4 q
< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------0 q0 E2 |, p& i9 _
void __fastcall TForm1::FormPaint(省略)2 N! q1 c. n3 ]7 B0 Q, Q
{
" `8 c ~$ o* w3 U5 Y0 w7 H AnsiString ww;int bb;
: J8 c& D+ t' i% O ww=AnsiString(Form1->Width/256);% V* ?( a+ M- O1 q& M
TRect MyRect;6 G4 G3 U' ^+ Z
MyRect.left=0;
& U8 W6 j B) m5 {( s for(bb=0;bb<255;bb++)
! \3 Q: u; v* `' M6 O- e( H6 p7 {. p {: R. }3 H9 Q# o' S8 L; R( V) d
Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);
1 Y( r/ Y+ L6 i! D) w$ N* p MyRect.top=bb*(ww.ToInt());! z3 \8 @* p- t6 N3 O
MyRect.right=Form1->Width;( f f$ v+ c$ U. h
MyRect.bottom=(bb+1)*(ww.ToInt());
" ]3 O7 ^" i; o- N3 W Form1->Canvas->FillRect(MyRect);
i/ m+ l& z$ q9 S7 E }4 {$ J/ d$ ` b; F( h
} </P>" t+ m* ]/ Y7 e- n1 O9 H5 F
< >file://---------------透明窗体--------------------------+ C' v0 G( n O; B" c4 F
void __fastcall TForm1::Button1Click(TObject *Sender)
- S0 X6 e) P' E/ g{
! n3 F y" t3 ~ TRect *rctClient,*rctFrame;* K% X9 @ J( z% w
HRGN hClient,hFrame;
7 M( o7 g" W2 i3 L POINT *lpTL,*lpBR;4 b; X: o1 c! x& |$ o
rctFrame=new TRect;
0 Y+ W& r( h3 l( t. z' V3 l rctClient=new TRect;
& O, ^, ]& a& m9 `0 K) F f, l lpTL=new POINT;7 T: `5 F2 E' u+ Y: v! i
lpBR=new POINT;9 l- ~ X7 R/ I4 L7 h/ h5 b
GetWindowRect(Form1->Handle,rctFrame);
2 P$ ?+ F5 X$ j y ::GetClientRect(Form1->Handle,rctClient);+ n8 c9 C$ B9 \3 z* `" b" w$ _
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;8 u3 s+ W, H U+ J# A6 j* w1 _( @
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
- Y: O' a. U0 U, b7 v: B< > ::ScreenToClient(Form1->Handle,lpTL);( }: Q' O- l' V r! _. J R, |
::ScreenToClient(Form1->Handle,lpBR);
6 u& x! a/ E6 v* n+ H2 H+ a rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;% H2 A3 G/ f! h* l n
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;: ~' {5 J2 T9 L/ ~8 t! z0 W
rctClient->Left=abs(rctFrame->Left);
0 |! \5 O! P" R0 ^- v rctClient->Top=abs(rctFrame->Top);
8 p# ^6 G4 m: P4 Y2 Q rctClient->Right=rctClient->Right+# S2 u, b; i2 S# |
abs(rctFrame->Left);; ~# J0 J. m/ e' M j6 \
rctClient->Bottom=rctClient->Bottom+" L! g* p6 d/ @/ [/ Y- a) Y
abs(rctFrame->Top);
' T* T, M$ s( n rctFrame->Right=rctFrame->Right+1 a3 v9 B( l. A" p; s
abs(rctFrame->Left);2 g3 l8 G: ^/ t% R2 f
rctFrame->Bottom=rctFrame->Bottom+2 o2 Q6 m! g5 q% V! Q2 `
abs(rctFrame->top);
; c4 ?0 I4 k& L$ X# ]3 ?7 g/ r rctFrame->Top=0;rctFrame->Left=0;</P>- k5 |/ a7 X# f
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
+ S7 e/ S1 B% k6 S9 |2 n rctClient->Right,rctClient->Bottom);9 V5 i; L, K4 p9 U
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,. i6 c, F% ~) i0 \& p9 q
rctFrame->Right,rctFrame->Bottom);4 y2 a5 ^9 H0 V% N# a! o
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
( s! P8 p D" y+ j3 _ O SetWindowRgn(Form1->Handle,hFrame,true);</P>; x% o) k) j4 ~7 `$ L8 \
< >5 d, q8 ]' j2 Y$ R
delete rctFrame; v4 t9 G8 P2 r- S$ ?4 K0 ?
delete rctClient;
8 W6 y. @; l* D3 |, R$ z delete lpTL,lpBR;</P>
* W2 S2 w/ G' |, I& w& n3 ]) ^0 Z< >} </P> |
zan
|