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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。
% Z! B8 x1 W, `( Q- q' ufile://------------------------------------------------------------------------
' {/ y% ?) Z- c S9 R8 {! R<a>file://Unit1.h</A></P>$ f0 i: ]9 Z. D/ B! Y3 X
< >#ifndef Unit1H
0 Q5 X7 G7 t B& W* I3 B#define Unit1H8 L/ Z1 @/ u0 o% ^5 R3 [
file://------------------------------------------------------------------------2 I. B" Q9 R9 J; R' w' n* L8 t
#include <Classes.hpp>2 T' n D* b! f/ C
#include <Controls.hpp>
6 P: P( w! A, Y# k#include <StdCtrls.hpp>9 r: l' O4 ~+ Q
#include <Forms.hpp>
+ P3 ?8 b) {- Q+ H7 _#include <ExtCtrls.hpp>
0 u2 |" t1 L7 x/ L#include <Graphics.hpp>3 R( `6 |& I& X# I$ w
#include <Menus.hpp>" i1 u0 s P5 V# V
#include <Dialogs.hpp>
' d8 z$ b8 ?3 j% o) w7 g8 W1 X; V#include <ExtDlgs.hpp>! B1 G' Z# p- c9 E9 j
file://---------------------------------------------------------------------------9 j, v( X6 X1 \+ N6 A
class TForm1 : public TForm: g. H- J2 @# ~, L6 {# Y& E @* f
{) @$ t- P7 q! _) p; K3 X& W
__published: // IDE-managed Components
0 ~0 j7 L" M. Y% F TImage *Image1;
! a/ t8 ?# M& t! {& p* Z" C TPopupMenu *PopupMenu1;
- t% r& c4 C# N, |" h7 v0 t+ v" K TMenuItem *Exit1;
; f% X/ l5 T# K* j0 w TOpenPictureDialog *OpenPictureDialog1;
8 n# W: [9 q5 i' J2 _! L" b TMenuItem *Open1;
5 D+ z+ ?' Z" {( z! H F1 q6 j void __fastcall Exit1Click(TObject *Sender);
. c$ }9 _$ F' {5 m4 ~4 ? Q; K void __fastcall FormCreate(TObject *Sender);
3 d8 d* g: _- Z# i% T0 X* R void __fastcall Image1MouseDown(TObject *Sender,0 M4 P" j- X( w: {3 Q! X& K
TMouseButton Button, TShiftState Shift, int X, int Y); S4 y. t, ]! f. d
void __fastcall Open1Click(TObject *Sender);
' f0 ^5 `2 a g3 H' q" f! fprivate: // User declarations/ l2 K' }+ `8 _* Q9 \2 x" i- B
void __fastcall BmpToRgn(); N8 V. x6 f1 p
public: // User declarations
" Q& b' I! g! J3 [ __fastcall TForm1(TComponent* Owner);1 ]! }/ r% w3 R1 f" q1 z2 w' P
};
2 Z" g) J, L n0 j/ h+ g3 a$ pfile://---------------------------------------------------------------------------5 l9 p& s, ?. L0 c6 z
extern PACKAGE TForm1 *Form1;
+ K. N% n4 y2 G% w, F+ z- Pfile://---------------------------------------------------------------------------4 S' B# O# f- S- |0 U W; a
#endif</P>2 {; f& H+ v' Q" e# |, Y3 _
< >9 x# V9 G. i$ ~! I8 M) o7 C3 T
<a>file://unit1.cpp</A>
v/ E' @. {2 ?" k7 E3 k" U# Jfile://---------------------------------------------------------------------------</P>
8 d9 X: M6 S7 ?4 [; Z- X# G) V0 G* |< >#include <vcl.h>1 B G; F9 y% Z" B
#pragma hdrstop</P>& r2 f) A2 z0 F" n' Z
< >#include "Unit1.h"
- n5 g3 l! I/ wfile://---------------------------------------------------------------------------" b$ O: L! ]- o+ \: `0 M9 \$ [* N" a
#pragma package(smart_init)
7 L8 m2 `6 t4 O( C# `& F#pragma resource "*.dfm"- k5 m5 ?, ]; ^
TForm1 *Form1;$ \& J6 `* ]* J( @! P \
file://---------------------------------------------------------------------------; B# U M# H+ A/ B0 n" |0 J
__fastcall TForm1::TForm1(TComponent* Owner)
" E+ N7 V& V! M; X/ R5 @- A i : TForm(Owner)( M6 R9 O" F; g' R' E& x5 Y5 X7 ^
{/ n2 j1 N. q; j m
}
! _* ~% q _6 d9 u) r7 F4 qfile://---------------------------------------------------------------------------/ `* `: S. |5 I- o
void __fastcall TForm1::Exit1Click(TObject *Sender), i/ z: @5 D$ G& E* ?: \- _
{
5 u5 u% i, I) d5 ~ Close();( P* T" k! ~% r: a3 o( r2 h* P2 U* h
}8 x! p$ [9 I8 M
file://---------------------------------------------------------------------------</P>- M% z6 j \4 i; }7 R
< >void __fastcall TForm1::FormCreate(TObject *Sender) ^! t. r1 C1 R. m2 A
{</P>
' n/ O$ j2 C/ R% P/ Q: i< >BmpToRgn();; k) [; O8 u( B
}8 E" s% `" M# @( Z% h4 k, f# \
file://---------------------------------------------------------------------------</P>6 u+ O8 s0 |! o+ i! l
< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,
5 I% Q! x3 l9 O4 |; Q. ^ TMouseButton Button, TShiftState Shift, int X, int Y)
4 M: T' M6 [, H4 S3 v7 n q" L% @{- [0 Z8 g+ w5 B, k$ F& @
if(Button == mbLeft)* ?2 T# e& d7 n
{
) a( {, U9 i! Q1 ~* ~ ReleaseCapture();
4 r% `. i6 h& s# c0 s0 V Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
; N" s: P& O! c( g% ~ }* T! G8 O) b' e( Y+ M
}
- P7 a' k. g7 B3 c0 f; afile://---------------------------------------------------------------------------1 X# Z1 T) p9 X- R7 v3 F) X
void __fastcall TForm1::BmpToRgn()1 g) k# b) N% ^; Z
{
9 y5 t. u0 y2 O, ~6 m: D8 l0 w: nImage1->AutoSize=true;2 C& |8 ~! c6 B% e- E
Form1->AutoSize=true;
; d2 {$ B" a" o; h) LForm1->BorderStyle=bsNone;
# n) z4 u3 A1 U0 rTColor ColorKey=Image1->Canvas-> ixels[0][0];; e$ |6 G( K$ B/ f7 l; J6 `% G
int x,y;6 j, v% Z* g9 Z* A) T* f8 o
int l,r;6 m6 M! I7 G0 V" Q7 ?, h+ E
POINT *a;
* U; B+ k d8 Xbool lb,rb;- A1 _+ @( k- e1 { G, e
HRGN WndRgn,TempRgn;</P>0 @ _/ H {& ^; {
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)4 K: f% \! @" @) P2 T5 A# J
{! X2 d6 U1 C! Z
ShowMessage("申请内存失败!");
; r2 `9 ]0 t0 E# }. \& Y* Y exit(0);
' x3 ^$ ~) a P& F# \0 u/ t/ X}</P>
5 R8 X2 `9 g% K; ~5 Z% K0 f< >l=0;r=Image1->Height*2-1;
$ I9 I" J! v+ v& TWndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>8 A( {. U1 Q' v c9 d8 U
< >for(y=0;y<Image1->Height;y++)7 F2 h) H6 J0 w) @1 X$ ]" |) S
{2 p2 D( b/ @3 P0 E
lb=true;
6 n% B+ K! k. U/ d0 ?# G, u for(x=0;x<Image1->Width+1;x++)
2 u4 J3 h! N4 m& y; s& Z if(Image1->Canvas-> ixels[x][y]!=ColorKey)* J$ m4 B* u: p/ H
{* |; E" V9 }5 I) X* b5 O
a[l].x=x;
, }7 R( C0 D! J8 a! S a[l].y=y;
- G$ N' |* o q( L lb=false;
N9 e1 l7 ^# S break;
3 K( s: u& |* F, h- p/ u' } }</P>
" s h1 R4 Y& ]4 G6 ^< > if(lb) a[l]=a[l-1];
/ i- @0 W* H: [( K+ M+ S l++;
" v- B8 T3 N" v rb=true;</P>
" d- S* P6 u6 f- T4 x< > for(x=Image1->Width;x>=0;x--)
5 ]5 S' M7 a t if(Image1->Canvas-> ixels[x][y]!=ColorKey)
/ W( J1 h% k/ y7 } {; D( T( P3 ^% m
a[r].x=x;( M, H2 R( s9 n, {+ ^0 E$ v- r# x
a[r].y=y;2 {3 \3 y$ Q+ h: I: G) P% n, ^
rb=false;2 D5 Q$ T0 ^# d: x, X- E2 H
break;6 m- o/ x' [3 u& I( J7 p6 \
}* M) H5 m- b7 A+ a2 N6 S
if(rb) a[r]=a[r+1];; a9 |# }3 c& M, A2 x$ z& x
r--;! ]3 j$ ?6 i$ B4 ?
}</P>$ [- V% m2 h" E/ a1 o! Z& j5 v
< >r=Image1->Height*2-1;
! p1 @# b9 W9 A: Y7 Q( Lfor(y=0;y<Image1->Height-1;y++)
5 F+ q, s+ B" u. Y* O{/ N# N/ @/ Z- I0 y. `1 A( I
for(x=a[y].x;x<=a[r].x;x++)) \9 ]- H+ S5 H
if(Image1->Canvas-> ixels[x][y]==ColorKey)
6 M, f1 o6 P& {; |3 h$ c$ J" p {$ R* e* _8 c4 ^8 ]
TempRgn=CreateRectRgn(x,y,x+1,y+1);
4 X3 U4 E- y! w" a) q9 i, C CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);; Q2 s: P' E, l6 r
DeleteObject(TempRgn);
# _& e/ W: v$ d7 @% ^ }
' F0 G4 P" q& j1 j Y- Z r--;# E% j# U6 m# \- u7 N( D
}</P>
$ v" J- c6 M7 x7 L; }< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);
9 R* n% M- ~2 OTempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
5 N3 b1 _8 k. T2 yCombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
) D6 Y2 m8 l0 T# PDeleteObject(TempRgn);. u& E t$ i1 }) W
delete a;# |) V2 v% j# P/ Y& q4 x
SetWindowRgn(Handle,WndRgn,true);' Y! [; ] g# K3 j# p
}</P>
0 F; J+ K" E* y' m& o' ?( Y< >void __fastcall TForm1::Open1Click(TObject *Sender)3 @ f$ U1 \( a( M! _. H! n
{
$ R( N, M5 v0 I# ?% L' j if(OpenPictureDialog1->Execute())
$ I8 n6 j) ?- g1 } {
1 X2 f7 S9 S( A* {1 _. X7 P# |- f Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);! A% t0 Z) ]4 B' _
BmpToRgn();
0 r# Y! C' }% p7 j/ m- F }- m1 K% W( t% L
}
1 _) C2 W0 u6 afile://---------------------------------------------------------------------------</P>% a9 e3 L. g. K. C; H2 Y
< >对啦,图片的背景色要相同。
' o3 o, G7 O2 h$ I, _8 @' ^图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>$ V- o. h. Q8 h
< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------6 N6 Y: [; J3 E9 B% F
void __fastcall TForm1::FormPaint(省略)6 @9 ]$ q! K) f; Z ]. m3 z5 c" P
{) B9 V9 J7 }+ L
AnsiString ww;int bb;+ _9 Z; ?6 ]0 O7 ]% L- }
ww=AnsiString(Form1->Width/256);9 ]5 H% |" k, ^# {3 G
TRect MyRect;$ [' U) s6 ? f0 t# D8 V
MyRect.left=0;7 m" _, m3 p2 L8 @+ u; h
for(bb=0;bb<255;bb++)+ C* c! h* q) U, O- \
{
8 K4 G" u2 X" g" Q& f- k* h4 I2 t1 P Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);& V- `6 ]0 p/ Y, f1 f0 {* F4 m
MyRect.top=bb*(ww.ToInt());
$ X, d( ^6 H: x X, r6 E MyRect.right=Form1->Width;0 S) p; N& R7 h- [( m" E E S0 f8 U
MyRect.bottom=(bb+1)*(ww.ToInt());5 W) I* |+ c8 W& j4 C5 z& Q7 Z* e
Form1->Canvas->FillRect(MyRect);" [3 V8 E$ n; V& J
}
) \) F" o, X5 F q} </P>
/ `! l. i \; ^: w! B" g7 S* Y< >file://---------------透明窗体--------------------------
0 B( }$ E9 B! a. ~8 l" s$ d8 l2 qvoid __fastcall TForm1::Button1Click(TObject *Sender)
* C k% R- x4 ^! N f. E6 }" h{
6 D, |4 o3 l) G' l$ Z$ K* c TRect *rctClient,*rctFrame;
# R3 R) @- w5 \9 D6 l HRGN hClient,hFrame;$ p! r( Z' U5 c- } F9 C/ ^
POINT *lpTL,*lpBR;
. Y6 b1 [$ J! L' {3 z: R7 j. Z5 k8 Y rctFrame=new TRect;) y# k4 o! P/ Q& v2 u5 R
rctClient=new TRect;' e/ O f" T! t& l8 @; h5 w
lpTL=new POINT;- C9 b' Y* A& f. x3 X
lpBR=new POINT;
! F" e' }# R6 H9 f7 P# X: L" T0 h GetWindowRect(Form1->Handle,rctFrame);3 a+ X3 | d" p& P& @
::GetClientRect(Form1->Handle,rctClient);0 b' T7 @8 y w' Q: h; P
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
& m- ? F2 M. h. U+ }3 q$ P) a lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
$ G, [4 n- |6 b+ |. d% P) P h# f< > ::ScreenToClient(Form1->Handle,lpTL);) m# z8 G/ m0 v
::ScreenToClient(Form1->Handle,lpBR);
. U* x- M* I7 g+ N1 o/ R8 | rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;
9 O( a2 o3 M4 R; l rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;0 h; g. Y4 m0 t% u
rctClient->Left=abs(rctFrame->Left);% `: l1 j$ L, w/ E
rctClient->Top=abs(rctFrame->Top);
* C! q# o6 z( `. d1 p rctClient->Right=rctClient->Right+5 O' ?: o: a) c2 v3 r- U+ b3 B, K% d
abs(rctFrame->Left);. v% c( \7 a" u. c7 T
rctClient->Bottom=rctClient->Bottom++ Q' A- R4 z' t/ i5 I, ?% }2 V
abs(rctFrame->Top);" p* T- ]/ S' Y/ `# Z
rctFrame->Right=rctFrame->Right+
4 O4 _6 m" `4 G abs(rctFrame->Left);" {. g0 u2 H) r( t& h
rctFrame->Bottom=rctFrame->Bottom+7 k1 G$ P; S/ K9 D
abs(rctFrame->top);
7 C& E0 ^3 F2 U! A; i, T4 V rctFrame->Top=0;rctFrame->Left=0;</P>
^& L L: ~2 `6 ?' x1 ]. ~( {< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,# X3 ] A& Z4 p C/ T9 z8 s
rctClient->Right,rctClient->Bottom);
9 N- K. A; m. y f hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,6 V4 f: \# r: [' E1 |
rctFrame->Right,rctFrame->Bottom);3 |5 K- i$ s, u8 s' y
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);9 \! X* i8 e8 N3 I
SetWindowRgn(Form1->Handle,hFrame,true);</P>' A' Y% X6 Q& j$ H6 }9 _: U
< >
# d* l; N& M! h, i delete rctFrame;
2 y# I% R; \) b, J2 H3 U6 g delete rctClient;6 e9 }5 S- A1 |( y4 T
delete lpTL,lpBR;</P>
! {; @$ F1 r: c6 b. f" t< >} </P> |
zan
|