说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

不规则窗口的实现-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
不规则窗口的实现-Delphi资料

不规则窗口的实现,用下面的程序

unit s1;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs;

type

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

procedure FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X

Y: Integer);

procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X

Y: Integer);

procedure FormPaint(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

const

MyRgn : Array[1..8] of integer =(2

135

115

22

228

135

2

135); //区域坐标

var

mx

my: integer;

HR: HRGN;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

Form1.Color := clblack;

Form1.Canvas.Font.Size:=12;

Form1.Canvas.Font.Style:=Form1.Canvas.Font.Style + [fsBold];

Form1.Canvas.Font.Color := clred;

HR:=CreatePolygonRgn(MyRgn

4

ALTERNATE); //创建一个区域

SetWindowRgn(Form1.Handle

HR

False); // 设置窗口区域

UpdateWindow(Form1.Handle); //更新窗口

end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X

Y: Integer);

begin

mx:=x;

my:=y;

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X

Y: Integer);

begin

if ssLeft in shift then

begin

Form1.Left := Form1.Left - mx+x;

Form1.Top := Form1.Top - My +y;

end;

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

Form1.Canvas.TextOut(50

60

'Alt+F4 to Quit');

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

DeleteObject(HR); //删除区域

end;

end.

DELPHI中控件深度投影及阴影效果的实现

金凤霞

WINDOWS应用程序的窗口及其窗口内的按钮等控件,

其本身都具有立体感效果,特别是在WINDOWS95系统下DELP

HI程序设计中,立体效果更加完善,程序界面尤如真实物

体的存在。尽管如此,它还是不能完全满足所有场合的程

序设计需要,比如你要使一个控件具有一个阴影效果,或

者使一个控件显示出深度投影效果,就必须依靠其它程序

设计手段。这里有一个可利用的CANVAS类,它可以轻松的

完成这些特殊效果程序界面的绘制工作。

CANVAS(画布)是DELPHI中为某些控件所定义的一个

类,它允许在控件表面进行灵活的绘图操作或信息显示,

并且适用于多种控件,如FROM、IMAGE、FILELISTBOX等

,为美化程序界面提供了非常方便的方法;CANVAS具有

多种属性并支持多种操作命令,可以实现在指定的对象上

画点、画线、画多边形、画扇形、画圆、定义画笔特性、

输出各种字符串等多种功能。控件的阴影及投影效果的形

成,基本原理就是在利用该控件的父控件比如FORM或者其

它容器控件的CANVAS,在该控件的周围适当处填加图像,

通过线条及颜色的合理搭配,使控件与周围的图像融为一

体,形成特殊的视觉效果。所需要的CANVAS命令如下:

form1.canvas.pen.width:定义画笔的宽度

form1.canvas.pen.color:定义画笔的颜色

form1.canvas.moveto:定义画线起点坐标

form1.canvas.lineto:定义画线终点坐标

具体操作时需要根据被修饰控件的TOP、LEFT、WIDTH

、HEIGHT属性,确定需要画线的起点和终点坐标,这样操

作无论被修饰控件位置及尺寸如何变化,都可以保证投影

及阴影效果完美的实现。

下面是一个简单的演示程序,在窗体中安放三个命令

按钮控件Button1、Button2、Button3,然后输入下面.P

AS文件中的相应代码,程序运行之后按下命令按钮2,则

为按钮1增加投影效果,按下命令按钮3为按钮1增加阴影效

果,按下按钮1则程序结束。上述方法可灵活应用在DELPH

I程序界面设计之中,实现一些屏幕特技效果,会极大增

强程序工作界面的生动性。其中有一点需要注意,当程序

窗口发生变化时(最大化或最小化),其投影及阴影效果

可能会被破坏,此时需要重画以保证程序界面的完整性,

所以在程序中应该适当安排窗口变化监视功能。

程序在486机、WINDOWS95中文版、DELPHI2.0环境下

调试通过,附.PAS文件内容。

unitcan;

interface

uses

Windows,Messages,SysUtils,Classes,Graphics

,Controls,Forms,Dialogs,StdCtrls;

type

TForm1Κclass(TForm)

Button1:TButton;Button2:TButton;Button3:T

Button;

procedureButton2Click(Sender:TObject);

procedureButton3Click(Sender:TObject);

procedureButton1Click(Sender:TObject);

procedureFormCreate(Sender:TObject);

private{Privatedeclarations}

public{Publicdeclarations}

end;

var

Form1:TForm1;

x,y,i:integer;

implementation

{$R*.DFM}

{投影效果的形成}

procedureTForm1.Button2Click(Sender:TObject

);

begin

form1.canvas.pen.width:Κ1;

fori:Κ0to8do

begin

form1.canvas.pen.color:Κ$00a0a0a0;

form1.canvas.moveto(Button1.left+Button1

.width+x,Button1.top+y);

form1.canvas.lineto(Button1.left+Button1

.width+x,Button1.top+button1.height+y);

form1.canvas.pen.color:Κ$00606060;

form1.canvas.moveto(Button1.left+x,Butto

n1.top+Button1.height+y);

form1.canvas.lineto(Button1.left+Button1

.width+x,Button1.top+button1.height+y);

x:Κx+1;y:Κy+1;

end;end;

{阴影效果的形成}

procedureTForm1.Button3Click(Sender:TObject

);

beginx:Κ0;y:Κ0;

form1.canvas.pen.width:Κ1;

fori:Κ0to8do

beginform1.canvas.pen.color:Κ$00404040;

form1.canvas.moveto(Button1.left+Button1

.width+x,Button1.top+8);

form1.canvas.lineto(Button1.left+Button1

.width+x,Button1.top+button1.height+8);

form1.canvas.moveto(Button1.left+8,Butto

n1.top+Button1.height+y);

form1.canvas.lineto(Button1.left+Button1

.width+8,Button1.top+button1.height+y);

x:Κx+1;y:Κy+1;

end;end;

{退出程序}

procedureTForm1.Button1Click(Sender:TObject

);

begin

close;end;

{初始化代码}

procedureTForm1.FormCreate(Sender:TObject)

begin

Button1.caption:Κ

Exit

Button2.caption:Κ

投影

Button3.caption:Κ

阴影

end;

end.

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘