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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。. M3 b+ O7 A9 l9 Y, e* v# p
file://------------------------------------------------------------------------
. H. \2 c- W- d( k<a>file://Unit1.h</A></P>& ]" C& K6 J8 S5 A" E
< >#ifndef Unit1H: k# Z- W9 e) x7 w0 L: P
#define Unit1H$ q5 ]- z" S" f9 Y
file://------------------------------------------------------------------------& @2 V% z+ Z" g5 G3 x0 c: e
#include <Classes.hpp>
' U1 y* l# l* A1 p* u& F4 A# [#include <Controls.hpp>
% {* v* x1 e9 j: d#include <StdCtrls.hpp>
- H. m0 y0 V7 i: D" D#include <Forms.hpp>7 U: v& L) y$ c* e+ D( ~
#include <ExtCtrls.hpp>
$ O% `! D" K( v+ X1 b( R3 Y/ A#include <Graphics.hpp>" R' P5 S7 \8 w- g |% |! |
#include <Menus.hpp>* [/ X! m! U3 F, B* a1 g" q
#include <Dialogs.hpp>: p! \" T9 N; U j( G
#include <ExtDlgs.hpp>9 O5 c; l5 o! z
file://---------------------------------------------------------------------------$ \8 M: O+ O# {1 t; N
class TForm1 : public TForm) }2 k. I# y1 a
{% N) B0 q0 B4 E- @# e- a
__published: // IDE-managed Components
6 K- N8 y6 t5 G7 F+ _ TImage *Image1;4 m2 h5 B, q2 M+ J. J
TPopupMenu *PopupMenu1;; K; D% Y2 x8 l# D% ~0 ], E
TMenuItem *Exit1;
, N' B" E, A/ M+ j0 g TOpenPictureDialog *OpenPictureDialog1;
% W0 j7 K, W# f TMenuItem *Open1;7 I3 l+ C$ j7 w* t& f1 w" l8 h
void __fastcall Exit1Click(TObject *Sender);
6 `- _# N0 M* A; m3 z z( R5 N, j void __fastcall FormCreate(TObject *Sender);
+ H5 ~8 Q+ f7 L9 Y8 f" E! I6 ` void __fastcall Image1MouseDown(TObject *Sender,/ k f0 D3 z6 B# P" y
TMouseButton Button, TShiftState Shift, int X, int Y);
0 i" i3 H" ]/ _: J" B' o) \ void __fastcall Open1Click(TObject *Sender);
$ f! ~+ ] o0 ~& m' b! @/ n# Qprivate: // User declarations/ R. E5 E; K1 q
void __fastcall BmpToRgn();! A- r, T0 t& N/ X
public: // User declarations
' g. N5 P/ g$ w: q! p% |6 X; l% l0 ? __fastcall TForm1(TComponent* Owner);
: ]3 Q( \/ A; W5 I% R' ~* k};9 P& Z. S! B' P, r
file://---------------------------------------------------------------------------% X) \' M* J% |) j& I
extern PACKAGE TForm1 *Form1;
: k! G0 [4 E/ j# X% Jfile://---------------------------------------------------------------------------
j! \/ E z5 v#endif</P>
+ f2 E+ t$ Z% y" U' ]' ?< >
6 q" e" k Z' m6 }2 _" E& g8 ?<a>file://unit1.cpp</A>" y0 T. B5 c" o7 t- O5 X
file://---------------------------------------------------------------------------</P> J+ y; G) M9 J) t2 _" a
< >#include <vcl.h>
/ w; |: `4 s* N! D#pragma hdrstop</P>; v7 p; C5 b0 F; ~( _
< >#include "Unit1.h"% X6 ?* L# |9 t# e1 k
file://---------------------------------------------------------------------------
( O9 g+ v9 K, R% `3 h#pragma package(smart_init)
( {7 G6 u, b) w4 F( U; S& ?1 \7 q#pragma resource "*.dfm"
+ ]& C8 f. g' j8 a5 \4 _1 g' M) M5 i' YTForm1 *Form1;
1 a I$ T: U) [* W: }* D# Ofile://---------------------------------------------------------------------------
( k1 n% R* l+ I3 ~9 \6 u__fastcall TForm1::TForm1(TComponent* Owner)2 k9 @0 C+ j5 }6 E$ T6 N
: TForm(Owner)
: a) p8 q, x+ ]{
' A( M" l7 O9 b}
$ D8 E7 P1 p6 _- b- [6 nfile://---------------------------------------------------------------------------
0 V+ |' E, X. mvoid __fastcall TForm1::Exit1Click(TObject *Sender)
9 T! F3 W9 w" A{
9 a! g; F( _0 ^# o3 o5 Z$ _, T2 I Close();8 m% I- h* E' F4 J- V! ~) j# b
}
4 O7 S. H, Y( W: b, _) y+ Nfile://---------------------------------------------------------------------------</P>
+ J9 i4 }6 f* t, s! Y: c' {5 _: ~4 t, b< >void __fastcall TForm1::FormCreate(TObject *Sender)4 I9 m- Z/ C! u# [! j
{</P>
# _- g1 _' r. e+ n1 \1 J3 K< >BmpToRgn();. x A) L0 a4 V" R- y
}
4 f4 i i2 ~- C4 Z. ^2 }# vfile://---------------------------------------------------------------------------</P>
, g b7 }7 f# [+ G9 G9 l< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,: I2 W- r; C. p- @4 K$ V2 ^
TMouseButton Button, TShiftState Shift, int X, int Y)
9 k4 |, E( |/ W/ {5 X{
4 j' N! F, N6 C; Cif(Button == mbLeft)& }: }. I' a) ]1 a
{
, C7 @' d" q$ W ReleaseCapture();
# i* G5 t3 }8 u& y8 M$ g Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
3 e0 K5 P9 C# s3 K }
5 n& e; G! B2 Y- ^$ J/ u# m}! p3 h/ I+ ~# z! u9 B# e
file://---------------------------------------------------------------------------
" Z1 m# A5 |5 Q2 B& @void __fastcall TForm1::BmpToRgn()6 J/ q& B/ ?6 M0 P/ D$ t0 l& w
{
: x# k2 [/ i. m- F# DImage1->AutoSize=true;, ?( |' A7 t" \: S3 @; H: N
Form1->AutoSize=true;6 p, T# T4 k: s% z* L
Form1->BorderStyle=bsNone;
/ v, f9 p9 f. N6 Z% k! i" J4 KTColor ColorKey=Image1->Canvas-> ixels[0][0];3 k0 S2 K8 q- C
int x,y;- w" G3 p* i! f$ d4 L( U) s R
int l,r;
( Q& I& \6 t6 L2 z% T, y9 A# \POINT *a;
% z* Z' v8 R" K$ m# j; obool lb,rb;- }9 j, l7 K/ C7 a+ H
HRGN WndRgn,TempRgn;</P>
9 T5 Z' y; p# q5 @< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL), U' Q9 D7 _0 J% J0 \
{
7 d9 E4 z% b @5 W/ J ShowMessage("申请内存失败!");/ R$ F5 D, U% h% f
exit(0);* `, c8 H% R" l. F% q$ F7 V
}</P>
8 c: B2 s' I6 x& z' b0 z< >l=0;r=Image1->Height*2-1;5 ^) x' L; d: j, _
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>: k( J) M6 l F" D
< >for(y=0;y<Image1->Height;y++)
' E8 U L' g' ?2 L# ?{
! K$ `0 n" {8 p, k& C U5 U' Y/ g lb=true;
. k% ` S) ~3 H3 U( j' A for(x=0;x<Image1->Width+1;x++)
1 b1 M9 k8 N9 ~ if(Image1->Canvas-> ixels[x][y]!=ColorKey)
! t1 t% Z" y& B7 R- q5 v {
& I1 w* k; b! M$ g! w a[l].x=x;: G' o: d, e) u/ v
a[l].y=y;
7 i: u( T" k! c lb=false;
# X5 w0 y; z' _! P, y break;. U) H/ o- K3 r4 m7 ^) z9 b
}</P>0 _; d' `" B: ^: f5 e) V
< > if(lb) a[l]=a[l-1];
9 _$ F6 d& m6 U* k3 q) m n l++;# g- Z4 l7 t$ X) _" Z+ {8 Z% q/ f
rb=true;</P>! x+ r: ^& O( W2 H/ s- O
< > for(x=Image1->Width;x>=0;x--)( X3 ^' m+ K. j. W
if(Image1->Canvas-> ixels[x][y]!=ColorKey)
7 J$ T& q) O2 t" H" Y {
. P" N5 q7 o$ K. N# D$ ^6 ~ a[r].x=x;- i: x* t5 n. u7 U
a[r].y=y;
/ v# z1 q/ [ Q: s: p% N3 J/ y+ k rb=false;
' }$ D. R% F8 C break;
3 K) J; O! U7 G4 n }
( B+ d$ {# |1 g if(rb) a[r]=a[r+1];$ ^* D# g* X: X! C. z
r--;
: E l8 ^ T# _6 s' ]1 }3 u& v}</P>
" V8 e% B+ o4 [" t8 X7 H) s< >r=Image1->Height*2-1;
' z3 p) W% {1 R$ z# D: M# z' Gfor(y=0;y<Image1->Height-1;y++)
: L! ]8 O, |; o" d. w) g9 ?{9 P* I2 c, A+ u$ r& R
for(x=a[y].x;x<=a[r].x;x++)
4 D9 ?, ?! l. x- l( b" I' O5 `- H0 P if(Image1->Canvas-> ixels[x][y]==ColorKey)
/ P3 [9 O- B2 l" ]/ Y/ [ {
, W( l5 ~( l, h) X0 |" B. r$ z TempRgn=CreateRectRgn(x,y,x+1,y+1);" M" S2 T5 a, [) }/ {" f
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);1 ~' U, C3 i) U' s2 G+ k! r, }9 |
DeleteObject(TempRgn);% Q5 U& l+ H0 j( x( f3 c
}2 l P. t" h; v9 F( e0 X2 g# v
r--;) A- p6 v& N; J- F
}</P>; C7 f X, O0 C7 p: ]. s9 u1 r/ D8 I
< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);( I; X4 F& Z( L4 B8 V o5 H1 v* @
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
. c/ K; ~8 [4 {6 ~3 M; CCombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);8 o+ b) a! }- L
DeleteObject(TempRgn);
8 O$ I2 u4 T/ d$ k( |6 ^( `delete a;
# d' c! S6 b XSetWindowRgn(Handle,WndRgn,true);
$ P5 m9 R6 j; V1 ]}</P>: D! c8 h* w6 o" V+ n8 n; W
< >void __fastcall TForm1::Open1Click(TObject *Sender)$ i. t" i4 X6 m7 |3 j! w7 T* C
{; u+ ]. p, V% ^' d5 I1 U( _$ s, n5 P
if(OpenPictureDialog1->Execute())& N- ]2 y3 n$ N5 b
{
0 Z2 i& }/ J+ U+ R4 e# d Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);
" {, q! W" x; t4 q' K BmpToRgn();
- V, D! ^* e! v7 S9 @ }6 n8 J. `- h# c. p- p& U
}+ ~ A" P( R! q1 `7 C: J
file://---------------------------------------------------------------------------</P>; T' _5 l- Q0 q4 O4 Y& ]" y
< >对啦,图片的背景色要相同。5 L% a4 A* W" |5 v6 B2 f( C3 O
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
. w3 w( o& m5 S# R2 b& s. E< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------4 z- p6 t1 X+ A% b1 i8 |" K
void __fastcall TForm1::FormPaint(省略)
; W6 r& Y$ h+ j8 Z4 \, z$ M{; H: C/ K( N0 z. D1 o
AnsiString ww;int bb;8 R- h, x+ v- Q
ww=AnsiString(Form1->Width/256);! `' V' @2 m: \) {/ a
TRect MyRect;
& J( h. b' s* N) V MyRect.left=0;( o6 ~% } s: a; T1 K' w% ~( M
for(bb=0;bb<255;bb++)! K4 K L0 D d1 l& @5 |* E# {! O
{
) o2 w8 V* w8 T; ?( x! X Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);6 X% O% E' n! u8 a$ {
MyRect.top=bb*(ww.ToInt());4 B1 }8 N0 P: H, t y8 `8 k
MyRect.right=Form1->Width;
3 `$ e b3 _" {3 ~ MyRect.bottom=(bb+1)*(ww.ToInt());
: Z' p/ P( }7 q6 E8 l+ N' M) ]. b Form1->Canvas->FillRect(MyRect);$ [ b/ [) u3 c, z8 h5 l
}
6 m8 D8 {1 E9 w' n) @4 ]/ l} </P>
B) b" B& y# q7 A! _. O< >file://---------------透明窗体--------------------------
) n. r& ~# G2 A5 o& yvoid __fastcall TForm1::Button1Click(TObject *Sender)
/ h4 B d( U# C2 L8 j{
- m" l; L# j c( ~ TRect *rctClient,*rctFrame;# o$ P' W8 D& y3 W
HRGN hClient,hFrame;
2 S: @7 X+ K4 Y% s7 X POINT *lpTL,*lpBR;7 W( x& l" r# g' L0 w! J
rctFrame=new TRect;9 r( }& |- }$ G
rctClient=new TRect;) y6 R: V& ]. n, v
lpTL=new POINT;5 q$ b8 K4 R6 Q W# ~2 k
lpBR=new POINT;
+ W2 k6 i( V! t GetWindowRect(Form1->Handle,rctFrame);
8 x+ r5 J2 X+ i$ D0 C ::GetClientRect(Form1->Handle,rctClient);2 p1 ~9 i& t5 e+ v
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;1 }9 v+ b" Z" S1 _+ ^ o9 T' ]
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>! s. _% \0 f- G; q
< > ::ScreenToClient(Form1->Handle,lpTL);
S5 P, _" {. O6 T ::ScreenToClient(Form1->Handle,lpBR);
9 {: C+ ]* w* \3 X8 F" h) A rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;" a* N5 H6 |# ^# I4 }, _/ b
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;9 o# S4 N' `1 Y0 N6 l! F. [7 ]
rctClient->Left=abs(rctFrame->Left);
) @' U; S4 X0 I# J0 E3 w7 B rctClient->Top=abs(rctFrame->Top);
# C/ q7 K5 W9 i3 w b3 E rctClient->Right=rctClient->Right+
6 f, G7 j- R7 M9 Z& k$ o abs(rctFrame->Left);
& N6 v- `) T2 E- L/ g+ P3 u rctClient->Bottom=rctClient->Bottom+6 r d+ q' v& A5 M6 ]/ O: y0 K9 _
abs(rctFrame->Top);1 B( N6 }, M9 [' C! X6 `% ~
rctFrame->Right=rctFrame->Right+
! L* e1 v s9 z( q/ O" ` abs(rctFrame->Left);+ [+ }6 J) Z# J% O M! O
rctFrame->Bottom=rctFrame->Bottom+1 {9 q( ^: r' o0 w+ x
abs(rctFrame->top);( j% K) x5 w* e& W7 g3 l3 n
rctFrame->Top=0;rctFrame->Left=0;</P>( @: T; M% A5 d
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
4 b2 H% [/ D/ [3 U4 T* z rctClient->Right,rctClient->Bottom);/ R' h6 \9 Y. x
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,
0 E0 M. F# s. g; }" z6 l8 W5 P rctFrame->Right,rctFrame->Bottom);" H; N4 [; N7 n) n, D3 V( _: C
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);' ]3 z8 ?% a. F) A) h, G3 I& I! }
SetWindowRgn(Form1->Handle,hFrame,true);</P>
) a7 z2 c5 j' Q1 H* R< >
; W5 H; S0 t5 ^1 c6 c/ a delete rctFrame;
2 C, Z$ f" m* _8 D/ ?; r delete rctClient;
" F9 ]6 G; ~ O" k! Q+ P, Q delete lpTL,lpBR;</P>+ {4 u! {3 P: i, `" W v3 z/ T
< >} </P> |
zan
|