当前位置: 58彩票app下载 > 58彩票网络 > 正文

DELPHI美化界面,窗体标签

时间:2019-11-13 17:11来源:58彩票网络
深信今后太超多DELPHI的技士在做窗体标签时都以在用PAGECONTROL生机勃勃类的控件,但该类控件有叁个白璧微瑕是:未有一个“关闭”的开关。要兑现关闭日常是右键关闭或双击关闭。

深信今后太超多DELPHI的技士在做窗体标签时都以在用PAGECONTROL生机勃勃类的控件,但该类控件有叁个白璧微瑕是:未有一个“关闭”的开关。要兑现关闭日常是右键关闭或双击关闭。

1.透明难题。

为此自个儿做了一个稍为另类一点的,不用PAGECONTROL或TABCONTROL,而是用PANEL,其它再加三个IMAGE控件(用它来加载二个“关闭”按键的图样卡塔尔

要再度调治分界面确实很辛勤,早前用DELPHI开辟的分界面都很土,和WEB真是不能够比。(作者原先用的是DELPHI7卡塔 尔(英语:State of Qatar),今后回看起来,DELPHI难做的缘故是:未有透明控件。全部控件都以不透明的,並且超越贰分一控件正是栗色的,后生可畏放到窗体上,就如一块膏药相符贴在地点。就算分界面上放几副图片也不便和控件的这种灰灰的颜料融合起来。所以,一贯在想QQ是怎么支付的。照旧挺钦佩Tencent那帮家伙的。

意义如下:

新兴展开DELPHI2008,竟然发掘成点控件支持背景,非常是PANEL控件,比原先大增了多个ParentBackGround属性。这一个意识让小编触动拾贰分。透明难点一蹴而就了平日,就算不能够像WPF或许FLAX那样设置透明度,然而最少能和背景融为生机勃勃体,不会像一块膏药了。那样就使得在窗体上停放图片成了或者。

图片 1

2.开关控件

假若您的“关闭”图片做能够一点,那么就能够假乱真了。

继之有发生了叁个新的标题,就是开关。不管用哪些项目标按键,都以铁红的,未有颜色设置属性。尽管使用SPEEDBUTTON,FLAT属性设置成TRUE,当鼠标移上去 的时候,照旧会并发三个和图表和不切合的灰框,好丑。

但可惜的是,自个儿技能水平有限,并不可能将其写成控件,还望高的们将它写成控件,让此外的DELPHI爱好者更加好便的行使(假诺有亟待采用的话卡塔 尔(阿拉伯语:قطر‎。

图片 2

摘自 andylist的专栏

   

...

本人想要让那几个灰框完全和背景融为生龙活虎体,根本不能做到,展开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

3.PAGECONTROL

是因为大家现在那个体系用到了大气的PAGECONTROL,但是寻常意况下那一个PAGECONTROL是一贯不ParentBackGround,同样会在背景上边世八个黄铜色的边框.

图片 4

由于品种需求,PAGECONTROL的TAB页还需求扩大七个关门按键,为了偷懒,用OWNE奇骏DROW,自个儿画了四个X跻身,那样的结果变成画面更是难看。边框一条大概的线条不能够废除掉。继续切磋TABECONTROL代码。发掘,当STYLE设置成非tsTabs的时候,就回撤销掉边框。

图片 5

这一个开采意味着PAGECONTROL依然足以用的,只然而TAB供给和睦画。切磋了半天TencentTT,发现她的PAGECONTROL的头是用图片和一些神效画出来的,其实做起来也挺轻巧的,只但是要坐一些各类线条的图样。偷个懒,先不用图形画二个。

出于前面包车型地铁觉察,现在的PANEL是支撑透明的,就用PANEL画一个TAB页的头。

图片 6

那般就能够用那么些控件去决定PAGECONTROL了。当然这么些控件的关闭按钮依旧利用了SPEEDBUTTON,若是换到前边的和谐写的SPEEDBUTTON,何况用图片,就能够有很好的效应了。

有了那些根基,在在这里些PANEL上安装图片的话,就能够很便利的造成很好看的成效了。

4.没有CAPTION的窗体

WINDOWS暗许的窗体的最下边都以多少个深铁锈红条的CAPTION,况且动手独有多个种类按键,固然想和睦加二个也不便利。假诺一切窗体风格选择图片的画,着条藏青的先充足不和睦。所以必需撤回掉。

图片 7

   

兑现情势超级轻松,把窗体的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:Nousedelphi2009Test界面CapPanel2BmpButtonCloseButton.bmp',

'D:Nousedelphi2009Test界面CapPanel2BmpButtonMaxButton.bmp',

'D:Nousedelphi2009Test界面CapPanel2BmpButtonMinButton.bmp',

'D:Nousedelphi2009Test界面CapPanel2BmpButtonRestoreButton.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.

   

与此相类似分界面包车型客车鼓吹技工为主做到了。

主窗体如下:

图片 8

接下去的办事正是交给美术工作,制作图纸和筛选颜色。

5.尾声美术工作给小编的结果

(还不是很乐意,继续修正卡塔尔

图片 9

 

编辑:58彩票网络 本文来源:DELPHI美化界面,窗体标签

关键词: