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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。' r7 }* C/ r- [5 i' ~% {9 c
file://------------------------------------------------------------------------
# _* U$ W, F( J/ }<a>file://Unit1.h</A></P>0 \- U9 w) q& [1 q3 Y5 ~: V5 o
< >#ifndef Unit1H& W! N5 |9 Z' p; o: o
#define Unit1H
* [' g1 Z" E/ O& S, Z" Vfile://------------------------------------------------------------------------
( J) w8 u3 {, s0 `1 l9 v# K3 S#include <Classes.hpp>
0 Z7 F$ t5 {9 |" M% R2 F! ^#include <Controls.hpp>
7 B! B' `( R" L5 t7 B" j0 |8 v#include <StdCtrls.hpp>
: @% D3 A" o% J5 \2 x#include <Forms.hpp>
4 `3 q8 e% s: v2 d3 E. x( X#include <ExtCtrls.hpp>
+ S( p! q, } k9 \! T0 _5 A6 g# [#include <Graphics.hpp>- Z3 [& }* i0 z9 w4 y
#include <Menus.hpp>; T$ M$ x/ z8 Y' _4 \
#include <Dialogs.hpp>& g9 S& I6 a! d' u2 f
#include <ExtDlgs.hpp>5 W& P& d4 A8 o3 n2 Z
file://---------------------------------------------------------------------------5 M! T) v# p3 }# U9 @( z: v! z
class TForm1 : public TForm
2 n5 V; C, s6 `3 _. s{! b) y7 B* B; I9 Z! A# P
__published: // IDE-managed Components
% R' y# o! f/ O1 o TImage *Image1;
; ~1 E3 [' y: W- Q TPopupMenu *PopupMenu1;8 L8 M; o( M. O1 y$ n; Z( U* b0 c
TMenuItem *Exit1;
, r3 E4 ]0 E* \) z7 v TOpenPictureDialog *OpenPictureDialog1;. {, M( j7 ~. M- d0 |
TMenuItem *Open1;$ U3 P$ a6 {1 d5 W
void __fastcall Exit1Click(TObject *Sender);
! j2 T7 z+ h# _1 J! [( ]4 ^; ^! h void __fastcall FormCreate(TObject *Sender);
S( x' C6 @5 e void __fastcall Image1MouseDown(TObject *Sender,
6 n1 w; N9 q+ i2 d$ s7 ]+ j& C, _ TMouseButton Button, TShiftState Shift, int X, int Y);
/ x* t9 L+ Z* i. a, y void __fastcall Open1Click(TObject *Sender);
7 l6 S' B. T$ _5 W7 z2 Uprivate: // User declarations% K/ _! x/ l% r
void __fastcall BmpToRgn();
' n4 P9 n( K3 {: Jpublic: // User declarations
9 b0 U% ?3 v8 }' f6 I __fastcall TForm1(TComponent* Owner);
) b8 x1 c1 Q( @; d9 m2 I. y- I& v+ R7 n};! W: |& G+ P, b& f! ^) [8 m
file://---------------------------------------------------------------------------1 A* N' z9 d& P/ c/ P
extern PACKAGE TForm1 *Form1;- D; ?! b! S! x
file://---------------------------------------------------------------------------9 ^$ l( e, F% B5 r
#endif</P>
8 @* \ F0 m7 w& h; O) D< >
9 Z$ U# y* V# |9 {<a>file://unit1.cpp</A>
4 n* n, Y8 {( J+ \' I% xfile://---------------------------------------------------------------------------</P>+ I# B/ T6 W. b4 J0 U+ w
< >#include <vcl.h>! @+ \( m. Y! O! x9 [
#pragma hdrstop</P>, C: ]& Z8 Y& }
< >#include "Unit1.h"
. Z, [ ~7 {- Q7 |. l6 U' E1 @, l9 N5 kfile://---------------------------------------------------------------------------
' P+ {' m ^9 r#pragma package(smart_init)9 R/ y% T0 Z% [+ y' k
#pragma resource "*.dfm"; d( v, k7 o- Y8 i/ e5 v
TForm1 *Form1;
" C! D" a; k) P: n) A' V& ofile://---------------------------------------------------------------------------* O, t& ], @9 z/ b, d& H f
__fastcall TForm1::TForm1(TComponent* Owner); Q) M' X! }/ k# o
: TForm(Owner)
+ z9 L: g, T. E( {& @" d! g6 }& j{
4 B1 u+ y: S) p: i$ @/ z* y1 Z& S}
. b0 P, Y: a8 D# v6 Xfile://---------------------------------------------------------------------------. Q+ g6 w. M+ R9 r5 `, ?" Y" u
void __fastcall TForm1::Exit1Click(TObject *Sender)
- U& o% z. L# r; p{
( |) B4 T1 y( e$ ?5 Q Close();# J* c9 z$ u& f
}
" {- A& B5 H) O+ ^/ Lfile://---------------------------------------------------------------------------</P>0 X7 ^9 {- `) @) h' o5 f
< >void __fastcall TForm1::FormCreate(TObject *Sender)6 W1 C9 Y# b3 X6 D3 X
{</P>7 L9 s' Y* o( d" V/ Q
< >BmpToRgn();- C1 |6 o" Q+ t( ]5 S
}
P# A4 C' G( b# d# |4 Hfile://---------------------------------------------------------------------------</P>1 F" A/ Z3 p9 \9 j# v3 D
< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,
V6 E1 U5 c- j( i TMouseButton Button, TShiftState Shift, int X, int Y)3 G+ v! c1 X/ @# ?& k2 N
{' H: V* B& h0 F7 r, r& A
if(Button == mbLeft)
% u% y( x% C9 a% X- G {
; c( B9 Y$ O& L4 o6 Y$ R" N; X+ @ ReleaseCapture();' I/ Q1 Y% e- H& D6 p5 g
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);6 i8 H A; p- e+ t& _. E
}# e3 J ^' D# @/ \/ T
}
. z) X+ s# f$ T, Q+ ~1 {file://---------------------------------------------------------------------------
3 L1 x# g# n+ Q% ^6 ivoid __fastcall TForm1::BmpToRgn()$ J1 Z0 R! y: Z/ g; J1 O( [ r
{
! }1 j6 |; B& E& k! w; \4 I" c* v; IImage1->AutoSize=true;9 w; w! p: w# y' r
Form1->AutoSize=true;
& ~/ d$ q# \5 A, AForm1->BorderStyle=bsNone;
# P1 b( g/ `% XTColor ColorKey=Image1->Canvas-> ixels[0][0];
6 M: Z+ n# N; g: R/ R- W: fint x,y;
- B0 R& i) l% {4 x/ y9 M; dint l,r;/ c; `, L! M3 I, N
POINT *a;
! t4 ~1 H( f! o4 Hbool lb,rb;' | h3 W3 Q. t4 T7 O6 P1 i
HRGN WndRgn,TempRgn;</P>
; E- I! u" z5 c9 Q- V; X< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)
* L& E5 ?# z1 N$ e8 x{4 T8 E9 a" G+ D, ^4 \" Y( v8 m
ShowMessage("申请内存失败!");
' q1 D# |( A- j' e) U exit(0);
8 X6 f- E' o/ Q1 i# d}</P>. l" \. r, F7 U! w4 m
< >l=0;r=Image1->Height*2-1;
# S D; Z6 L/ rWndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>
: u2 L/ x- j* O! \: \% V< >for(y=0;y<Image1->Height;y++)/ B6 v+ L& h& k7 r
{
! g8 s; ^4 l( d+ E) p" g lb=true;- S9 g% T0 Y* Q
for(x=0;x<Image1->Width+1;x++)
2 t6 U/ r& e: r if(Image1->Canvas-> ixels[x][y]!=ColorKey)2 I: u/ B) T$ e* B4 V, Q
{
. g' m5 R$ n8 J2 S- L; v a[l].x=x;0 V8 Z2 L; k' m+ h9 n
a[l].y=y;. |% e# N3 b) x7 g
lb=false;
( U5 A& |- B7 G5 q- a break;! _& w$ r( s* i0 z' d
}</P>5 ^ g9 r I. U. k! m0 e; R
< > if(lb) a[l]=a[l-1];
% k( n& r, Z$ K l++;
1 h' {, ]* n0 S$ B& W rb=true;</P>
/ y: x) T; v0 I; ^, E< > for(x=Image1->Width;x>=0;x--)
2 A: d" E6 |" o. ]) N+ }9 w if(Image1->Canvas-> ixels[x][y]!=ColorKey)
: t" W9 d# g3 e3 ` {
2 Y, r. G. E) j2 ]4 R) Y a[r].x=x;
. n6 S6 G \6 Y) z- X+ E a[r].y=y;4 c4 |+ u9 H! v2 T% \* T) U* \
rb=false;4 ~* j1 C1 [$ v& W! }
break;
2 H5 D$ A! M: F% U$ f2 q5 t+ e0 b }
; V- p' h/ W/ U% o$ z if(rb) a[r]=a[r+1];
9 q& u I" G7 _5 Y1 }; f: g( u8 h0 d) p r--;
; U! t& r# P( _- l3 f2 w3 k$ z}</P>
( D2 U) I6 F. L: L: }< >r=Image1->Height*2-1;. q8 Z3 i0 u% P" u8 z& d- L
for(y=0;y<Image1->Height-1;y++)
$ I& c/ t+ Z) a, P" J{1 u6 U0 W7 n. U7 \1 M; ~
for(x=a[y].x;x<=a[r].x;x++) ~ R ~ X* d e/ k8 z6 u
if(Image1->Canvas-> ixels[x][y]==ColorKey)
! T7 x* U6 m8 J6 r! V) _ {
% G7 c! D: N2 f8 s' P4 f9 n TempRgn=CreateRectRgn(x,y,x+1,y+1);" U& f6 _* a1 Z' H7 S/ N9 H& u
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
0 [/ F/ O; J3 Z5 x DeleteObject(TempRgn);
$ V5 g# `0 }& O! d( @6 D% B' {4 D }
; s1 T' `4 N( S+ Y r--;
4 n: B" r0 h' V% T+ }, o}</P>$ S; ~# g! j1 w- u
< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);
9 H v$ }4 V* e5 HTempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);; N3 M5 b9 C% h& L
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);8 v* }2 n8 B. }# `4 O' U& ^# x
DeleteObject(TempRgn);
$ A# ^8 w$ @+ w1 qdelete a;
0 ^9 z' A/ r0 ZSetWindowRgn(Handle,WndRgn,true);
. V0 P8 q2 D3 k" S, `$ i" C}</P>& x3 ^0 y5 |4 s% U2 S- H
< >void __fastcall TForm1::Open1Click(TObject *Sender)6 O7 x! p* F; f( a( X
{
/ E. M0 ]9 M" E7 O1 ? if(OpenPictureDialog1->Execute()). o8 {# I& N1 a7 y" e& o' p
{2 i2 |! Q# `: U* U+ g- B4 S
Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);
* F% x+ }. v& B BmpToRgn();
& p2 U! W" {, }. o6 @4 L8 K }
' r2 v. `! v: O$ J! b/ L) J}/ Q N5 S+ y; r3 K# Y
file://---------------------------------------------------------------------------</P>
$ X. _9 W) K. v; T$ i: g! ]; `5 G< >对啦,图片的背景色要相同。/ a" T) Z8 f' h
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>( w* J; e3 G( |$ j9 x8 s1 @
< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------
7 V$ s3 Y% g/ B( K" N8 Yvoid __fastcall TForm1::FormPaint(省略)! x" m4 c+ ]6 M6 ~; c1 A
{
m$ b7 O: a( k2 w/ X* f- M AnsiString ww;int bb;
9 @- G& F! z( c7 M; f" a ww=AnsiString(Form1->Width/256);
8 ]5 |8 N% w. _( W* T( b TRect MyRect;* l: o( b! Y% B7 L
MyRect.left=0;) {8 n# q9 A9 q( |2 i) i# Q
for(bb=0;bb<255;bb++)) @6 m/ i5 @' J! z2 { O3 X( ?, j) |
{
0 f5 K0 n% ]6 O Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);3 q! P% X2 J6 n! X9 [# n3 X
MyRect.top=bb*(ww.ToInt());
2 z; P5 S* \, |, n MyRect.right=Form1->Width;
9 v3 e3 }3 L9 R" h9 `& y+ Y MyRect.bottom=(bb+1)*(ww.ToInt());" b& B- k) d2 _& Q8 i
Form1->Canvas->FillRect(MyRect);" B/ o7 m* O2 C. E
}
3 G1 `4 T# K( x$ ?( f+ p# s* a0 q} </P>
; d; |# H3 G& Q. a< >file://---------------透明窗体--------------------------
% g4 }+ J3 P; Z0 ~void __fastcall TForm1::Button1Click(TObject *Sender)
7 f) G* j9 B# G8 L; Y2 _{5 g" t- g# h4 O9 v) @- r3 x' y( W+ \
TRect *rctClient,*rctFrame;
6 r! }6 l3 _% E+ ] HRGN hClient,hFrame;% Z3 i8 E) h! A/ F, w7 N0 P5 |5 m
POINT *lpTL,*lpBR;
$ n, E( A% ~7 @8 ? rctFrame=new TRect;6 l( j) m" \6 f9 g1 t C
rctClient=new TRect;
1 @! R& ~- h/ b R lpTL=new POINT;
* j5 H8 w0 N% f0 Z! ` lpBR=new POINT;
, l6 T/ Q9 S% _0 Q# b GetWindowRect(Form1->Handle,rctFrame);* N# R( H0 X& ], g
::GetClientRect(Form1->Handle,rctClient);& B" K! `. {1 y; g6 ^
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;* [; y: Q) t% v2 d0 _
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
* h' Q: W" V7 F0 | S+ K' C< > ::ScreenToClient(Form1->Handle,lpTL);
* U5 k) f) Y3 F: u: \ ::ScreenToClient(Form1->Handle,lpBR);
. u3 _& H1 m" @; l" G5 ?- v" P rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;
" g+ f1 M' H0 w0 t, c- V rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
+ P% M7 s }* A4 p$ Z- H rctClient->Left=abs(rctFrame->Left);9 h: K/ c% R2 |/ E% f$ v i
rctClient->Top=abs(rctFrame->Top);
% g0 @% X" R5 N& p- g" T7 n" Z, {4 U. ~ rctClient->Right=rctClient->Right+7 h+ O6 J* d4 v l
abs(rctFrame->Left);
) I/ t3 l; [. D- f, U, ^ rctClient->Bottom=rctClient->Bottom+
I6 T1 k2 i5 h0 W* _ abs(rctFrame->Top);: d9 i/ n, P: ?9 _
rctFrame->Right=rctFrame->Right+
4 Q0 n! i) Q7 p" e$ F+ l2 I abs(rctFrame->Left);3 k# m- m& m& e) r9 W
rctFrame->Bottom=rctFrame->Bottom+; A% Q( y% f1 h3 W6 j+ c
abs(rctFrame->top);( ]: ^: V+ C9 G
rctFrame->Top=0;rctFrame->Left=0;</P>: \9 {2 Y5 J; n; t4 p
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
1 J8 C' H$ b5 r7 n, q. y6 h rctClient->Right,rctClient->Bottom);
! U) \' ^0 B% |6 \7 h" x hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,+ c8 y; x7 J' P2 G. s2 a8 [
rctFrame->Right,rctFrame->Bottom);1 ]2 w$ B2 {- s3 D' u
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
5 d2 S' Z1 M! }5 t SetWindowRgn(Form1->Handle,hFrame,true);</P>
/ \$ k3 `- w% A$ N- B. E% ]< >1 I# C. X0 h: j
delete rctFrame;7 ^5 N+ a( Q& {4 m3 ~
delete rctClient;! d; J0 j+ Z: m# R9 F( q0 ~
delete lpTL,lpBR;</P>! f! d m1 h0 a+ U' C1 v& F' ^/ c
< >} </P> |
zan
|