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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。
% ]. p2 {4 k7 d0 d; P, G: Rfile://------------------------------------------------------------------------7 t, f$ J. R, _; {0 B
<a>file://Unit1.h</A></P>7 P' M. M( @' |8 {
< >#ifndef Unit1H
/ Y( t$ z4 J W#define Unit1H
/ _% g- S* L D. ~* h( |file://------------------------------------------------------------------------
; n1 k1 q% m4 [7 s: L#include <Classes.hpp>" |/ r% C6 \0 I8 c$ i
#include <Controls.hpp>
5 b% E, O! B! j2 e! K#include <StdCtrls.hpp>0 d* A9 ~& Z3 Y0 E8 y1 N! ?
#include <Forms.hpp>; b! z4 m! R) l. z& E: d; a
#include <ExtCtrls.hpp>) t' ?3 M9 S6 g8 }9 K5 Y; {
#include <Graphics.hpp>6 F: y$ r7 ^' \1 I T1 }
#include <Menus.hpp>0 k/ b) c( v+ @# |: W+ h
#include <Dialogs.hpp>
; R. [7 n2 M! n$ |% Z#include <ExtDlgs.hpp>. K1 z. j7 _) A( B4 S! X
file://---------------------------------------------------------------------------1 @0 J8 ~# h+ |: [; P
class TForm1 : public TForm
: _' [8 a" N" u- |* s7 S* o1 W{0 o8 `4 U0 s3 `: z" @
__published: // IDE-managed Components' V6 b9 Y( A3 K6 A
TImage *Image1;& L. t" n5 ?- l2 e% H5 v
TPopupMenu *PopupMenu1;) q( f+ r0 u/ b/ M# D$ h# C
TMenuItem *Exit1;* a( |9 K& V* U1 N
TOpenPictureDialog *OpenPictureDialog1;
4 [' q, B* u, c: I; ?1 D TMenuItem *Open1;- J7 y8 p. b; \! `/ P/ u' x
void __fastcall Exit1Click(TObject *Sender);
8 e; [" R I. `' { void __fastcall FormCreate(TObject *Sender);
9 @/ }. T8 C* f& ]# d void __fastcall Image1MouseDown(TObject *Sender,
5 Z2 b, X2 t6 K4 e! v7 h4 w4 r* J TMouseButton Button, TShiftState Shift, int X, int Y);, s( B$ s5 v4 n
void __fastcall Open1Click(TObject *Sender);
2 [( ~* K( n; d+ T; o% m; cprivate: // User declarations, Y9 o+ o! t0 _& w, B
void __fastcall BmpToRgn();/ Q7 R( `4 L! s- F' G4 A
public: // User declarations* e) C% D7 F, ` M- H, |- n
__fastcall TForm1(TComponent* Owner);) W; v( t& L8 k% h6 e
};
. l- k4 i( f- E! c+ Wfile://---------------------------------------------------------------------------
c0 Y0 T! U0 x3 e/ N; Q' J2 s$ F% Nextern PACKAGE TForm1 *Form1;! L5 x) F/ h( Q* b7 q, R$ a3 O
file://---------------------------------------------------------------------------0 Y" |: U+ ~% z2 K/ s0 J& i) R, s
#endif</P>
# N: v! S: I0 d, f6 B3 g1 l< >6 B9 Z( Z$ F9 |& L9 q7 I
<a>file://unit1.cpp</A>
- K- }7 ^& ^2 S$ x! \4 o. @file://---------------------------------------------------------------------------</P>9 \: x+ d( ~+ ^# ?, }
< >#include <vcl.h>. G9 L5 q6 p `; H* A
#pragma hdrstop</P>( F5 P& G$ i, U6 {+ j
< >#include "Unit1.h"
' A2 d. W P9 q5 Q# y k w9 ~& vfile://---------------------------------------------------------------------------; E F5 U# `/ C7 Z- K' Z# S
#pragma package(smart_init)
. t& I# {3 n& w" L% r1 ]#pragma resource "*.dfm"
. q$ M# h$ g$ z2 I! g& _TForm1 *Form1;
( f$ H) p6 G4 j Qfile://---------------------------------------------------------------------------
( Q% p: \: z) k& L4 l( ___fastcall TForm1::TForm1(TComponent* Owner)% v) ~: H" t* a1 f3 R4 s$ N
: TForm(Owner)$ `# E- l4 z( A2 e" {) u0 O
{
8 ~$ [* S( W( u* i( x8 {} c5 h2 W, }- t0 G; j
file://---------------------------------------------------------------------------- ` b$ |5 y6 ]/ Q) t4 r+ |
void __fastcall TForm1::Exit1Click(TObject *Sender); T8 _1 T: M' i
{
* a& x0 ~" C) z# ?* Z Close();
! ]) y4 d8 Q8 b0 s& K% [7 X}/ w8 U% h( U! I g2 M7 R
file://---------------------------------------------------------------------------</P>) M. s: Q+ r9 T! K3 P- u
< >void __fastcall TForm1::FormCreate(TObject *Sender)
* W6 Q7 z7 [" H3 |9 q/ b& r{</P>
3 a+ W% q3 {, m6 X( V< >BmpToRgn();
I6 D6 u* B: E3 r}
4 m7 c, ^7 z0 e' D2 H/ b# yfile://---------------------------------------------------------------------------</P>
; J& I4 h& T+ q* i< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,$ d1 }& l3 v$ C* t3 E) H
TMouseButton Button, TShiftState Shift, int X, int Y)
0 ~0 m' y6 t7 l, g! M{
' I0 N( ~3 K; @, a' s& b; Wif(Button == mbLeft)
* n [# b8 w/ a {0 A% E/ d# j7 ]. k7 n
ReleaseCapture();
. P; }: j s9 S+ R Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);7 O) q" d/ y6 q. q
}
' X7 p: S! T" Z; ]* V3 p' w}
5 K* E! F+ Q. ^$ W. |' }file://---------------------------------------------------------------------------
/ z6 q- d) `) E% s% jvoid __fastcall TForm1::BmpToRgn()
. Z* ~1 |6 U6 X% u{: N9 n8 a( [. m2 C- v! k5 x2 U& W
Image1->AutoSize=true;
6 R |, c U2 KForm1->AutoSize=true;
; L$ j$ K$ a5 N! w: e* N+ j8 [1 \ CForm1->BorderStyle=bsNone;0 U6 G5 k3 r# `8 K
TColor ColorKey=Image1->Canvas-> ixels[0][0];
6 q8 u/ L# ?0 V6 k, D( H M8 h9 c; Tint x,y;" l& e7 m' q* O$ E& d
int l,r;8 A6 m; M: Q2 Y' U: F- B& t
POINT *a;8 N0 @7 Q9 Q9 M6 v5 {1 K9 s+ Z
bool lb,rb;) G, c# L8 S2 r
HRGN WndRgn,TempRgn;</P>( g. k( ?$ ?- u5 f3 r+ o9 y# _1 J3 N
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)
( ]8 H& d& v8 i" j% M3 H4 Z/ p{5 X1 f7 H' E, S/ S7 {
ShowMessage("申请内存失败!"); D4 B4 s9 D0 s- P, R1 ^& [* ^
exit(0);, K# \; t8 C d4 h2 n
}</P>
( A) U8 p+ |( T* G2 n< >l=0;r=Image1->Height*2-1;- m$ m, y8 v; K7 ?; e
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>( Y# v, G: p, Z' ^/ ~ A" R9 U t
< >for(y=0;y<Image1->Height;y++)3 ]" R7 V/ \3 g8 Z2 t# B; Y; N
{3 b9 ~" e5 s" t- w' ^: x
lb=true;
: z" v0 ?6 d$ \: f2 Q) `6 r for(x=0;x<Image1->Width+1;x++)% J7 x( y! U) _4 R. T4 w
if(Image1->Canvas-> ixels[x][y]!=ColorKey)1 z l1 W. l, d, `% f, X: Z, ?
{
& R% K( { j) e3 ` a[l].x=x;9 v& f' v# z4 D" d; t7 ~& x
a[l].y=y;
: l+ {$ i6 k' q lb=false;8 `/ m: x% z I3 G9 E
break;9 `" T7 M' Z0 l( B$ @; Z
}</P>
$ e% _* e0 }: l7 H& L! ^- l< > if(lb) a[l]=a[l-1];
* \ H/ _" [* k U; { l++;1 j# u& D# p' g& h7 N( `( v
rb=true;</P>
- A6 s+ @( k/ m5 h, u* Z( _/ |< > for(x=Image1->Width;x>=0;x--)
2 M: z; ^ }" m: r \7 z% L4 j if(Image1->Canvas-> ixels[x][y]!=ColorKey)1 l- z3 ^ X8 L. k( S6 u W; ~
{
; v2 m' s' r) ~ a[r].x=x;- A! m9 j% f9 n( K/ m
a[r].y=y;0 D; O1 Y& O1 a8 ?/ ?. @# s) s h
rb=false;# v7 e4 P" J( Q* E* f* D
break;3 v; q N4 x- ]
}5 l$ ]" M& W! R# N9 G2 N P
if(rb) a[r]=a[r+1];
6 y" X0 _* a% u+ } r--;( a7 H5 W5 e9 O! a3 p9 Z
}</P>
. Z. I- o4 U( o, |. I< >r=Image1->Height*2-1;9 |8 [0 G# E f
for(y=0;y<Image1->Height-1;y++)
! i j. N. a7 n$ x$ c{
/ p6 b- m, s( r4 q2 X9 y$ { for(x=a[y].x;x<=a[r].x;x++)" X* y+ v6 i% T* g, i2 ]
if(Image1->Canvas-> ixels[x][y]==ColorKey)5 I" j% s5 ]! |/ P* H# r. f$ a
{
5 l/ u, [; D$ b) x# H* g TempRgn=CreateRectRgn(x,y,x+1,y+1);$ G3 L* q5 ^" e" }) _: n6 O' V, y$ X
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);% m: k$ }$ H) j
DeleteObject(TempRgn);
6 E Y( O& B6 d- d }, G" S4 ~9 w" T+ V% {- `
r--;1 _* i% k4 Z: N8 K; S
}</P>
; O( Q% r0 d+ f% g7 ~3 d< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);
9 h( d9 n+ K- Z1 i/ u: M) f. U/ U0 W5 w0 vTempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);5 V: G: J& {# U0 n: p. b4 U, v
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);$ v% T. O# [& C4 b
DeleteObject(TempRgn);
$ Z( h X" N w4 H. @1 ndelete a;
! B+ i \+ W4 v' e: U2 iSetWindowRgn(Handle,WndRgn,true);- ^/ |4 m6 y7 w! c
}</P>
) H# q6 Q: k% i3 S+ B4 P: [< >void __fastcall TForm1::Open1Click(TObject *Sender)# C7 y) z: o' S7 }( A$ W
{' v* f# j Z! T+ g0 b" T
if(OpenPictureDialog1->Execute())
# C T' k0 [) I1 t {
! t/ I0 f, ?: u* f+ n2 X- @ Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);( x$ N- C$ e0 ?4 P) \! d' S( v
BmpToRgn();5 c" Q/ K0 D& l8 e: i! m, i
}
6 O) t$ ^3 |1 V" W8 J5 N" i q9 r} l2 A) z k n4 Y
file://---------------------------------------------------------------------------</P>
& k1 M+ {/ a# ]' D3 w3 V< >对啦,图片的背景色要相同。
1 w# L$ x" T9 U K0 l8 W图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
9 O ?: g0 Q; ?, q- n! E< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------
; H9 K7 P- S: |) ?* w8 Lvoid __fastcall TForm1::FormPaint(省略)+ f" d$ f+ K0 D9 x5 J" {' J
{) n/ o2 p2 s# k6 T! W
AnsiString ww;int bb;) B# p! p5 @: D* ~9 M- f# [
ww=AnsiString(Form1->Width/256);
1 L8 i8 O' v: L1 N TRect MyRect;
7 C3 \' t5 N' z MyRect.left=0;, o( o" d9 m5 v4 b
for(bb=0;bb<255;bb++), S1 E: g5 L1 ~' b. K" J% S
{
- l7 P0 p! m# c' a$ K Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);% l2 d1 @7 u8 V0 K" U
MyRect.top=bb*(ww.ToInt());
1 d! a# N, `, x( |5 h; M9 G, s& z7 Q MyRect.right=Form1->Width;
8 N( v; k1 H. U' P% q# k: U MyRect.bottom=(bb+1)*(ww.ToInt());- i4 d9 z" n8 Z: w6 }- H
Form1->Canvas->FillRect(MyRect);
) D' m- b/ b) a6 I1 w }) K9 p) ^' b1 S5 J: d
} </P>8 ~% _' W% i0 |* g! i @1 F& T
< >file://---------------透明窗体--------------------------0 V+ t" y, P5 l% u9 @
void __fastcall TForm1::Button1Click(TObject *Sender)% I, \( J! [) ?4 m5 A; H7 O
{
" D1 Z# o5 o: _6 Z T) P% ~8 Q TRect *rctClient,*rctFrame;
6 `% q0 j2 h2 W: P- `3 x( J HRGN hClient,hFrame;
$ |, v5 |. e3 X1 O POINT *lpTL,*lpBR;. C5 ]2 L# i; R0 O" }. m' W% ]% a
rctFrame=new TRect;
7 r( ?6 `* t. }" {/ x" N rctClient=new TRect;$ F$ Y+ m3 ?. ]" X( T5 v4 v; F
lpTL=new POINT;" R3 }% O w" A1 L# }. x- N0 d
lpBR=new POINT;
! _+ l% Z% R% _* c w- z6 h GetWindowRect(Form1->Handle,rctFrame);/ m% z9 t' x. f( \5 U( ?3 `1 C1 A. F
::GetClientRect(Form1->Handle,rctClient);/ A' a [! b4 o/ m7 S7 ]& _2 s9 L
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
6 [2 B5 D3 a3 ]4 B0 S, `6 \4 x lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
( X3 [/ X: v' K$ U$ F2 N< > ::ScreenToClient(Form1->Handle,lpTL);
& Q o9 F+ |, r$ w: w, O$ y/ j! V ::ScreenToClient(Form1->Handle,lpBR);& D; T2 |# c0 E$ N$ ^( L& s. I
rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;' ?% c, b* s) M
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
, B4 z! a7 d9 i2 A/ u- t$ S rctClient->Left=abs(rctFrame->Left);
`/ b0 D2 K; Z8 ?* {+ A6 C/ t! e rctClient->Top=abs(rctFrame->Top);
4 z+ w! S, R( K* i rctClient->Right=rctClient->Right+& S6 {8 {4 [0 A$ N, m$ M( J. ^& M
abs(rctFrame->Left);
- m( [; e# O" B# c4 ` r rctClient->Bottom=rctClient->Bottom+3 E" \( m* h/ x8 g4 P& `7 T
abs(rctFrame->Top);) \4 Q0 X1 R, k8 q
rctFrame->Right=rctFrame->Right+
* k" ?" |; i% r; _) @* \ abs(rctFrame->Left);
2 z$ k2 E9 Z' M6 u rctFrame->Bottom=rctFrame->Bottom+
' }/ d* D& e& W+ D( j, v abs(rctFrame->top);% ^0 V- {) U/ W4 q* Q$ ^
rctFrame->Top=0;rctFrame->Left=0;</P>& }: V( j3 \: `3 Y* o5 x
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,: w' |$ i$ e$ e2 ^5 Z1 c
rctClient->Right,rctClient->Bottom);0 N1 R# ^' l7 [8 q" f) N) ]
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,
$ U% W0 N; m6 B. K/ A rctFrame->Right,rctFrame->Bottom);
5 h3 \0 u" n* u& D CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
' x& G/ y) M- U; m8 f% Z SetWindowRgn(Form1->Handle,hFrame,true);</P># t( o. i! ?* l7 `/ E
< >
8 F9 \# J& d. X$ n8 K% r O delete rctFrame;6 C* B8 u6 }) l" m
delete rctClient;' d) v3 o( {# |& S- M, Y
delete lpTL,lpBR;</P>
# _. H3 O. V4 {0 ? B- y% H< >} </P> |
zan
|