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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。4 ]' d* P; J, y u/ @0 `
file://------------------------------------------------------------------------
+ o9 |) }& U9 r- \<a>file://Unit1.h</A></P>
% g- ^8 x+ E1 s8 v5 l< >#ifndef Unit1H" ^% D# V. M- e
#define Unit1H
! R w+ W, M% E) t- Z; F* xfile://------------------------------------------------------------------------
4 g. u; L7 C" K9 H#include <Classes.hpp>
! f% P. e" w7 a" ?#include <Controls.hpp>
: o. f/ W Y {1 Y M" v#include <StdCtrls.hpp>3 I$ d3 f" k# Q* o0 v, L% W
#include <Forms.hpp>
) ]2 k7 w7 x# {. I+ j, q$ U k2 @#include <ExtCtrls.hpp>1 p0 B6 X0 Y4 m# B0 ~8 x7 R4 D; c3 z
#include <Graphics.hpp>
3 |! z% O" J! J* x% v#include <Menus.hpp>% { P9 n5 `- m! N) `/ {2 w% S; N
#include <Dialogs.hpp>
* _& p( p4 Y0 t. `: ?/ n# @#include <ExtDlgs.hpp>% ^% Z6 t+ m9 Y( |# j1 q
file://---------------------------------------------------------------------------
6 {4 k1 b8 n# F- M& V1 K) C0 Fclass TForm1 : public TForm
- j2 r! B. X3 H" S{
' z9 P U7 P' ?- ___published: // IDE-managed Components
; z6 U; \5 ~$ I. V3 p$ C. N; S TImage *Image1;( H9 _) M2 m* X
TPopupMenu *PopupMenu1;/ n) r' P% {7 I( z) A9 [0 v
TMenuItem *Exit1;
2 \% O5 Q7 r' T5 z8 G% u/ [+ E TOpenPictureDialog *OpenPictureDialog1;
& X4 O/ t& P8 J% X TMenuItem *Open1;
2 K8 n, M5 m* p% ?. |; v3 Z void __fastcall Exit1Click(TObject *Sender);1 Z, v; R/ @( b6 L2 C1 O5 ]
void __fastcall FormCreate(TObject *Sender);
7 `& b& U2 k% S, v& m6 c void __fastcall Image1MouseDown(TObject *Sender,
9 f' u0 [( s8 q' F% ` TMouseButton Button, TShiftState Shift, int X, int Y);1 m! _7 l* a4 L! K* Y
void __fastcall Open1Click(TObject *Sender);$ w7 G% ^! s) O
private: // User declarations
+ k! J/ K5 V+ _4 O! Z- {; {2 D void __fastcall BmpToRgn();( y' F7 b2 i; C! L3 S/ N0 @
public: // User declarations1 T8 r, W2 B& c- O7 c
__fastcall TForm1(TComponent* Owner);: N6 u' E9 ?9 u+ p& k7 u
};/ z5 i8 o$ z$ r5 }; G4 E# O' ~
file://---------------------------------------------------------------------------
3 r8 \) `/ k/ m, \extern PACKAGE TForm1 *Form1;
0 u! q2 ?3 [/ rfile://---------------------------------------------------------------------------8 ]- R g8 k# O" h. `, x
#endif</P>+ _: h( n7 `! P/ n( {1 R8 `
< >+ Y. v% _/ j) G6 U- _3 K
<a>file://unit1.cpp</A>
6 G7 _1 w1 ^4 v! B b) e+ Mfile://---------------------------------------------------------------------------</P>0 v7 o" I* U7 @- m4 v" s" @) [
< >#include <vcl.h>$ w3 W/ d2 \ _+ K' p2 c4 q Z8 Y- [
#pragma hdrstop</P>8 d1 m( U8 H2 w1 O) o
< >#include "Unit1.h"- G/ O+ M8 ~1 Q) ` J3 E2 v
file://---------------------------------------------------------------------------2 M" ?, a% z* e3 c
#pragma package(smart_init)
6 O! L1 a, Z! D1 x& A/ @: g#pragma resource "*.dfm"
3 F; C7 U( F1 I/ xTForm1 *Form1;
0 c4 W8 K) Q. v3 d; kfile://---------------------------------------------------------------------------
7 F- X( x8 Y* B+ ?; P__fastcall TForm1::TForm1(TComponent* Owner)& E( |. }5 j( n, |8 w/ U
: TForm(Owner)% ]4 f1 Z, M1 u3 o# O
{
1 O. G* z b. O1 m}
# F* l) M+ m% n3 F% [8 y4 |* Qfile://---------------------------------------------------------------------------
" B" X7 b, y1 U+ `# w. _9 dvoid __fastcall TForm1::Exit1Click(TObject *Sender)% A' j4 V: a2 b9 E
{0 y% s. D9 d: H& y
Close();
3 j" f7 |* j h" V% d. C) z}
& @/ N: X, a' R- L0 a% \* f$ T" D. nfile://---------------------------------------------------------------------------</P>
- j1 F+ V- r+ w< >void __fastcall TForm1::FormCreate(TObject *Sender)
7 i+ |! [5 q4 K3 A/ R1 {{</P># Z- N$ [6 r" i& Y% }0 r: g3 a
< >BmpToRgn();
1 G) c5 a1 R8 J* Z+ e" d4 o. k0 }}
* X% e5 y! I$ w$ n6 Mfile://---------------------------------------------------------------------------</P>3 R; a- k9 `& t h+ {6 Y
< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,: z3 T- R! g8 h0 P# E: U; _
TMouseButton Button, TShiftState Shift, int X, int Y)/ @0 x3 u, B' H9 A c1 q
{, g" s3 Y Q7 p& N
if(Button == mbLeft)# V4 F! f. x* _: o5 R S" T9 a
{" L4 K$ A3 V" s: n, R
ReleaseCapture();4 t! v, R% c4 p# ^
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);0 l' k6 k3 \+ K8 U
}3 F0 x+ Y8 \; d" d6 v
}
( f, Q' V6 j4 @% G- t1 V5 S: Cfile://---------------------------------------------------------------------------
' I t6 E8 }0 n+ k4 \& k3 x' ?! {2 ?void __fastcall TForm1::BmpToRgn()) a1 ~/ l( K- |* O4 D7 [1 R
{
- q/ o6 [9 S5 {" N( eImage1->AutoSize=true;
: i; Z9 K8 Z! fForm1->AutoSize=true;
. M, ?6 H4 y7 q0 OForm1->BorderStyle=bsNone;* Z D7 t6 o7 i' ^
TColor ColorKey=Image1->Canvas-> ixels[0][0];8 V/ y7 A& Z- o3 S
int x,y;
/ H( m2 V c E* rint l,r;
% n' o$ S; ?+ J( P- a& @0 y& ePOINT *a;' Z5 b5 H& D0 n3 W. ~; v
bool lb,rb;
1 O9 c/ i" `. x, m8 g2 cHRGN WndRgn,TempRgn;</P>
6 X: k! t$ D# r< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL); d2 u( \$ H. |$ `0 {
{4 P+ N2 g+ l( y1 e4 S* ^; p
ShowMessage("申请内存失败!");
2 {# f7 l* `; _# _0 y! c/ B exit(0);9 j$ C8 T: C4 U% g5 f+ |4 J+ i
}</P>
' N. l! Z- ~" N% q8 d3 z8 f1 W< >l=0;r=Image1->Height*2-1;
* v1 }2 o; k3 V, _# T; L8 _/ BWndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>
5 ^: P, q A3 B2 O2 G< >for(y=0;y<Image1->Height;y++) P1 O7 @9 Q) @
{' `& J' C1 O6 y( @& [) _
lb=true;
: v: @6 p" f7 t2 J for(x=0;x<Image1->Width+1;x++)
& {. y8 K m! a+ l$ s3 c if(Image1->Canvas-> ixels[x][y]!=ColorKey)
O+ H- t; m' i) f6 v- d. h {5 g6 }6 H }& t4 H; v
a[l].x=x;1 Y& q! W* _, X" s0 g c" q) V
a[l].y=y;% p, i; x" g# l2 @: z+ _
lb=false;7 X- m$ A+ i0 S* v# T$ }: Q, ` t, n
break;
+ {5 {3 M: X, y) [* N2 ^2 H% f }</P>
. b5 X5 M; g) H* x; n2 ]7 L/ Q& D< > if(lb) a[l]=a[l-1];8 p9 u0 [8 K5 _. C
l++;
$ S" V/ U9 a r1 M* g: L- z) m rb=true;</P>( ?) m, t4 }( e: a% N3 U3 }
< > for(x=Image1->Width;x>=0;x--)
y V3 V7 x. z9 @2 ` if(Image1->Canvas-> ixels[x][y]!=ColorKey)0 z# [; r* z, S. k) a1 ]4 H
{! S: w( O( z1 O. y$ o* b! y" Y% f( e
a[r].x=x;& @9 O) k0 ~0 v
a[r].y=y;% F0 F9 _: X; f9 y, P+ } y4 j- G
rb=false;6 v$ T5 q/ v2 R2 X' k. N# _
break;
; M3 Z+ }! j5 s1 P+ H }$ o. A2 G3 m6 l3 [1 m( k
if(rb) a[r]=a[r+1];) Q3 p" w6 k" F5 e5 f% \& W4 s
r--;. }! V8 i( W7 C& _: `3 C Z2 [
}</P>
+ E% L; K9 x @) K3 t1 q< >r=Image1->Height*2-1;( r, w- V& i# P: u5 K
for(y=0;y<Image1->Height-1;y++)1 }+ D. Q$ n! E) ^$ G
{2 G; i" B7 U$ U, E
for(x=a[y].x;x<=a[r].x;x++)% b, t0 P: H5 U0 `; Z: o" V
if(Image1->Canvas-> ixels[x][y]==ColorKey)6 K) Z$ N6 R2 S* w7 \8 p
{
/ l0 R3 R! J' w s" o1 c/ s TempRgn=CreateRectRgn(x,y,x+1,y+1);$ Q* S/ P8 F6 G3 Z% M o2 E
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
( z2 D, i7 S- ?( K DeleteObject(TempRgn);4 y4 I/ p1 o+ i; P. v" F1 O% Y
}% ^! j3 H: l: T3 B
r--;$ X! g) c/ j j% u9 h
}</P>
% p, Q1 _- z7 B" c< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);; ~$ x* v/ A: n4 x9 Z% x9 G% l
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);- Z3 z( B0 E7 R& Y, `5 u
CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);) [7 L% A$ {5 N {' Z. s
DeleteObject(TempRgn);
1 C; q/ S6 _2 y1 l" }delete a;
( A# l q/ ]9 K4 YSetWindowRgn(Handle,WndRgn,true);
2 i* w5 Z( \$ V& |}</P>
% L/ C) v6 r% K# A7 ^ n: l+ C- b, ~< >void __fastcall TForm1::Open1Click(TObject *Sender)
8 l% p' L, S3 O- a3 u{/ u0 d0 Q2 I( F+ p- v8 D' T
if(OpenPictureDialog1->Execute())7 U) L) L3 R; O- Z8 c! \: t, w
{
9 V9 C0 O% c; }7 M Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);
" ^3 M0 r8 X; u" T- O$ B BmpToRgn();
0 f5 W* b9 z- J' ^+ n }
1 \: C+ W- x, j& c& q" D+ K$ N4 |}
+ ]& p( z5 f( i0 E0 H( cfile://---------------------------------------------------------------------------</P>
; P* m5 `1 \6 d! k* L< >对啦,图片的背景色要相同。
$ w9 W- M, t4 B& t, t- K; b1 y1 o图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P> u! y% r& X+ y! g; v$ P
< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------2 S: v! ~* l( L) ^3 z
void __fastcall TForm1::FormPaint(省略)( L* W, C* G0 l, l0 R
{
1 \# \. E# c: D# D k' x AnsiString ww;int bb;; w$ }+ b; D1 v- P1 a9 C; T& v
ww=AnsiString(Form1->Width/256);
* k6 Q# W$ r8 A TRect MyRect;) A0 i @2 J I; |8 O
MyRect.left=0;& T. i6 j# e t4 X) s! T
for(bb=0;bb<255;bb++)7 \, T9 l: v( C, [9 ]1 H
{6 v# `9 C7 s" O
Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);
# Y$ d0 W; W# t7 T5 Z" Q+ g0 v4 ` MyRect.top=bb*(ww.ToInt());
. B' ^ I5 v' t MyRect.right=Form1->Width;0 _" N' n) {9 d8 j1 d* F
MyRect.bottom=(bb+1)*(ww.ToInt());5 W( Q. k5 `- k; @
Form1->Canvas->FillRect(MyRect);
: \/ x0 W) r7 C& T1 ^) ?& }3 e }
3 ?. _- y& r; R6 R0 d; X} </P>
8 j3 ?( V- a& t< >file://---------------透明窗体--------------------------
# r- |" e$ E1 W# s& G4 Zvoid __fastcall TForm1::Button1Click(TObject *Sender)7 D. q% D6 v1 |, i' C% {- T
{8 _: ~; W% D! O4 j5 ~
TRect *rctClient,*rctFrame;
& f/ \- ?; V% {% ]0 }5 R HRGN hClient,hFrame;' C* i+ u ~( }
POINT *lpTL,*lpBR;$ }* l5 R4 @' @/ l d
rctFrame=new TRect;
( b0 Q& p6 F$ k F) Q( L+ \/ D rctClient=new TRect;
' I7 H- X, T3 C `2 c3 f( G! `! F lpTL=new POINT;" i* ]% x, \8 ~: p3 k" V! m
lpBR=new POINT;
5 A6 h& y- {. S. k* Q9 ?8 d GetWindowRect(Form1->Handle,rctFrame);
0 m7 |, @& s8 l: x5 l4 n ::GetClientRect(Form1->Handle,rctClient);
6 O2 h" K, |) {8 Y' c lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
* I) n' X: L$ l8 c lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>
" F- \5 T* R' k0 i* ]# S3 D3 j< > ::ScreenToClient(Form1->Handle,lpTL);
5 z- K' V$ s H& G ::ScreenToClient(Form1->Handle,lpBR);
: K _" n8 {& @" r; i: D, {* i rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;3 M& c( A# A% Y. D% F
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;
+ q o& Z4 z7 f! F rctClient->Left=abs(rctFrame->Left);
. `* N2 r h8 M+ J. M, ~" X" }5 y' w rctClient->Top=abs(rctFrame->Top);
- i- T9 w1 |7 k4 l rctClient->Right=rctClient->Right+: b( _1 G6 a9 d) p6 C5 |( [
abs(rctFrame->Left);
$ ~; s$ g" a! C' w( p) _8 C. s rctClient->Bottom=rctClient->Bottom+/ X! M3 H+ B5 }" _7 u4 z
abs(rctFrame->Top);
8 i+ n2 V5 J6 B+ z9 r* H, ] rctFrame->Right=rctFrame->Right+2 ^' K1 |8 K$ N2 c) g
abs(rctFrame->Left);
6 I" c; f5 S1 A- s6 z rctFrame->Bottom=rctFrame->Bottom+8 @" E& M2 G, H6 q. r! G
abs(rctFrame->top);
1 K2 L5 A8 `, L7 P* I- s) y0 i' P; F rctFrame->Top=0;rctFrame->Left=0;</P>
$ g# {! s. z" x+ a, d) D8 S. q- r8 [< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,
7 L: P9 h1 A9 }8 E rctClient->Right,rctClient->Bottom);3 \! o7 i" L2 T$ W7 ~; k& ]
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,
1 c) C! \, m4 g9 A$ z" V rctFrame->Right,rctFrame->Bottom);
0 g3 y1 ~, e7 N5 o CombineRgn(hFrame,hClient,hFrame,RGN_XOR);
) u6 P3 {+ h8 D! o7 p SetWindowRgn(Form1->Handle,hFrame,true);</P>; i8 ` O6 Q7 M) i/ F
< >
2 E- `) h( V' t6 ? W- x0 C5 o& E delete rctFrame;' } }' u- q% E% @9 ~
delete rctClient;
6 S0 w- ~4 B7 M* }/ r A delete lpTL,lpBR;</P>
' } n. ? Z7 o: ^1 H+ h< >} </P> |
zan
|