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

我的地盘我做主
该用户从未签到
 |
< >以下源码是快速创建不规则窗体的,还可以移动。/ k. k3 @! v: N- k6 L
file://------------------------------------------------------------------------# q4 |# _( ]6 e- C7 X
<a>file://Unit1.h</A></P>2 `) | v' F/ w- s( ~
< >#ifndef Unit1H: w# e; K# K, @" T
#define Unit1H/ a; O" _) h" D9 k9 N
file://------------------------------------------------------------------------
7 y0 c& N) i& y( T! m! N#include <Classes.hpp>
8 N$ X" M/ g4 h) `2 X#include <Controls.hpp>
" a0 _: Z* W, s7 ^5 ^9 d& M#include <StdCtrls.hpp>$ ~; K, j. I# }/ w0 `
#include <Forms.hpp>) k3 O. W/ }. d5 l# T8 d0 n9 t
#include <ExtCtrls.hpp>
, B: W( O2 \1 z9 A" _# P#include <Graphics.hpp>4 s/ b8 Z6 }0 }- j
#include <Menus.hpp>+ l! Z+ s- u8 V
#include <Dialogs.hpp>2 p1 s6 [! k: o8 ^- {
#include <ExtDlgs.hpp>/ [/ w3 Z' ]& c2 j) m: ~
file://---------------------------------------------------------------------------( X! N6 h" w& ^3 U( T& R# o
class TForm1 : public TForm1 H, l, e6 t+ f" R {
{
( s- A, B X. m' t__published: // IDE-managed Components
5 ~. |4 z( F2 I2 r2 D; K/ F6 d. t TImage *Image1;
5 V; j6 z0 T5 K) f TPopupMenu *PopupMenu1;
; C7 @" p% I2 ^% @ TMenuItem *Exit1;/ T$ Z* h' _- A6 R; _
TOpenPictureDialog *OpenPictureDialog1;
( _. ~( f4 p7 F TMenuItem *Open1;5 Y6 a/ C O+ v. @
void __fastcall Exit1Click(TObject *Sender);
! K5 p6 R* B, {( q: i5 E void __fastcall FormCreate(TObject *Sender);' O2 }3 C5 M4 Y, z" i! a& ^ v4 f5 Y
void __fastcall Image1MouseDown(TObject *Sender,
8 j X) K7 @) | TMouseButton Button, TShiftState Shift, int X, int Y);
; _! F" y5 i y* j void __fastcall Open1Click(TObject *Sender);( ?( m, X; o, _* u2 f
private: // User declarations' P" m Q: d" Z' a
void __fastcall BmpToRgn();
% N% V. Y# N; l4 y8 i# Opublic: // User declarations' ~) X# d- u: Z: g( d
__fastcall TForm1(TComponent* Owner);; a6 e; O; d V/ N) X
};
: y# g) H1 b0 n: u" ^: Zfile://---------------------------------------------------------------------------
9 L" j" U; s3 Q9 t# x, |) l1 lextern PACKAGE TForm1 *Form1;( h8 a' u& g: {2 G
file://---------------------------------------------------------------------------
0 H$ p* J' _' }; p#endif</P>
$ ~5 }& R. I+ j1 B< >! l6 X0 U" j6 s3 W9 R! r0 I+ i
<a>file://unit1.cpp</A>' [2 X3 g6 c1 }; V6 Q* R* e4 z
file://---------------------------------------------------------------------------</P>0 P, [, k1 d& G D3 g
< >#include <vcl.h>4 Z; s: f' G2 i. \
#pragma hdrstop</P>4 `% s8 U; ~8 F7 s" m( i6 |+ }
< >#include "Unit1.h"4 ~* Q4 x% ] q; `3 P/ M
file://---------------------------------------------------------------------------
9 B! ~( y4 t$ v/ Q6 v7 @$ h) E7 Q#pragma package(smart_init)7 `' W* B* H6 U! e% M; U
#pragma resource "*.dfm"- o+ r* I+ O' x* T% ~% \- {
TForm1 *Form1;
8 [5 t3 C# g! ^1 Z0 Cfile://---------------------------------------------------------------------------/ A( Z E0 j. S/ y6 u4 ~/ O
__fastcall TForm1::TForm1(TComponent* Owner)
( i) p! x! @0 R) q : TForm(Owner)
7 }* e- a3 a- M/ N, o6 B{
2 ^- N/ U( J+ |6 A/ O! k5 B+ P% e}% }3 \& }2 D5 R0 r8 K
file://---------------------------------------------------------------------------% l# u) F2 |" w$ {- }
void __fastcall TForm1::Exit1Click(TObject *Sender)
+ N3 W4 ^$ p! }{$ j4 [! ]- Z, F" x0 T5 ~5 a
Close();" T1 t+ s% E* X" \, ?- C
}
/ c8 A) C1 W: h s8 d5 i2 u3 Ifile://---------------------------------------------------------------------------</P>
7 m4 V) B% v0 I0 V( |< >void __fastcall TForm1::FormCreate(TObject *Sender)4 y' E ?8 \9 k }6 Y5 Y1 |. K9 z
{</P>
) ~6 g# ]2 N. W6 M' D7 L< >BmpToRgn();9 ?7 V& p; N: J& r
}9 D3 _3 o0 i$ h8 J8 D% X
file://---------------------------------------------------------------------------</P>' `" i1 ^1 ]) |. @8 E8 `+ c5 C+ `
< >void __fastcall TForm1::Image1MouseDown(TObject *Sender,3 g. _( m/ I! g6 F# ^+ {
TMouseButton Button, TShiftState Shift, int X, int Y)* J' ?' @0 |% e+ n& f. p
{
- {* R; j' |8 Kif(Button == mbLeft)
8 ]# ?5 S) [) } {
( {) s: z2 _" C2 y ReleaseCapture();! [- h: q; V4 U0 h8 `! t' a
Perform(WM_NCLBUTTONDOWN, HTCAPTION, 0);, F" z8 N$ a8 M7 k7 J. E8 j
}
; L' D2 G9 v4 p V; T}
1 Z% k1 a% x8 v6 @" \( Gfile://---------------------------------------------------------------------------% W' Z* }% ~: L5 G6 Z# g: q
void __fastcall TForm1::BmpToRgn()
3 U* ]4 f' _: @2 C% \8 S{
, c7 B2 \- Z% s5 J2 |Image1->AutoSize=true;1 D; ]* V- b! y
Form1->AutoSize=true;
# D$ [$ g& Q# {0 @6 b/ d' vForm1->BorderStyle=bsNone;
* o$ ~+ y7 h) V9 D4 n* HTColor ColorKey=Image1->Canvas-> ixels[0][0];, H, @1 f2 ]. E1 M4 o( a2 l- T8 ]% A' @
int x,y;3 l( H9 K( m( G; Y' t# k
int l,r;
9 W3 q2 M R. {; _) p: o2 _2 OPOINT *a;% A8 H( f( a" R
bool lb,rb;
9 [* @- Y9 V7 r1 u1 f* A/ A1 \HRGN WndRgn,TempRgn;</P>
1 W h, U3 m# h5 u4 w5 @: ]. e/ T< >if((a=(POINT *)malloc(Width*2*(sizeof(POINT))))==NULL)- K* u; _0 Z% k. Z6 V1 b+ j
{) H( O" L' t$ N- E( |) U9 V
ShowMessage("申请内存失败!");* V# b4 A+ q: m; n3 W& w' S9 G3 ~
exit(0);
9 L0 j4 G5 Q% D}</P>; C& f: @9 g9 g' Z
< >l=0;r=Image1->Height*2-1;! C% w" ^& G+ n) e8 G
WndRgn=CreateRectRgn(0,0,Image1->Width,Image1->Height);</P>
! x! m$ q4 R6 |9 Y< >for(y=0;y<Image1->Height;y++)
% E5 W, A$ h- C, ]{
) C+ k: Y0 [! J; I3 U; i lb=true;
: A' y1 [7 a4 K7 H; } for(x=0;x<Image1->Width+1;x++)
9 L* d! W& ]& X8 @' I if(Image1->Canvas-> ixels[x][y]!=ColorKey)
7 U3 S- @+ |. M" k {
5 V7 X9 G( W. d a[l].x=x;
" w/ q: d' G7 W" f6 U J a[l].y=y;1 }2 q) G7 v8 B# _
lb=false;
* W$ s/ p: Z' m0 K9 n6 j break;
$ i) F8 c( B8 h9 v }</P>
5 ?9 \' M! x% g7 ?; Y< > if(lb) a[l]=a[l-1];, @& @5 j: H/ W7 q2 S
l++;
% _3 y, {9 u# T* |6 L rb=true;</P>
2 f8 _" G9 v1 ?8 \ R- V< > for(x=Image1->Width;x>=0;x--)* V8 j! T) q% T. |1 x3 K9 |9 J
if(Image1->Canvas-> ixels[x][y]!=ColorKey)
0 ^* A, c: V( q# Z1 p { t6 Y# z$ I" }
a[r].x=x;
& Q2 H' b# t/ X1 u3 r8 N. k6 U a[r].y=y;
! R- _ K- K7 F. T/ Y rb=false;
2 {7 ?$ }9 i( N9 f break;
1 G$ _% g8 |, [6 ]1 C" c" Y4 N }" k$ X3 `: T; S0 C
if(rb) a[r]=a[r+1];) A; Y# n6 k/ H C
r--;+ I# y8 \2 m5 f9 K0 c$ T+ N' Q
}</P>/ p. d5 ` X4 o4 m) C2 f
< >r=Image1->Height*2-1;& M8 D; P5 j- g4 Y6 C
for(y=0;y<Image1->Height-1;y++)7 i# n8 m) m# s% U+ }
{' G9 ?5 {! _! ]+ I7 @: H3 [
for(x=a[y].x;x<=a[r].x;x++)
2 o2 j, J$ g- B7 C# u if(Image1->Canvas-> ixels[x][y]==ColorKey)6 ^9 a7 y U7 L1 A$ R" H
{
# S0 B! L5 `# q TempRgn=CreateRectRgn(x,y,x+1,y+1);
) T6 B3 O3 j1 x+ F CombineRgn(WndRgn,WndRgn,TempRgn,RGN_XOR);
* e& T5 {; s0 N/ z) g3 v: e$ A1 I DeleteObject(TempRgn);
5 E; h, s- ~0 Q+ {: q" ]9 R }! V; A* c; j7 j$ v
r--;
8 J, R& J- r3 G( Q# {}</P>
2 [4 V' O& N1 j5 G5 `< ><a>Height*2,ALTERNATE">file://TempRgn=CreatePolygonRgn(a,Image1->Height*2,ALTERNATE</A>);$ p9 e( o" r( F7 | C, o1 w( @
TempRgn=CreatePolygonRgn(a,Image1->Height*2,WINDING);
8 S. o8 b) \" _% G+ s9 t- \CombineRgn(WndRgn,WndRgn,TempRgn,RGN_AND);
. u0 n* P! F" h+ L8 p9 JDeleteObject(TempRgn);
: g2 m/ w0 g! Wdelete a;
8 J+ S# L" \7 Q+ M- QSetWindowRgn(Handle,WndRgn,true);
% ?( t; M" e* o}</P>0 v- N5 l' R A1 H2 U& M
< >void __fastcall TForm1::Open1Click(TObject *Sender). @- P7 @3 R9 Z7 m
{
/ I# M4 S) K" W7 _7 V Y if(OpenPictureDialog1->Execute())2 w; A" d @. [; D) \( k
{( }5 ~/ D1 M+ r f! n/ k& w
Image1-> icture->LoadFromFile(OpenPictureDialog1->FileName);2 `! k# @8 R0 e" D; _ J( E
BmpToRgn();
! Z7 O/ ]' @. N/ @3 E }
i$ O5 |* {& r% W, I. @}- z( ^0 g3 y& G$ L
file://---------------------------------------------------------------------------</P>
5 Z4 x2 i2 \; L, w) V< >对啦,图片的背景色要相同。- q/ i& o( z7 J! e, @3 q/ R
图片在IMAGE1的属性里加,不是在运行期通过LoadFromFile()加的。。</P>
" Q) T. r& X; ?# E< >file://--------------------(一)为窗体背景增加渐变色(蓝)---------------$ ]% V6 U& d. M# f3 k
void __fastcall TForm1::FormPaint(省略)! \* `" X9 ?8 r. w* H6 J
{
/ d& @- D0 I/ {. O& Q' Y+ A, u AnsiString ww;int bb;' ~0 b$ h. i C5 ]& G/ W2 c
ww=AnsiString(Form1->Width/256);
: F2 @% n, ^' B3 x) d9 A TRect MyRect;
0 Y: Z+ F) {! r MyRect.left=0;" B& H' Z6 |3 d# P# [; w
for(bb=0;bb<255;bb++)9 Q4 T5 e. w3 U. g$ s7 @2 h% l
{
. A O9 g7 S# j, n4 I Form1->Canvas->Brush->Color=(TColor)RGB(0,0,bb);! C P9 K, X5 z/ o& B# T+ e
MyRect.top=bb*(ww.ToInt());
8 @/ W: u$ D; J6 u5 p- B MyRect.right=Form1->Width;! s9 W8 r1 p6 d" p
MyRect.bottom=(bb+1)*(ww.ToInt());& l2 G% b# y5 I
Form1->Canvas->FillRect(MyRect);
9 j+ B+ Z1 D+ o' r }
0 a) k* H2 M, }: v0 ^0 d# e% L; z} </P>! V& }4 B* e2 ~" \
< >file://---------------透明窗体--------------------------: @$ S& b3 E" s/ p
void __fastcall TForm1::Button1Click(TObject *Sender)! P8 F2 n3 G5 b3 t5 T/ O
{' [$ s6 D0 A7 b- ]" \3 U3 o ?
TRect *rctClient,*rctFrame;
% w2 m1 ]1 |% ^ HRGN hClient,hFrame;2 |5 [3 |$ G. I7 i( D9 J
POINT *lpTL,*lpBR;
7 S# K1 Y2 z& b! i" j$ u% G; S rctFrame=new TRect;
2 H7 @( B2 |! i$ K. B% f( J- @$ v' a+ a rctClient=new TRect;
' K) U, p$ g" H% ~3 ~: x0 ^" C lpTL=new POINT;
* @, P4 m' T0 _; e% m6 W* g2 {% @1 E9 u1 f lpBR=new POINT;# {" `6 o6 S) @" z1 N
GetWindowRect(Form1->Handle,rctFrame);
+ L: _6 g D* G ::GetClientRect(Form1->Handle,rctClient);6 X, `" B* \! [" b
lpTL->x=rctFrame->Left;lpTL->y=rctFrame->Top;
" P, y7 c; Z+ U" Y$ Y7 k0 M+ o5 R lpBR->x=rctFrame->Right;lpBR->y=rctFrame->Bottom;</P>2 f5 m6 b8 Y. T# M" s$ {
< > ::ScreenToClient(Form1->Handle,lpTL);; Z X w S/ l/ j% y4 p
::ScreenToClient(Form1->Handle,lpBR);! I0 C6 p' t& T4 h" ^
rctFrame->Left=lpTL->x;rctFrame->Top=lpTL->y;; |+ @6 ~% C2 Y- d, C7 H1 M+ x
rctFrame->Right=lpBR->x;rctFrame->Bottom=lpBR->y;# z. o z5 V/ i& C r& X3 z; `
rctClient->Left=abs(rctFrame->Left);7 R& l/ y# r" u; q+ n
rctClient->Top=abs(rctFrame->Top);2 I2 c+ {& @7 N$ u" Q+ C
rctClient->Right=rctClient->Right+
|& l, x& d, a* E3 {) ^/ I abs(rctFrame->Left);
" u4 ] y+ m6 |9 _3 H rctClient->Bottom=rctClient->Bottom+3 v1 k5 J8 i- j( Q1 Z" f2 E
abs(rctFrame->Top);) X2 F4 `% K3 H! l/ Y% j
rctFrame->Right=rctFrame->Right+
^) S. U, n9 n: S7 S7 C abs(rctFrame->Left);
, o& b4 _$ B: o( v4 E1 K) Q rctFrame->Bottom=rctFrame->Bottom+
1 M, Y1 o7 L$ G6 }3 U abs(rctFrame->top);" z3 B/ [% f; S" U% @/ G( B
rctFrame->Top=0;rctFrame->Left=0;</P>0 W% a6 V* G$ T8 r
< > hClient=CreateRectRgn(rctClient->Left,rctClient->Top,$ }7 n7 \1 X- m; C# ?+ \) ?
rctClient->Right,rctClient->Bottom);3 G1 z( w& b& g6 O
hFrame=CreateRectRgn(rctFrame->left,rctFrame->Top,6 O7 ?; M$ D$ h! N0 I0 B; J
rctFrame->Right,rctFrame->Bottom);
* K, M; O4 J( @- j, l7 E, Z& D: l CombineRgn(hFrame,hClient,hFrame,RGN_XOR);" y; O. f5 Y; U5 s/ l8 c
SetWindowRgn(Form1->Handle,hFrame,true);</P>8 u9 d `0 f* h7 {% a. z" a
< >4 G# S! O2 O5 C3 Q
delete rctFrame;
' e' `7 n' j7 S1 O delete rctClient;
. s9 q! U, P! t" p delete lpTL,lpBR;</P>* d x" q( `' n6 h2 G8 R% q
< >} </P> |
zan
|