请问如何将自己所画的不规则图片加到程序界面中做出不规则界面,或是按钮?有没有例子给一个?不胜感激!(100分)

  • 主题发起人 主题发起人 xoenice
  • 开始时间 开始时间
X

xoenice

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何将自己所画的不规则图片加到程序界面中做出不规则界面,或是按钮?有没有例子给一个?不胜感激!
 
去www.51delphi.com下在abc控件包!那里面有实现你要的功能的控件
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=328609
 
procedure TForm1.FormCreate(Sender: TObject);
var
hd:HRGN;
begin

hd:=CreateRoundRectRgn(0,0,Width,height,50,50);
SetWindowRgn(handle,hd,true);
end;

基本上不规则窗体,比如说你想做一个跟位图一样的窗体,
它的原理就是,通过对位图的每一个像素进行分析,
如果它的颜色不是位图里面你想去掉的背景色,
那么我们就把它通过CombineRgn加到窗体的Rgn.
然后SetWindowRgn(handle,hd,true);
我估计那些桌面精灵就是这么做的(个人观点).
还有个例子
procedure TForm1.FormCreate(Sender: TObject);
var
r1,r2,r3,r4,r5: hrgn;

begin

r1 := createellipticrgn(0,0,round(clientwidth / 2),clientheight);
r2 := createellipticrgn(round(clientwidth / 2),0,clientwidth,clientheight);
r3 := createellipticrgn(round(clientwidth / 4 ),round(clientheight / 4 *3),round(clientwidth / 4 *3),clientheight);
r4 := createrectrgn(0,0,0,0);
r5 := createrectrgn(0,0,0,0);
combinergn(r4,r2,r1,rgn_or);
combinergn(r5,r4,r3,rgn_or);

setwindowrgn(handle,r5,true);
deleteobject(r1);
deleteobject(r2);
deleteobject(r3);
deleteobject(r4);
deleteobject(r5);

end;



end.
 
好多的控件都可以实现
 
可是为什么到最后显示的图片总是灰色而不是图片本身的颜色呢?
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
rgn:HRGN;
begin

begin
Path(Canvas.Handle);
SetBkMode( Canvas.Handle, TRANSPARENT );
Canvas.Font.Name:= '宋体';
Canvas.Font.Size:=100;
Canvas.TextOut( 20, 20, '漂亮吗?');//用"漂亮吗?"作为form的形状
EndPath(Canvas.Handle);
rgn:= PathToRegion(Canvas.Handle);
SetWindowRgn( Handle, rgn, true );
Color := clRed;
end;

end.

 
请教tseug,如果是一张有多种颜色的图片呢,如何保持他的原色。
 
你在Form上放一个TImage就知道了
 
后退
顶部