非正规形状的界面怎么做?(200分)

  • 主题发起人 主题发起人 追梦人0818
  • 开始时间 开始时间

追梦人0818

Unregistered / Unconfirmed
GUEST, unregistred user!
我是一个在校的学生
我本学的是计算机 可我们现在开的还是VFP 太没劲了
为此我自己自学了DELPHI
我很喜欢编程
看到别人有那么漂亮的界面 我好羡慕呀
对于界面方面的杂志我也看可不少 虽说有的看起来能懂
可就是一做起来就不行了 一般杂志上说的都的理论 要自己实现起来我发现这太难了
而且一般杂志上将的都的正规形状的编程 不是椭圆 就是环型*************
我也知道这要 用到的是API函数 可我就是使不好
各位大侠
能不能教在下一手呀[:)]
在这先道谢了
 
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
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
Points: array [1..4] of TPoint;
rgn: HRgn;
begin
Points[1].X:=Width div 2;
Points[1].Y:=0;
Points[2].X:=0;
Points[2].Y:=Height;
Points[3].X:=Width;
Points[3].Y:=Height;
Points[4].X:=Width div 2;
Points[4].Y:=0;
Rgn:=CreatePolygonRgn(Points, 4, ALTERNATE);
SetWindowRgn(Handle, Rgn, True)
end;

end.
 
www.feichuang.com
 
给你一个根据位图建立不规则窗体的函数:
function CreateRgnFromBmp(bmp : HBITMAP):HRGN;
var
bmpSize : BITMAP;
oldbmp : HBITMAP;
R , R1: HRGN;
DC : HDC;
transColor : COLORREF;
iWidth, iHeight, oldHeight : integer;
begin
GetObject(bmp,SizeOf(bmpSize),@bmpSize);
R := CreateRectRgn(0,0,bmpSize.bmWidth, bmpSize.bmHeight);
DC := CreateCompatibleDC(0);
oldbmp := SelectObject(DC,bmp);
transColor := GetPixel(DC,0,0);
for iWidth:=0 to bmpSize.bmWidth -1do
begin
iHeight := 0;
while iHeight < bmpSize.bmHeightdo
begin
if GetPixel(DC,iWidth,iHeight) = transColor then
begin
oldHeight := iHeight;
while (iHeight<bmpSize.bmHeight) and
(GetPixel(DC,iWidth,iHeight+1)=transColor)do
inc(iHeight);
R1 := CreateRectRgn(iWidth,oldHeight,iWidth + 1,iHeight + 1);
CombineRgn(R,R,R1,RGN_DIFF);
DeleteObject(R1);
end else
;
inc(iHeight);
end;
end;
SelectObject(DC,oldBmp);
DeleteDC(DC);
result := R;
end;

//这样调用:
SetWindowRgn(Handle,CreateRgnFromBmp(Bmp.Handle),true);
//Handle 为你的窗体句柄
//Bmp为一个TBitmap对象
 
好,關注!收藏!
 
谢谢你们的解答
不过我不知道只能加载位图 要是有空的话
希望多多帮助
 
后退
顶部