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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。# z7 A8 G, K. U& r, i; r4 F
file://------------------------------------------------------------------------
% z( _1 R' m; Y" d( D4 [: K, D<a>file://Unit1.h</A></P>; M* M( j D I( Q
< >#ifndef Unit1H
0 U1 G4 [$ W. i! i" ]$ i- l# C#define Unit1H
, h3 L' O1 J9 nfile://------------------------------------------------------------------------9 p0 k1 ]" B0 E h
#include <Classes.hpp>% v: L8 G6 u3 p' }# N3 T
#include <Controls.hpp>6 y' ]4 M: w4 D) {
#include <StdCtrls.hpp>3 z5 s) d* g* @" R& I. q h; s* y: F
#include <Forms.hpp># d" z& I c0 E: [' s( R8 h; f% c
#include <ExtCtrls.hpp>
) O( T* `, O- \8 c2 `7 K- H#include <Graphics.hpp>6 e) G5 |+ x' S. r1 w! K! V* h
#include <Menus.hpp>- ]7 ~ ~2 d& L: [ a% J% l! H
#include <Dialogs.hpp>" r# _! Y; r8 B, W- v% L
#include <ExtDlgs.hpp>
C* N0 _: o% k& H" cfile://---------------------------------------------------------------------------
% I& Q4 t; b2 K% K* Vclass TForm1 : public TForm
. ?! c l4 u& V" U: q6 Y1 m8 G{
* s" N/ C5 O7 P- x5 J__published: // IDE-managed Components6 s% j) M9 g- J t& [( D s" v4 z
TImage *Image1;
" M7 R9 o3 F2 T g- H TPopupMenu *PopupMenu1;/ Z9 A( Z! g" U& y: y. h F
TMenuItem *Exit1;
( h: T+ {1 g& N0 h) j1 q" Y TOpenPictureDialog *OpenPictureDialog1;1 V5 @3 F2 ]! z7 ?0 w, G: L/ G
TMenuItem *Open1;
/ Z' }: w) J* J void __fastcall Exit1Click(TObject *Sender);
; }( s8 c7 [( R) N3 @, Y void __fastcall FormCreate(TObject *Sender);1 P+ Y( `) u' x; O" f, U4 ?
void __fastcall Image1MouseDown(TObject *Sender,0 u3 J3 d$ C: j
TMouseButton Button, TShiftState Shift, int X, int Y);
9 K/ X b2 d% e6 t; i0 _! d9 D- D% b* d void __fastcall Open1Click(TObject *Sender);
0 ~2 ^- q# S" {: e9 Yprivate: // User declarations, h1 x! ]. }# c+ r
void __fastcall BmpToRgn();0 J3 V5 N- b" W
public: // User declarations! T8 j% q6 {* f" P4 ]
__fastcall TForm1(TComponent* Owner);# t) L ^6 P+ h8 Z2 B l
};
& l: J- k/ ]) s+ o+ g, ^file://---------------------------------------------------------------------------( R- O& F; g7 M, N) l* @% j) {
extern PACKAGE TForm1 *Form1;
: Y+ o' U: Z+ X- C W- N3 A# lfile://---------------------------------------------------------------------------( i# R' R4 p3 e2 ^( T
#endif</P>- w" P7 l" p% m
< >& k, b( a/ w3 j. u, y. [& }% e
<a>file://unit1.cpp</A>
6 v$ q& f$ h# P. H, pfile://---------------------------------------------------------------------------</P>
# K6 @, Q' r3 I2 F- n< >#include <vcl.h>6 d' D+ m* t) u* U- }# D4 {
#pragma hdrstop</P>
9 N- f$ t/ e( Z& m' k< >#include "Unit1.h"! i! J9 X, F# O3 [% Y0 S+ b' b7 _4 Y7 b
file://---------------------------------------------------------------------------
1 m2 U9 X- p2 E$ U#pragma package(smart_init)
( ], \) m4 N& a, f( E# n#pragma resource "*.dfm"; k- o$ m) p3 K) z
TForm1 *Form1;- y' I, F7 v2 K4 ]
file://---------------------------------------------------------------------------
) e, C3 h: E7 T$ @/ A* K+ B1 l__fastcall TForm1::TForm1(TComponent* Owner)
& b4 E* o" [7 S2 u; p : TForm(Owner)8 f& h1 `: ]+ n6 _ [" _
{% G0 o' Q2 C$ U+ I5 e m, [7 S
}! j- r! c( J0 a2 ^
file://---------------------------------------------------------------------------
, E& P3 T! I! m. c- ^# Vvoid __fastcall TForm1::Exit1Click(TObject *Sender)5 |/ S V" e" Y: l: q8 J W
{
' M4 t* L( H* r+ q6 | Close();
/ D6 c* |5 S3 j& U3 F8 k}* s2 s- A1 d/ a# n; T$ g+ m1 g$ z
file://---------------------------------------------------------------------------</P>
3 o) ?% J4 Y( f8 P! R( }< >void __fastcall TForm1::FormCreate(TObject *Sender)$ k- c" }7 |* B- o% i, u- }
{</P> ~; F6 A; K% o. p* p! H" D
< >BmpToRgn();
0 L7 S, L+ Z4 m# _( T}
- ]) a0 Z! X7 o# tfile://---------------------------------------------------------------------------</P>
8 ^5 O% a: K, V0 Y1 w5 ]* p< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,% ]: S/ b5 k4 x2 F
TMouseButton Button, TShiftState Shift, int X, int Y)* L' Y4 e: N' l
{
9 Y* B' h3 d/ o2 Qif(Button == mbLeft)
G! q, b I% K7 V5 w {
$ B* x3 Y: ^$ n! u5 V3 [+ e; J& s ReleaseCapture(); X/ k. M! c) |* `* g/ E1 X
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
) y! p' c# d: {( _. ?( q }
( K3 P( R0 z% Y; N1 P" W}/ P& k; i/ A4 s( x
file://---------------------------------------------------------------------------
3 H! ~4 m( R6 g( L9 S7 \void __fastcall TForm1::BmpToRgn()
' O/ F& j' F8 V2 j5 ~{( ]( k) S0 v/ M8 r# I7 [2 j
Image1->AutoSize=true;
6 A- j, `0 R RForm1->AutoSize=true;
% o7 w. S2 ?$ d! g7 m1 k5 LForm1->BorderStyle=bsNone;
- y2 T% ^+ V# Z+ GTColor ColorKey=Image1->Canvas-> ixels[0][0];8 P$ y5 Z4 m1 Z/ `: y1 c% G
int x,y;7 p8 h5 |1 C. Z# b8 B$ b0 E
int l,r;
, T7 g) V, `5 t1 B& @. d: TPOINT *a;' G( f- ?& j2 D. z6 ?. o
bool lb,rb;
% w2 K$ r6 b9 gHRGN WndRgn,TempRgn;</P>
7 q$ c( L+ r: V+ m< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)
( Q* R" j& v' z9 _' v{
# C6 m: j7 d2 K u ShowMessage("申请内存失败!");; u8 ?9 u, ^2 \, m- l( R
exit(0);
1 R/ k" }* X3 i% N: B% o}</P>
$ l- S, _6 Q! R; [# V< >l=0;r=Image1->Height*2-1;
1 z2 g, A6 J* t+ p- z* OWndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>% M# z8 u. s- L3 W/ t
< >for(y=0;y<Image1->Height;y++) O) L# b/ N1 J4 G* c
{
7 e- T- m) f6 ^1 |) v lb=true;- _: I9 {; V3 g, O+ i
for(x=0;x<Image1->Width+1;x++)
! Z0 l- s9 u0 I- w! z3 Y if(Image1->Canvas-> ixels[x][y]!=ColorKey)
- n( l4 \3 v1 j4 u4 Q. |! ] {/ n, q9 E u5 { ^
a[l].x=x;* M3 X1 W/ v; ` n
a[l].y=y;
+ O0 a* u. B- L% h8 B1 r& z lb=false;
! H$ M6 w0 u) ^6 f$ a break;
9 q. M0 f F8 V }</P>$ a/ _9 D0 O1 ?9 R+ j1 r. d
< > if(lb) a[l]=a[l-1];
* C$ y& ?# e4 f5 Z: {+ O( r l++;$ Y3 J3 u0 C3 g( K
rb=true;</P>3 ~: ?$ X1 n% Z m6 \! l; s
< > for(x=Image1->Width;x>=0;x--). f6 l$ \: v' K2 W/ e
if(Image1->Canvas-> ixels[x][y]!=ColorKey)
( b2 O' A% n9 ?, W7 p1 e {+ M& {1 |6 p2 n/ e. {5 f# M
a[r].x=x;
0 }4 K/ ?- W8 B a[r].y=y; L9 y% G- ?& {$ ` g& m
rb=false;
7 l' F2 Z& I. c7 c break;- @+ ?) h( i# A% k' c, d" u
}# | m6 z1 O0 M( t
if(rb) a[r]=a[r+1];+ |' D7 b$ ]. y/ b& z
r--;; j7 e9 M! _- o1 W& E* H
}</P>6 x3 B' W1 {9 m" Q- P& ^4 n1 v
< >r=Image1->Height*2-1;) L1 n) [9 C" Z5 w& o
for(y=0;y<Image1->Height-1;y++); P& @- a% o- y$ ?( }4 Q
{/ l4 Z: q$ }% d) G& I
for(x=a[y].x;x<=a[r].x;x++)
) x$ l/ S" P$ j; E if(Image1->Canvas-> ixels[x][y]==ColorKey). `& Y& t% C6 U1 s! c- C
{
# K9 a; v1 ^- E3 k; N. N+ @- D# W1 b { TempRgn=CreateRectRgn(x,y,x+1,y+1);
, X- { `0 A6 V/ H9 d. I( E, { CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
) ]8 m9 |+ D5 l, P( ] DeleteObject(TempRgn);8 U) }; \6 L" Y4 p& e/ Z; c. S
}
* _9 \. l7 Q6 `& G2 c0 { r--;, w4 i) ^" p& s6 m" |/ b* h
}</P>
( R; D }8 j* S4 m8 X, a q1 c- V< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);/ Z) t1 V: D1 K# A3 f5 a1 n V
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);! Z" Z; Z N/ w' g2 W
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);) J* c! q0 Y0 @* p8 n
DeleteObject(TempRgn);
3 C0 M/ W" F: A: ^" |delete a;0 a$ C( k6 K% {/ |4 Z R) c
SetWindowRgn(Handle,WndRgn,true);
q) Q9 k. o. S' a: a" {}</P>" n+ z% N8 K1 k' q+ _9 Q; K3 C
< >void __fastcall TForm1::Open1Click(TObject *Sender) R8 q9 `+ p. l7 i
{
0 L" O$ O: `' {7 R" i! ~7 h8 r if(OpenPictureDialog1->Execute())! m' z: f; m3 ?5 u. E
{6 r+ K2 R ~, t9 |) @3 [
Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);+ o9 u9 G; I# [& g x; @
BmpToRgn();
0 ~- t9 ~" O" F' W& f }, j. O! Z0 X L
}
3 \/ X6 v6 E* K& X1 cfile://---------------------------------------------------------------------------</P>
- i, B* ^ b9 C1 a6 h8 t2 {< >对啦,图片的背景色要相同。' P) P ?$ o* ?/ V
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
7 c9 [5 S) a/ m4 w. z/ O: _0 W< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------9 L2 l2 g+ L( j. L `7 U" l
void __fastcall TForm1::FormPaint(省略)
1 r9 n, `2 z' ?; b9 m# K7 x R6 |{! V2 U. n) m+ g0 m9 B& F
AnsiString ww;int bb;0 e2 M Y; {+ a) I7 o# U& p
ww=AnsiString(Form1->Width/256);3 @9 Q7 O7 }8 A* O# g x
TRect MyRect;8 @1 B! z3 I3 o* a. r2 x$ V( U
MyRect.left=0;8 S2 `( T. _" ^4 g# P( D
for(bb=0;bb<255;bb++)- F6 p* z/ R6 k
{3 D8 i. A1 y/ Y) q
Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);" K6 w9 u& C5 r
MyRect.top=bb*(ww.ToInt());/ D% ]$ D4 U, Z9 p( B
MyRect.right=Form1->Width;& x1 U K: I4 l0 A Q
MyRect.bottom=(bb+1)*(ww.ToInt());
4 {8 \6 o! n: z% b; h( ]5 t* q: O Form1->Canvas->FillRect(MyRect);( `' O' [# g! R6 m
}, D: L* C3 t0 U) u3 `
} </P>
9 S# Z( F# B3 Z+ z; ~- j. b< >file://---------------透明窗体--------------------------
2 X2 m* K+ P$ g! A8 n" M9 jvoid __fastcall TForm1::Button1Click(TObject *Sender)1 p/ M" m. l$ w/ p4 V$ y# n
{: @" j: M- r2 J* |6 u# y
TRect *rctClient,*rctFrame;
0 ?4 o0 d( \+ C3 i! b HRGN hClient,hFrame;
. _5 o( X# Y% F$ i0 } POINT *lpTL,*lpBR;6 K: S# ^0 O( g6 w4 }+ x
rctFrame=new TRect;3 v/ a/ d+ d O. V& M9 K! _) e
rctClient=new TRect;+ C2 J( E/ E: Q
lpTL=new POINT;, b7 {! D. ^6 u
lpBR=new POINT;& w8 q+ D% a+ ]- u) G7 X5 s
GetWindowRect(Form1->Handle,rctFrame);
1 `& ^" p2 Q( W ::GetClientRect(Form1->Handle,rctClient);
2 ^6 q/ N% f* H/ G8 V/ m$ C lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;9 _7 O; s% p$ C, z: \- g5 L
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
/ |6 D u) r. |4 q+ J! j< > ::ScreenToClient(Form1->Handle,lpTL);* \% s" w: B' \( E' j$ L9 g! G- B
::ScreenToClient(Form1->Handle,lpBR);
0 i+ T- ~$ r! A+ b: A rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;# Y$ d- r5 R3 h
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;$ J& I! H9 \+ |% O8 M% B
rctClient->Left=abs(rctFrame->Left);* k, r# P4 l5 @! k& @
rctClient->Top=abs(rctFrame->Top);" V* t' d; T) Q4 o ]
rctClient->Right=rctClient->Right+& M/ M% ^5 t& ?# ]& s% p* e
abs(rctFrame->Left);
" b4 u3 q: p4 q rctClient->Bottom=rctClient->Bottom+$ o y& ?2 b7 L6 ]5 E( `
abs(rctFrame->Top);
& H* N6 R& w# `9 m2 w, u6 E rctFrame->Right=rctFrame->Right+5 Q! F, }" z' [/ Q! v+ y
abs(rctFrame->Left);
; O. R: v7 p: [6 c" W i8 `' B4 | rctFrame->Bottom=rctFrame->Bottom+) r6 y! n2 s- g$ f; B8 S; U
abs(rctFrame->top);: H1 k& u+ z ?" I* G8 j
rctFrame->Top=0;rctFrame->Left=0;</P>
; `8 w; o2 `+ F% `< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,% e* @8 x6 ~9 a; Z. L9 w5 k
rctClient->Right,rctClient->Bottom);
+ A$ J2 Z4 y) _9 ]! ~9 z5 e# L hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,
7 Z) |2 n) x! J; m) Y0 K2 J rctFrame->Right,rctFrame->Bottom);" Y% q/ k; C- f. o0 z
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);; _# A3 ?4 U. }6 L% m) l3 v3 o
SetWindowRgn(Form1->Handle,hFrame,true);</P>
+ b" h% C4 A6 x9 _5 A8 E+ c' M$ {< >
' J2 @' H% z7 { delete rctFrame;
& ?) d, W; S3 X5 n- w" n delete rctClient;
* V% r+ c& ?5 L9 l/ J n delete lpTL,lpBR;</P>
6 k. Z4 n) a# u: Y( u& d$ ^5 l, K< >} </P> |
zan
|