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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。0 ]4 e2 E# _& ^) p% M7 N
file://------------------------------------------------------------------------
' C( `$ Y& V) _- U1 L<a>file://Unit1.h</A></P>
! ?' A. a% P9 X% y1 z; w# v$ k4 w< >#ifndef Unit1H
& A$ Z- [$ w4 `. x#define Unit1H
- k Y7 T- i9 _8 V, X# D- t) rfile://------------------------------------------------------------------------% G# m- B, N0 X
#include <Classes.hpp>
; q) f2 X8 O& Z* d#include <Controls.hpp>1 n C) Z8 U& B& N: p: H: F
#include <StdCtrls.hpp>
* B5 q6 I* a* I#include <Forms.hpp>* ]6 ?5 G4 g) Q2 y6 A: J5 D
#include <ExtCtrls.hpp>) B+ G" a* f# a. D/ l( ?5 m
#include <Graphics.hpp>' ]! y1 O* B0 l8 ~# k& Y3 ?# c7 ~
#include <Menus.hpp>
; q. M* B, E! G, I6 t( b \#include <Dialogs.hpp>8 E0 b; r2 _4 F! i/ y0 q0 `
#include <ExtDlgs.hpp>6 k0 I' e% L2 R, l1 a Y; h% D
file://---------------------------------------------------------------------------
1 {) m* O9 v& P+ H0 a/ D# h# t$ fclass TForm1 : public TForm0 s% Q ~% a( V$ q6 Q6 q x
{2 w" C% _1 b. F+ o0 y
__published: // IDE-managed Components# H: ]9 I" f6 U+ h# p
TImage *Image1;
" a- \! K! E j; N. q6 V TPopupMenu *PopupMenu1;
4 f1 ?1 z# j7 n" `5 T$ G TMenuItem *Exit1;
+ d) K) I9 i- }* a" [. T/ Q- N# L' s TOpenPictureDialog *OpenPictureDialog1;: S0 I, K4 G+ P4 |" D
TMenuItem *Open1;
0 ?% q1 G# K/ t, i( Z1 y! x8 V void __fastcall Exit1Click(TObject *Sender);
2 h% ~/ \" V) ]. w void __fastcall FormCreate(TObject *Sender);
) {8 R- A9 P3 }, q' L void __fastcall Image1MouseDown(TObject *Sender,
6 x( a' u5 E/ c* F* D TMouseButton Button, TShiftState Shift, int X, int Y);' K" D7 K' V. r3 R2 `
void __fastcall Open1Click(TObject *Sender);) P7 F: e/ \" Q: y9 ^/ N$ |
private: // User declarations$ Q7 r5 Y* N ^5 R9 x
void __fastcall BmpToRgn();
+ D9 `9 u% y% d9 V( e) kpublic: // User declarations8 Z# _# [* F. W( f, R* K" h) u
__fastcall TForm1(TComponent* Owner);
9 H. k6 V; U3 ^' j4 n( s};
+ c2 G1 Z/ J3 O5 ^* Y. N4 Ofile://---------------------------------------------------------------------------
1 i2 ?8 a: |) y/ J; a. C3 I- c+ p/ Iextern PACKAGE TForm1 *Form1;. f. I+ a( }! M- @" s" S: p9 ~
file://---------------------------------------------------------------------------
k1 d2 ^! E' w: M#endif</P>
% V6 P' H& r" N' v1 ]< >
! \ |- Q& G# ^8 k* s5 j<a>file://unit1.cpp</A>1 M$ a& g( S% R2 p
file://---------------------------------------------------------------------------</P>5 U& N0 Y) u0 h, T/ T8 Q
< >#include <vcl.h>5 j, s. ]5 P5 y. N0 j
#pragma hdrstop</P>+ y H( K% k/ k. n- R1 \* n: u
< >#include "Unit1.h"$ ^ u) v) p1 Q/ l8 F1 |8 ^; \
file://---------------------------------------------------------------------------. k- G( M0 G3 ~- n0 I
#pragma package(smart_init)
& ?! I7 b& z1 X) q c+ X: o#pragma resource "*.dfm"
- c# d8 Y! W( R4 b4 dTForm1 *Form1;* Y0 \3 [. m, F* Z* R+ U$ U3 x2 {' h
file://---------------------------------------------------------------------------2 ? w. L, D+ R9 l) c
__fastcall TForm1::TForm1(TComponent* Owner): [, {7 H, P1 q9 ?* l# ]
: TForm(Owner): H; z: {8 I7 I ^/ W: U/ N
{- p5 ~- J# Q1 X+ s
}) ^( }- f' L. k* ^0 Z. K, Q2 h
file://---------------------------------------------------------------------------) F1 {+ l$ D3 H3 G6 Y
void __fastcall TForm1::Exit1Click(TObject *Sender)
# k9 C* g( J. p9 s$ _1 B) o# K{
% x% k. G/ g5 R+ m; _# [ Close();8 u8 k, K" P" m9 u
}$ w; Z$ f3 L' w# Y7 T7 T
file://---------------------------------------------------------------------------</P>
9 U4 x% L3 e0 c' K0 [8 G< >void __fastcall TForm1::FormCreate(TObject *Sender)
( X. g! i% \5 J. [{</P>9 [" q. w1 ?4 b! d+ v
< >BmpToRgn();( a" A6 u) ]5 v0 R
}
) n) Y" |2 f' Q; g# v6 v( x) \file://---------------------------------------------------------------------------</P>, |6 T' z' I+ N/ w+ f" G- M( B
< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,
8 d2 P$ V9 O9 w: w) c. [7 y TMouseButton Button, TShiftState Shift, int X, int Y)
4 x! i3 _% R" u) E{$ X' Q8 Y" G" w+ R9 F
if(Button == mbLeft)
- y+ J2 i y# T6 K! b4 T {
& Z8 Z$ U% i5 J ReleaseCapture();
. ]) U" t# u$ i% ?: h9 e* v, A Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);
. r( x% X$ ^9 b* O }, V9 k+ M! V; x7 w5 ?- j2 z
}: H9 E9 `' o# [+ r
file://---------------------------------------------------------------------------
! \4 h* z5 k9 n9 f& V4 Gvoid __fastcall TForm1::BmpToRgn(): c% F6 y: |1 h- ?9 ?
{* f3 e9 R/ l; m2 B1 e3 C R& z
Image1->AutoSize=true;
5 @% h# K: ]5 [+ J mForm1->AutoSize=true;
* H# x O. m5 \. k" N3 ^Form1->BorderStyle=bsNone;$ J4 c6 j6 q' p3 Y8 g9 b
TColor ColorKey=Image1->Canvas-> ixels[0][0];
( J4 w3 R# T% @8 G( m$ e/ oint x,y;% `! |' E% B3 w9 m) u0 n0 [
int l,r;
4 Q3 l# Z* [7 G" t# P0 n h( W; n: bPOINT *a;! v5 w9 R1 E) e3 Q: T- t
bool lb,rb;, F6 J, q. E; J' p0 D
HRGN WndRgn,TempRgn;</P>/ n o4 _' O* |5 W
< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)9 B7 Y( J/ V; z3 K
{6 V, E4 K n+ }' p2 r* B) J4 M
ShowMessage("申请内存失败!");
( p3 [0 G% Z" k& x exit(0);
. t: ]* H+ G1 `5 M2 [}</P>
7 p: U5 K. T; p( b9 r1 v, u% I< >l=0;r=Image1->Height*2-1;8 L' t& z& p8 v2 K/ ?% I4 t
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>
! {2 l/ v3 |$ j" R( \! B< >for(y=0;y<Image1->Height;y++)
! h! Z" h6 ~" W6 O/ @/ b: S# `4 G3 A{
/ Q( \; z8 @# F- h lb=true;
/ k9 g2 z) Y& a& e# u6 g for(x=0;x<Image1->Width+1;x++): j1 ~" f. M+ V( I7 |
if(Image1->Canvas-> ixels[x][y]!=ColorKey) z9 J1 u. w3 H2 C9 d
{6 r* r1 g L9 H7 B# h
a[l].x=x;
( \7 V' I4 z- h; t- w a[l].y=y;
$ _+ E- ?0 b3 U, K$ {) ? lb=false;1 f# H; f, N$ O/ ]0 m/ m. w
break;
0 Q; Y6 w" Z: B0 Z6 I3 p }</P>) Z8 A+ O/ O" y. d
< > if(lb) a[l]=a[l-1];2 Z6 V8 C# Z8 Y; m: J% H
l++;
* h* U1 N; d: C. Z# v! o rb=true;</P>
: V: t1 ]# A8 K8 C* B' Q9 L< > for(x=Image1->Width;x>=0;x--)
5 v0 R+ g' }, H if(Image1->Canvas-> ixels[x][y]!=ColorKey)
9 d+ \4 M( v$ Q+ t6 R/ q {
/ F1 \3 Z8 E8 Z1 ] a[r].x=x;
1 [# `5 X" l4 P; K a[r].y=y;
6 W; ?! d; H; X- D8 x rb=false;' v, E/ T; d) A: ~# ~
break;
9 [. Q, _, v& u: f }9 B( F8 [: X' @
if(rb) a[r]=a[r+1];4 q9 m% c* [ d9 `, u4 Z! Y. P
r--;
+ C: Z( w/ A- Z- E A4 z) k* r7 Z}</P>
2 D; y/ U2 S( O6 n< >r=Image1->Height*2-1;
+ i9 M" B2 [1 K& ]2 b) Jfor(y=0;y<Image1->Height-1;y++)5 s# }, V0 e6 V
{* j: n4 _' c, f, J# }* h$ @
for(x=a[y].x;x<=a[r].x;x++)
/ |! z3 h) Z! I" |( n if(Image1->Canvas-> ixels[x][y]==ColorKey)
0 h( y: V/ g- }- c9 B, c- L/ g# u {& P s/ ^; @6 Z$ [0 R
TempRgn=CreateRectRgn(x,y,x+1,y+1);
0 E, N' M4 c9 H% ] CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
! m* ^" |, T4 j/ v DeleteObject(TempRgn);: @1 t4 q& v! x$ s
}9 o3 H: `7 ?9 m- E7 @
r--;0 ], V& \" n, A' r
}</P>$ L" `; l# ]9 _4 b4 o0 D
< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);& [% U" ? |9 R) l' A
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);& {/ F* e2 V1 n+ a8 j3 |
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
+ x2 @& c+ ~: @9 a. m+ WDeleteObject(TempRgn);
% \% _: v: w# f: N0 cdelete a;
$ H4 C" e; Q/ X0 hSetWindowRgn(Handle,WndRgn,true);# [& c1 N! x6 H9 k. R* P* n
}</P>
+ l/ z9 u3 f. P9 T< >void __fastcall TForm1::Open1Click(TObject *Sender)
. {% Z( A9 [1 |5 |, b3 i1 U! i{
: r. i4 R0 {+ h2 H; J( U8 Y; Z if(OpenPictureDialog1->Execute())9 H# ~0 Z( E$ }' C) u* h% f
{
: X; ^1 @! [2 I9 Y7 k& f* @1 B" O Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);
# a9 y0 n0 b8 ]! {. f V# c BmpToRgn();
1 y1 S- f0 [: Y1 C# r }
7 T. \: r. l$ f- \}5 r8 O, w/ C7 m( M" L
file://---------------------------------------------------------------------------</P>
$ \6 \; r( a5 r& M+ o, p/ G- T< >对啦,图片的背景色要相同。2 s' G+ [# v- C2 Q, @0 J
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
+ s. }3 T5 o7 G; l; u7 \7 A< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------
+ l' Y8 |$ p: \+ n( T2 p$ u7 Tvoid __fastcall TForm1::FormPaint(省略)
8 Q- L* G# g0 L- A5 j{
8 {3 M; N: p" N8 a6 ^# I6 A AnsiString ww;int bb;
h. g5 ]8 }) U2 m; O5 f8 N* f. ? ww=AnsiString(Form1->Width/256);
( M1 i ~( c2 ~5 @4 Y TRect MyRect;
; ]6 e1 ~+ |+ \3 m% F- w) e0 S: _' y MyRect.left=0;. V0 H+ Q7 _ P" `
for(bb=0;bb<255;bb++)0 o8 ~) S& A# @) M L
{
! p: V2 ~7 M* f Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);
) I9 y! f4 a1 s m! o' Z MyRect.top=bb*(ww.ToInt());
1 k8 V5 O3 z0 [. | MyRect.right=Form1->Width;9 F7 m4 }* Q2 }8 h8 d3 k
MyRect.bottom=(bb+1)*(ww.ToInt());$ |; Q0 B' g. ?! n' ]+ B
Form1->Canvas->FillRect(MyRect);6 G0 Z* r) S0 O' B$ W! F
}
7 V+ z9 ]9 v9 d6 T) p- y} </P>
7 ~& A1 k3 ~' i' _1 k8 i, {< >file://---------------透明窗体--------------------------! b+ z4 A# u' E4 n2 B. U9 M& I" H
void __fastcall TForm1::Button1Click(TObject *Sender)1 _0 ~" f* } C5 q/ B4 `5 j
{' _$ j) m6 f) ?' a0 ^
TRect *rctClient,*rctFrame;2 I a% A' Y N1 u! k+ }% Y
HRGN hClient,hFrame;
9 J5 Y/ p2 F0 ?1 t' }1 g* M z POINT *lpTL,*lpBR;6 j2 { Q& r$ |0 x+ h9 c+ b+ y
rctFrame=new TRect;3 e+ r" P0 w. M }7 u, g
rctClient=new TRect;
' B+ G( t* S) Z% Q lpTL=new POINT;
8 _: Q% O- n/ y' p7 R lpBR=new POINT;
& j# C8 V9 a+ j8 p GetWindowRect(Form1->Handle,rctFrame);
/ P9 s3 ~; ?6 M3 C( v ::GetClientRect(Form1->Handle,rctClient);
( Y- K8 @1 D# r- p9 E2 z lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
) B) r, o# T: S2 q6 t' S; p" A$ } lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
; ~; V+ b& G% @. N< > ::ScreenToClient(Form1->Handle,lpTL);
* @+ a8 x6 k8 w8 Z @' l ::ScreenToClient(Form1->Handle,lpBR);
: _" C0 X& z" u' N: M M7 g2 k rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;; w3 T$ w x$ B; T' k+ d
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
! g. K$ u# P$ x% l rctClient->Left=abs(rctFrame->Left);; V# H% B' f; P8 o4 }* ^6 q9 c0 w
rctClient->Top=abs(rctFrame->Top);
* T+ F/ ?) d% s) P8 A: @2 v( N rctClient->Right=rctClient->Right+
6 @7 \* j+ s% N' y( C abs(rctFrame->Left);
7 n* b* l/ K z! q8 u# M" ^) H0 d# \ rctClient->Bottom=rctClient->Bottom+
; g0 @) K) @7 h abs(rctFrame->Top);
7 T" J9 F0 t* r* T rctFrame->Right=rctFrame->Right+
( z1 s7 r% q6 f% g, q6 | abs(rctFrame->Left);6 J) Z) m# `* L7 S# V6 |; y) f! G4 k
rctFrame->Bottom=rctFrame->Bottom+6 A; R( g, P1 E+ B' s3 M
abs(rctFrame->top);; a. N$ p" p6 x/ ?
rctFrame->Top=0;rctFrame->Left=0;</P>/ c7 M: `, m, G- v, s
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
1 Y7 s+ J% a/ S* I rctClient->Right,rctClient->Bottom);* u( U( [5 Y! M- a2 p3 z' N2 A0 E9 q
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,) V) o( e% Z. s1 u! |+ q
rctFrame->Right,rctFrame->Bottom);: G+ Z: S9 `0 ]* Y
CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
! R: V! t) U2 t SetWindowRgn(Form1->Handle,hFrame,true);</P>* q7 i0 I) Q) F
< >
( Q9 K* L: w' B delete rctFrame;; H# M) M7 E6 n* x; x- G
delete rctClient;
6 j" e* h4 n/ d7 D1 w% r delete lpTL,lpBR;</P>7 s9 e% b) \0 k/ A6 s- V4 k* u
< >} </P> |
zan
|