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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。
8 X& b# P) W+ A) i5 I' Efile://------------------------------------------------------------------------. }. `# ^7 J$ P$ ]
<a>file://Unit1.h</A></P>$ V$ F! D5 ?& ]
< >#ifndef Unit1H# w% F* E' N2 b3 {) a7 x
#define Unit1H
, r3 p/ i n, Z% R9 F2 _* tfile://------------------------------------------------------------------------8 G" V/ V% v. Y% A* o& q& G0 g
#include <Classes.hpp>3 s3 t, [4 g' c2 X& ^* y9 C5 m
#include <Controls.hpp>( m1 z+ S, R9 X1 {* f$ l9 n
#include <StdCtrls.hpp>
) p0 m' i, m5 \2 Q# g0 x2 i#include <Forms.hpp>
0 ~; t; V# ^$ O$ G# m+ v#include <ExtCtrls.hpp>& L) ~2 `' y+ b0 E& j
#include <Graphics.hpp>
3 [- N8 m" o1 L9 M+ X/ M0 N#include <Menus.hpp>
% A2 _1 a' X* {, d7 A2 \+ b& w- a#include <Dialogs.hpp>$ ?3 n& E' w6 j6 M
#include <ExtDlgs.hpp>
( M& e' ?; L, k4 nfile://---------------------------------------------------------------------------7 h1 l, r/ R% k! P6 f
class TForm1 : public TForm8 l# |0 J ]/ K! E) [( b
{+ W8 T P9 H: |; U! H
__published: // IDE-managed Components
?, d0 g, Q) N0 |2 P8 s TImage *Image1;3 X/ J; q9 Q7 S9 R! x+ V) T6 j( ^
TPopupMenu *PopupMenu1;
' M& A( e7 h2 U$ G8 b$ t O TMenuItem *Exit1;
. A ]) X# r2 {' f7 `' N TOpenPictureDialog *OpenPictureDialog1;5 s) @# Z5 D' X2 H
TMenuItem *Open1;2 H# J ?. p# U( H/ N! p) H8 \
void __fastcall Exit1Click(TObject *Sender);
) f$ z1 _7 i. Q# l: c( m void __fastcall FormCreate(TObject *Sender);6 w6 Z& X* |( t# `3 h
void __fastcall Image1MouseDown(TObject *Sender,
! p+ p: _' b+ S3 h) @6 y5 T TMouseButton Button, TShiftState Shift, int X, int Y);# P- \0 K5 T9 @4 A' G
void __fastcall Open1Click(TObject *Sender);
2 `- a& J) k# h- G5 [( N7 a% ~private: // User declarations
9 X# ^* S9 b, V6 S5 P4 | void __fastcall BmpToRgn();
2 [/ H9 u, v' i& s/ Ppublic: // User declarations' L4 W! B2 _3 O( O q2 W- C& b" j
__fastcall TForm1(TComponent* Owner);
* I8 K& F' Y8 N; o2 I2 I};
0 `' W% m- Q7 o: y z/ |file://---------------------------------------------------------------------------
7 V+ k$ }9 [; u4 J2 T3 x# Wextern PACKAGE TForm1 *Form1;3 b2 U2 P$ C3 Z* |6 q% K
file://---------------------------------------------------------------------------
' J8 R$ i$ g+ S6 g+ G5 R1 D#endif</P>
, K9 P4 o; i+ o/ M/ x/ o. E0 |< >
5 b- I7 {/ E2 ^7 N) W! Y<a>file://unit1.cpp</A>% m' `" j7 C1 ]: ]
file://---------------------------------------------------------------------------</P>
) |# P% Q" u4 ~( _# T. J6 s< >#include <vcl.h>
7 ?" p4 e& k O9 I9 @: j2 m#pragma hdrstop</P>
. g2 |0 U7 f# c) C1 @- J7 B< >#include "Unit1.h"
1 @8 e7 {3 [7 |5 ufile://---------------------------------------------------------------------------
* e6 o+ U3 `7 V1 u#pragma package(smart_init)
5 a% J7 E& e: J$ J& a* \' V#pragma resource "*.dfm"# Q& `% ~0 n, F0 j0 D) @1 G
TForm1 *Form1;) H9 u; b5 }& T% e9 N2 p$ G, S
file://---------------------------------------------------------------------------
! h3 E/ T, B5 j: Z: Z__fastcall TForm1::TForm1(TComponent* Owner)
1 F- ?, M6 |5 N, r : TForm(Owner)
% G- E# S `. c, X{; o1 c) t+ ]0 r- V, }4 b
}1 e, O" J' W; Z L" ?
file://---------------------------------------------------------------------------3 y, C" x( q# [
void __fastcall TForm1::Exit1Click(TObject *Sender)4 i% p. c/ c x, F. B: `
{' e! e" y( A; V9 p
Close();5 q! h7 |5 ?( E4 O" g- a
}/ h/ c1 A) |% D- u$ p( a
file://---------------------------------------------------------------------------</P>
" \7 m! |$ K" E( N3 `3 R. j< >void __fastcall TForm1::FormCreate(TObject *Sender)$ R3 f, n1 f+ n
{</P>+ l% O. ^% U8 @5 k; l
< >BmpToRgn();& p9 n" `6 a& |: ~% J6 V
}
3 U* U' H- j6 E) W1 Bfile://---------------------------------------------------------------------------</P>
% A4 o/ H7 F% x) j< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,: I8 z2 L- B( l% N# ^
TMouseButton Button, TShiftState Shift, int X, int Y)
3 o' W7 {. ?4 a1 p1 r6 Q0 r{
9 Y' H) y( @8 E* bif(Button == mbLeft), p% R3 [( z, E% @1 @" r
{9 C: e8 d+ N8 m- Q; F2 h3 j: F1 G5 q/ q
ReleaseCapture();
# @( O2 b6 T* p Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);" i0 N& `: F& M0 N* g
}- D* g6 G* T/ i1 V) D7 p
}
3 Q/ Z* C3 _) L- Pfile://---------------------------------------------------------------------------
. g l& q( e8 G0 ^; avoid __fastcall TForm1::BmpToRgn()
- |8 q2 A% J& W) n7 }{
7 [, @8 R2 i# w/ E" Z- H; H7 fImage1->AutoSize=true;: B; W3 r4 x0 Q2 C* n2 R* T
Form1->AutoSize=true;
3 P+ l. _6 X5 X+ ?! mForm1->BorderStyle=bsNone;& I/ M2 P1 I7 Z' A: i2 T3 W; K, M
TColor ColorKey=Image1->Canvas-> ixels[0][0];, P) k$ P" x3 F: @* V( H& N; j
int x,y;
2 h. q; T1 \& G4 V" F' B8 rint l,r;( k- `! N4 g' \3 i+ y
POINT *a;, D: r! M4 i# O3 Y+ |0 j
bool lb,rb;
0 A. l x6 g! z! ?+ vHRGN WndRgn,TempRgn;</P>3 [5 k+ [/ g1 V
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)
0 f) g, N; i! T% R{4 k4 C5 o3 r" s& r) t1 l' p$ {
ShowMessage("申请内存失败!");
8 f0 y# c& X/ T0 H exit(0);
# z2 n9 I: q9 [! [( p}</P>
) u. F9 T# o. s< >l=0;r=Image1->Height*2-1;
- E3 z; |' u& W' B+ h1 |7 b( YWndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>7 n% H; Y4 j$ R; k& |4 ^
< >for(y=0;y<Image1->Height;y++)2 }, T# p$ A5 d+ e. i
{1 L4 i U- W% {6 B5 i# X3 b
lb=true;, x! O! C; V! z# F) y% Y
for(x=0;x<Image1->Width+1;x++)3 P# n, ?8 r* p# I4 d( W& e
if(Image1->Canvas-> ixels[x][y]!=ColorKey)
! g: r1 D+ C3 u, e9 z$ S5 v0 W {8 x. r5 V( f2 w+ S& M h
a[l].x=x;. J9 s& ~$ W, v* L2 b; ?0 Y2 [
a[l].y=y;# d/ _) a8 M* U" Y' ?7 m
lb=false;( n( f/ E5 S! _/ A& L, w8 T ~' D* x
break;
D# ?& I) \' L }</P>
9 w2 o8 V3 N. A# y5 S< > if(lb) a[l]=a[l-1];
- ?! T O# t( V l++;
9 e }/ `3 n+ ?$ L. q1 a5 { rb=true;</P>2 r( C, p& w- r7 G) y
< > for(x=Image1->Width;x>=0;x--)' j, F: A$ q8 S" b6 O
if(Image1->Canvas-> ixels[x][y]!=ColorKey)/ v4 c4 v+ O1 ~9 I
{5 K* u a! L. Y% ^# y5 G" e2 W* i
a[r].x=x;
8 S, R m: x+ B* \; V, A a[r].y=y;. b9 v+ j$ @7 i9 \ B% w: @& Y7 n
rb=false;8 e, R9 Q8 K: q" n+ r
break;
& B% r6 U3 i+ r# V+ n0 D' N! n }3 \, O- B0 G C" ?, F. w2 N9 t, Q
if(rb) a[r]=a[r+1];# S4 ?( z: d/ X8 P+ @
r--;# N: _* r- g/ u- q* D& L, s3 X
}</P>1 M& \ e: A- e5 C. Z/ M$ r/ K
< >r=Image1->Height*2-1;* [) j3 n+ R! b
for(y=0;y<Image1->Height-1;y++)
+ M' N0 o% ^$ M{
& \+ L7 H. u+ _9 G/ B- v% q. T for(x=a[y].x;x<=a[r].x;x++) J* _# `9 I/ ]7 l: c" }8 A+ c0 h: j
if(Image1->Canvas-> ixels[x][y]==ColorKey): G( z, w5 Y& Z5 P% O* w
{
) v9 J( q' ~, {3 \3 `+ Z% Q& Z h TempRgn=CreateRectRgn(x,y,x+1,y+1);
: e( R w0 t/ K5 k% i9 } CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);- G5 L3 G6 _7 F! }5 y& ~
DeleteObject(TempRgn);/ M- Y E" m/ w9 t3 U7 d& U0 L( n7 m
}5 O, E8 p# \/ P+ Z
r--;
" K/ Q5 d f$ y) x2 t, X}</P>
* M8 l6 o# B, k& |< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);" A. q; |: D' Z2 \! w0 e% x
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
) u! h9 D ?3 l x- FCombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);% s$ b. \, \/ ^2 s8 W2 K% o
DeleteObject(TempRgn);% E2 i" v2 e/ C* B, q4 i
delete a;9 \: V6 [" ~ U' B) t3 N& B
SetWindowRgn(Handle,WndRgn,true);
0 P) Y/ }- I$ |9 G6 q- c}</P>
K1 O7 R( X+ u, }/ F4 O5 L' s< >void __fastcall TForm1::Open1Click(TObject *Sender)5 v( }4 m) l, t
{
9 q! `9 g, {7 f4 ^ if(OpenPictureDialog1->Execute())
. v; D$ O) D! G% _ {
, k9 X. w( b2 z Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);+ Q9 y6 Y5 i' T0 y! t; A
BmpToRgn();* z6 ~% [3 F0 D8 ~% L: {
}
. ^% g2 V+ h9 k/ w4 }2 j/ N" r}
; w4 I5 n- V/ l3 r* r6 Wfile://---------------------------------------------------------------------------</P>/ L: m+ Z. L; v6 m
< >对啦,图片的背景色要相同。
% f0 G+ L' q8 I图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>' z/ C8 N$ g! U4 Z7 [2 r4 O$ y& j* z
< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------
6 L) }: h O; N+ R/ `void __fastcall TForm1::FormPaint(省略)
9 J9 U0 q$ F7 h) {# X2 |/ Z{3 }/ b' j4 F3 q4 o" X
AnsiString ww;int bb;/ m- m% P) _, y" ]- L ]; {% v* N
ww=AnsiString(Form1->Width/256);; {8 L3 x( h. _9 W) R+ U3 K* J
TRect MyRect;! e* P- r8 \0 T2 N3 o7 z8 R0 p
MyRect.left=0;# h+ N. B2 t( `- M0 I
for(bb=0;bb<255;bb++)
5 f$ V. J: d- K+ D/ E4 |6 ` {
1 |, C( }# U& v4 p0 R1 r6 [: ? Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);: O$ C0 L0 S' L7 d7 X7 e$ R& g
MyRect.top=bb*(ww.ToInt());2 a9 i- Y) ?5 y+ A q2 U
MyRect.right=Form1->Width;
+ H; D* I' [5 o- R: h! @5 u MyRect.bottom=(bb+1)*(ww.ToInt());
% ^3 u1 P( K! O: x) }) Z Form1->Canvas->FillRect(MyRect);2 E; ?; ^2 [% i2 }7 P5 Y8 K* Q$ {
}9 k; Z$ [& u1 S3 [" N' o9 e1 w
} </P>
- U! z1 d1 a* B8 c< >file://---------------透明窗体--------------------------) [, i; e6 G9 L0 O
void __fastcall TForm1::Button1Click(TObject *Sender)1 e4 }1 r7 t( g# U$ t5 m E
{/ m( O" F: i$ ]$ e
TRect *rctClient,*rctFrame;
. F$ Y, Y [ Q( {' \. M HRGN hClient,hFrame;
A2 M" W8 V, Z4 j POINT *lpTL,*lpBR;9 U0 {' w" W% W5 R( P) g
rctFrame=new TRect;1 }5 T$ {) J4 f& C( d
rctClient=new TRect;, F- P1 T q: v' l" R$ F
lpTL=new POINT;
2 z# r. r; {6 l lpBR=new POINT;
- j+ F* T& J# T6 e# p+ C- S3 O GetWindowRect(Form1->Handle,rctFrame);
5 n4 U9 z" c! Q( h ::GetClientRect(Form1->Handle,rctClient);
% [1 U2 l# [4 Q) ? lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;' n; @3 X/ ^. l
lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>$ d0 Y, l$ g8 o$ B, m; ~
< > ::ScreenToClient(Form1->Handle,lpTL);2 u; O6 B( f/ w) c3 k+ W9 p
::ScreenToClient(Form1->Handle,lpBR);
6 E% w3 K$ ^4 p _ rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;2 u# [8 s( [/ G r9 X) e, z7 z1 O+ f
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;; R( [* i! X" w3 G2 R
rctClient->Left=abs(rctFrame->Left);
' D& l+ g4 j' V( ] rctClient->Top=abs(rctFrame->Top);5 @: V" h5 Z$ z" ?. ?$ J# m: J
rctClient->Right=rctClient->Right+5 w0 ^ _' A- H& b* _1 I* y: [6 e
abs(rctFrame->Left);
' T6 W5 `7 ?2 K4 y9 @0 Q; e3 X rctClient->Bottom=rctClient->Bottom+" I) H- ` R5 n/ _
abs(rctFrame->Top);
1 n1 i( Z/ p" j5 H7 ~ rctFrame->Right=rctFrame->Right+% B1 D8 t3 V/ ]1 G, m. ?/ N' C6 K
abs(rctFrame->Left);3 r1 n- `6 f/ w! ~
rctFrame->Bottom=rctFrame->Bottom+
. w+ Y9 T1 q+ B6 e# _+ ^5 y abs(rctFrame->top);
9 U) s( ^! K) v- L" F% e rctFrame->Top=0;rctFrame->Left=0;</P>
4 w3 f9 r1 e' i% F2 ^2 e0 D6 D< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
1 I4 S" z3 l9 L. N" y' D. O% h rctClient->Right,rctClient->Bottom);
) P) i/ J# H3 ~! d5 E hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,# a: h6 D' S; O h
rctFrame->Right,rctFrame->Bottom);
% K3 z+ R6 y9 _& A CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
7 O& \' M3 Q! `/ m SetWindowRgn(Form1->Handle,hFrame,true);</P>8 c+ P2 E2 n. I3 `, q: m" O
< >
4 y- t t* M6 t delete rctFrame;
" D* l0 p, d5 d: b* t8 G delete rctClient;6 C4 H& @1 @' o8 P7 s
delete lpTL,lpBR;</P>/ l4 A4 d' c t0 h9 N) Q* M0 N
< >} </P> |
zan
|