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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。
6 t4 k C) ?" dfile://------------------------------------------------------------------------1 T$ ^- b% q$ O& L- O6 s) I; O
<a>file://Unit1.h</A></P>6 i7 P0 @' s6 I
< >#ifndef Unit1H
. }( h7 {+ D/ t- i6 {/ C#define Unit1H
" @, ^! _. w. q2 s5 @( gfile://------------------------------------------------------------------------
g% X7 X% T4 L) C9 h0 _: Y8 e#include <Classes.hpp>
- F! b6 D6 I. f$ E#include <Controls.hpp>) ]5 C$ q5 [' h
#include <StdCtrls.hpp>
- ^) J2 u" i% l% l' W8 x* K2 o#include <Forms.hpp>' Z9 }) o4 C3 W& U( Q
#include <ExtCtrls.hpp>
+ y7 R5 C+ n- w6 Q9 E5 E#include <Graphics.hpp>+ M# Z: W; q' u( S
#include <Menus.hpp>
! G; V3 ~: w! S$ w8 \#include <Dialogs.hpp> R, k& U7 k3 q" ^3 G, F
#include <ExtDlgs.hpp>
9 w# j! s1 `1 [0 E1 S$ Qfile://---------------------------------------------------------------------------9 r8 z+ s( e$ P. J5 d
class TForm1 : public TForm+ H" D; |2 L. V0 K E3 E$ j
{/ ]3 v# e: D& D1 D
__published: // IDE-managed Components
5 h2 _, X; Q& Q9 @2 G& B$ [3 d TImage *Image1;
/ ?( ?5 w3 t! d% U2 c5 o TPopupMenu *PopupMenu1;8 j# l }1 s: s* W
TMenuItem *Exit1;
- p+ C6 X* R% d8 c' r. r9 N1 ] TOpenPictureDialog *OpenPictureDialog1;5 w- k0 w: ~$ r$ D
TMenuItem *Open1;/ q: F, k) N" T! a% t* K; x0 V2 @
void __fastcall Exit1Click(TObject *Sender); q0 k' m% z! w
void __fastcall FormCreate(TObject *Sender);
3 b* M) s" k: y- f void __fastcall Image1MouseDown(TObject *Sender,/ ?+ ? Z1 Y" B3 f8 I4 |, y I: M
TMouseButton Button, TShiftState Shift, int X, int Y);6 C9 H! _( \ w4 A! g
void __fastcall Open1Click(TObject *Sender);
( S6 V7 {- h+ @" P% _( s; Xprivate: // User declarations
4 n7 E" l% V7 t# S/ m7 z" y+ q void __fastcall BmpToRgn();% Q8 G z. V! f" D- a" l7 ?' ~$ r
public: // User declarations
, q, c+ y6 Y4 a: V! n( a1 g- p __fastcall TForm1(TComponent* Owner);
. S! K G9 I) ?) Z; p( i5 c3 Y};# h0 V* C( Q3 {; K/ Y! W
file://---------------------------------------------------------------------------
5 m( L5 J: Q& d' ^: z% c& t2 `extern PACKAGE TForm1 *Form1;1 M( l# i @1 S& G3 b6 ~
file://---------------------------------------------------------------------------2 U/ ?% @. w" y. e* v: J# ~* O
#endif</P>
+ l* B- Q) q& w< >: r4 L, G7 |7 d. q# s# `: R
<a>file://unit1.cpp</A>
4 h% P8 z; i$ h& r5 H" T8 S) zfile://---------------------------------------------------------------------------</P>& I P* _% K6 M$ A; g
< >#include <vcl.h>0 I+ F# H+ U# s- w% A/ L
#pragma hdrstop</P>1 p; J0 l2 z8 ~5 i$ `$ t/ X
< >#include "Unit1.h"8 H: X+ G- z1 b2 q3 N5 J
file://---------------------------------------------------------------------------; x2 \ t) U4 l% `9 h6 H
#pragma package(smart_init)
6 X% Y5 Y" P& a: s" K#pragma resource "*.dfm") L# o8 E: ?5 w- z, u6 @8 k
TForm1 *Form1;
p- v: C' R: `9 i8 ufile://---------------------------------------------------------------------------
# v. P$ R* p, i__fastcall TForm1::TForm1(TComponent* Owner)
- ?" P; B n# J7 s# m* `6 [; r$ y# g : TForm(Owner)7 ^; ^0 I. p( {3 v8 B, y- W
{
3 C2 s! v& H$ ^) i, s; |- g}
* \/ \9 m; I6 I x1 ofile://---------------------------------------------------------------------------" |0 {5 r: D1 v% D, j" m, g( n
void __fastcall TForm1::Exit1Click(TObject *Sender)0 O2 d5 F' R$ ~: H2 G T3 u' B
{4 K( k( d& ~2 d- j2 B
Close();, O. c& c S( k* y
}+ |" y, K; L' p+ g
file://---------------------------------------------------------------------------</P>
% P, o6 O2 f6 A$ {+ [) ~) Q% N< >void __fastcall TForm1::FormCreate(TObject *Sender)
! I+ l( F' N" A. t* }{</P>- c, f, Q$ f+ G$ ]4 t1 E
< >BmpToRgn();0 S1 N) N" p* ?& Z, C
}
- f# h% c7 r2 k% N6 e) e5 Hfile://---------------------------------------------------------------------------</P>
6 @, e( ? Z' \1 T< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,) s8 R8 D Z) o7 L, ?
TMouseButton Button, TShiftState Shift, int X, int Y)( Y/ s* K2 _8 b% T
{
: t0 L9 l5 E6 c3 _6 e, {if(Button == mbLeft)
/ |# t I V: x' _ {
; i0 @- C# `. j2 t+ U# r ReleaseCapture();* i* |; B0 P" i& ?6 E/ G$ t3 v
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
% V" s4 r6 l( g- @3 O }6 E Q0 `$ y. w* A/ L. g
}. y8 x8 B. _- l
file://---------------------------------------------------------------------------
8 [9 D/ Q [0 R$ V# D z9 ]% e% W% ~void __fastcall TForm1::BmpToRgn()6 _9 A* ~4 h7 C$ U/ [" A
{
0 f8 J) h" C. q! j) o/ @Image1->AutoSize=true;/ ]. S1 N6 t) F6 Q5 |" m! X' }
Form1->AutoSize=true;- S- T, E) l( _1 `3 g$ D/ B
Form1->BorderStyle=bsNone;
) O# L8 @3 M! ITColor ColorKey=Image1->Canvas-> ixels[0][0];
2 m) i7 s# e4 r9 wint x,y;# |& B# d: n* g9 P; F0 N
int l,r;
: S; A- Y* T6 G; nPOINT *a;! h6 P8 F* y7 d+ G
bool lb,rb;
E& _9 H8 ^( p* N& p' C& oHRGN WndRgn,TempRgn;</P> w1 \) z; t1 S- n1 G
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)9 X3 B0 ^$ s. k* u
{
! \ n1 z) F* S8 j6 ~6 B2 x1 d ShowMessage("申请内存失败!");
2 |5 x# d6 \+ w F% i exit(0);
8 U- X4 [% U" V! W) \1 l( B8 W}</P>1 v. E( q; i5 F$ e
< >l=0;r=Image1->Height*2-1;2 L4 [! k6 s' I- @4 X: J
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>& a. @$ V) o& U' A% A. I, V" f
< >for(y=0;y<Image1->Height;y++)
& t/ f3 b+ t7 F* e Q{
b/ h7 p3 a7 g: O ~ lb=true; }2 }0 q' V: ?5 Q1 c
for(x=0;x<Image1->Width+1;x++)6 K: ^, J: q( O: R0 j5 u
if(Image1->Canvas-> ixels[x][y]!=ColorKey)
, v. c( Q8 R, j: \2 I% W& b* i0 w {
7 z" _ n$ j$ P1 l1 p+ [ a[l].x=x;
3 l9 g" w1 ~5 Z" i1 H. O, \3 |4 Y a[l].y=y;
# j% q. x) s4 j$ d- v+ G lb=false;; T" E% A c- E4 n5 V7 W
break;, U7 R' q, g/ y/ F; U
}</P>& P$ O# w$ N) ~* O4 f
< > if(lb) a[l]=a[l-1];, ?; D' v9 k+ O' r- q3 B' K( x
l++;
0 _! N6 G, i: X1 Z& } rb=true;</P>: r6 F( h! S$ e" r( q. @
< > for(x=Image1->Width;x>=0;x--)1 ^* V* q$ w/ t4 _9 |
if(Image1->Canvas-> ixels[x][y]!=ColorKey)( X' @- Q$ y$ Q4 W: z
{
8 O$ p: g( \7 K( m& r& x% i a[r].x=x;+ N* `; x, e- i2 z2 y
a[r].y=y;" w: e8 H2 ^ p* z/ ?" u& S9 |
rb=false;8 x) T1 `$ [6 V2 Y
break;5 K3 D/ j' ]1 h# g+ c
}+ n4 w7 [- _, d. N
if(rb) a[r]=a[r+1];2 K+ Z* l: u. W: H! z
r--;
3 K8 z! `! N3 U& m}</P>
- d- J0 m1 E/ S: O8 s K2 V9 P1 g< >r=Image1->Height*2-1;8 ]$ I6 f/ A& N/ D7 b# x {
for(y=0;y<Image1->Height-1;y++)
9 h- x1 H& u8 C1 Q/ i4 ]: l{
3 q! }4 ~* ]* {) r7 |$ T for(x=a[y].x;x<=a[r].x;x++)
. k3 r% |7 e, L% H0 {! S9 B2 m) u if(Image1->Canvas-> ixels[x][y]==ColorKey): h9 G/ t4 b: Q/ g! G
{+ h7 P0 [0 l6 h; j( }; r
TempRgn=CreateRectRgn(x,y,x+1,y+1);
0 m3 ~' A6 K' H3 t. C CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
9 @0 N Q, z: V' ]8 Q5 H0 K0 d2 l1 y DeleteObject(TempRgn);% v6 g0 d# J/ ~, E% q
}
5 c3 {( N. P; B' {0 N r--;' |3 G7 k$ J8 W# c( E2 W( o7 M6 n
}</P>3 I9 v \6 m# U7 P$ B$ Z% S/ J
< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);2 O1 U( v8 N; `: A9 E
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);4 x4 n$ A' o0 T" K5 V( ]6 S H/ F
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
8 P. G1 L9 Q- g" ]) _DeleteObject(TempRgn);! K: y. C, ]3 I& I8 y" P
delete a;
9 G3 I/ {( U9 c/ H8 C: h3 oSetWindowRgn(Handle,WndRgn,true);! n3 U* y+ |. [5 y3 F3 {" a6 [
}</P>
6 O% W* R7 R# r' p5 U/ A< >void __fastcall TForm1::Open1Click(TObject *Sender)& }$ A: A" U. p* a% f; |0 q
{& T$ K7 X% ]% J) T
if(OpenPictureDialog1->Execute())
, E! {7 f. M% W/ n G {
0 Q) w" L* ^# a3 C) P! q. o Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);
J( K/ F6 v6 N) } BmpToRgn();/ n$ ?" F' \. [! i: w# P! O
}& F% }. P# S M t! H& F: C+ K; ]
}
9 Q* P2 c0 [/ w. Q/ k4 @. {! lfile://---------------------------------------------------------------------------</P>
- o5 w4 z/ G4 \/ [7 h< >对啦,图片的背景色要相同。
8 B% C5 t( y, _" c图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>1 y. u1 a8 U) y0 ]" ^
< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------" i4 ^+ r! o5 X; I6 d# d! _
void __fastcall TForm1::FormPaint(省略)9 o, o0 R2 ]. d+ i6 O' y
{
: b- {' c: S$ { AnsiString ww;int bb;; p- G& n/ Q& H; |+ X4 m
ww=AnsiString(Form1->Width/256);9 x" f# b: Z1 u; q
TRect MyRect;
5 _& h% d' W x3 E6 X9 n4 Q" h6 H MyRect.left=0;; F& y6 L0 X+ L* Y3 S- [& {5 Q$ q
for(bb=0;bb<255;bb++)
( ?; g- A3 e) R' Z) [ {* u' w [) Z0 H4 J) d/ T
Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);
# G7 {7 I9 c* }$ A. z MyRect.top=bb*(ww.ToInt());$ Z' n4 a: }7 ^1 _* m' _3 L
MyRect.right=Form1->Width;
7 l$ t N& ^2 {, {0 d MyRect.bottom=(bb+1)*(ww.ToInt());
1 y9 u% B2 O& R G7 O! X Form1->Canvas->FillRect(MyRect);4 I {: | I+ I; _& J l
}
$ c6 N( P( J4 e1 X3 K} </P>
4 M. h3 P- M) z" v< >file://---------------透明窗体--------------------------$ N/ N) p* x T0 L5 Q/ ]
void __fastcall TForm1::Button1Click(TObject *Sender)5 f9 B( j& H) `! @" s+ O. _
{
" k1 ~! k9 o- o8 @) x0 b. t8 N# ^ TRect *rctClient,*rctFrame;
?( ^' L, K0 ~0 @2 v9 z/ [ HRGN hClient,hFrame;
6 K R. w3 }. t) u POINT *lpTL,*lpBR;7 a! P5 Z% \ s. g( [, P
rctFrame=new TRect;6 c) w E* |* j$ w' d/ T
rctClient=new TRect;, }2 f, U# Z8 ]. m8 B! T1 J
lpTL=new POINT;% m4 I7 N7 F6 g* C1 b
lpBR=new POINT;
- D9 D/ t M' p2 g$ B GetWindowRect(Form1->Handle,rctFrame);
1 F; ^ K3 f/ c; N ::GetClientRect(Form1->Handle,rctClient);
# I0 N( r0 o) n4 r lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;6 I$ @( ^# f8 A. C4 m) w
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
. ]9 g+ z: j2 D7 Q< > ::ScreenToClient(Form1->Handle,lpTL);
) x2 w1 [1 g2 u+ R ::ScreenToClient(Form1->Handle,lpBR);5 p- R5 r. r! Y& a5 k& j
rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;
6 ^5 E7 h$ z) i9 l( L rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
) h& ~$ Z7 {$ Q- f, z. i# y0 [ rctClient->Left=abs(rctFrame->Left);' S, x8 L; z% M
rctClient->Top=abs(rctFrame->Top);" b9 U4 y3 Z; A% m! e: J
rctClient->Right=rctClient->Right+# B5 t/ H! W0 j7 z* \
abs(rctFrame->Left);$ F/ Z- G d6 V, D. B6 p
rctClient->Bottom=rctClient->Bottom+
) N" q; z+ a) L7 `* Q abs(rctFrame->Top);! \- @: d, B& L _ ~ f' `
rctFrame->Right=rctFrame->Right+
$ x% _0 X: p" D; s4 r abs(rctFrame->Left);3 {" I' ?9 q, k! N+ O7 z
rctFrame->Bottom=rctFrame->Bottom+
P. E( i! v7 ^. W! Y* S% q/ P abs(rctFrame->top);; e+ w3 `% s- Z! {
rctFrame->Top=0;rctFrame->Left=0;</P>5 i; H" C0 h- P( J8 ?- P
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,# M. W7 k& o' W. z5 w2 c; M# y
rctClient->Right,rctClient->Bottom);- Q' j) {7 ~/ x: n
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,8 x) \% A) u( q! J( }4 ]4 x
rctFrame->Right,rctFrame->Bottom);
* M& K* B ^% f CombineRgn(hFrame,hClient,hFrame,RGN_XOR);9 b* o4 U& D* Z' i, Y
SetWindowRgn(Form1->Handle,hFrame,true);</P>
! p: j: K2 B( P/ d< >7 W2 V( ?8 G1 e, z2 a1 y+ u) l
delete rctFrame;
3 C+ x* f9 r. D5 k# d; M x delete rctClient;
; Q& m$ q- L7 Y$ T ]8 @" _ delete lpTL,lpBR;</P>
+ e/ c' f, `7 }: D6 t< >} </P> |
zan
|