DELPHI美化界面

1.透明问题。

要重新调整界面确实很麻烦,以前用DELPHI开发的界面都很土,和WEB真是没办法比。(我以前用的是DELPHI7),现在回想起来,DELPHI难做的原因是:没有透明控件。所有控件都是不透明的,并且大部分控件就是灰色的,一放到窗体上,就像一块膏药一样贴在上面。即使界面上放几副图片也难以和控件的那种灰灰的颜色融合起来。所以,一直在想QQ是怎么开发的。还是挺佩服腾讯那帮家伙的。

后来打开DELPHI2009,竟然发现有些控件支持背景,特别是PANEL控件,比以前增加了一个ParentBackGround属性。这个发现让我激动万分。透明问题解决了一般,虽然不能像WPF或者FLAX那样设置透明度,但是至少能和背景融合,不会像一块膏药了。这样就使得在窗体上放置图片成了可能。

2.按钮控件

随后有产生了一个新的问题,就是按钮。不管用什么类型的按钮,都是灰色的,没有颜色设置属性。即使使用SPEEDBUTTON,FLAT属性设置成TRUE,当鼠标移上去 的时候,还是会出现一个和图片和不吻合的灰框,非常难看。

   

我想要让这个灰框完全和背景融合,根本没办法做到,打开SPEEDBUTTON的代码,在他的Paint方法里发现如下代码:

Details := ThemeServices.GetElementDetails(ToolButton);

ThemeServices.DrawElement(Canvas.Handle, Details, PaintRect);

PaintRect := ThemeServices.ContentRect(Canvas.Handle, Details, PaintRect);

原来DELPHI在画一个按钮的时候,不管如何情况,都需要调用ThemeServices.DrawElement(Canvas.Handle, Details, PaintRect);也就是使用WINDOWS操作系统的主题画一个按钮。而WINDOWS操作系统的主题默认设置是灰的。就是这个原因导致了这个膏药的产生。研究了半天代码,没有发现DELPHI提供如何方法或者事件来屏蔽使用操作系统主题画按钮的这段代码。实在没辙,只能自己写一个SPEEDBUTTON控件。

这个控件很简单,就把SPEEDBUTTON控件的代码抄抄过来,然后屏蔽掉ThemeServices.DrawElement(Canvas.Handle, Details, PaintRect);就可以画一个只有图片的SPEEDBUTTON了。

3.PAGECONTROL

由于我们现在这个项目用到了大量的PAGECONTROL,但是正常情况下这个PAGECONTROL是没有ParentBackGround,同样会在背景上出现一个灰色的边框.

由于项目需要,PAGECONTROL的TAB页还需要增加一个关闭按钮,为了偷懒,用OWNERDROW,自己画了一个X进去,这样的结果导致画面更加难看。边框一条粗粗的线条没办法取消掉。继续研究TABECONTROL代码。发现,当STYLE设置成非tsTabs的时候,就回取消掉边框。

这个发现意味着PAGECONTROL还是可以用的,只不过TAB需要自己画。研究了半天腾讯TT,发现他的PAGECONTROL的头是用图片和一些特效画出来的,其实做起来也挺简单的,只不过要坐一些各种线条的图片。偷个懒,先不用图片画一个。

鉴于前面的发现,现在的PANEL是支持透明的,就用PANEL画一个TAB页的头。

这样就可以用这个控件去控制PAGECONTROL了。当然这个控件的关闭按钮还是使用了SPEEDBUTTON,如果换成前面的自己写的SPEEDBUTTON,并且用图片,就会有很好的效果了。

有了这个基础,在在这些PANEL上设置图片的话,就可以很方便的做到很漂亮的效果了。

4.没有CAPTION的窗体

WINDOWS默认的窗体的最上面都是一个蓝色条的CAPTION,并且右边只有三个系统按钮,如果想自己加一个也不方便。如果整个窗体风格采用图片的画,着条蓝色的先非常不和谐。所以必须取消掉。

   

实现方法很简单,把窗体的BorderStyle设置成bsNone,就没有边框了。然后就是放置图片,由于PANEL支持透明,不存在任何问题,右上方放置3个用前面提到的自己开发的SPEEDBUTTON。然后就是要实现圆角和画边框。

代码如下:

unit Unit1;

   

interface

   

uses

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

Dialogs, ExtCtrls, HlCaptionPnl, pngimage, StdCtrls;

   

type

TForm1 = class(TForm)

imgLeft: TImage;

HlCaptionPanel1: THlCaptionPanel;

Memo1: TMemo;

imgRight: TImage;

procedure FormCreate(Sender: TObject);

private

hr:THandle;

{ Private declarations }

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

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

   

procedure DrawFormLine;

procedure CreateHr;

protected

procedure Resize; override;

   

public

{ Public declarations }

end;

   

var

Form1: TForm1;

   

implementation

   

{$R *.dfm}

   

procedure TForm1.CreateHr;

begin

// hr:=CreateRoundRectRgn(0,21,Width,Height,80,80);

hr:=CreateRoundRectRgn(0,0,Width,Height,10,10);

SetWindowRgn(handle,hr,true);

end;

   

procedure TForm1.DrawFormLine;

var

dc: hDc;

Pen: hPen;

OldPen: hPen;

OldBrush: hBrush;

begin

dc := GetWindowDC(Handle);

Self.Refresh;

   

Pen := CreatePen(PS_SOLID, 1, RGB(0, 0, 200));

// Pen := CreatePen(PS_SOLID, 2, RGB(18, 49, 99));

// Pen := CreatePen(PS_SOLID, 1, RGB(0, 255, 0));

OldPen := SelectObject(dc, Pen);

OldBrush := SelectObject(dc, GetStockObject(NULL_BRUSH));

RoundRect(dc,0,0,Width - 1,Height - 1,10,10);

// RoundRect(dc,1,1,Width - 1,Height - 1 ,15,15);

SelectObject(dc, OldBrush);

SelectObject(dc, OldPen);

DeleteObject(Pen);

   

// Pen := CreatePen(PS_SOLID, 1, RGB(255, 255, 255));

Pen := CreatePen(PS_SOLID, 1, RGB(137, 245, 255));

OldPen := SelectObject(dc, Pen);

OldBrush := SelectObject(dc, GetStockObject(NULL_BRUSH));

// Self.Refresh;

RoundRect(dc,1,1,Width - 2,Height - 2,10,10);

SelectObject(dc, OldBrush);

SelectObject(dc, OldPen);

DeleteObject(Pen);

   

   

ReleaseDC(Handle, Canvas.Handle);

   

end;

   

procedure TForm1.FormCreate(Sender: TObject);

begin

CreateHr;

   

imgRight.Left := ClientWidth - imgRight.Width;

imgRight.Top := 0;

imgLeft.Left := 0;

imgLeft.Width := imgRight.Left;

imgLeft.Top := 0;

HlCaptionPanel1.ShowButton('D:\Nouse\delphi2009Test\界面\CapPanel2\Bmp\Button\CloseButton.bmp',

'D:\Nouse\delphi2009Test\界面\CapPanel2\Bmp\Button\MaxButton.bmp',

'D:\Nouse\delphi2009Test\界面\CapPanel2\Bmp\Button\MinButton.bmp',

'D:\Nouse\delphi2009Test\界面\CapPanel2\Bmp\Button\RestoreButton.bmp');

   

end;

   

procedure TForm1.Resize;

begin

inherited;

CreateHr;

end;

   

procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);

var

tmpPoint: TPoint;

const

C_BORDERWIDTH = 4;

begin

tmpPoint.X := Msg.Pos.x;

tmpPoint.Y := Msg.Pos.y;

   

tmpPoint := ScreenToClient(tmpPoint);

   

Memo1.Lines.Add('x:' + IntToStr(tmpPoint.X) + 'y:' + IntToStr(tmpPoint.X));

if (tmpPoint.x <= C_BORDERWIDTH) and (tmpPoint.y <= C_BORDERWIDTH) then

begin

Msg.Result := HTTOPLEFT;//左上

end else

if (tmpPoint.x <= C_BORDERWIDTH) and (tmpPoint.y >= Height - C_BORDERWIDTH) then

begin

Msg.Result := HTBOTTOMLEFT;//左下

end else

if (tmpPoint.x >= Width - C_BORDERWIDTH) and (tmpPoint.y <= C_BORDERWIDTH) then

begin

Msg.Result := HTTOPRIGHT;//右上

end else

if (tmpPoint.x >= Width - C_BORDERWIDTH) and (tmpPoint.y >= Height - C_BORDERWIDTH) then

begin

Msg.Result := HTBOTTOMRIGHT;//右下

end else

if (tmpPoint.x <= C_BORDERWIDTH) then

begin

Msg.Result := HTLEFT;//左

end;

if (tmpPoint.x >= Width - C_BORDERWIDTH) then

begin

Msg.Result := HTRIGHT;//右

end;

if (tmpPoint.Y <= C_BORDERWIDTH) then

begin

Msg.Result := HTTOP;//上

end;

if (tmpPoint.y >= Height - C_BORDERWIDTH) then

begin

Msg.Result := HTBOTTOM;//下

end;

   

end;

   

procedure TForm1.WMNCPaint(var Msg: TWMNCPaint);

begin

DrawFormLine;

   

   

end;

   

end.

   

这样界面的美化技术工作基本完成了。

主窗体如下:

接下去的工作就是交给美工,制作图片和选择颜色。

5.最后美工给我的结果

(还不是很满意,继续修改)

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
制作固定大小的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技术实现外壳扩展的属性页   当用户在资源管理器中调用右键菜单时,会显示一个"属性"菜单项,点击属性菜单项会显示一个属性页,用户可以获得甚至修改文件信息
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: Delphi界面开发是指使用Delphi编程语言和开发环境来创建用户界面的过程。UI美化是指通过优化和装饰界面元素的外观和布局,以提高用户体验和界面的吸引力。在Delphi中,可以使用一些技术和方法来实现UI美化。 首先,可以利用Delphi控件工具箱中提供的丰富的控件和组件来改善界面。通过选择合适的按钮、文本框、标签等控件,并设置它们的颜色、字体、尺寸和边框等属性,可以使界面看起来更加有吸引力和专业。 其次,可以使用Delphi的图形库来实现界面美化。通过添加背景图片、渐变效果、阴影效果等图形元素,可以增加界面的层次感和视觉吸引力。同时,可以通过绘制自定义图形和动画效果来提升用户体验。 此外,可以运用Delphi的布局管理器来优化界面的布局。通过合理使用面板、容器和分组框等容器控件,并使用填充、对齐和边距等属性,可以实现界面元素的良好排列和对齐,从而使界面更加整洁和易于使用。 此外,可以借助第三方工具和库来实现更高级的UI美化效果。例如,可以使用DevExpress、Infragistics等专业的UI控件库,它们提供了丰富的风格、主题和动画效果,可以帮助开发人员实现更具吸引力和专业性的界面。 总结起来,Delphi界面开发中的UI美化可以通过正确选择和配置控件、使用图形库、优化布局和借助第三方工具等方法来实现。通过这些方法,可以使界面更加美观、吸引人,并提升用户体验。 ### 回答2: Delphi是一种强大的编程语言,用于创建Windows桌面应用程序。在Delphi中,可以通过美化用户界面(UI)来提升应用程序的外观和用户体验。 首先,Delphi提供了一系列丰富的可视化组件,可以直接拖放到窗体上,使界面开发变得更加简单和快捷。开发人员可以使用这些组件来创建各种控件,如按钮、标签、文本框、下拉菜单等。通过设置各个控件的属性,如颜色、文字字体和大小,可以自定义它们的外观。 其次,Delphi还提供了大量的界面美化工具和技术。开发人员可以使用图像编辑软件设计自定义的按钮、图标、背景等元素,然后将其导入到Delphi项目中。此外,也可以使用Delphi自带的图标库,选择适合应用程序风格的图标。 此外,Delphi还支持使用资源文件来存储和管理应用程序的界面元素。通过将图像、字体、样式等资源添加到资源文件中,可以简化界面开发和维护过程。通过动态加载资源文件,可以实现不同主题的界面切换。 最后,Delphi还支持第三方界面库和框架,如VCL Styles和FireMonkey。这些库和框架提供了更多的UI美化选项和特性,开发人员可以根据自己的需求选择合适的库来优化界面。 总之,通过使用Delphi提供的可视化组件、界面美化工具和第三方库,开发人员可以轻松实现Delphi界面美化。这样能够提升应用程序的外观和用户体验,使其更加吸引人和易于使用。 ### 回答3: Delphi界面开发主要是通过使用Delphi的可视化设计工具和组件来创建和美化用户界面。下面是一些常见的Delphi界面开发和UI美化的方法: 1. 可视化设计:Delphi提供了强大的可视化设计工具,如窗体设计器和组件面板,可以直观地创建和布局UI元素。通过拖放和调整控件的属性,可以快速构建用户界面。 2. 组件使用:Delphi提供了许多内置的UI组件,如按钮、标签、文本框、列表框等。通过选择合适的组件并设置属性,可以创建出各种各样的界面元素,并实现不同的交互效果。 3. 主题和样式:Delphi允许使用自定义的主题和样式来美化界面。通过集成第三方库或自己编写的样式文件,可以改变控件的外观和风格,使界面更加美观和个性化。 4. 图像和图标:利用Delphi的图像和绘图功能,可以添加背景图像、图标和自定义图形,为界面增添视觉吸引力。可以使用图片组件来加载和显示图像,并通过调整属性来实现滚动、透明和动画效果。 5. 动画和过渡效果:通过使用Delphi的动画特性和过渡效果,可以为界面元素添加动态效果,如淡入淡出、平滑移动、缩放等。这些效果可以增加用户体验和界面的交互性。 6. 响应式布局:为了适应不同的屏幕尺寸和分辨率,可以使用Delphi的布局管理器来自动调整界面的布局。根据不同的设备和窗口大小,控件的位置和大小会自动调整,确保界面的良好显示效果。 总之,通过合理运用Delphi的可视化设计工具、组件、主题、样式、图像和动画特性,可以实现对Delphi界面的开发和UI美化,使应用程序界面更加漂亮、易用、具有吸引力和个性化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值