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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。
1 C" s6 F2 u0 M g9 X/ l9 xfile://------------------------------------------------------------------------( Z3 ~. f4 f7 B f& f: L1 a6 K
<a>file://Unit1.h</A></P>
; E/ q K' u: m$ u, F4 V* Z< >#ifndef Unit1H
# T+ O- u; T6 ?* L#define Unit1H
; N: i+ l5 @# vfile://------------------------------------------------------------------------/ I7 C/ \7 w) a5 c/ l/ P
#include <Classes.hpp>
: v" X) f `! e) R4 t8 R2 A#include <Controls.hpp>
( ? h4 f) l, @#include <StdCtrls.hpp>5 Z8 k8 R# G: v0 c+ i! Y. K) P
#include <Forms.hpp>
1 g* B: i( r' f0 `#include <ExtCtrls.hpp>6 B6 w0 n: X" p) L% U1 W
#include <Graphics.hpp>
" V: J5 u$ R7 k, ~#include <Menus.hpp>
3 @& Y2 n; P4 r9 ?" o#include <Dialogs.hpp>1 x3 G' Z4 j1 A4 j" s
#include <ExtDlgs.hpp>% q! n0 B$ x; g2 ~0 k
file://---------------------------------------------------------------------------
% r' f7 A. f9 a3 \3 T5 O$ K( r+ Sclass TForm1 : public TForm
~( O# \. [$ D{
* {8 v( e# \7 { O- ?9 S__published: // IDE-managed Components& V* T6 I3 y+ W4 ^ K
TImage *Image1;
0 C3 T3 Y D" J7 Z) @ X5 a TPopupMenu *PopupMenu1;: P/ j- G" Z7 @6 J; i7 r8 m- _
TMenuItem *Exit1;
5 M: g }$ K, I& C+ ^3 |( t+ F TOpenPictureDialog *OpenPictureDialog1;) L7 _- }0 G4 |
TMenuItem *Open1;
$ u+ J3 S" M# R4 y6 R void __fastcall Exit1Click(TObject *Sender);
( y9 e W: g N6 y& j6 V1 w void __fastcall FormCreate(TObject *Sender);. I5 B' z1 K6 b6 S! I
void __fastcall Image1MouseDown(TObject *Sender,
% v% g; T* m( _# C5 e TMouseButton Button, TShiftState Shift, int X, int Y);
b1 g8 @- ^* @ void __fastcall Open1Click(TObject *Sender);4 t2 `. m2 Z2 F9 t2 w
private: // User declarations
& X" \; N" g0 x9 {" g' D6 Q- L void __fastcall BmpToRgn();
' O% N6 O! N! i) f9 z% \6 P7 Ipublic: // User declarations
/ L; ^5 w& E+ _: A __fastcall TForm1(TComponent* Owner);. w5 `7 J% g, q$ e/ G
};
9 O* z; Y. n; X) t- M$ cfile://---------------------------------------------------------------------------
2 u. ?2 h' o4 m% C9 ^' n q- S4 {extern PACKAGE TForm1 *Form1;
& y0 G" q9 l1 E8 Wfile://---------------------------------------------------------------------------; i! w* Y6 y1 i: C
#endif</P>
; f# P! N" V) s; b4 |6 ?1 \< >
; b/ C9 E; V5 |! V! E0 j- i<a>file://unit1.cpp</A>
% o2 O# `3 \' k9 q9 D% ?# ^* a1 q2 Jfile://---------------------------------------------------------------------------</P> i! T$ j( s% S3 _, J1 h
< >#include <vcl.h>
& K! K2 F. l, O! V0 i#pragma hdrstop</P>
% F. l T( V% C2 B< >#include "Unit1.h"7 q' H* w4 q: j7 u
file://---------------------------------------------------------------------------0 h# ?, C- O0 O" `! L
#pragma package(smart_init)
5 o: I# z) ?$ N( Y1 P#pragma resource "*.dfm"
: S [' D' Q2 ^/ z+ e, Z; ]TForm1 *Form1;
. f0 |7 X4 |5 F/ q1 sfile://---------------------------------------------------------------------------
# t8 t$ b. [/ x4 p1 q1 X1 r5 k__fastcall TForm1::TForm1(TComponent* Owner)
/ S8 W9 G1 s+ P7 ` S : TForm(Owner)$ G; ^0 t5 m R
{
# ~4 D2 I5 \. _; H}3 {2 [5 I/ k. c% w- r
file://---------------------------------------------------------------------------, K, _" l* _/ [0 T3 G
void __fastcall TForm1::Exit1Click(TObject *Sender)4 Q- R. g2 f9 ^; e/ u) F B
{" _4 Z0 ?& K- M' \& k5 c/ z
Close();
) y! r: M1 A7 U$ I& e7 g}0 V! N& q5 t Z! z% F( H
file://---------------------------------------------------------------------------</P>
5 i8 Q& u" }( @< >void __fastcall TForm1::FormCreate(TObject *Sender)" n/ V" u& P5 L# S$ t' }/ B
{</P>) V9 g; V. v' Z9 Q2 S+ d" Q: Y( e$ K
< >BmpToRgn();
' r" w( t0 S4 U( a5 f5 B- T9 X}
' ?9 B3 q8 c1 t/ X6 [, L2 ?- efile://---------------------------------------------------------------------------</P>
( t5 i$ {7 k, p7 k# x4 W< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,5 I m D$ ?" s& Q0 g; [3 E
TMouseButton Button, TShiftState Shift, int X, int Y)6 S5 e2 w: P2 m9 Q& K% [1 h
{
6 ?% V) W8 X6 O* e4 \( b3 Pif(Button == mbLeft)
" L- Z$ k1 ~ ]9 { {4 l* y; Q, s) C+ t
ReleaseCapture();4 R; W: Q+ k8 O* v. |% ^
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
# e" e3 B# g, i3 N; a }, V7 B! C% I7 Y- ?* L$ o0 I! M6 n
}9 \* a2 {, b) f5 y4 E
file://---------------------------------------------------------------------------
$ b! I+ B! z/ x% r) H- V* svoid __fastcall TForm1::BmpToRgn()4 ^9 P! d* Q$ W3 e; F+ _% l
{7 A8 i4 e$ d1 b* U O
Image1->AutoSize=true;
/ {5 ]' H0 `; t- `Form1->AutoSize=true;
( ~4 a+ }7 [1 p1 `6 mForm1->BorderStyle=bsNone;8 C6 Z2 e9 t& W1 e
TColor ColorKey=Image1->Canvas-> ixels[0][0];
( I! F1 ?3 _* k- H% H# Fint x,y;
; U* b. z6 `/ r4 M* \( |int l,r;
* A3 X" w" L& T: ?2 T( O0 ZPOINT *a;
3 W" v4 E! v. M( {2 Q& a2 B0 Zbool lb,rb;
0 F2 l# u! s% i" j( C0 QHRGN WndRgn,TempRgn;</P>$ C. c: X' a: ?/ S
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)
5 A% R3 _1 b0 M/ s* G9 R{
' ]; s* `0 Y7 K8 D, i5 J, P9 c ShowMessage("申请内存失败!");' t3 @1 n. d V7 b( g0 M
exit(0);- P C3 ^ Z8 h- G
}</P># d$ w9 p" d& u5 J" X" R) U$ v
< >l=0;r=Image1->Height*2-1;" p1 Q* G6 t, z7 x9 E
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>
3 s: I% e) e: E% L% R< >for(y=0;y<Image1->Height;y++)4 i) b9 \ D/ L2 v9 G
{
7 }5 a8 O5 w4 Y: m, M! W/ z. H: T lb=true;
# ^5 D+ U; u6 \+ I+ R% e8 e for(x=0;x<Image1->Width+1;x++)
" a2 I' w& a! J. K if(Image1->Canvas-> ixels[x][y]!=ColorKey)
a! ?8 q0 j0 H2 ^$ p" u! d {
$ _: A% S5 p3 y0 U' B! ^ a[l].x=x;
0 ~" m8 J! q" y8 v a[l].y=y;) i+ I; t% V* ^ X$ }5 r
lb=false;' e9 b& \& a$ G3 F2 g. M: ?% {
break;
- Q, v1 s5 j7 u9 R# o }</P># `- ~' C& y( X; ?' M
< > if(lb) a[l]=a[l-1];
6 v4 X9 R* X. {* d% N: O9 ^) U l++;
0 N* ^" p& ?* Y# d- `9 o2 e! g1 @ rb=true;</P>2 A. c% p4 `; Q2 o2 Q( g
< > for(x=Image1->Width;x>=0;x--)
: o6 o( l- G3 F& ? if(Image1->Canvas-> ixels[x][y]!=ColorKey)- n5 [2 J( p4 x: m& Q
{
) g2 O0 V$ x5 l. E a[r].x=x;( p; e+ o/ r+ T# j
a[r].y=y;' H: q3 f3 D/ {. k! S
rb=false;& C; {8 I2 k, }1 _' Y/ B$ m
break;
. g* R* V! H6 J9 O, t# n }
1 l: l) I! R; G+ Y. A if(rb) a[r]=a[r+1];4 H6 F2 ]0 Q9 f+ r- {3 r1 t
r--;
2 D o6 r- z& ^}</P>* N# q: X6 D& h' F
< >r=Image1->Height*2-1;
/ [1 V+ ]4 N7 i$ R# W7 P) _( n. f% cfor(y=0;y<Image1->Height-1;y++)2 v5 o( }0 {% ^! `0 @
{6 b1 J$ S4 U0 P
for(x=a[y].x;x<=a[r].x;x++)
' c7 q' z" ]% G8 A3 z H6 I if(Image1->Canvas-> ixels[x][y]==ColorKey)6 j. J- w$ t' V4 s, _% i" m% J
{
$ m: E: K% s3 ^; m TempRgn=CreateRectRgn(x,y,x+1,y+1);, {; ^& o: ]6 e m
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
5 P J/ N' l; A9 d* T2 c/ F4 X DeleteObject(TempRgn);3 T. U6 b9 W4 P( B3 `
}
! ~4 R4 b& y' A7 C* u% x+ x* N r--;
" Y z- U) B6 c# x+ b- ]" S}</P>9 L7 ^1 e3 K. C! h
< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);
! }* l$ r5 }' n& A* \; jTempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
, f, T6 b7 m$ f9 j4 GCombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
! \) Q; v# {4 T2 @5 f/ LDeleteObject(TempRgn);
; [2 c* |/ @' X6 c' l% _delete a;7 s" q: t* e' E" w/ E
SetWindowRgn(Handle,WndRgn,true);
$ a" l" o8 f9 c}</P>
7 t: S8 @" O( v+ n: b8 l" f0 y- a< >void __fastcall TForm1::Open1Click(TObject *Sender)
4 I8 J! Q+ ^1 d) G. x$ C; H3 X{2 O0 n, V5 q8 b" K6 c; O1 G# H) F, x
if(OpenPictureDialog1->Execute())
* h2 X; Y* _+ o& B/ f% o0 W k {$ t8 b, M, A" C
Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);% b, }; ]& T% b
BmpToRgn();; x# s, \8 Y+ b2 [% Y
}, K7 N* k* b) h6 `# T# d5 N
}7 z: ~8 W1 s; I# e9 \6 f: D
file://---------------------------------------------------------------------------</P>0 M: S8 _- N2 e6 w5 t1 {' x. K
< >对啦,图片的背景色要相同。% D4 M9 S1 H+ F _3 y. q5 h9 e5 _
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
- c2 p, ]) j6 F" ~% N< >file://--------------------(一)为窗体背景增加渐变色(蓝)--------------- v3 j; N3 F9 }! ?) O$ }3 R. w
void __fastcall TForm1::FormPaint(省略). m& T% E( J' H3 h+ a6 c* S6 s
{0 K" q o$ T4 s8 L& }
AnsiString ww;int bb;
, L9 q! h0 {9 Z3 \- q ww=AnsiString(Form1->Width/256);
[; R" ~. A4 I# [: |3 d TRect MyRect;; P# z7 B4 }) P- F' n1 Y/ y
MyRect.left=0;
$ {' K6 C. y$ X" _% n for(bb=0;bb<255;bb++)- E* n4 `" ^: h# L9 ?# U7 q- [
{
: L! N7 q6 [. Z. J7 ~, x3 p' A Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);
: k3 b r; ~. r: K. j8 @/ q. E MyRect.top=bb*(ww.ToInt());+ \4 ?& R0 g0 ?. C' }& G% j
MyRect.right=Form1->Width;) ] W0 N. x9 A6 ]' g; o( N& c7 F
MyRect.bottom=(bb+1)*(ww.ToInt());6 _+ {! _( f& s- K- g- k
Form1->Canvas->FillRect(MyRect);5 ]1 a7 Q+ G$ j* J* f7 ]( ~) `
}
8 f" r% J! J8 A% s2 R9 G7 Q} </P>
0 J4 Y* `: n" x8 _< >file://---------------透明窗体--------------------------
" D# h7 x; i" ]void __fastcall TForm1::Button1Click(TObject *Sender)5 ^: G0 U* F, w5 {$ }
{
9 @* V* y0 S4 g; P: o: _7 ? TRect *rctClient,*rctFrame;
# L$ ~$ H* W: H& u HRGN hClient,hFrame;
7 {1 F* @- g7 u/ f6 E POINT *lpTL,*lpBR;) X( f5 U, t0 n) @6 H
rctFrame=new TRect;; x; ~3 ^0 W$ e5 n' L) C4 x
rctClient=new TRect;
: o u, J: p* f( O. | lpTL=new POINT;
) a/ e7 ]5 n9 c. m2 j/ K lpBR=new POINT;
1 }( g0 u1 E+ H9 _# d GetWindowRect(Form1->Handle,rctFrame);. k% V$ g# S; y
::GetClientRect(Form1->Handle,rctClient);! A" @( U' c3 H" D \
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
' p8 u) d q( ~. m lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
6 k( |- n$ w0 s5 g. }* N. k< > ::ScreenToClient(Form1->Handle,lpTL);
$ a- {" U3 k1 b I/ r! n u ::ScreenToClient(Form1->Handle,lpBR);5 k2 R. B& T' ~# W7 A
rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;
4 R$ E# L% A" w! h/ P9 z rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;- q' A1 H; r5 ^# V' X" J
rctClient->Left=abs(rctFrame->Left);
e! ?0 P& b7 r% ^. A6 _' u rctClient->Top=abs(rctFrame->Top);
- u$ l$ ?* d6 N# J rctClient->Right=rctClient->Right+
3 q& {" P" i# U% w' R" c7 Y3 W abs(rctFrame->Left);
3 p# z9 R+ ~% z v+ k rctClient->Bottom=rctClient->Bottom+
, [5 f- v! K9 s# Q0 Z& k! x; O abs(rctFrame->Top);+ x4 m6 K0 [2 l) T
rctFrame->Right=rctFrame->Right+0 c) G( V5 u3 V8 l: [4 d7 ]
abs(rctFrame->Left); t ~) [( h. H) O6 z2 u
rctFrame->Bottom=rctFrame->Bottom+3 r; ~5 G N* x
abs(rctFrame->top);
5 c* m6 U6 W3 V4 }; f6 u' R rctFrame->Top=0;rctFrame->Left=0;</P>
`* g% u) Q1 l< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,1 l- f* i! J0 b0 \4 H
rctClient->Right,rctClient->Bottom);' V/ x9 Z! n' s) S3 |
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,0 q* F5 t$ s% v! |$ N1 t
rctFrame->Right,rctFrame->Bottom);* J! o2 @2 k& r3 t
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);: _% \; u3 f& J
SetWindowRgn(Form1->Handle,hFrame,true);</P>
$ A: K9 T' A6 |* p' k8 f, [< >
@$ w: P* a( x% W# Q delete rctFrame;
9 @4 v- V7 q+ m- b3 z$ Y1 y delete rctClient;
4 p" I- B3 a y delete lpTL,lpBR;</P>9 w4 V: A! d0 `& S, ^4 u, z
< >} </P> |
zan
|