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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。& K# e* ]3 L' T% i, D# Q$ j
file://------------------------------------------------------------------------
' ^7 T: y) Y* [# k3 E! V2 z<a>file://Unit1.h</A></P>) t9 [0 o9 T* e) ~( |) L
< >#ifndef Unit1H
4 h1 o& x8 C+ I' q/ o5 |! M+ j#define Unit1H1 C" U, d) ^2 ~2 _) |
file://------------------------------------------------------------------------2 N' n0 c" x% I0 k6 k9 u
#include <Classes.hpp>
0 q5 R9 x* P N+ T. c2 I7 G#include <Controls.hpp>
, X9 i" f% |7 C3 V5 V( t J* `#include <StdCtrls.hpp>
7 e" w( E9 T" t) \3 \! @#include <Forms.hpp>2 h" f5 G/ F: V' ~
#include <ExtCtrls.hpp>8 c5 o% a* R, @9 |- n' Q. n
#include <Graphics.hpp>- K8 ^/ G i. T2 ?
#include <Menus.hpp>
: ?* @9 ?7 O. O% `#include <Dialogs.hpp>/ d6 }' c6 g+ k, h/ E2 V& L" r. X
#include <ExtDlgs.hpp>
4 Y6 T# m' n0 q7 s8 ]file://---------------------------------------------------------------------------
1 i. ~+ M# B4 H! u, e. Xclass TForm1 : public TForm* ?, e0 w8 a: Y& J
{
' I' i$ D% W. t: y__published: // IDE-managed Components
* x; v! {/ h' d5 r5 V2 A TImage *Image1;
* e6 D* p. u+ _& W; G+ T TPopupMenu *PopupMenu1;& v( e/ U$ u4 ~) X& g- W$ n
TMenuItem *Exit1;
$ N# T, G* N7 j6 V* ?; o TOpenPictureDialog *OpenPictureDialog1;
6 k! T! t0 W) ^% o1 G9 R/ m TMenuItem *Open1;
/ _+ e$ f7 `8 H" z) K" @% c void __fastcall Exit1Click(TObject *Sender);
r+ p5 b: o( I. u void __fastcall FormCreate(TObject *Sender);
" I' |' @7 ?' J, _8 u void __fastcall Image1MouseDown(TObject *Sender,
0 q1 e& x6 w/ ~1 a TMouseButton Button, TShiftState Shift, int X, int Y);
( ~0 B5 T* i; h, D void __fastcall Open1Click(TObject *Sender);; c. }$ O) K( t6 ^" q
private: // User declarations5 |+ ? S7 g \9 {7 [+ N4 g
void __fastcall BmpToRgn();4 J! u& j/ G7 j5 R/ e, i4 g" R
public: // User declarations u" B2 J5 C2 _
__fastcall TForm1(TComponent* Owner);
' L) n: M6 X: D! e% {};
5 S0 `$ E4 ^8 Z6 s- tfile://---------------------------------------------------------------------------
7 J6 {+ k! V1 n6 \% {extern PACKAGE TForm1 *Form1;
& ]% i, p; X' b( ]; W4 X$ ^file://---------------------------------------------------------------------------
7 n1 Q" Z2 B9 g! ?7 I#endif</P>- c: Y9 W$ A% u7 b6 Z5 T
< >8 {, B+ [& O, j+ M
<a>file://unit1.cpp</A>
5 U' |+ ~- p0 O! U1 Hfile://---------------------------------------------------------------------------</P>
- J' ]3 k/ |7 X1 Y< >#include <vcl.h>
' T3 e0 J! f$ M* }#pragma hdrstop</P>
% O3 o* s. I: ^% W5 T< >#include "Unit1.h"
; r& f' U( h/ X/ ^3 sfile://---------------------------------------------------------------------------
7 i' i4 G& D, ]; ]$ ?1 }. x) _#pragma package(smart_init)
5 O$ u% R% v( N/ q$ D. q#pragma resource "*.dfm"
( w- Z! Z0 r2 X# F+ UTForm1 *Form1;
9 |% A, z* w8 s7 d0 `' h* [file://---------------------------------------------------------------------------
- f4 d* Z) u; @# Q. N, y" x) y V, s__fastcall TForm1::TForm1(TComponent* Owner)% I& H8 Q# `8 m1 H( p+ v, B
: TForm(Owner)
' S4 _5 o9 \0 Y3 \$ d2 I{
. Y+ r ]9 a& J7 h6 Z. L5 Y}8 y* t" ~$ w9 S5 G Y. _* r. b3 A
file://---------------------------------------------------------------------------
' g" F* L; Q+ {void __fastcall TForm1::Exit1Click(TObject *Sender); m5 G- M: c9 r
{; u4 {. L, C, m: u; y1 ?
Close();, ]% `0 W1 J0 x2 H- O! _) |
}
1 {! x7 J1 ?( z: R/ |! n- Z3 nfile://---------------------------------------------------------------------------</P>9 F8 c& D+ ?4 l5 \. I3 Z
< >void __fastcall TForm1::FormCreate(TObject *Sender)
* y0 O1 W9 {: ]9 @( W{</P>
( k$ T+ P6 r9 k" R2 S S< >BmpToRgn();
7 b' d: H& L. j. }4 |0 i+ t/ s}" A# C+ z0 n- G
file://---------------------------------------------------------------------------</P>
: W& x# J2 J" u% R* U7 N) O A< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,; W+ ~! L" X7 F) r, s+ M; b" o9 m
TMouseButton Button, TShiftState Shift, int X, int Y)
2 F9 y! s; C: w6 U( i{- k, H1 E z' ^
if(Button == mbLeft), A& M6 n: }( t1 z
{
2 H0 e- P/ _" [2 q( _/ K( z ReleaseCapture();
2 \, ^3 v* W. h3 \ P' l# X Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
, k: y- ~/ U6 r7 ^5 f }+ ^: M4 ^: H3 u
}
, L9 Y) I, f) J+ Rfile://---------------------------------------------------------------------------
, O- t$ f6 l9 G2 n: I5 e7 r+ @void __fastcall TForm1::BmpToRgn()
: l0 K6 ~- k; K% u3 u: Y' v0 E{# B, h. |" i1 l
Image1->AutoSize=true;
' n. [$ M- {4 i A' v3 f/ VForm1->AutoSize=true;+ e6 {# a1 D7 l% D
Form1->BorderStyle=bsNone;6 w/ g& s) G$ y' Q
TColor ColorKey=Image1->Canvas-> ixels[0][0];
v- |5 c; r- X, b2 I4 Pint x,y;
?9 P7 V( c& ?: k6 q0 Bint l,r;
4 l% p) E, s5 B+ Q5 @POINT *a;, z% s9 w O z" p
bool lb,rb;9 ]4 V7 M* d7 o9 [9 b$ z
HRGN WndRgn,TempRgn;</P>% W5 ^! w3 B! M
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)
! H8 L, Q0 n9 J5 \4 T4 Q3 n, e+ C{ P. j. _! A9 T
ShowMessage("申请内存失败!");
' @2 [% Z5 j4 a: ]6 `( B% I exit(0);: N. |" P- x6 E3 e6 g9 a |
}</P>
5 @# x" |0 z9 J# A- K& Y; }" n7 J< >l=0;r=Image1->Height*2-1;4 |" G; p* L% k# F+ E" z# n1 b
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>- o$ A) u* [7 e+ s
< >for(y=0;y<Image1->Height;y++)0 _- Z9 c1 f5 @% |/ f( r9 @
{
; b- v. I7 l; w' n) a2 k& z/ Y) v. x lb=true;
+ W. v5 [; j5 D& x1 ^ for(x=0;x<Image1->Width+1;x++), ]+ ^3 W a. u) z
if(Image1->Canvas-> ixels[x][y]!=ColorKey) y. D/ A9 A6 P. t5 w5 l1 Y/ Z
{7 |) l5 T3 z7 x2 W4 ]& b" d
a[l].x=x;) [9 d2 t* ^' H+ y/ p9 i) e
a[l].y=y;
' x& [0 Z9 n0 L. q9 ~5 ^6 x lb=false;5 `. A& E, V; v3 T* g' F& I+ O3 [
break;! X& w7 J' L2 z' n: D+ V4 p
}</P>. ?" m2 q+ D5 B2 r9 v( {
< > if(lb) a[l]=a[l-1];* W2 L+ x3 E: O& n
l++;
4 M( u; M. s& ^/ J rb=true;</P>
( w( a$ T/ c, t/ _9 h< > for(x=Image1->Width;x>=0;x--)
: n! g* ~* U' {. {. v if(Image1->Canvas-> ixels[x][y]!=ColorKey)! N/ T( e/ o9 N+ e
{
7 E9 ` x+ E" [7 k7 e a[r].x=x;
$ F, ]/ s" i& r8 ] a[r].y=y;
, F1 u% r4 L: d3 ~" s+ B5 } rb=false;" A z2 W+ u: K, N7 F/ X
break;7 F, n! `5 h1 k/ t) B
}
% I6 C. u# F' \ if(rb) a[r]=a[r+1];# \3 [, v: H3 { x6 h+ b9 Z$ H$ V! k
r--;
6 l+ g5 \- H4 o. V! I1 d$ |}</P>8 w1 t1 I1 f6 C" e7 k& L9 ?
< >r=Image1->Height*2-1;( q* t7 L* t7 G9 W {
for(y=0;y<Image1->Height-1;y++)
5 }8 F3 z5 J* G2 r! B+ p{
: g& v/ a# H- G! g, @ for(x=a[y].x;x<=a[r].x;x++): L5 q! ~# ]* R8 E6 X
if(Image1->Canvas-> ixels[x][y]==ColorKey)6 K* [5 M# ^) L. @$ `6 U8 a# q
{/ [7 G* R+ R- S1 d& L* x# w
TempRgn=CreateRectRgn(x,y,x+1,y+1);
8 O q; c J/ a CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
! |3 U3 b$ u- H6 A DeleteObject(TempRgn); G K9 }+ c/ _0 N& ^
}
# S' H3 x4 o( P+ U r--;1 J5 K }# @& k. K# J9 C
}</P>! Z5 k+ a0 X, b
< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);
+ v' A+ y: E( u; s; @4 n2 LTempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
7 M$ D M& M! C5 k& }CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
. F8 K- I: V- T% O0 q- G/ PDeleteObject(TempRgn);$ R: [) P# k; [
delete a;( {) W& H8 [ K
SetWindowRgn(Handle,WndRgn,true);
1 F) t8 Q$ h" }! N3 K! ~5 l}</P>5 {, F7 d" k: w
< >void __fastcall TForm1::Open1Click(TObject *Sender)
3 c$ ~" E/ K2 [( d' X: T{! w6 d/ m2 }. ^$ M( A
if(OpenPictureDialog1->Execute())
9 F0 u( \/ ?* u# K& E( k {
4 L# C" m6 [0 h; K7 f, P Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);
4 }( B* Y5 S0 H* \" `9 T3 J BmpToRgn();
6 q8 c6 j6 X4 | }
& a/ o4 A2 y4 a* j}
/ ^7 `6 G# {* G; O; t$ i/ rfile://---------------------------------------------------------------------------</P>5 b, b3 b! C6 e5 N
< >对啦,图片的背景色要相同。0 G: x' k0 U. Q; M2 h
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
7 @: E4 R( m* D" \* g! w< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------4 y3 n/ d: M6 o. l% b" w
void __fastcall TForm1::FormPaint(省略)* x5 D8 D9 J# H4 l2 M
{ A- P$ X( U* y6 c8 ~% g
AnsiString ww;int bb;
) G7 u- l) `( ^: s/ N$ h0 m0 E8 v5 t ww=AnsiString(Form1->Width/256);( G' C% i+ [8 T; h) K' g$ q$ u
TRect MyRect;- z+ D5 x) s, f9 d9 i
MyRect.left=0;% [6 I+ w* R( t: x7 t8 P+ ?
for(bb=0;bb<255;bb++)
$ D- O9 ]. C' A& k3 O4 d; g z {
3 \% I3 t$ w- v3 y Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);: e* s. C3 i9 j5 W, ]+ R+ w2 s
MyRect.top=bb*(ww.ToInt());$ C) e, `, y! j, J# J, k6 ?
MyRect.right=Form1->Width;9 d; G- Y- h0 @. s* _9 L* I
MyRect.bottom=(bb+1)*(ww.ToInt());8 X5 u4 `4 F O& F! x3 V5 f$ G
Form1->Canvas->FillRect(MyRect);0 l: Y/ B6 a) w. x. ^
}- J. m% T* {1 a3 U; s: |0 C: g
} </P>
" {6 o4 y) d: `< >file://---------------透明窗体--------------------------+ l. i# C+ f+ J6 B' `
void __fastcall TForm1::Button1Click(TObject *Sender): J" W; A3 t" ~5 f+ Y! o) `
{
8 x/ E/ k/ s( x: \ TRect *rctClient,*rctFrame;
3 V/ W' J9 O* F8 R5 c& j HRGN hClient,hFrame;4 v! t! X% |& V% S; ]: A# Q
POINT *lpTL,*lpBR;
6 C5 _2 ]& [: O! h. R; Z& Y$ V: h rctFrame=new TRect;
6 _4 v4 r/ {! k rctClient=new TRect; @& _3 N( ^4 W5 Q* r
lpTL=new POINT;
6 M) @8 [) m* h1 W$ k1 {7 w9 } lpBR=new POINT;4 |/ u3 n9 i4 F2 j8 m* I
GetWindowRect(Form1->Handle,rctFrame);! @7 D8 L+ E& }" B# ~" G
::GetClientRect(Form1->Handle,rctClient);; ]( M/ Z& a) k: c
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
! ~3 [( n4 n E lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
0 N1 I0 x3 K; D. S! Y< > ::ScreenToClient(Form1->Handle,lpTL);! O3 ^# b+ a7 v1 c- A$ y4 c9 L! k
::ScreenToClient(Form1->Handle,lpBR);
& w9 N- r7 v+ ], s rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;) [1 x+ I, B5 r+ r+ B
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;) A# ?) O& D+ q% _* y& y
rctClient->Left=abs(rctFrame->Left);% `" B& p: i8 h6 e" O l
rctClient->Top=abs(rctFrame->Top);! x6 q/ ~3 E- d0 |7 X
rctClient->Right=rctClient->Right+
7 `9 D3 C% U. |( n abs(rctFrame->Left);
4 T$ ^. ]: v, b# @/ k5 d6 N rctClient->Bottom=rctClient->Bottom+
5 m9 L- s6 I/ |! o* c" \ abs(rctFrame->Top);
$ l$ A( t! f. }7 M9 E1 I rctFrame->Right=rctFrame->Right+
/ N5 {7 @3 C' I1 N2 _ abs(rctFrame->Left);
4 ]1 q8 b/ t$ ` z rctFrame->Bottom=rctFrame->Bottom+& {) e* R! d$ c I# y6 d
abs(rctFrame->top);5 X* y- g( }! L; y' ~) H$ I
rctFrame->Top=0;rctFrame->Left=0;</P>, s$ z# a% |) q; r q
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
% ]) P2 W6 a% v+ m" A rctClient->Right,rctClient->Bottom);
# F* f" M' O/ s* n6 m6 e- E% @ hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,- N% n+ n$ U" C( g
rctFrame->Right,rctFrame->Bottom);
) [) K! k1 \. r9 V3 k" H CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
5 N1 h( E+ f6 o5 y0 m' X SetWindowRgn(Form1->Handle,hFrame,true);</P>3 u) n8 S/ @7 b. D, e3 I/ F
< >
* x( A o' ?2 p delete rctFrame;# Y! x1 n5 d: p& p# g, Z9 Y
delete rctClient;
8 ~" s: u4 ~ j. G. { delete lpTL,lpBR;</P>
$ R, l# {+ ~( w/ ~& L( I< >} </P> |
zan
|