当前位置:文档之家› delphi界面美化

delphi界面美化

delphi界面美化
delphi界面美化

Delphi界面美化

界面的美观和用户亲和性是应用软件成功的首要条件,因此界面往往是程序员最费心的地方。在这个专辑中,将向读者全面介绍Delphi中界面设计的原则和技巧

窗体设计

制作固定大小的Form

固定的Form像一个对话框,何不试试下面的语句

巧用Delphi制作溅射屏幕

精心编写的WINDOWS程序显示启动注意事项,称之为溅射屏幕(splash screen)。利用一点儿小小的内容,即可给程序的显示添加不少色彩

LED数码管仿真显示程序

在电子设备上广泛地使用LED数码管显示数据,在许多应用软件中也经常模拟LED数码管显示数据,使程序画面看起来很有特色

菜单设计

DELPHI中自适应表单的实现

我们知道,屏幕分辨率的设置影响着表单布局,假设你的机器上屏幕分辨率是800*600,而最终要分发应用的机器分辨率为640*480,或1024*768,这样你原先设计的表单在新机器上势必会走样

作非常规程序菜单掌握delphi高级秘籍

大家可能见过诸如金山毒霸,瑞星杀毒,以及五笔输入法等等在系统托盘(即右下角有时间和输入法图标的地方)在的控制菜单,而在正常的任务栏(即屏幕最下方的“开始”按钮的右边的各式各样)中却不出现按钮的程序,即我们常说的在后台运行的程序

用Delphi制作动态菜单

所谓动态菜单是指菜单项随着程序的操作变化而变化。现在,我们用Delphi来实现这一功能,具体步骤如下工具栏和状态条

为Windows窗口标题栏添加新按钮

对于我们熟悉的标准windows窗口来讲,标题栏上一般包含有3个按钮,即最大化按钮,最小化按钮和关闭按钮。你想不想在Windows的窗口标题栏上添加一个新的自定义按钮

用Delphi4实现风Word97格的工具栏

用过Word97的人对它的工具栏印象很深刻,因为它的风格很“酷”,同样IE4.0的工具栏也有类似的风格,Win98的出现,使这种风格的工具栏得到了推广

如何隐藏和显示Windows的任务条

如果隐藏和显示Windows的任务条?仅仅调用以下的函数就可以.

其他技巧

Delphi利用Windows GDI实现文字倾斜

在Delphi开发环境中,文字的输出效果一般都是头上脚下的"正统"字符,如何输出带有一定倾斜角度的文字以达到特殊的显示效果呢

Delphi之三十六计之界面篇

设置状态栏面板对象的Style为OwnerDraw,并在状态栏对象的DrawPanel事件中书写以下代码

利用COM技术实现外壳扩展的属性页

当用户在资源管理器中调用右键菜单时,会显示一个"属性"菜单项,点击属性菜单项会显示一个属性页,用户可以获得甚至修改文件信息

制作固定大小的Form

固定的Form像一个对话框,何不试试下面的语句?

C++ Builder

请参照Delphi的例子

Delphi

您可以覆写CreateParams() 这个TWinControl 的虚拟程序, 改变form的wc.Stylee, 将WS_SYSMENU 这个旗标解除, 这样, 就不会有左上角的

SystemMenuBox 了.

至於不能移动.缩小/放大, 可以自已拦下WM_NCHITTEST, 然後一概回应滑鼠点在视窗

Client 区域, 相信这个视窗就呆呆的不会动了.

详情可以查一下Win32API Help 的CreateWindow() 与WM_NCHITTEST 的说明.

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

procedure WMNCHitTest(var Msg: TMessage); message WM_NCHITTEST;

protected

procedure CreateParams(var Params: TCreateParams); override;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

巧用Delphi制作溅射屏幕

精心编写的WINDOWS程序显示启动注意事项,称之为溅射屏幕(splash screen)。利用一点儿小小的内容,即可给程序的显示添加不少色彩。

由于工程本身创建程序的主窗口,且启动溅射屏幕必须在创建主窗口之前出现,所以工程文件必须创建自己的启动屏幕。这意味着用户必须修改源代码来创建工程文件,而这通常在DELPHI编程中是不需要的。下面的过程介绍了溅射屏幕的建立过程。

1、开始一个新的工程。将窗体命名为MainForm,同时将其Caption属性设置为SplashinDemo。把这个工程保存在一个目录中,如C:ProjectsSplashin。把MainForm的单元命名为Main,把工程文件命名为Splashin。

2、在MainForm中插入一个Button组件。将Button的Name属性改为ExitButton,而将其Caption属性改为Exit。为ExitButton的OnClick事件创建一个处理器,在过程的begin和end关键词之间插入Close;语句。

3、选取File|New Form命令,或者单击New Form速度按钮。添加一个新的窗体。

4、将这个窗体的Name属性改变为SplashForm,删除其Caption属性。此外,将其BorderStyle属性改变为bsnone,同时将BorderIcons下的三个子值设置为False。

5、保存这个工程。当Delphi提示读者提供单元文件名时,要确信当前目录为正确的目录。为SplashForm的单元文件名输入Splash。

6、将SplashForm的Enabled属性设置为False。这里不想让用户能够给窗口提供键盘和鼠标命令,这是极少见的情况之一。在这个例子中,我们想让程序对SplashForm的显示拥有完全的控制权。

7、由于窗口没有轮廓,所以从Additional组件类中插入一个Bevel组件对象。这有助于定义窗口的边缘。将Bevel1的Align属性设置为alClient。同时,将对象的Shape属性改变为bsFrame,将其Style属性改变为bsRaised。这些值由使用者来确定。

8、在SplashForm中插入想使用的组件,在这里不要插入任何按钮或者其他相互作用的控件。应用程序本身显示和去除启动溅射对话框。

9、选择Project菜单。高亮显示Splash工程个弹出式菜单。选择Options命令。在所产生的Project Options 对话框中,选取Forms页标签。注意,MainForm和SplashForm位于自动创建的窗体列表中。高亮显示每个窗体并单击鼠标右按钮来将其移动到Available窗体。所有的Delphi窗体在运行时都是在内存中自动创建的,这要消耗内存和系统资源。在这样的一个案例中,程序是在运行时创建窗体的,读者应该从自动创建的列表中删除窗体。关闭ProjectOptions窗口。

10、接下来,修改工程的源代码,以便在显示主窗口之前显示溅射对话框。这里需要在工程文件中插入语句,以便与Splash.dpr工程文件相匹配。工程源代码如下:

program Project3;

uses

Forms,

main in …main.pas… {MainForm},

splash in …splash.pas… {SplashForm};

{$R *.RES}

begin

SplashForm:=TSplashForm.Create(Application);

SplashForm.Show;

SplashForm.Update;

Application.CreateForm(TMainForm,MainForm);

SplashForm.Close;

Application.Run;

end.

11、如果这时编译和运行程序,它就非常快速地显示和去除启动溅射对话框,以至用户可能没机会见到它。为了强迫对话框保持几秒钟的可见时间,请选取程序的MainForm。为窗体的OnCreate命令创建一个处理器。在关键词的前面添加一个名为stopTime的长整型变量。在begin和end之间插入两个语句:一个为对Windows GetTickCount函数的调用。来将stopTime设置为Windows已在运行的秒数;另一个语句为while语句,这个语句另外延迟2秒钟。程序清单如下:

unit main;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;

type

TMainForm = class(TForm)

Exitbutton: TButton;

procedure ExitbuttonClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.ExitbuttonClick(Sender: TObject);

begin

close;

end;

procedure TMainForm.FormCreate(Sender: TObject);

var

stopTime:LongInt;

begin

stopTime:=GetTickCount div 1000;

while ((GetTickCount div 1000)<(stopTime+2)) do

Sleep(1);

end;

end.

12、按F9编译、运行程序。

LED数码管仿真显示程序

在电子设备上广泛地使用LED数码管显示数据,在许多应用软件中也经常模拟LED数码管显示数据,使程序画面看起来很有特色。使用Delphi 程序实现LED数码管的仿真显示非常容易,具体步骤如下: 1.启动Delphi 4.0。在“Tools”工具菜单上选择Delphi的图象编辑器“Image Editor”,建立一个新的位图,并设定位图的尺寸,宽为:48,高为:64。设定位图的底色为紫红色,前景色为红色。在位图上选择适当宽度的线条画出一个正方的8字,并将方型8字的各个拐角处用斜线断开,这样可使图象模拟的更加真实。完成后按文件名bitmap_0.bmp 存储。然后用此文件复制9个文件,文件名分别为bitmap_1-9。用图象编辑器将这些方形的8字位图按文件名序号的顺序分别修改成0-9的数字位图,存储后备用。

2.建立一个新的工程,在窗体Form1上添加“面板”元件Panel1,设定“面板”元件的属性:bevelouter=bmRaised; bvevelInner=bvLowered; BorderWidth=4,设置后在Panel1元件上形成一个凸起的边框。在Panel1上添加一个“画板”元件PaintBox1,将PaintBox1的属性Hight 和Width设定为64和318,并适当调整Panel1面板的尺寸,使其正好包围画板元件。

3.在窗体中添加一个“图象列表”元件ImageList1,在元件上双击鼠标,调出添加图象对话框,将先前制作好的位图bitmap_0至bitmap_9按顺序添加进图象列表元件中去,使图象列表中位图的序号与位图本身代表的数字相同,并注意将位图设定为不透明。

4.转到单元编辑窗口,在Tform1的类说明部分添加一个显示LED的过程说明语句:

procedure display_LED(number:integer); 。

在implementation语句下面添加一个全局变量和对应上面过程说明的过程体。内容如下:

implementation

{$R *.DFM}

var

dis_number:integer;

procedure Tform1.display_LED(number:integer);

var

I:integer;

digital:array[0..5]of integer;

begin

{限制显示位数小于6位}

if number>999999 then number:=0;

for I:=0 to 5 do digital[I]:=0;

{分离数字位}

I:=0;

while (number)>0 do

begin

digital[I]:=number mod 10;

number:=number div 10;

I:=I+1;

end;

{显示数字}

for I:=5 downto 0 do

imagelist1.draw(paintbox1.canvas, (5-I)*54,0,digital[I]);

end;

5.在Form1窗体的OnCreated 事件中输入语句:dis_number:=0; ,使显示的初始值为0。在画板元件的On Paint 事件中输入语句:display_LED(dis_number); ,此语句非常重要,它可以在初始启动时显示初值0,在窗口本身被覆盖后又恢复到前台时仍可显示正常的数值。至此已完成了显示函数的程序编制。在需要显示数字的程序中调用display_LED 函数就能将数字显示在LED 的仿真显示板上?揪倮 绦蛑幌允?位以下的数字。

6.为了测试显示效果,我们在窗体上增加一个编辑框元件Edit1,和一个按钮元件button1。用鼠标双击按钮元件跳转到Click事件编辑窗口,输入如下语句:

dis_number:=strTOint(Edit1.text);

display_LED(dis_number);

完成后按F9键编译并运行程序。在运行窗口的编辑框中输入6位以下的整数数字,点击按钮,编辑框中的数字就显示在LED仿真显示板上。

DELPHI中自适应表单的实现

我们知道,屏幕分辨率的设置影响着表单布局,假设你的机器上屏幕分辨率是800*600,而最终要分发应用的机器分辨率为640*480,或1024*768,这样你原先设计的表单在新机器上势必会走样。这时你一定希望表单能自己适应不同的分辨率,下面就有两种方法可供你参考。

一、根据新的分辨率自动重画表单及控件

先在表单单元的Interface部分定义两个常量,表示设计时的屏幕的宽度和高度(以像素为单位)。在表单的Create事件中先判断当前分辨率是否与设计分辨率相同,如果不同,调用表单的SCALE过程重新能调整表单中控件的宽度和高度。

Const

Orignwidth=800;

Orignheight=600;

procedureTForm1.FormCreate(Sender:TObject);

begin

scaled:=true;

if(screen.width<>orignwidth)then

begin

height:=longint(height)*longint

(screen.height)divorignheight;

width:=longint(width)*longint

(screen.width)divorignwidth;

scaleby(screen.width,orignwidth);

end;

end;

SCALE过程在调整控件宽度和高度的同时,也自动调整控件字体的大小,以适应新的分辨率, 但美中不足的是它并不改变控件的顶点坐标位置,也就是说,该过程不改变控件之间的相对位置关系。要想调整控件之间的选队相对位置,还需要自己编程实现,有兴趣的读者可试一试。

二、将机器分辨率更改为设计时的分辨率

这种方法不改变表单本身,而是将屏幕分辨率更改为与表单设计时用到的分辨率相同。它需要用到WINDOWSAPI函数EnumDisplaySettings和ChangeDisplaySettings,前者取当前显示模式信息,后者则更改显示设置,具体参数的含义请参见DELPHI帮助。设计时宽度常量和高度常量的定义如方法一。

procedureTForm1.FormCreate(Sender:TObject);

var

devmode:tDevicemode;

begin

ifscreen.width<>orignwidththen

begin

ifEnumDisplaySettings(nil,0,devmode)then

begin

devmode.dmfields:=dm_pelswidthORdm_pelsheight;

devmode.dmpelswidth:=orignwidth;{宽度}

devmode.dmpelsheight:=orignheight;{高度}

ChangeDisplaySettings(devmode,0);{更改设置}

end;

end;

end;

以上两种方法在WINDOWS95+DELPHI3.0环境下均已通过,二者相比,前者是主动适应,后者则是被动适应。作非常规程序菜单掌握delphi高级秘籍

大家可能见过诸如金山毒霸,瑞星杀毒,以及五笔输入法等等在系统托盘(即右下角有时间和输入法图标的地方)在的控制菜单,而在正常的任务栏(即屏幕最下方的“开始”按钮的右边的各式各样)中却不出现按钮的程序,即我们常说的在后台运行的程序。如果自己的程序中也能有这样的话,那种与众不同的感觉真棒.

预备知识:

1:向系统托盘中加入图标控制菜单:

向系统托盘中加入图标控制菜单须用到函数Shell_NotifyIconA,而这个函数又有两个参数:'TnotifyIconDataA'结构的参数和一个消息参数即:Shell_NotifyIconA(dwMessage:DWORD;lpData:PNotifyIconDataA),第一个参数

dwMessage可以是以下值:NIM_ADD:增加一个图标;NIM_MODIFY:修改一个已有的图标;NIM_DELETE:删除一个已有的图标;

第二个参数的TnotifyIconDataA结构如下:

TnotifyIconDataA=record

cbSize:DWORD; {表示该结构的长度}

Wnd:HWND; {是调用Shell_NotifyIconA函数的窗口的句柄即Handle}

iID:UINT; {是在下面的uCallbackMessage参数指定的消息中使用的一个自定义数值}

uFlags:UINT; {决定该结构中的有效部分,如有NIF_MESSAGE则uCallbackMessage参数有效;若有NIF_ICON 则hIcon有效;有NIF_TIP则szTip参数有效,当然你可以让这三个参数都有效只须要在这个参数中写成NIF_MESSAGE+NIF_ICON+NIF_TIP即可}

uCallbackMessage:UNIT; {当添加的图标上有鼠标事件如右击等等时系统向Wnd参数所指定的窗口发送消息,这个消息的Msg参数是uCallbackMessage,这个消息的wParam参数是uID,这个消息的lParam参数是鼠标事件的Msg值}

Icon:HICON; {是出现在系统托盘中的图标的句柄即handle}

szTip:array[0..63] of AnsiChar; {即delphi是常用的hint即当鼠标停留在托盘图标上时的提示,例如你可用…这是我的第一个托盘图标菜单?}

end;

2:在状态栏上隐藏程序;

在一般情况下我们在打开一个窗口或是一个程序时都会在任务条上出现按钮如在IE中每打开一个新的窗口在任务条上就有一个新的按钮,在这里我们的程序是用在系统托盘中图标控制菜单,程序在后台运行,即希望我们的程序不在任务条上出现按钮;这个可用函数SetWindowLong来实现,在我们这个程序中的代码如下: procedure TForm1.FormCreate(Sender: TObject);

begin

form1.Width:=1;

form1.Height:=1; {让窗口在运行时表现为一个像素长宽的点}

form1.Left:=screen.Width-1; {让窗口在运行时在屏幕的右上角而不影响我们的桌面的操作}

form1.top:=1;

form1.Brush.Style:=bsclear; {让窗口在运行时在表现为透明}

setwindowlong(application.handle,gwl_exstyle,ws_ex_toolwindow); {让窗口在运行时不在任务栏上出现按钮}end;

3:在程序中控制光驱的打开和关闭;

当我们不再用手动的打开关闭光驱门时,我们的光驱寿命也就会相应延长,我们在程序中可用函数

function mciSendString(lpstrCommand,lpstrReturnString:

PChar;uReturnLength :UINT;hWndCallback:HWND):MCIERROR;stdcall;

其中lpstrComman参数表示一个MCI命令行,如:?set cdaudio door open wait…,…set cdaudio door closed wait?等等你可以delphi中的mmSystem.pas中查看详细说明;而参数'lpstrReturnString'表示接收返回信息的缓冲区指针,如果不需要返回值这里可写为'nil',参数'uReturnLength'表示接收返回信息的缓冲区的长度,若上面为'nil'这里为'0','hWndCallback'参数表示回调窗口的句柄,在这里可写为'handle';

在我们的程序中原代码如下:

打开光驱门:

procedure TForm1.N1Click(Sender: TObject);

begin

mcisendstring('set cdaudio door open wait',nil,0,handle);

end;

关闭关驱门:

procedure TForm1.N2Click(Sender: TObject);

begin

mcisendstring('set cdaudio door closed wait',nil,0,handle);

end;

4:在程序中控制重启电脑和关闭计算机;退出WINDOWS可用的函数有ExitWindows()和ExitWindowsEx()在本程序中的代码如下:

重启:

procedure TForm1.N8Click(Sender: TObject);

begin

showmessage('请先关闭并保存正在运行的程序');

exitwindowsex(ewx_force or ewx_reboot,0);

end;

关闭计算机:

procedure TForm1.N9Click(Sender: TObject);

begin

showmessage('请先关闭并保存正在运行的程序');

exitwindowsex(ewx_shutdown or ewx_poweroff,0);

end;

5:实现光驱的自动播放和更改光驱图标都需要更改注册表;要实现注册表的读写我们用以下代码:

例如有

var reg:tregistry;

reg:=tregistry.Create;

reg.RootKey:=hkey_local_machine; {这里是注册表的主键}

reg.OpenKey('software\microsoft\windows\currentversion\explorer\shell icons',true); {这里是注册表的子键}

reg.WriteString('11',mn); {这里对注册表进行写操作}

{关于注册表的相关知识大家可参考…电脑爱好者?出版的<<注册表完全精通>>一书}

还有一点应特别注意的是在更改光驱图标时不仅要在注册表中更改,还要把'c:\windows\shelliconcache'文件删除,这相关的关于文件操作的知识以及后面一些有关程序中加入声音等等大家一定都会,这里也就不再多说.

用Delphi制作动态菜单

所谓动态菜单是指菜单项随着程序的操作变化而变化。现在,我们用Delphi来实现这一功能,具体步骤如下: 1.首先,确定动态菜单的数据来源,即要确定动态菜单标题是来自Windows的系统注册表,还是来自一个数据库,或者是来自一个子目录,主要由程序的功能而定。这里假设主窗口名为MainForm,上面已有主菜单,其动态菜单的数据源是一个String(字符串)类型的变量,名称为SubMenuItemSource。

2.确定生成的动态菜单的功能,即定义动态菜单的OnClick()事件,例如,动态菜单标题来自一个磁盘文件名时,那么程序在响应OnClick()事件时,可能的操作是要打开选中的文件。因此,对菜单所在的主窗口模块的单元程序的数,据我们需要定义Type后添加一个自定义的事件MyClick()。

然后,需要编写如下MyClick()事件的具体内容:

procedure TMainForm.MyClick(Sender: TObject);//动态菜单OnClick事件响应

begin

Show.Message(TMenuItem(Sender).Caption);//显示选中的动态菜单标题,

end;

这里调用的ShowMessage标准例程(在Dialogs.pas中)显示TMenuItem(Sender).Caption,它就是选择的菜单项

的Caption,类似用TMenuItem(Sender).Name则是选择菜单项的Name。

3.编写程序将动态菜单标题添加到指定的菜单顶下,并将其与OnClick()事件联系起来。将以下程序段添加到MainForm的OnCreate事件过程中,可在程序启动时完成动态菜单的动态生成:

procedure TMainForm.FormCreate(Sender: TObject);

var

addSubItem:TMenuItem;

i:Integer;

begin

for i:=0 to N do //N等于要添加的动态菜单数目,需事先定义为数值型变量,并赋值

begin

addSubItem:= TMenuItem.Create(Self);

addSubIte https://www.doczj.com/doc/c814815421.html, := ′A′+IntToStr(i);

addSubItem.Caption := SubMenuItemSource; // 步骤1的SubMenuItemSource应先赋值

FileOpenItem.Add(addSubItem); //在名称为FileOpenItem的菜单项下添加子菜单

addSubItem.OnClick:=MyClick; // 步骤2的MyClick(),自定义菜单要响应的事件

end

end;

为Windows窗口标题栏添加新按钮

对于我们熟悉的标准windows窗口来讲,标题栏上一般包含有3个按钮,即最大化按钮,最小化按钮和关闭按钮。你想不想在Windows的窗口标题栏上添加一个新的自定义按钮,满足你的个性化需求,从而也使自己的窗口更具特色呢?!

下面我们就讨论一下在delphi中如何给窗口的标题栏上添加新的按钮。

一、实现起来要定义以下过程:

1、定义DrawCaptButton过程,这个过程的功能是在指定的位置画出按钮。

在过程中要使用win32函数GetSystemMetrics得到窗口的大小和标题按钮的大小;使用delphi函数Bounds定义一个矩形,这个矩形就是新按钮的位置;再定义一个小的矩形,这个矩形是为了填写文本;最后就调用delphi中比较有用的函数drawbuttonface把按钮画出来。

2、每次我们对窗口进行操作,例如,最大化操作或最小化操作,新按钮就会消失,为了解决这个问题,我们对所有的消息要进行处理,给每个消息编写一个过程对按钮进行重画。

A、定义WMNCPaint(var Msg:TWMNCPaint)过程,处理消息WM_NCPaint。

B、定义WMNCActivate(var Msg :TWMNCActivate)过程,处理消息WM_NCACTIVA TE。

C、定义WMSetText(var Msg:TWMSetText)过程,处理消息WM_SETTEXT。

D、定义WMNCHitTest(var Msg :TWMNCHitTest)过程,处理消息WM_NCHITTEST。

E、定义WMNCLButtonDown(var Msg : TWMNCLButtonDown)过程,处理消息WM_NCLBUTTONDOWN。

二、具体的源程序如下:

我们结合源程序来讲述过程的实现,从中可以看出程序对win32函数的调用,以及drawbuttonface函数的使用方法。

unit Main;

interface

uses

Windows, Buttons, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type

TForm1 = class(TForm)

procedure FormResize(Sender: TObject);

private

CaptionBtn : TRect;

procedure DrawCaptButton;

procedure WMNCPaint(var Msg : TWMNCPaint); message WM_NCPaint;

procedure WMNCActivate(var Msg : TWMNCActivate); message WM_NCACTIV ATE;

procedure WMSetText(var Msg : TWMSetText); message WM_SETTEXT;

procedure WMNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST;

procedure WMNCLButtonDown(var Msg : TWMNCLButtonDown); message WM_NCLBUTTONDOWN; public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

const

htCaptionBtn = htSizeLast + 1;

{$R *.DFM}

procedure TForm1.DrawCaptButton;

file://drawcapbuttton过程的具体实现

var

xFrame,

yFrame,

xSize,

ySize : Integer;

R : TRect;

begin

xFrame := GetSystemMetrics(SM_CXFRAME);

yFrame := GetSystemMetrics(SM_CYFRAME);

file://把窗口的宽度置于变量xFrame,把窗口的高度置于变量yFrame

xSize:= GetSystemMetrics(SM_CXSIZE);

ySize:= GetSystemMetrics(SM_CYSIZE);

// 把标题栏按钮的宽度置于变量xSize,把标题栏按钮的高度置于变量ySize

CaptionBtn := Bounds(Width - xFrame - 4*xSize + 2,

yFrame + 2, xSize - 2, ySize - 4);

file://定义出新的标题按钮的位置,值放在变量CaptionBtn中

Canvas.Handle := GetWindowDC(Self.Handle);

file://得到窗口的句柄

https://www.doczj.com/doc/c814815421.html, := 'Symbol';

Canvas.Font.Color := clBlue;

Canvas.Font.Style := [fsBold];

Canvas.Pen.Color := clYellow;

Canvas.Brush.Color := clBtnFace;

file://定义画布的字体、画笔、刷子等属性

try

DrawButtonFace(Canvas, CaptionBtn, 1, bsAutoDetect, False, False, False);

file://在画布上画出定义的按钮

R := Bounds(Width - xFrame - 4 * xSize + 2,

yFrame + 3, xSize - 6, ySize - 7);

file://在新按钮上画出一个小矩形

with CaptionBtn do

Canvas.TextRect(R, R.Left + 2, R.Top - 1, 'W');

file://在上面画出的小矩形上填写一个字符'w'字符

finally

ReleaseDC(Self.Handle, Canvas.Handle);

Canvas.Handle := 0;

file://容错处理,如果出现异常,把句柄释放掉

end;

end;

procedure TForm1.WMNCPaint(var Msg : TWMNCPaint);

//WMNCPaint过程的具体实现,该过程在绘制窗口时被调用

begin

inherited;//继承默认的消息处理程序

DrawCaptButton;//对按钮进行重画

end;

procedure TForm1. (var Msg : TWMNCActivate);

// WMNCActivate过程与WMNCPaint过程实现方法相同,该过程在窗口的非客户区要更改为激活状态或非激活状态时被调用

begin

inherited;

DrawCaptButton;

end;

procedure TForm1.WMSetText(var Msg : TWMSetText);

// WMSetText过程与WMNCPaint过程实现方法相同,该过程在设置窗口的文本时被调用

begin

inherited;

DrawCaptButton;

end;

procedure TForm1.WMNCHitTest(var Msg : TWMNCHitTest);

file:// WMNCHitTest过程与WMNCPaint过程实现方法相同,该过程在光标移动或鼠标按钮被按下或鼠标按钮被释放时调用

begin

inherited;

with Msg do

if PtInRect(CaptionBtn, Point(XPos - Left, YPos - Top)) then

Result := htCaptionBtn;//判断鼠标所在位置是否在新按钮的矩形范围内,如果在返回新按钮的标识值

end;

procedure TForm1.WMNCLButtonDown(var Msg : TWMNCLButtonDown);

// WMNCLButtonDown过程与WMNCPaint过程实现方法相同,当光标处于窗口非客户区范围内鼠标左键被按下时调用该过程

begin

inherited;

if (Msg.HitTest = htCaptionBtn) then

ShowMessage('你点击的是标题栏上的新按钮');

file://判断被点击的是否是新按钮,如果是显示上面的信息,在这里你可以按你的需要编写程序代码

end;

procedure TForm1.FormResize(Sender: TObject);

begin

Perform(WM_NCACTIV ATE, Word(Active), 0);

file://如果窗口大小改变则重画标题栏

end;

end.

三、程序执行结果

如图1-1所示标题栏上出现一个新按钮

图1-1

通过以上的示例过程,相信你能根据自己的具体要求,利用Delphi设计出别具特色的Windows窗口来!

用Delphi4实现风Word97格的工具栏

用过Word97的人对它的工具栏印象很深刻,因为它的风格很“酷”,同样IE4.0的工具栏也有类似的风格,Win98的出现,使这种风格的工具栏得到了推广。其实,用Delphi4很容易实现具有Word97风格的工具栏。

在Delphi4的元件选项板Additional页中,新增了Controlbar元件,此元件和Win32页中的Toolbar、Coolbar配合使用,再辅以Imagelist、Mainmenu等元件,完全可以实现具有Word97风格的工具栏。下面以一个FORM中的工具栏为例,详细介绍设计步骤:

1?从Additional页中选择Controlbar,将其放入FORM1中,设置其属性如下:Allign:=altopAutosize:=trueBevelkind:=bknone

2?从Win32页中选择Toolbar,将其放于Controlbar上,调整Toolbar的位置,使其置于最左,再调整其宽度,设置属性Edgeborders:=[],Flat:=TRUE。用鼠标右击Toolbar,在浮动菜单上选择Newbutton,重复若干次,设计好所需的按钮。

3?从Win32页中选择Imagelist元件,为FORM1设计主菜单,主菜单的设计方法同Delphi2、Delphi3。设计好主菜单后,将其属性Automerge置为TRUE。

4?最后为每一个按钮分配Tmenuitem的Name值,将每个按钮的Menuitem属性值设为所需菜单的Name值。

按F9运行程序,便可发现,设计出的工具栏已经具有Word97的风格,用鼠标在各个按钮上移动,按钮自动上浮,单击鼠标,弹出相应的菜单。需要说明的是,Mainmenu的属性Automerge置为TRUE,是为了不让主菜单出现在FORM1的最上端。工具栏的设计必须将Controlbar与Toolbar结合使用,不然得不到与Word97外观一样的工具栏。如何隐藏和显示Windows的任务条

如果隐藏和显示Windows的任务条?仅仅调用以下的函数就可以.

procedure hideTaskbar; //隐藏

var

wndHandle : THandle;

wndClass : array[0..50] of Char;

begin

StrPCopy(@wndClass[0], Shell_TrayWnd);

wndHandle := FindWindow(@wndClass[0], nil);

ShowWindow(wndHandle, SW_HIDE);

End;

procedure showTaskbar;

var

wndHandle : THandle;

wndClass : array[0..50] of Char;

begin

StrPCopy(@wndClass[0], Shell_TrayWnd);

wndHandle := FindWindow(@wndClass[0], nil);

ShowWindow(wndHandle, SW_RESTORE);

end;

Delphi利用Windows GDI实现文字倾斜

一、引言

在Delphi开发环境中,文字的输出效果一般都是头上脚下的"正统"字符,如何输出带有一定倾斜角度的文字以达到特殊的显示效果呢?笔者在制作公章辅助设计软件过程中,通过Windows图形设备接口函数实现了文字呈辐射状分布的功能。

Windows图形设备接口(Graphics Device Interface)是Windows系统中的图形核心模块,以GDI.EXE形式提供给开发者使用。Windows中的图形基本上是由GDI.EXE中的函数来处理的,它的主要特点是在输出设备上支持与设备无关的图形。在GDI函数中,文本亦被视为一种图形对象,但并非简单的几何方式绘制,因为文本的输出涉及到字体。

根据Windows中字体所用的技术可以分为3类字体:光栅字体,矢量字体和TrueType字体。其中,True Type字体的主要优点之一是可被任意放大或旋转,在任何尺寸上,都可以达到较为满意的显示效果,尤其,其允许在显示器和打印机上使用相同的字体。Windows为应用程序之所以能够提供设备无关性是通过采用让应用程序创建逻辑对象从而使用物理对象的方法实现的,同样,对于字体的使用也是一样的:应用程序在使用字体时,首先创建逻辑字体,以便Windows从设备中选择一种与之匹配的物理字体,从而达到较为准确的输出效果。

使用Windows GDI函数实现文字的倾斜效果的基本步骤如下:

1.取得设备描述表或图形设备的句柄:

HDC GetDc(Thandle AWinHandle);

2.创建逻辑字体并设置文字的倾斜度:

HFont CreateFontIndirect(LogFont Far *Iplf),

其中,Iplf为tagLogFont结构体,通过设置其lfEscapement可设置文字的倾斜度(为实际度数的10倍),例如:0度-正常字体,450度-左上45度倾斜,900度-正向左,等。

3.将逻辑字体选入设备列表,从而,Windows选择与之匹配的物理字体,并且新的字体取代旧的字体:

HGDIOBJ SelectObject(HDC hdc,HGDIOBJ hgdiobj);

注:在此之前现

4.使用当前设备的字体进行文字输出:

BOOL TextOut(HDC hdc, int PosX, int PosY, LPCTSTR OutStr, int StrLength);

5.释放不再使用的图形对象(这里为逻辑字体):

BOOL DeleteObject(HGDIOBJ hObject);

6.释放设备描述表或图形设备的句柄,函数声明如下:

ReleaseDc(THandle AWinHandle,HDC Dc);

注:上述过程要求在窗口的Paint事件中编写重新绘画或绘制文字的代码。

二、程序实现

在Delphi5.0中新建一个工程,在主窗体的Paint事件中编写如下代码:

procedure TForm1.FormPaint(Sender: TObject);

var

FLogFont : tagLogFontA; file://逻辑字体--结构体类型

hTempFont, hPrevFont: HFONT; file://字体句柄

hTempDC: HDC; file://设备描述表或图形设备句柄

TempString: string; file://输出的文字

begin

FLogFont.lfHeight := 10; file://字高

FLogFont.lfWidth := 10; file://字宽

FLogFont.lfWeight := 1; file://字体笔划粗细程度

FLogFont.lfUnderline := 0; file://没有下划线

FLogFont.lfStrikeOut := 0; file://没有删除线

FLogFont.lfItalic := 0; file://斜体效果否

FLogFont.lfCharSet := GB2312_CHARSET; file://字符集

FLogfont.lfEscapement := 450; file://倾斜度

FLogFont.lfOrientation := 450; file://方向与倾斜度取值同

FLogFont.lfFaceName := '宋体'; file://字体名称

file://创建逻辑字体

hTempFont := CreateFontIndirect(FLogFont);

TempString := '测试';

file://取得窗口的设备句柄

hTempDC := GetDC(Handle);

file://取出窗口设备的当前字体,并替换为新字体

hPrevFont := SelectObject(hTempDC, hTempFont);

file://设置设备窗口的文字色彩

SetTextColor(hTempDc, clRed);

file://输出文字

TextOut(hTempDc, 200 , 200, PChar(TempString), Length(TempString));

file://恢复原有的字体

SelectObject(hTempDc, hPrevFont);

file://删除逻辑字体

DeleteObject(hTempFont);

file://释放设备接口

ReleaseDC(Handle, hTempDC);

end;

以上代码若不写在窗体的Paint事件,则当窗体接收到重绘消息时,默认的窗口绘制过程将重新绘制窗口而使倾斜文字消失。

三、结束语

以上,只是Windows GDI接口函数使用的一个具体例子,希望能对广大读者起到抛砖引玉的作用,利用Windows GDI接口函数编写出更为丰富多彩的的文字效果。

Delphi之三十六计之界面篇

1.为MDI窗体客户区填充位图

//在主窗体中添加Image1控件

//申明

private

FClientInstance : TFarProc;

FPrevClientPro 0 to ClientWidth div Image1.Picture.Width do

BitBlt(Dc,

Col * Image1.Picture.Width,

Row * Image1.Picture.Height,

Image1.Picture.Width,

Image1.Picture.Height,

Image1.Picture.Bitmap.Canvas.Handle,

0,

0,

SRCCOPY);

Result := 1;

end;

else

Result := CallWindowProc(FPrevClientProc,

ClientHandle,

Msg,

wParam,

lParam);

end;

end;

//FormOnCreate

procedure TMainFrm.FormCreate(Sender: Tobject);

begin

FClientInstance := MakeObjectInstance(ClientWndProc);

FPrevClientProc := Pointer(GetWindowLong(ClientHandle,GWL_WNDPROC));

SetWindowLong(ClientHandle,GWL_WNDPROC, LongInt(FClientInstance));

end;

2.给窗体添加皮肤

//在窗体中放一名为Image1的TImage控件,并设置位图

//在窗体的private节中声明过程

procedure WMEraseBkgnd(var m: TWMEraseBkgnd); message WM_ERASEBKGND;

…………..

在实现部分书写代码如下:

procedure Tform1.WMEraseBkgnd(var m : TWMEraseBkgnd);

begin

m.Result := LRESULT(False);

end;procedure TForm1.FormPaint(Sender: TObject);

var

x, y: Integer;

iBMWid, iBMHeight : Integer;

begin

iBMWid := Image1.Width;

iBMHeight := Image1.Height;

y := 0;

while y $#@60; Height do

begin

x := 0;

while x $#@60; Width do

begin

Canvas.Draw(x, y, Image1.Picture.Bitmap);

x := x + iBMWid;

end;

y := y + iBMHeight;

end;

end;

3.创建异形窗体

//例:画圆角矩形窗口

procedure TForm1.DrawRndRectRegion;

var

rgn: HRgn;

Rect: TRect;

begin

Rect := Self.Canvas.ClipRect;

rgn := CreateRoundRectRgn(rect.left, rect.top, rect.right, rect.bottom, 30, 30);

SetWindowRgn(Self.Handle, rgn, TRUE);

end;

其它:CreateEllipticRgn(椭圆),CreatePolygonRgn(多边形)略。

4.用渐变色填充窗体

procedure TForm1.FormPaint(Sender: TObject);

var

Row, Ht: Word ;

begin

Ht := (ClientHeight + 255) div 256 ;

for Row := 0 to 255 do

with Canvas do begin

Brush.Color := RGB(Row, 0, 0) ;

FillRect(Rect(0, Row * Ht, ClientWidth, (Row + 1) * Ht)) ;

end ;

end;

5.实现Winamp形式窗口拖动的方法

//在窗体的Private节中作如下声明

procedure WmNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;

//在实现部分写如下代码:Ht: Word ;

begin

Ht := (ClientHeight + 255) div 256 ;

for Row := 0 to 255 do

with Canvas do begin

Brush.Color := RGB(Row, 0, 0) ;

FillRect(Rect(0, Row * Ht, ClientWidth, (Row + 1) * Ht)) ;

end ;

end;

5.实现Winamp形式窗口拖动的方法

//在窗体的Private节中作如下声明

procedure WmNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;

//在实现部分写如下代码:

procedure TForm1.WmNCHitTest(var Msg: TWMNCHitTest);

begin

DefaultHandler(Msg);

if Msg.Result = HTCLIENT then

Msg.Result := HTCAPTION;

enbr> Y := 480;

end;

with ptMaxTrackSize do

begin

X := 800;

Y := 600;

end;

end;

end;

7.自汇状态栏

//设置状态栏面板对象的Style为OwnerDraw,并在状态栏对象的DrawPanel事件中书写以下代码: procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;

Panel: TStatusPanel; const Rect: Trect);

begin

with statusbar1.Canvas do begin

Brush.Color := clRed;

FillRect(Rect);

TextOut(Rect.Left, Rect.Top, "Panel "+IntToStr(Panel.Index));

end;

end;

8.一个具有超连接性质的Label(示范如何使控件具有鼠标进入与退出事件) //新建单元,创建以下类

uses Windows, Messages, Graphics, Controls, StdCtrls;

………..

TMyLabel = class(Tlabel)

Private

FMouseInPos : Boolean;

procedure CMMouseEnter(var Amsg: Tmessage); message CM_MOUSEENTER;

procedure CMMouseLeave(var Amsg: Tmessage); message CM_MOUSELEA VE;

protected

procedure Paint; override;

End;

//各事件代码

procedure TMyLabel.CMMouseEnter(var Amsg: Tmessage);

begin

FMouseInPos := True;

Refresh;

end;

procedure TMyLabel.CMMouseLeave(var Amsg: Tmessage);

begin

FMouseInPos := False;

Refresh;

end;

procedure TMyLabel.Paint;

begin

if FMouseInPos then

begin

Font.Color := clRed;

Font.Style := Font.Style + [fsUnderline];

end

else

begin

Font.Color := clBlue;

Font.Style := Font.Style - [fsUnderline];

end;

Inherited Paint;

end;

利用COM技术实现外壳扩展的属性页

当用户在资源管理器中调用右键菜单时,会显示一个"属性"菜单项,点击属性菜单项会显示一个属性页,用户可以获得甚至修改文件信息。我们可以定制属性页通过实现属性页扩展。如下图所示,本文实现了一个显示wave(波形)文件的信息如声道数等信息的属性页扩展。

属性页扩展通常是同某类文件相关联的来实现同之相关的操作和信息显示,另外可以同驱动器相关联,我们还可以用属性页扩展来替换控制面板程序的属性页。象其他外壳扩展程序一样,属性页扩展也是以动态连接库形式实现的进程内COM对象。它除了IUnknown接口外还要实现IShellExtInit和IShellPropSheetExt接口。

建立同文件关联的属性页扩展

首先,我们用命令File|New...,创建一个ActiveX Library,然后新建一个COM Object,实现的接口为IShellExtInit 和IShellPropSheetExt。

同文件建立关联需要注册属性页,要在注册表中同相应文件对应的表项下添加Shellex/PropertySheetHandlers 子键,每增加一个页面就需要注册一个表项,最大可以添加的页面数是24,我们可以用一个扩展实现多个页面。这里我们通过从TComObjectFactory继承类实现的UpdateRegistry实现了注册。

type

TCXPropSheetFactory=class(TComObjectFactory)

public

procedure UpdateRegistry(Register: Boolean); override;

end;

procedure TCXPropSheetFactory.UpdateRegistry(Register: Boolean);var

ClassID: string;

Str,KeyName : string;begin

inherited UpdateRegistry(Register);

if Register then

begin

ClassID:=GUIDToString(Class_CXPropSheet);

with TRegistry.Create do

try

RootKey:=HKEY_CLASSES_ROOT;

OpenKey(?\.wav?,TRUE);

KeyName := ReadString(??);

if Keyname = ?? then

begin

WriteString(??,?WaveFile?);

OpenKey(?\.wav?,TRUE);

KeyName := ReadString(??);

end;

OpenKey(?\?+KeyName+?\shellex\Propert eetHandlers\Wav?,TRUE);

WriteString(??,Classid);

finally

Free;

end;

if(Win32Platform=VER_PLATFORM_WIN32_NT)then

begin

with TRegistry.Create do

try

RootKey:=HKEY_LOCAL_MACHINE;

OpenKe y(?SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions?, True);

OpenKey(?Approved?, True);

WriteString(ClassID, ?Wave File Property Sheet?);

finally

Free;

end;

end;

end

else

删除注册表项....................... end;初始化扩展是通过IShellExtInit实现的,当外壳调用IShellExtInit.Initialize时,它传递一个数据对象包含来文件对应的目录的PIDL标识符。Initialize方法需要从数据对象中提取文件名,并把文件名和PIDL标识符保存起来为了以后使用。

function TCXPropSheet.SEIInitialize(pidlFolder: PItemIDList;

lpdobj: IDataObject; hKeyProgID: HKEY): HResult;

var

StgMedium: TStgMedium;

FormatEtc: TFormatEtc;

szFile: array[0..MAX_PATH+1]of Char;

filecount: integer;begin

Result:=E_FAIL;

if(lpdobj=nil)then

begin

Result:=E_INV ALIDARG;

messagebox(0, ?1?, ?错误?, mb_ok);

Exit;

end;

with FormatEtc do

begin

cfFormat:=CF_HDROP;

ptd:=nil;

dwAspect:=DV ASPECT_CONTENT;

lindex:=-1;

tymed:=TYMED_HGLOBAL;

end;

Result:=lpdobj.GetData(FormatEtc, StgMedium);

if Failed(Result)then

Exit;

//如果只有一个文件被选中,获得文件名并保存。

filecount:=DragQueryFile(stgmedium.hGlobal, $FFFFFFFF, nil, 0);

if filecount=1 then

begin

Result:=NOERROR;

DragQueryFile(stgmedium.hGlobal, 0, szFile, SizeOf(szFile));

FFilename:=strpas(szFile);

end;

ReleaseStgMedium(StgMedium);end;添加页面的操作是通过IShellPropSheetExt接口来实现的。如果属性页是和文件相关联,外壳会调用IShellPropSheetExt.AddPages给属性页添加一个页面。如果属性页同控制面板程序相关联,外壳调用IShellPropSheetExt.ReplacePage来替换页面。

IShellPropSheetExt.AddPages方法有两个参数,lpfnAddPage是一个指向AddPropSheetPageProc回调函数的指针,回调函数用来提供要添加的页面信息给外壳。lParam是一个用户自定义的值,这里我们用它来返回给回调函数对象。

一般的IShellPropSheetExt.AddPages方法实现步骤是:

给PROPSHEETPAGE结构设定正确的值,特别是:

把扩展的对象引用记数变量付值给pcRefParent成员,这可以防止页面还在显示时,扩展对象被卸载。

实现PropSheetPageProc回调函数来处理页面创建和销毁的情况。

调用CreatePropertySheetPage函数来创建页面。

调用lpfnAddPage指向的函数来来添加创建好的页面。

function TCXPropSheet.AddPages(lpfnAddPage: TFNADDPROPSHEETPAGE;

lParam: LPARAM): HResult;var

PSP: TPropSheetPage;

HPSP: HPropSheetPage;begin

result:=E_FAIL;

try

psp.dwSize:=SizeOf(psp);

psp.dwFlags:=PSP_USEREFPARENT or PSP_USETITLE or PSP_USECALLBACK;

psp.hInstance:=hInstance;

//这里我们使用了事先储存在wave.res中的对话框模板,模板是用delphi5自带的

//resource workshop编辑的,使用delphi5\bin\brcc32.exe编译的。

psp.pszTemplate:=MakeIntResource(100);

//标题名

psp.pszTitle:=?波文件信息?;

//设定回调函数

psp.pfnDlgProc:=@DialogProc;

psp.pfnCallBack:=@PropCallback;

//设定对象引用记数变量

labview界面美化问题(自动保存的)

labview界面美化问题(自动保存的) 部门: xxx 时间: xxx 整理范文,仅供参考,可下载自行编辑

LABVIEW前面板加工美化问题 2018-09-14 14:17xuanxi2005 | 分类:其他编程语言| 浏览5702次 我设计了一个LABVIEW程序,生成EXE可执行文件后,觉得前面板很难看,主要是因为操作页面也就是前面板和网页一样,虽然菜单栏什么的都可以去掉,但界面上有很多没有控件的版面,我的所有控件都集中在一个矩形框内,能否打开仅仅显示有用的部分呢? b5E2RGbCAP 忘了图。。 分享到: 2018-09-15 15:30 提问者采纳 当然可以了!剔除矩形框以外的部分对吧!VI属性》类别“窗口大小”,设置为你矩形框的大小即可。运行后,只显示,你输入的大小。试一下哈,可以的。p1EanqFDPw

在labview中怎样实现界面切换 ------解决方案-------------------- 1.可以使用选项卡 2.可以使用sub面板 3.适当加一些控件隐藏,显示功能 ytclimbsky | 二级 不是很明白你的问题,可否贴下图。如果只是要在程序面板中使用不需要在前面板显示,那可以在前面板中右击不用的控件,高级-->隐藏显示控件,这样就不会在前面板出现了DXDiTa9E3d labview前面板怎么插入图片,还有去掉网格 2018-11-06 13:49u3434u | 分类:其他编程语言| 浏览2344次

分享到: 2018-11-06 14:13网友采纳 仅仅是美化的话,在前面板中粘贴进来就行了; 网格嘛,你说的是图中的这个选项所指代的网格不?这个网格在运行的时候是不显示的呀,你把圈出来的勾选去掉,编辑时也不显示了RTCrpUDGiT labview怎么隐藏前面板的菜单栏和工具栏? 2018-08-26 16:53wlfry2009 | 分类:Windows | 浏览748次分享到: 2018-08-27 21:08 提问者采纳

delphi制作多文档界面

最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI示范程序,这个程序的功能是打开和保存图形文件(包括位图、图标等),为了完成这个任务,我们有一个大概的计划,计划内容如下: (1)建立主窗体(一个MDI父窗体),包括菜单。 (2)为【File | Open…】和【File | Save…】菜单选项编写代码。 (3)为Windows菜单上的Cascade、Tile和Arrange All选项编写代码。 (4)建立MDI子窗体。 (5)建立一个About对话框。 (6)然后再回忆和欣赏一下这段工作。 时间就是金钱,即刻就做吧。 一、创建主窗口窗体 首先创建一个主窗口窗体,一个MDI应用程序的主窗口的FormStyle属性必须设置为fsMDIForm。不但要为应用程序增加File Open和File Save 对话框,还要增加一个菜单。 1、启动Delphi,并从主菜单选择【File | New | Application】; 2、把主窗体的Name属性设置为MainForm; 3、把Caption属性设置为Picture Viewer; 4、把FormStyle属性设置为fsMDIForm; 好了,下面为此窗体增加一个菜单,利用Delphi特性,引进一个预定义菜单,具体如下:1、点击组件选项板的Standard标签,并点击MainMenu按钮;

2、把MainMenu组件点击放置到窗体上,具体放到哪个地方无所谓了,因为在运行阶段,代表菜单的图标只是占地方而不显示,这是非可视化组件。 3、把MainMenu组件Name属性改为MainMenu; 4、双击MainMenu组件,就会出现Menu Designer对话框; 5、在MainMenu上点击鼠标右键,选择“Insert From Template…”,将出现Insert Template对话框;

java图形界面之电子算盘

Java图形用户界面 院系: 计算机系姓名:后人好乘凉 一实验目的 ●使学生综合运用图形用户界面设计的概念; ●使学生熟悉使用中间面板,组成层次复杂的GUI界面; ●使学生掌握使用事件驱动编程; 二实验环境及实验准备 ●所需硬件环境为微机; ●所需软件环境为JDK、Eclipse; ●掌握Java下界面容器与基本组件的基本知识与应用; ●掌握Java下事件处理模型; ●掌握Java下图形绘制的方法; 三实验内容 (一)、设计实现电子算盘,并完成测试; [题目描述及要求] 给小朋友设计一个电子算盘。要求绘制电子算盘界面,设计并实现打珠算过程(界面参考如下图示)。 电子算盘参考界面示意 程序源代码: package calculator;

import java、awt、Color; //导入 import java、awt、GridLayout; import java、awt、Container; import javax、swing、JLabel; import javax、swing、JButton; import javax、swing、ImageIcon; import javax、swing、JPanel; import javax、swing、JFrame; import javax、swing、JTextField; import java、awt、event、*; public class Calculator extends JFrame{ public int totalNumber; public int t = 0; public boolean[] isAddFive = new boolean[5]; public int number[] = new int[5]; public ImageIcon picture = new ImageIcon(System、getProperty("user、 dir") + "/算珠、jpg" ); //添加图片 public ImageIcon picture1= new ImageIcon(System、getProperty("user、 dir") + "/算珠1、jpg" ); Container con = getContentPane(); JPanel j1 = new JPanel(); JPanel j2 = new JPanel(); JPanel j3 = new JPanel(); JPanel time=new JPanel(); JLabel q = new JLabel(); JLabel nA = new JLabel(); JLabel Time=new JLabel(new ImageIcon("、/时钟、jpg")); //添加时钟标签的图片 JTextField a = new JTextField(); JButton Buttons_1[][] = new JButton[2][5]; JButton Buttons_2[][] = new JButton[5][5]; GridLayout gl_1 = new GridLayout(2,5); GridLayout gl_2 = new GridLayout(5,5); GridLayout gl_3 =new GridLayout(); public Calculator() { super("电子算盘"); setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE); setBounds(100,100,600,400); setVisible(true); setLayout(null); AbacusPanel(); } public void AbacusPanel() // 算盘面板

修改PE壁纸以及启动界面_最简单的WINPE_DIY美化教程_文库首发

最简单的WINPE DIY美化教程 –制作你自己的个性U盘系统 注:本教程以老毛桃WinPE系统为例您还在为WINPE那难看的界面发愁吗? 您还在为网上找不到全面的DIYPE教程发愁吗? 您还在为找到DIY教程以后看不懂而发愁吗? ………… 今天让我以最通俗的、最简单的、最易学的方式带着你美化属于你自己的PE系统。让你在日常使用PE维护的过程中个性十足。 在教程开始之前小生特此声明:本人并非专业认识,只是对电脑有着浓厚兴趣,喜欢DIY电脑界面,如果在教程中如有遗漏或者错误,希望友友们指出。本人不胜感激! 教程: 预处理: 1.打开资源管理器——工具——文件夹选项——打开隐藏所有文件(如图) 2.插入你的U盘并打开,你会发现有名字为MiniPE的文件夹,在本教程中需要修

改其中的:BJ2008.XPM(包含启动界面)以及OP.WIM(包含桌面壁纸) 3.复制BJ2008.XPM,OP.WIM到你自己硬盘里面任意位置(如D:\),修改的时候 起到备份的作用。 4.下载需要的工具:WimTool,WinGZip,XnView。(教程最后附有下载地址) 修改WINPE界面&启动界面(需要软件WimTool) 1.打开wimtool(),界面如图所示 2.将从U盘里面复制出的OP.WIM解开映像 注:* 在这部可能出现解开失败,如果你是WIN7用户可以尝试修改UAC为如图

同WIMTOOL同目录即可(教程最后附有WIMGAPI.DLL) 3.然后解开映像(如:存放位置D:\OP文件夹中如图)

4.然后替换同名图片为你自己喜欢的壁纸名字必须一致哟 成美化

delphi制作登陆界面

///////////////////// (一)项目文件 test.dpr ////////////////////// program SerialGet; uses Forms, UMain in UMain.pas {frmMain}, ULogin in ULogin.pas {frmLogin}, UDataModule in UDataModule.pas {DataModule1: TDataModule}, {$R *.res} begin Application.Initialize; if CreateMutex then //创建句柄,判断此应用程序是否在运行 begin //调用全局函数,创建并显示登陆界面 if doLogin then //登陆成功 begin Application.CreateForm(TfrmMain, frmMain); //数据模块文件不须在这儿创建,因为 ULogin.pas 中已创建 //Application.CreateForm(TDataModule1, DataModule1); Application.Run; end else //登陆不成功 begin try DataModule1.free; Application.terminate; except end; end; end else begin DestroyMutex; //释放句柄 end; end. //////////////// (二)登陆窗体 ULogin.pas ULogin.dfm ////////////////// unit ULogin; interface uses ...... type ... ... ...

java图形化界面练习及答案

作业标题:第四次练习题(总分:得分:分)一、单选题(共有题目15题,共计分) 1. 下列属于容器的组件有 A. JButton B. JPane C. Canvas D. JTextArea 学生的答案: B 标准答案: B 该题分数: 学生得分: 分 2. 下列方法中,不属于WindowListener接口的是A. windowOpened() B.

windowClosed() C. windowActivated() D. windowAdapter 学生的答案: D 标准答案: D 该题分数: 学生得分: 分 3. 下列不属于Swing中组件的是( )。 A. JPanel B. JTable C. Menu D. JFrame 学生的答案: C 标准答案: C 该题分数:

学生得分: 分 4. 以下Swing组件中哪一个不是顶层容器组件( )。 A. 框架 B. 对话框 C. 面板 D. 小程序 学生的答案: C 标准答案: A 该题分数: 学生得分: 0分 5. 对于Swing基本控件单选框,若要使两个单选框对象之间具有相互排斥的关系,需要( )。 A. 创建两个单选框对象时定义相同的对象名 B. 将两个单选框对象放在同一个面板上

定义一个ButtonGroup对象group,将两个单选框对象加到group中D. 让两个单选框排成一行或一列 学生的答案: C 标准答案: C 该题分数: 学生得分: 分 6. 容器被重新设置大小后,( )布局管理器的容器中的组件大小不随容器大小的变化而改变。 A. CardLayout B. FlowLayout C. BorderLayout D. GridLayout 学生的答案: B 标准答案: B 该题分数: 学生得分: 分

java实验报告实验六Java图形用户界面

信息工程学院 Java程序设计实习报告 JAVA图形用户界面 实验六Java图形用户界面 1.实验目的 (1)掌握图形用户界面基本组件。 (2)了解如何使用布局管理器对组件进行管理。 (3)掌握Java事件处理机制。 2.实验内容 实验题 1 编写一个模拟计算器的程序,使用面板与网格布局,添加一个文本框,10个数字按钮(0-9),4个加减乘除按钮,一个等号按钮,一个清除按钮,要求将计算公式与结果显示在文本框中。 运行结果: 实验报告的内容与格式按任课教师的要求书写。

加法: 主要代码: private void initComponents() { jButton1 = new javax、swing、JButton(); jButton2 = new javax、swing、JButton(); jButton3 = new javax、swing、JButton(); jButton4 = new javax、swing、JButton(); jButton5 = new javax、swing、JButton(); jButton6 = new javax、swing、JButton(); jButton7 = new javax、swing、JButton(); jButton8 = new javax、swing、JButton(); jButton9 = new javax、swing、JButton(); jButton10 = new javax、swing、JButton(); jButton11 = new javax、swing、JButton(); jButton12 = new javax、swing、JButton(); jButton13 = new javax、swing、JButton(); jButton14 = new javax、swing、JButton(); jButton15 = new javax、swing、JButton(); jTextField1 = new javax、swing、JTextField(); setStub(null); jButton1、setText("3"); jButton1、addActionListener(new java、awt、event、

网站界面如何美化的几种方法

武汉网页设计培训:网站界面如何美化的几种方法 网站的界面是网站给来访者留下第一印象的直接窗口。网站界面的漂亮与否直接影响到访客对网站的兴趣以及停留时间!所以网站的界面美化工作是应该引起足够重视的。那到底该如何美化网站界面使他容易被访客所接受呢?今天我们就跟大家一起来探讨一下网站界面的美化的几个原则以及具体的方法。 一、网页设计界面优化原则 武汉网页设计界面优化原则一、行业特征 网站就像你的穿着打扮,要有自己的风格自己的个性。但是这种个性要与自己的身份职务相搭配。也就是说你的网站要根据你的行业特点进行美化,比如说科技类网站善用蓝色,娱乐类网站善用橙色,政府门户类网站大多用红色调。 总结下就是你的网站界面要符合行业特征! 武汉网页设计界面优化原则二、访客喜好 如果你的访客是年轻人充满活力个性十足的,那你的网站配色以及LOGO就要符合这个定位符合你受众的喜好。你的网站色调也要表现的充满活力动感十足!举个例子说太平洋女性网主色调就是紫色,因为紫色代表的就是时尚浪漫。试问哪些女性朋友们不渴望一份浪漫与时尚呢? 总结下就是作访客喜欢的! 武汉网页设计界面优化原则三、统一性原则 你的网站一定色调要统一,最好属于同一个色系。至多不要超过三个颜色!如果颜色过多会导致人们审美疲劳!慢慢的离开你的网站!从而失去一定访客,导致PV下降! 总结下就是统一色调效果佳! 武汉网页设计界面优化原则四、细致入微 俗话说细节决定成败,一个网站的界面就是一个个小像素块组成的,做网站的美化要尽量细致到每一个小细节,不要觉得一个点一个图片的小角不重要。其实不然,一个人穿的邋里邋遢就可以看出这人性格如何了。一个人非常漂亮就是嘴角戴着一粒米,这严重影响自己的形象。网站也是一样的你不注意界面的小细节访客就有理由认为你这网站内容不怎么样!

java课程设计报告_简单图形界面计算器的设计

Java 课程设计 简单图形界面计算器的设计 课程名称 Java程序设计 选题名称简单图形界面计算器的设计 专业 班级 姓名 学号 指导教师 简单图形界面计算器的设计

一、设计任务与目标 本次java程序设计我的设计任务是设计一个图形界面(GUI)的计算器应用程序并且能够完成简单的算术运算。本次任务的基本要求是这个计算器应用程序可以完成十进制的加、减、乘、除、求倒、取余、开方运算,且有小数点、正负号、退格和清零功能。而我要在此基础上添加一项千位符分隔符的功能,即以三位为一级,在输入的一串数字中每三位加入一个逗号,这项功能国际通用,并已经成为惯例,会计记账都用这种方法便于账目核算与管理。 GUI计算器设计的具体目标: 1.完成十进制的加、减、乘、除、求倒、取余和开方运算; 2.有小数点和正负号加入运算; 3.有退格、复位和清零的功能; 4.有千位符分隔符的功能,即在输入的一串数字中每三位加入一个逗号。 二、方案设计与论证 1.设计目标的总体分析 (1)设计目标的需求分析:计算器是现在一个普遍应用的工具,能够解决许多人工所无法计算的数据,节省大量宝贵的时间。 (2)设计目标的功能分析:实现计算器系统的功能,主要有两个功能模块:输入和输出。 (3)设计原则:基于计算器系统要具有适用性广、操作简便等特点,本系统预计要达到以下几个目标:①满足以上的基本功能要求;②能够在常见的计算机及其操作系统上运行。 2.设计的基本思路 利用GUI的界面设计,将整个大设计分为三块,分别是数据的输入,运算符

功能符的控制和数据的输入输出显示。利用Swing控件,数据的输入由0~9这10个按钮来表示,用“+”、“-”、“*”、“/”、“1/x”、“%”、“sqrt”这7个按钮来表示加、减、乘、除、求倒、取余、开方运算,用“.”和“±”这2个按钮来表示小数点和正负号,用“Back”、“CE”和“C”这3个按钮来表示退格、复位和清零的功能,数据的输入输出显示由文本字段来表示。将计算器的总体界面设计好后,再将代码分别写入不同的按钮的源程序中。 我要完成的一项改进,即添加一个拥有千位符分隔符功能的按钮,按下这个按钮能够在输入的一串数字中每三位加入一个逗号并且显示出来。我要在之前的界面设计的基础上多添加一个按钮“$”来表示千位符分隔符,并且将功能代码写入这个按钮的源程序中。 三、程序流程图,程序清单与调用关系 1. 程序流程图:

用delphi设计图书管理系统

《数据库技术与应用》 大作业 题目:数据库应用系统的设计和实现 适用专业: 指导老师: 班级: 姓名: 学号: 中南大学信息科学与工程学院 2010 年1月

图书是人类文明的见证,随着高科技的发展各式各样图书越来越多,图书馆和书店的管理也越来越复杂。如今图书管理系统是一 个书店或一个图书馆的必备系统。一个安全可靠并且对于用户比较实用的图书管理系统来说变得尤其重要。 本次设计设计了一个在DELPHI平台基于SQL Server 2000开发出的图书管理系统。在系统的设计上面实现了该系统的交互式界面。 从系统的需求分析、系统设计、系统实现入手,详细阐述了一个 C/S 结构的图书管理信息系统主要功能的实现过程。每一阶段均给 出了相应的理论依据和实现内容,并介绍了系统实现部分的主要算法。整个系统的设计与开发严格按照软件工程思想进行,从需求分析到系统设计和实现、从原型系统设计到迭代完善,本图书管理系统涵盖了六个主要的子系统:图书资料管理、读者资料管理、借书 操作、还书操作、删除、修改和查询处理,提高了工作的准确率和效率。 本图书管理信息系统是利用计算机管理信息处理的迅速、准确、可靠且具有强大存储能力的突出特点,全面提高图书馆的管理水平 和工作效率,并以及时、完整的业务经营资料,为图书馆的及时转换提供一定的支持。

关键词:数据库,SQL server2000,Delphi 7,图书管理系统 1.1 课题研究现状分析 在现金信息化发达的社会,图书的发行量与日俱增。因此需要对书籍资源、读者资源、借书信息、还书信息进行管理,及时了解各个环节中信息的变更,有利用管理效率的提高。传统的图书馆需要制作有署名与对应编号的书卡,由读者按分类查找再交由图书管理员来处理借书工作,还书也要人工翻阅大量的记录,这样使得工作量大并及其繁琐,效率变得低下。建立网上电子图书管理系统的目的是实现无纸化图书管理,减轻管理员的工作量,方便读者查阅所需的图书,还可以利用网络实现提醒读者还书的功能。管理员还可以对各种图书进行分析统计,对过时、损坏的图书进行删除。达到降低成本提高工作效率的目标。 1.1.1本领域内已开展的研究工作 1. 理论研究基础 (1)数据库设计方法的完整化、多样化,又有多学科的综合性。 (2)数据库设计步骤的规范化和细致化。 (3)数据库技术不断的更新,并不断增加新的技术,兼容性范围也逐渐扩大。2. 技术层面的支持 SQL Server的普遍应用,并得到的用户的支持,与Windows操作系统的完全兼容性也决定了它在今天仍然有着庞大的使用群体。SQL Server2000作为后台数据库与前台开发软件Visual Basic、C#、Visual C++、Delphi等都能够无缝连接。 1.1.2已经取得的研究成果 (1)开发出了一套系统的数据库理论,安全性、完整性、并发性、恢复性都有完整的概述。 (2)随着Internet的迅猛发展,数据库在各个领域作为后台存储得到了广泛的 支持。 (3)完善的数据库管理并与前台开发软件的结合使用开发了一系列优秀的图书管理系统,在商业、经济等方面得到了广泛的应用。

java中界面的美化

JAVA软件界面美化 JAVA软件界面美化 使用过JAVA软件的人,很多人会对JAVA软件界面的美观不满意,尽管JAVA Swing 推出了JAVA Look And Feel 机制,但这些JAVA可更换机制的外观目前数量实在太有现(网络上可供下载使用的目前大概有30个),开发、定制也不是很容易,难以满足用户快速多变的个性化需求。(据我所知国人当中目前基本没有开发JAVA Look And Feel 的,前段时间本人使用了 SkinLookAndFeel这个皮肤化的JAVA Look And Feel ,l以为日子会好过,不过最终我失望了:(),毕竟同时是专家级的JAVA程序员又是美术大师的人太少了! 总之,Java Look And Feel 虽然好,但开发不易,难以个性化,根本上来说还是没有代码和视图分离。最理想的状态是什么?应该美术设计师设计图形,程序员开发程序,各不相关,互不牵扯,那才是完美的结果。SkinLookAndFee 在某种程度上其实已经做到,但它在代码的机制上实在不怎么样,可移植性差,皮肤配置不容易。。。等等。(哎,本人刚开始对她是很期望了,不过还是验证了“期望大失望大”这句话) 不过SUN就是这么牛X,其JAVA 5.0已经给了我一个很好的答案,使用Synth吧, Custom UIs are a breeze with the newest Swing look and feel,让你不用写JAVA代码也可以轻松创建漂亮的JAVA界面。 还等什么,让我们开始Synth时尚之旅行,让你的JAVA软件外观更漂亮吧!注意:本文假定你是个已经入门的JAVA开发者,有基本的JAVA GUI开发经历.如果你现在什么都不懂,也想体验Synth,那就留言吧,我会帮你的.:)。 本文的开发环境是Eclipse3.1+JDK5.0,请记得:如果想使用Syth,那么你必须使用jdk5.0。首先,让我们美化一个基本JDK组件:按钮(JButton)的外观。 1、在Eclipse开发环境中,建立一个JAVA工程,添加一个一个名为MyButton.java类 2、MyButton.java类的代码如下: package demo.synth; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; public class MyButton { JFrame frame = new JFrame("Test Buttons"); JButton jButton = new JButton("JButton"); // 按钮 public MyButton() { frame.setLayout(new FlowLayout()); frame.getContentPane().add(jButton); } public void show() { frame.pack(); frame.show(); } public static void main(String[] args) { MyButton tb = new MyButton(); tb.show(); } } 该类可直接运行,运行后效果如下图:

办公室环境美化实施方案

办公室环境美化方案

————————————————————————————————作者:————————————————————————————————日期: 2

办公室环境美化方案 一办公室环境美化具体实施方案 (一) 颜色 我认为我们办公室在颜色方面应该改善以下几点: 1.地板:我认为我们这间办公室的地板应该改为棕色,不容易被污染 2.墙壁:我们这间办公室在我们领导方向的墙壁不动,仍为白色;而在我们员工这三面的 墙壁应该设计为浅黄色,这样颜色有区分,既有主次之分,又可以给我们工作人员以温馨的感觉。 3.办公室桌面为赤色,这样办公桌布显得脏和乱。 (二)摆放更改

1.为了使我们的办公环境更加美化,我们应该改变摆放位 置,在我们每个办公桌上都加上蓝色隔板,这样就像每个人 一间办公桌一样,也免得在自己工作时不能集中精力。 2.我认为在我们墙壁上的墙角上应该画上常春藤,这样使我们自己在 看到墙壁的常春藤时心情更好一点,没有那么枯燥、无味。 3.在我们每个办公桌上都摆放一盆仙人球,这样做的话可以有效隔离电脑电磁波辐射,还可以吸附空气中的灰尘,抑制空气中的细菌,净化室内空气。 4.在领导的办公桌上放上一盆君子兰, 同样和仙人球一样的效果。 5.在我们的每个窗台上放上富贵竹, 这样我们的这间办公室就不会显得单调无味了, 而且空气还格外的好,视觉感觉也很不错。 6.最后我们在办公室与领导对面的墙壁上挂上植物装饰画,这样装饰画的主题和我们 办公室的美化环境的主题相一致,恰到好处。 (三)桌椅 为了减少噪音的来源:我们可以在打字机与计算机底下垫上毛垫,并在其余的设备底下置橡

delphi可视化编程讲稿

第三章D e l p h i的窗体与组件 教学要求: 掌握窗体、编辑类组件、按钮类控件、列表类控件、分组类组件、时钟组件、菜单组件、工具栏组件和工具按钮、多选项卡的的属性、方法与事件,学会使用这些组件设计应用程序的界面。 掌握ShowMessage、ShowMessageFmt、MassageDlg、MassageDlgPos、InputBox、InputQuery对话框函数与对话框过程的特点,并能熟练应用。熟悉公共对话框控件组件的属性,方法、事件及应用。 掌握创建新窗体的两种不同的方法及其应用。 掌握windows的模式与非模式窗体的概念及应用方法。 掌握焦点的含义,与焦点相关的属性,应用焦点设计程序的方法。 了解CreateMessageDialog函数的定义与用法、speedbutton和文件有关的控件的属性、方法与事件。

从本章开始,将介绍Delphi 编程的一些基本方法。通过这一部分的学习,可以了解开发Windows 环境下应用程序的一些关键技术,并可以方便、快捷地开发一般的应用程序。 为了简化编程工作,Delphi 提供了许多功能强大的函数和类。其中很重要的一部分就是组件类。本章将重点介绍常见组件及其编程应用。 现在深入普及的Windows操作系统中,方便快捷的人机交互界面主要是通过窗体和对话框实现的。在Delphi中,这些窗体和对话框就是程序设计阶段的窗体,Delphi的可视化设计工作就是在窗体中进行的。 通常,窗体中会有文字输入、滚动条、复选框、单选框、按钮等一系列组件,通过这些直观易懂的组件,可以方便的实现多种多样的功能。在Delphi中,这些运行期间出现在窗体和对话框中的组件称为可视组件。在窗体中,还可以放置一些运行期间非可视的组件,对应其它的TComponent子类。这些不可视组件集中地实现了一些特殊的功能。比如,时钟控制等功能。 ●TComponent组件类,所有的组件都是由这个类派生来的。 ●TControl子类(可视组件)可分为两类:窗体组件和图 形组件。

Java基础实验报告-图形用户界面设计

南京工程学院 实验报告 课程名称 JAVA基础 实验项目名称图形用户界面设计 实验学生班级 实验学生姓名 学号 同组学生姓名 实验时间 实验地点 实验成绩评定 指导教师签字年月日

一、实验目的和要求 1.掌握Java Swing组建的使用方法,包括窗口、框架、对话框、面板、文本编辑框、按钮、组合框等多种布局方式,掌握窗口菜单和快捷菜单设计方式。 2.理解委托时间处理模型,掌握不同组件、不同事件的事件处理方法,设计出能够响应事件的Java图形用户界面。 3.熟悉在组件上绘图的方法。 二、实验题目 用表格存储并显示个人所得税税率表,给定一个月收入值,计算应缴的个人所得税。 三、实验方法与步骤(需求分析、算法设计思路、流程图等) 算法设计思路:本次实验题目为计算个人所得税,所以本人从网上找到了国家最新的税收政策,以下为截图:

因此,我设计了以下核心算法 public void actionPerformed(ActionEvent e) { if(e.getSource()==button_b) { double wage=Double.parseDouble((String)text_wage.getText()); double tax = 0; if(wage<=3500) tax=0; if(wage>3500&&wage<=5000) tax=(wage-3500)*0.03; if(wage>5000&&wage<=8000) tax=(wage-3500)*0.1-105; if(wage>8000&&wage<=12500) tax=(wage-3500)*0.2-555; if(wage>12500&&wage<=38500)

VC之美化界面篇

VC之美化界面篇 作者:白乔 链接:https://www.doczj.com/doc/c814815421.html,/1046595482643.html 本文专题讨论VC中的界面美化,适用于具有中等VC水平的读者。读者最好具有以下VC基础: 1.大致了解MFC框架的基本运作原理; 2.熟悉Windows消息机制,熟悉MFC的消息映射和反射机制; 3.熟悉OOP理论和技术; 本文根据笔者多年的开发经验,并结合简单的例子一一展开,希望对读者有所帮助。 1 美化界面之开题篇 相信使用过《金山毒霸》、《瑞星杀毒》软件的读者应该还记得它们的精美界面: 图1 瑞星杀毒软件的精美界面 程序的功能如何如何强大是一回事,它的用户界面则是另一回事。千万不要忽视程序的用户界面,因为它是给用户最初最直接的印象,丑陋的界面、不友好的风格肯定会影响用户对软件程序的使用。 “受之以鱼,不若授之以渔”,本教程并不会向你推荐《瑞星杀毒软件》精美界面的具体实现,而只是向你推荐一些常用的美化方法。

2 美化界面之基础篇 美化界面需要先熟悉Windows下的绘图操作,并明白Windows的幕后绘图操作,才能有的放矢,知道哪些可以使用,知道哪些可以避免…… 2.1Windows下的绘图操作 熟悉DOS的读者可能就知道:DOS下面的图形操作很方便,进入图形模式,整个屏幕就是你的了,你希望在哪画个点,那个地方就会出现一个点,红的、或者黄的,随你的便。你也可以花点时间画个按钮,画个你自己的菜单,等等…… Windows本身就是图形界面,所以Windows下面的绘图操作功能更丰富、简单。要了解Windows下的绘图操作,要实现Windows界面的美化,就必须了解MFC封装的设备环境类和图形对象类。 2.1.1设备环境类 Windows下的绘图操作说到底就是DC操作。DC(Device Context设备环境)对象是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无关的,所以你在对不同的设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全不变。这也就是Windows的设备无关性。 MFC的CDC类封装了Windows API 中大部分的画图函数。CDC的常见操作函数包括: Drawing-Attribute Functions:绘图属性操作,如:设置透明模式 Mapping Functions:映射操作 Coordinate Functions:坐标操作 Clipping Functions:剪切操作 Line-Output Functions:画线操作 Simple Drawing Functions:简单绘图操作,如:绘制矩形框 Ellipse and Polygon Functions:椭圆/多边形操作 Text Functions:文字输出操作 Printer Escape Functions:打印操作 Scrolling Functions:滚动操作 *Bitmap Functions:位图操作 *Region Functions:区域操作 *Font Functions:字体操作 *Color and Color Palette Functions:颜色/调色板操作 其中,标注*项会用到相应的图形对象类,参见2.1.2内容。 2.1.2图形对象类 设备环境不足以包含绘图功能所需的所有绘图特征,除了设备环境外, Windows还有

网站界面分析和优化设计 (2)

网站界面分析和优化设计 一、网站界面优化的重要性。 web技术的发展,使得互联网用户从单纯浏览信息时代迈入了更加注重交互、更加人性化的时代。网民使用互联网产品已经不仅仅只关注工作效率,而是越来越关心使用过程中的体验。网站界面的本质是让用户做主,操作简便性、强调交互性。 在互联网发展的过程中,最初希望通过建立网站来抢占市场、树立形象的企业逐步认识到网站提供优质的用户体验才是可持续发展的竞争优势,而网站服务界面的设计效果是用户体验好坏的直接影响因素。某电商网站Allurent曾经做过一个调查,当用户对某一网站的验较差时,80%的用户表示不会再次访问该网站,60%的用户表示影响到了自己对该商家的整体印象,而40%的用户表示甚至可能不再去该商家的实体店铺。用户不良体验无疑是在与网站界面的交互中形成的。目前,很多商业网站已经充分认识到周到、贴心的网站界面设计对于企业利益获取的重要性。很多跨国公司如雅虎、惠普、IBM微软、苹果、等都先后成立了用户体验研究机构,尝试将用户体验的研究成果应用到界面设计中来,国内互联网企业如百度、腾讯等也都建立了相应的研究团队。 二、网站界面优化的核心要素 网站服务界面是指网站为用户办事服务和提供信息的网页内容展现方式。关注服务界面,就是要做好网页界面的优化设计工作。基于用户体验进行网站服务界面优化设计,需要将用户体验从不同层次、

维度进行分解,提取与网页界面相关的要素,然后才能对相应要素实施具体的优化设计。 Adaptive Path公司的创始人James Garrett对用户体验的要素进行过较为系统地研究,将用户体验划分为战略、范围、结构、框架、表现10个核心要素,如图所示。这5个层面自下而上逐步的从抽象转为具体。 图1. 用户体验要素模型 这一用户体验要素模型中与界面优化直接相关的是框架层和表现层的四个关键要素,即界面设计、导航设计、信息设计和视觉设计。我们主要讨论界面设计这一主要要素。 三、网站界面的优化 3.1提高页面响应速度 随着科技的发展用户等待网页加载的耐性越来越低。2009年,微软搜索引擎必应(bing)进行过一项调查,研究页面载入速度和其他网站指标是否有明显相关性。根据报告显示,每2秒钟的延迟页面会使用户满意度降低3.8%的,减少4.3%的单位用户收入和减少4.3%

使用SkinMagic美化界面

使用SkinMagic美化界面 网络上的SkinMagic版本繁多,而且试用版,破解版并存,各版本之间支持的皮肤文件也不尽相同,因此经常有人在网上询问为何添加了SkinMagic没有效果甚至导致程序崩溃之类的问题、这里有一个可用的破解版本(包含VC6使用的库和支持的常用皮肤文件)SkinMagicToolkitV2.2.31、请注意这个包的大小为1.31M,如果小于1.31M说明下载不完全,则无法使用,建议使用迅雷下载、 一:文件说明 SkinMagicLib.h 必须的头文件,请添加到工程中、 SkinMagic.lib + SkinMagic.dll 动态链接库配套使用 编译时需要在工程中添加SkinMagic.dll,程序运行时需要SkinMagic.dll 以下版本的编译出来的程序运行时不再依赖SkinMagic.dll SkinMagicLibMD6.lib 静态链接库,用于VC6的Release版编译 SkinMagicLibMT6.lib 静态链接库,用于VC6的Debug版编译 二:使用步骤 1、把SkinMagicLib.h, SkinMagicLibMT6.lib, SkinMagicLibMD6.lib放到你的VC6工程目录下 2、在StdAfx.h中添加 #include "SkinMagicLib.h" 3、在工程设置中添加对应的库 Win32 Release中填上SkinMagicLibMD6.lib Win32 Debug中填上SkinMagicLibMT6.lib 4、在InitInstance()函数的开始处添加初始化SkinMagic资源的代码、 VERIFY(1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL, NULL, NULL)); 5、在InitInstance()函数中加载皮肤文件并设置程序皮肤、 你可以选择添加皮肤文件到资源中,并编译到程序中、或者程序在运行时动态加载皮肤文件a. 比如添加corona.smf,设置资源类型为"SKINMAGIC", 资源ID为IDR_SKIN_CORONA CBossKeyDlg dlg; m_pMainWnd = &dlg; //加载SkinMagic皮肤 VERIFY(1 == LoadSkinFromResource(NULL, (LPSTR)IDR_SKIN_CORONA, "SKINMAGIC")); VERIFY(1 == SetWindowSkin(m_pMainWnd->m_hWnd, "MainFrame")); VERIFY(1 == SetDialogSkin("Dialog")); int nResponse = dlg.DoModalEx(bStartShow); if (nResponse == IDOK) { } else if (nResponse == IDCANCEL) { } b. 程序在运行时动态加载皮肤文件 CBossKeyDlg dlg;

医疗器械软件界面美化设计

医疗器械软件界面美化设计 一、规格要求:所有图片必需是位真彩色、*格式,同一类图片尺寸大小必须一致 二、风格参考:要求对所有图标统一制订并使用一种风格(包括色调风格和文字字体风 格等),可以参考类医学风格 三、图片要求:所有按钮图片叠放在背景图片上都能自然融合一体 四、具体图片需求如下: 1.主背景: 1)要求:简单、淡色调、半透明(可考虑用我司,图片靠右下) 2)数量:个 ) 尺寸:≥× 2.工具栏背景: 1)要求:简单、淡色调、半透明,并且倍左右方向拉伸变形不明显(可考虑使 用我司名称,图片靠右,小字体) 2)数量:个 3)尺寸:≥× 3.子框架通用背景: 1)要求:简单、淡色调、半透明、与主背景色调兼容,并且倍方向拉伸变形不 明显 2)数量:个 3)尺寸:≥× 4.大按钮<类正方形>: 1)要求:图片文字的上下结构组成, 图片能直观的表现出按钮的功能 2)其它要求:每个按钮都必需有四种不同状态的图片,四种状态分别为:鼠标 悬停、鼠标按下、鼠标弹起、按钮失效 3)所需制作的按钮名称:信息、采集、分析、报告、查询、对比、左眼、右 眼 4)数量:×+个空按钮×种状态 (个) ) 尺寸:≈× 5.按钮<长方形>: 1)要求:图片文字的左右结构组成(如文字一行无法容纳,可以使用两行,最 多两行,并且要上下对齐), 图片能直观的表现出按钮的功能 2)其它要求:每个按钮都必需有四种不同状态的图片,四种状态分别为:鼠标 悬停、鼠标按下、鼠标弹起、按钮失效 3)所需制作的按钮名称:自动播放、暂停、下一帧、上一帧、拉直、对比、自 动测量、地形图、删除已存图片、显示、保存、报告、显示已存图片、上一

实验五 Java图形界面及多线程

实验五图形界面及多线程 【实验目的】 一、掌握Jpanel的使用方法; 二、掌握JAVA简单图形界面的设计; 三、掌握JAVA多线程控制。 【实验内容】 一、在一个Jpanel中显示一个小球,当点击鼠标时,开始移动小球;当小球撞到Jpanel的边框时,小球将反弹回去继续移动。小球用一个线程来控制其移动; 二、每点击一次鼠标,增加一个移动的小球,最多产生20个小球,随机选择小球的颜色; 三、增加功能,当两个小球相撞时,它们将各自反弹。 【实验结果】 //小球类 import java.awt.Color; import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Ellipse2D; import java.util.Random; public class Ball { private double x; private double y; private double xR=30; private double yR=30; private double xMove; private double yMove; private Color color; private Ellipse2D shape; private static Random random=new Random(); public Ball(){ color=new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256)); xMove=Math.cos(random.nextDouble()*6.24)*10;

相关主题
文本预览
相关文档 最新文档