如何做出多邊體的Form?如圓形六邊形等!
解决方案 »
- 提示:ambiguous overloaded call to StrLIComp,如何修改?
- 郁闷啊!请问bpl中能不能实现动态加载后调用其中的自定义类与函数?并且不带包编译!
- 为什么cxgrid的getselectedcount在选择多行后总是返回0
- 大家看看这是什么问题?郁闷死我了!
- 请教:关于dbgrid显示复杂数据
- 如何打印相同内容到两个打印机?
- ##########高手看过来#########
- 关于activeform的问题
- delphi 硬盘获表达问题
- 什么情况下才用到含动态表名的存储过程?
- 改写一个for 语句:怎样把VB 中的 For Each a in A 改写为delphi中相同功能的语句?
- 在状态栏中,怎么动态显示当前时间?
var
HR : HRGN;
begin
HR := CreateEllipticRgn(0,0,Form1.Width,Form1.Height);//圆形
// 多边型用createpolygonrgn
SetWindowRgn(Handle,HR,True);
DeleteObject(HR);
end;
hr:THandle;
small:integer;
begin
//圆的直径取窗体长和宽中短的一个
if Width>=Height then small:=Height
else small:=Width;
hr:=CreateEllipticRgn(0,0,small,small);
setWindowRgn(handle,hr,true);
end;
NewRgn:HRGN;
Points:array[0..6] of tpoint;begin
Points[0]:=point(0,0);
Points[1]:=point(60,0);
Points[2]:=point(90,30);
Points[3]:=point(60,90);
points[4]:=point(30,90);
points[5]:=point(0,30);
//大概计算一下六个点的坐标
// NewRgn:=CreateEllipticRgn(0,0,50,50); // 画圆 NewRgn:=CreatePolygonRgn(Points, High(Points), ALTERNATE);
SetWindowRgn(handle,NewRgn,true);
end;
四四方方的窗体也会变形,利用win32 API函数setwindowrgn就可以将窗口定义为任何形状,以下是将窗口定义为园角矩形的例子:procedure TPortForm.FormCreate(Sender: Tobject);var hr :thandle;beginhr:=createroundrectrgn(0,0,width,height,20,20);//定义园角矩形(win API函数)setwindowrgn(handle,hr,true); //设置园角窗口end;为了使该窗口更好,应在onResize事件处理程序放相同的代码。/////////////////////////////////////用汉字做窗体形状procedure TForm1.FormCreate(Sender: TObject);varrgn:HRGN;beginBeginPath(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 );end;