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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。3 p U. M x+ L" D" B4 D: M/ M, f4 S
file://------------------------------------------------------------------------1 J4 c0 a( e! y! s
<a>file://Unit1.h</A></P>* U2 i8 V# T8 s9 m' ]2 F' F
< >#ifndef Unit1H/ S8 G7 b! d0 i `
#define Unit1H
5 ^' Y: c5 r( G1 Y$ Xfile://------------------------------------------------------------------------; \$ i- I/ I( _# \1 B, J+ ~ }. m
#include <Classes.hpp>, F1 M. N0 G. e
#include <Controls.hpp>( F- o( S# [5 x# e- A0 f1 r- {
#include <StdCtrls.hpp>' f& `5 S, S& C* Y
#include <Forms.hpp>3 v3 f# F8 R; v5 t
#include <ExtCtrls.hpp>
7 G R! F# `1 |! Y9 h6 J- u. s#include <Graphics.hpp>
! x! H: ^# [9 J3 c! U8 H/ @#include <Menus.hpp>& ~* B' E2 T! ?6 ~
#include <Dialogs.hpp>) K: b( i! u; }# A3 R
#include <ExtDlgs.hpp>
; l5 A$ M4 Z) @" C+ j8 ufile://---------------------------------------------------------------------------- `' G( e" M% Q5 q2 z; X4 t" [
class TForm1 : public TForm4 m" k2 i) V7 g; Y7 h! t. G3 `
{, i+ y7 z0 O& }2 l# U9 O9 t+ t
__published: // IDE-managed Components; e& g% ~# F7 U8 L
TImage *Image1;: F4 h/ K( J8 F0 P8 A8 ~
TPopupMenu *PopupMenu1;
2 f( z9 g+ I1 f: Z TMenuItem *Exit1;
6 b# R3 H9 F: Q* @& m3 Q2 I9 { TOpenPictureDialog *OpenPictureDialog1; R& i5 l+ ?+ } L0 a
TMenuItem *Open1;
! ?' @( a# n& \$ i% v0 ^" {) @ void __fastcall Exit1Click(TObject *Sender);. V' K" v. Z V/ Y$ J" _: N
void __fastcall FormCreate(TObject *Sender);
: a" ~9 h" R/ A. e void __fastcall Image1MouseDown(TObject *Sender,
% e. ^ Y2 E: J' Y* n TMouseButton Button, TShiftState Shift, int X, int Y);
7 l0 P5 D4 { d$ |" C9 y void __fastcall Open1Click(TObject *Sender);
( T- y! q" K5 p ~, i. L/ R4 fprivate: // User declarations" N) z4 E/ g; o/ J- d* j
void __fastcall BmpToRgn();1 n( O& Q# X. c0 Z9 |! ^( X8 {
public: // User declarations7 b) q8 N! c7 ^" T x- T
__fastcall TForm1(TComponent* Owner);) k/ u S% U, e+ I2 ^" `
};) ?9 N D4 Y2 m
file://---------------------------------------------------------------------------
4 j/ a4 w- W& b0 V6 N6 V; Bextern PACKAGE TForm1 *Form1;
) @0 _9 d& H+ a0 S) S8 G. v. m( M, pfile://---------------------------------------------------------------------------0 V, L0 W2 s. R
#endif</P>
' I# _' P0 y% S7 F, n< >
( J( }9 a- y1 C8 b" Z6 n<a>file://unit1.cpp</A>" w; o6 x" J/ d" u% U0 m }: w+ U$ B
file://---------------------------------------------------------------------------</P>5 u( X& H- T4 W
< >#include <vcl.h>4 j' k5 ?. j$ L! Z( ]
#pragma hdrstop</P>0 v' M$ n4 h$ k% l7 r: S
< >#include "Unit1.h") F; p! X0 |" p/ f
file://---------------------------------------------------------------------------
& k/ a2 ]+ `5 Y3 G" c2 @2 ~#pragma package(smart_init)2 e/ P, d: n* K( t
#pragma resource "*.dfm"
Y$ b. ?0 o4 }TForm1 *Form1;) m& s* A! I$ o
file://---------------------------------------------------------------------------' o1 _ {& j V7 B& n5 T
__fastcall TForm1::TForm1(TComponent* Owner)
) Q1 Z3 N3 U3 D, k# Z( x* }4 W5 Z3 S5 n; j : TForm(Owner)( `( p3 R8 V! o6 [2 b6 I
{
/ Q; F7 v! x0 S' n# H7 _}: u0 E/ A o( \
file://---------------------------------------------------------------------------
+ ~( B/ K4 S; l Z/ yvoid __fastcall TForm1::Exit1Click(TObject *Sender)
8 a3 A. V/ q! U& k{' v& y- g- s( g
Close();
8 B4 q) Y) v& m) p. I/ b}
* e# e+ ^. `# l! ?% T( ^file://---------------------------------------------------------------------------</P>
# Z- \% B) r' K# p7 d$ v< >void __fastcall TForm1::FormCreate(TObject *Sender), @ B: I, X8 `9 G; ^) q- M' O" k+ B8 r
{</P>
1 R) j' J. V& A' r$ D< >BmpToRgn();4 R3 g/ {) K2 D# T7 O
}
9 \# v2 R! V8 N) F& v6 P3 wfile://---------------------------------------------------------------------------</P>
/ U& H1 o q# Y/ [ B; J< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,6 f0 x: ~) \! n( T
TMouseButton Button, TShiftState Shift, int X, int Y)
+ [- f* W* o+ p$ d" q* _{7 d1 M7 z) K, o
if(Button == mbLeft)# X# v$ a1 v# E9 z$ b. d- g
{1 k) ~+ A& t6 z, j& _+ e
ReleaseCapture();+ h y1 r/ I' _5 a1 f
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);' S2 ]! X1 O: Q7 p8 p
}
' n4 l& W6 F& ~$ c1 s}8 ]" w9 f& j2 W6 p
file://---------------------------------------------------------------------------
8 Q( X$ c7 L7 T7 V1 `! Yvoid __fastcall TForm1::BmpToRgn()
v) A7 B: u7 e( D+ J{
7 c7 j, j/ b/ K! q sImage1->AutoSize=true;
. ]6 @, t! u5 X( T% l0 S2 uForm1->AutoSize=true;
8 J- s/ g5 h, J H/ jForm1->BorderStyle=bsNone;2 X) c( I$ X7 I( @
TColor ColorKey=Image1->Canvas-> ixels[0][0];6 w$ A/ U" ~0 ~/ L$ H
int x,y;& r( |7 X: y: ^& N
int l,r;
) \/ \3 x) V6 rPOINT *a;
0 s( h9 \- Y: S/ mbool lb,rb; @9 s3 T0 H) x, q
HRGN WndRgn,TempRgn;</P>+ N" `4 _$ f# ?% v, k( ?7 O
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)/ Q3 n) ^. _, y6 H) g6 |8 q' u0 W$ F
{
" t) H) V2 F! J: r l( P& A ShowMessage("申请内存失败!");3 _7 }' _* F" B5 y/ f4 O
exit(0);
2 g9 [+ Y+ j1 U2 L+ X6 {}</P>9 ?4 u d% u& E
< >l=0;r=Image1->Height*2-1;4 K2 ?! P P6 y0 Z' x3 u
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>+ ^& O) v! P* \1 I0 D, y6 l
< >for(y=0;y<Image1->Height;y++)4 F' G; {3 [; T
{( r) E+ f$ `2 |* }+ s3 _
lb=true;
! e$ B4 d `2 `6 n3 M w9 H for(x=0;x<Image1->Width+1;x++)
3 U" ^5 m; p7 z5 ^# [ if(Image1->Canvas-> ixels[x][y]!=ColorKey)
& }" ^+ I# j+ e, ?) c& [4 V {( \9 Q+ q4 K. e3 Q d4 {1 } D8 `
a[l].x=x;
' ~9 C! F8 D# U9 V$ q a[l].y=y;' ?6 a2 t V O& `% x4 n7 T
lb=false;( D% t# A7 i, C5 P, m
break;2 P4 F( [0 q1 \ c: A* ^
}</P>& R7 B6 P: h# M4 L0 _" M& ~8 `; Z Z$ o
< > if(lb) a[l]=a[l-1];
! P* h& K, K+ D3 W6 ?8 T3 j l++;
) l% }$ e2 ~5 L% E" l V rb=true;</P>) s* u; w9 t- ?" n" o
< > for(x=Image1->Width;x>=0;x--)
; p, B1 p: }3 K" x' T if(Image1->Canvas-> ixels[x][y]!=ColorKey): e; s; l" k0 l* G/ Q4 }1 g
{& @3 N) K: a# t) r( z
a[r].x=x;$ ?; x- f3 ~. k& }' U& n. X
a[r].y=y;) J& d* c( A3 V% ]
rb=false;
6 Z7 A% k$ v0 R: A9 T) d* L break;, s+ u& b' M* |. o. o' `
}$ O# W& D3 u$ V
if(rb) a[r]=a[r+1];- |" {( C- O; n$ ` y4 q* ]9 N( M) Y& i& `
r--;
3 F+ L( A+ M) \/ S5 m4 }1 }1 j" i2 I}</P>- U: N( C/ S. H& D$ S/ \* @3 ^
< >r=Image1->Height*2-1;
# \3 K7 ?+ A# t4 v! `0 |+ M6 Wfor(y=0;y<Image1->Height-1;y++)
- G! X5 O( e# `+ E5 l5 y3 P{) T9 V# t1 L0 [
for(x=a[y].x;x<=a[r].x;x++)
! D! R& m$ u9 ^; A d7 u5 f if(Image1->Canvas-> ixels[x][y]==ColorKey)( d8 b [. h; v+ o7 A$ g1 E& q1 z
{
0 x% s! @; d7 B& `* t; T9 g( ^4 B TempRgn=CreateRectRgn(x,y,x+1,y+1);( q' i) W6 {& @' x) Z' c' v( t
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
" w: w. p$ r* ]2 `7 G# M( L DeleteObject(TempRgn);
/ R/ N, c" v$ z; v7 y3 ?" M }
. j6 N3 K! B+ t9 g# L r--;& d& H6 r: ?+ h+ ]$ V. Y% A
}</P>% |' `+ F* w0 j
< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);: I9 m. k; ]7 y" |
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);5 P5 v7 T% F/ }& z1 _
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);3 K* {- |: @- W9 Q0 H, b
DeleteObject(TempRgn);
9 s4 g. |% H8 N& |7 t$ C0 i) rdelete a;
- K) Y. o4 B' z/ w4 KSetWindowRgn(Handle,WndRgn,true);. A4 T- X$ h7 A1 G: `
}</P>: R% l, h; k2 p8 M, S4 X, o
< >void __fastcall TForm1::Open1Click(TObject *Sender)) U8 X0 |6 ?" s5 ]6 K; i5 |0 ?
{" U0 i ]' W" R4 E
if(OpenPictureDialog1->Execute())
. C3 m. B/ f }1 |! `& V d {, m/ _9 ^: [ B1 u
Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);4 E: B1 \. ^( M
BmpToRgn();3 u: F T* d4 Y1 @5 c$ V5 \0 @1 c3 ]
}
/ S+ f: w1 K& n( t}* V0 q2 H1 e# Z5 D) T- {8 w/ F7 a
file://---------------------------------------------------------------------------</P>. f! Y2 k i7 E. L; Y4 v
< >对啦,图片的背景色要相同。
7 l- g- j( c9 `! k图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
2 w2 y, h+ p* N! [4 ]< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------
2 C. k: H) q( u: a+ P8 o, ivoid __fastcall TForm1::FormPaint(省略)) |" N& P) V( x5 {$ {, P$ _- T. `
{
4 N' X( q, P' @ AnsiString ww;int bb;$ t8 C9 e( C3 b7 [% [( K# H% o& F
ww=AnsiString(Form1->Width/256);3 g# D% n7 [) ]3 [& [
TRect MyRect;9 ^/ j2 ^2 v6 y6 ^" z3 F
MyRect.left=0;
# H9 R: ?7 v. I" M5 j* @ for(bb=0;bb<255;bb++)
7 o8 I4 W/ ?% H" q3 k1 L {
- w6 \' b, `, R5 f Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);/ ^* w: |) R1 P! `; x# ~
MyRect.top=bb*(ww.ToInt());$ n3 w1 p9 w- ]" e! U
MyRect.right=Form1->Width;
" |0 e) y! J. N. t MyRect.bottom=(bb+1)*(ww.ToInt());
# e0 M3 z' ?1 _ Form1->Canvas->FillRect(MyRect);
- C: ~2 J3 O* h: s) C) }3 ? }
I/ q) C" T8 D2 [5 B! L' @9 n! n' @} </P> w+ @1 o2 ~* [! i
< >file://---------------透明窗体--------------------------" S8 U1 H$ H% a& F o7 w
void __fastcall TForm1::Button1Click(TObject *Sender)
* W% D/ z% e1 s& R5 L{; k+ q h7 a- ^1 v
TRect *rctClient,*rctFrame;1 |7 c' B' `- M# |- L
HRGN hClient,hFrame;* s' L/ @% y/ j! }: b, Z4 J$ X
POINT *lpTL,*lpBR;. X+ u$ m9 B0 z" r0 w* C7 c7 [$ P
rctFrame=new TRect;4 E0 g% p9 u8 o
rctClient=new TRect;
3 u) h2 X6 I8 _6 f' d$ j- G. z lpTL=new POINT;& L- D5 c& d+ E% @; b
lpBR=new POINT;
5 ?2 Y* B" Y) h! O" } GetWindowRect(Form1->Handle,rctFrame);2 I& i C+ q' s' V0 c. ?
::GetClientRect(Form1->Handle,rctClient);
6 }5 w, T9 G1 I+ \" Y7 e lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
. ~0 R- ]5 S. o lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>4 P" [! x* S% u9 \; O+ J9 y
< > ::ScreenToClient(Form1->Handle,lpTL);. N3 x4 V I: {1 \% T7 Y& h7 F4 T
::ScreenToClient(Form1->Handle,lpBR);
a/ v& r' F, _6 b3 Y6 Q$ H rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;4 D0 y! K4 t- v
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
$ I `# ?$ k& K( w k! N rctClient->Left=abs(rctFrame->Left);8 Q6 l h3 a; u s8 |8 z6 o! p0 ~( k
rctClient->Top=abs(rctFrame->Top);6 [' P% u. `) t* g- H
rctClient->Right=rctClient->Right++ L4 ?9 k7 l& k/ z5 q( p
abs(rctFrame->Left);
* ~: `2 N% P* X rctClient->Bottom=rctClient->Bottom+3 _" z& s- ^0 C D$ O) D, S2 g
abs(rctFrame->Top);9 Z/ ` f6 K8 Q( D2 C% i
rctFrame->Right=rctFrame->Right+
* z9 h& a/ V% @; C2 n abs(rctFrame->Left);
- Z! N) S# d+ M* i rctFrame->Bottom=rctFrame->Bottom+
2 E F7 Q( X& F( }- q$ F4 S7 X abs(rctFrame->top);6 V, E2 ~; @- G7 o
rctFrame->Top=0;rctFrame->Left=0;</P>* }0 W% x" y- S, Q9 q+ Q
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,% a! S, ]! b6 e Y( ^
rctClient->Right,rctClient->Bottom);
m; I5 D5 h$ ]9 u+ _; ^ hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,* L3 k+ W/ f+ q* O7 }& @
rctFrame->Right,rctFrame->Bottom);1 x, c5 k. A; B. s. g# M; v5 T
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
1 o4 m& ?5 R# c2 P SetWindowRgn(Form1->Handle,hFrame,true);</P>
8 p0 k3 L. }4 @$ y8 v$ Z< >
! v9 T% }) Y/ C4 x5 ~+ V; J delete rctFrame;
7 c4 ~( ~& N4 L) b+ G delete rctClient;5 Z2 M% a1 [0 [+ s0 C' w2 p7 r0 x
delete lpTL,lpBR;</P>
9 ? R, x( a) U< >} </P> |
zan
|