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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。
$ X. x$ T- c6 m$ ]" Ufile://------------------------------------------------------------------------8 d: C( i. O# T& N/ p5 N2 J. M
<a>file://Unit1.h</A></P>
3 I9 i7 x! {0 @. W9 W/ q< >#ifndef Unit1H
; b2 y# d/ Z. O I; Q( {! O+ r5 ?" |#define Unit1H
+ m) R- t& E. x) X+ Tfile://------------------------------------------------------------------------
* d. B3 g7 i8 ]/ T7 @+ c#include <Classes.hpp>
8 r" M2 h" i2 C7 R& Q0 O#include <Controls.hpp>( h) \) M. M) }, L6 e$ L4 C
#include <StdCtrls.hpp>
! l5 \8 p' N) d( x#include <Forms.hpp>
* X4 D/ @7 J' k6 |# z) V; ?& k2 X#include <ExtCtrls.hpp>
$ ~& O8 G; w7 g4 T% s( {. d1 R#include <Graphics.hpp>
. p& s {- ]( f5 \9 B5 S) _7 T) Y#include <Menus.hpp>8 S) g6 l: K$ d' B) l
#include <Dialogs.hpp> k4 }' V, o6 z9 c: }
#include <ExtDlgs.hpp>; X* D; _ \5 c# N
file://---------------------------------------------------------------------------
' c" D' p% z1 F3 ]7 W+ [! u4 Fclass TForm1 : public TForm
# d! e, f' C' i; S{
& H! H5 g: c. R# k__published: // IDE-managed Components: Y2 B3 \1 l+ n$ g6 C
TImage *Image1;
6 S: Z$ r+ v7 D$ N TPopupMenu *PopupMenu1;
0 V) Z, H( w" P6 f TMenuItem *Exit1;6 j4 q2 o4 A+ {+ U
TOpenPictureDialog *OpenPictureDialog1;9 Q" q9 Y5 t* \, Z* D5 E% V* `
TMenuItem *Open1;
: ~( \# ~3 h: M- N) f5 I0 W0 @ void __fastcall Exit1Click(TObject *Sender);
) y+ Q2 L6 B) b4 L void __fastcall FormCreate(TObject *Sender);7 J, K, F( q4 {, a4 G
void __fastcall Image1MouseDown(TObject *Sender,
) c3 y0 \6 u& [, q; v, J' V TMouseButton Button, TShiftState Shift, int X, int Y);, P7 U M# T. O- F
void __fastcall Open1Click(TObject *Sender);
* c! b& d; z$ A8 T% s! v' S- [private: // User declarations" J: n5 E# W* Q% ^# s9 G0 d9 z% U! H
void __fastcall BmpToRgn();4 `6 R# z; Q7 E' Z/ E& K
public: // User declarations
# H2 p. G6 }+ u2 q3 e$ N4 @ __fastcall TForm1(TComponent* Owner);
7 z% s; ^# m! R' j/ D};
6 y/ ]' K% C$ G# f( D% a. bfile://---------------------------------------------------------------------------2 [4 _8 d7 L8 T. e. g
extern PACKAGE TForm1 *Form1;$ ~2 k3 c- n& `6 {% \/ u, C% K& ?
file://---------------------------------------------------------------------------; ?% j' P8 h3 p& U! @! h* @4 K
#endif</P>
4 t4 a5 A5 V! V< >( _- K5 X* R' K, X0 E' M
<a>file://unit1.cpp</A>6 S+ S& V5 ?8 O' `
file://---------------------------------------------------------------------------</P>8 x3 e* R- E, p- G8 _4 b+ m" y3 m
< >#include <vcl.h>
$ x& K# ]( v0 x: R: B#pragma hdrstop</P>7 ?2 ^7 _% I+ @: r- f! h S* `1 ^
< >#include "Unit1.h"
9 r$ ^3 ^) C4 W6 x6 b3 Dfile://---------------------------------------------------------------------------* c* e8 P) K5 J
#pragma package(smart_init)
. Z& \6 [+ @. Z* o#pragma resource "*.dfm"
- c2 [( S: ?2 R# z! G; xTForm1 *Form1;
/ L1 Z; K( \: i9 @file://---------------------------------------------------------------------------" C; q1 t1 @. H6 B) h
__fastcall TForm1::TForm1(TComponent* Owner)
/ b+ C y4 @! Z! | t$ N; b : TForm(Owner)
" p, \! c1 u2 d! @* `{
`, w) c* W! H7 b X}2 X$ {3 |4 t8 B/ w; B
file://---------------------------------------------------------------------------
2 ]2 M$ p" |3 R6 bvoid __fastcall TForm1::Exit1Click(TObject *Sender)
- q" t9 }4 \ r: F/ t" g{ i3 {( ~9 p1 S" }# \3 O; \- A
Close();
2 o9 W- y- W3 @ `" c/ ]# F}2 H" J$ j+ C" K6 e( v4 Y3 a
file://---------------------------------------------------------------------------</P>. R# d1 Z- U4 B( m3 V
< >void __fastcall TForm1::FormCreate(TObject *Sender)
2 J9 a7 C5 s; }9 P8 z{</P>
3 v% C% s8 k8 ?9 a< >BmpToRgn();
! g8 w3 |7 r1 Z! d}0 ^: C: g! u4 b( D
file://---------------------------------------------------------------------------</P>
- ]4 j- t% i, M2 ~ n+ N< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,6 q1 t; B/ w/ h, x" P. k
TMouseButton Button, TShiftState Shift, int X, int Y)
N/ |1 ^" W& w1 e1 f{
- K3 ?2 |* |6 A4 X4 tif(Button == mbLeft)
' w5 s% n- y% v7 H% R" ? {
' C, m6 M+ V6 u7 d2 t ReleaseCapture();/ a0 c; ~" t7 }2 u; f) P$ ~
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);8 d3 d7 c1 ]$ \
}$ g/ H8 \% ]* _ q F" n, l
}" m8 g1 S, e) i5 a! {
file://---------------------------------------------------------------------------8 Y& `# n. ]3 x
void __fastcall TForm1::BmpToRgn()" d% |9 I- n1 E+ b
{! V9 X0 g0 U* ?5 ]
Image1->AutoSize=true;
) H( c, R N1 k0 \" L+ O9 g) s+ zForm1->AutoSize=true;
; P7 M3 a. f4 v4 r4 b5 F( ~Form1->BorderStyle=bsNone;4 H- O; O+ h5 G1 Y; }: i
TColor ColorKey=Image1->Canvas-> ixels[0][0];: t2 F* v1 Y0 ]
int x,y;
" x6 M9 s4 Q( H1 {& R: Z) s( G( Pint l,r;
1 t# A9 o) T% P4 K' {% E' K; F6 ]POINT *a;
9 o4 N; b% W; _% Y6 zbool lb,rb;6 p8 u. N: F/ r& y c4 ~
HRGN WndRgn,TempRgn;</P>) G5 q8 F2 a; } V1 t
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)+ ?3 Q' M, `0 c8 v, j [9 M
{$ Z$ v8 \. u4 V$ d4 p( b) f" r
ShowMessage("申请内存失败!");
: f; F" y! p1 B1 @ exit(0);
2 S" N" l$ J, S8 }}</P>. ~0 _0 h( o1 m- Y3 p/ F
< >l=0;r=Image1->Height*2-1;
7 {' i9 s. B" P2 b& D( |3 rWndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>8 A3 w- T; T3 I" \9 R) v0 F
< >for(y=0;y<Image1->Height;y++)
1 ^# \- J9 n0 K& D4 q{" e$ ?0 E' D k4 |
lb=true;) `# A* B* i* ?# g
for(x=0;x<Image1->Width+1;x++)
4 U4 @5 `6 r. i6 s$ D( N if(Image1->Canvas-> ixels[x][y]!=ColorKey)
6 F( U6 ~$ f! @7 }/ f$ N. m$ I+ ? {8 G; n) S) ~0 E0 p+ N. j' m! g
a[l].x=x;) V& I2 ]+ t* H* Z. ~8 m4 T2 ]
a[l].y=y;' |4 s. _# K* s' M
lb=false;& }# h$ E* ~! r! ` j4 U
break;
+ B/ }7 J8 [( i( y' h }</P>
" c( U: D$ H; a" Z& K< > if(lb) a[l]=a[l-1];( P$ H' k/ {* u# a' [, S4 _' D: p
l++;
0 q9 y/ U: D8 |3 m3 U3 H+ o/ Z rb=true;</P>
+ x6 k) c3 D. ^; R' w, u" |7 l< > for(x=Image1->Width;x>=0;x--)
& g6 W* ~1 J& [) p if(Image1->Canvas-> ixels[x][y]!=ColorKey)& z7 s1 J: f' ^/ j- x: N
{
, R/ t8 Y2 w& R a[r].x=x;, X3 r& `' E% }! K
a[r].y=y;
$ U7 Y d1 R( ~. _5 B rb=false;
' f# I: O' v2 Z; h' ]. n7 v break;
5 m% H* c8 h, R( c% C! j6 B2 D }
- Y+ } R) G' f& q( P: V; s if(rb) a[r]=a[r+1];
* T2 W. U, I- C1 j7 w r--;
" {1 w ~% t% T}</P>
' i1 u3 s! g0 k4 v< >r=Image1->Height*2-1;6 A1 ]0 ]. J) c
for(y=0;y<Image1->Height-1;y++)% _, l# _5 y! a; n, v- I( ]
{$ X5 L" X. J/ K) {1 v7 J; p: [
for(x=a[y].x;x<=a[r].x;x++)
1 V. s6 G- o! @* ^% G" s3 _" ^9 m if(Image1->Canvas-> ixels[x][y]==ColorKey)$ E% S" i; N- S' ~. t! d1 Q; n
{
) y6 j! }3 u3 }( u& i& h TempRgn=CreateRectRgn(x,y,x+1,y+1);) H, n6 R' Z0 k& N, ^& c
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);/ ]2 j1 i$ ~' Z' z
DeleteObject(TempRgn);
1 f6 k: l1 E7 Q# H& z }
+ u N+ p/ v- A+ P2 e r--;
. ~. C8 D$ C2 \( U* A}</P>
, m, |$ q( b3 [( ^5 ]< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>); M2 j, Z" N( ?/ Q( D. Q9 ~
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);+ `, z( k# P/ |( t* t8 e( C6 N
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);9 p/ j9 g: M9 K8 g4 l* Z
DeleteObject(TempRgn);
- n6 S8 V/ x- E% f p9 } ]delete a;
' J5 c! ?( @* Y: KSetWindowRgn(Handle,WndRgn,true);. J4 c2 f7 b; S! |/ s
}</P>
) s4 C1 r' F% L9 S< >void __fastcall TForm1::Open1Click(TObject *Sender)8 M; ~% p$ E$ f7 G$ G6 h8 ]
{
& v2 d: D& C9 D. U% `; L if(OpenPictureDialog1->Execute())6 e+ W& c6 j9 Y! E
{7 p( Y& q( `) c/ f
Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);; y/ t! ?3 w$ r1 Y+ R
BmpToRgn();$ m# ~# X- m2 p+ N+ H
}
0 e) K4 O8 g6 t( u- N}
1 z3 d( v7 ]3 |+ @file://---------------------------------------------------------------------------</P>
; ^' t$ E m* h! c6 _< >对啦,图片的背景色要相同。$ p% L* W/ a: Q/ j* C& q: |* C
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
( t4 ?" j8 }# k9 z! `< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------
' \1 ?3 s* s, Avoid __fastcall TForm1::FormPaint(省略)
8 ~9 Q( h. D; K8 C. s: o) ]2 z{/ d B/ Y) T# f
AnsiString ww;int bb;
1 y7 e. B/ B2 J5 a# K" f3 G ww=AnsiString(Form1->Width/256);6 n* O3 N( c. p
TRect MyRect;# f ~. |4 _0 @: _; i
MyRect.left=0;3 \! z( U+ X7 n3 |5 q3 R
for(bb=0;bb<255;bb++)
. c8 j1 ^: v! k; V4 X7 w2 p6 k# k {) k. e2 [: [" v$ @
Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);
# j8 y1 `& v O MyRect.top=bb*(ww.ToInt());. B @" C: }# g9 \; x E
MyRect.right=Form1->Width;2 N$ _& D% p* A& G4 q+ \3 e) ]4 t
MyRect.bottom=(bb+1)*(ww.ToInt());
v" Y0 j, | F' J, z Form1->Canvas->FillRect(MyRect);( u7 G( Y z7 H& C6 m9 y
}
/ V9 N5 x: I5 {; O; s- v2 ~} </P>$ U/ a4 K& s0 {( Q3 N* g- L. Y
< >file://---------------透明窗体--------------------------0 K1 j0 s5 {& F* }5 L4 o: E
void __fastcall TForm1::Button1Click(TObject *Sender)
& A0 P& F% S8 a3 s{
- a5 ~+ d6 d e TRect *rctClient,*rctFrame;9 A) K8 C$ m- Q2 D4 ~' L
HRGN hClient,hFrame;
, _$ c: g6 y- x5 ] POINT *lpTL,*lpBR;6 k7 z" E2 g. O- V
rctFrame=new TRect;
* u! e: Y/ ~, z' a. `# R rctClient=new TRect;
3 H9 ^9 P# C. k% z O lpTL=new POINT;
% W" q$ X3 X' Y' h lpBR=new POINT;
/ n6 b- d, _: B7 p' R6 o GetWindowRect(Form1->Handle,rctFrame);$ P. P3 \- p0 @3 W; G' q
::GetClientRect(Form1->Handle,rctClient);8 @7 L- u5 \0 a2 T
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;: d2 [/ e7 o) M- O2 L
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>0 M, o( ?5 h/ z
< > ::ScreenToClient(Form1->Handle,lpTL);
/ r. c: Y- l* J* Z7 r; W2 t& \ ::ScreenToClient(Form1->Handle,lpBR);' U& Q& I! u8 t6 I9 Y1 b Q
rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;5 p4 ^- v. j" D" V2 E7 j
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
" y3 R& v# B" F8 z3 b; m rctClient->Left=abs(rctFrame->Left);. }8 d' F" i' `4 Y: q
rctClient->Top=abs(rctFrame->Top);
# T$ ^- E( D, r, u$ T3 u rctClient->Right=rctClient->Right+
, A# b1 b/ z! O, |2 u/ P$ ~1 F/ S abs(rctFrame->Left);
# F3 G1 ~# V2 o4 f n) \- C rctClient->Bottom=rctClient->Bottom+
0 \6 N( Z# J* ]7 O( R( L2 ~ abs(rctFrame->Top);3 k- {( i Q$ ]2 [
rctFrame->Right=rctFrame->Right+% t. `" i* e. K; q6 A+ w
abs(rctFrame->Left);
0 R# Q5 t1 {) z5 r @% c5 v, s rctFrame->Bottom=rctFrame->Bottom+7 q# k- ^' \% {
abs(rctFrame->top);
- F: q: J) r6 s# M rctFrame->Top=0;rctFrame->Left=0;</P>9 T( G3 D f7 s% A& H& u3 W) n
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
V8 H Z# h) D rctClient->Right,rctClient->Bottom);0 K- G9 H5 C1 p7 C J2 ?& n
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,, @2 @% T, B/ @& _& E: n
rctFrame->Right,rctFrame->Bottom);/ V; Y: G4 S5 N& G0 ~: D' G& Z8 |
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);+ O; s' M& R" b3 l! k Z: R: h1 E
SetWindowRgn(Form1->Handle,hFrame,true);</P>
" J2 M5 L+ i7 V+ w& b4 J" K< >& ?+ `: J( f$ e \4 l
delete rctFrame;1 [2 S( J1 X. B- k) Z4 y3 M
delete rctClient;; ?5 h& _- j! r
delete lpTL,lpBR;</P>
+ P5 q# n. q+ X8 v) j< >} </P> |
zan
|