怎么样创建不规则窗口?

darkread 2002-05-17 01:41:01
怎么样创建不规则窗口?比如圆的,
...全文
103 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanciex 2002-08-14
  • 打赏
  • 举报
回复
procedure TForm1.FormPaint(Sender: TObject);
var
t:string;
rgn:HRGN;
begin
BeginPath(Canvas.Handle);

SetBkMode( Canvas.Handle, TRANSPARENT );

// Canvas.Font.Name:= fontname;
canvas.Font.Name:=fonttest.Name;
Canvas.Font.Size:=fontsize;
canvas.Font.Style:=fontstyle;
t:=timetostr(now());
Canvas.TextOut( 0, 20, t); //?"????"??form???

EndPath(Canvas.Handle);

rgn:= PathToRegion(Canvas.Handle);

SetWindowRgn( Handle, rgn, true );


end;
professorzhou 2002-05-17
  • 打赏
  • 举报
回复
好啊
Kuye2002yx 2002-05-17
  • 打赏
  • 举报
回复
调用 ActiveForm 控件,窗体不但是不规则的,而且菜单,按钮都有动态效果的哦~~~
只可惜是 ActiveX 版的。
:(
Billy_Chen28 2002-05-17
  • 打赏
  • 举报
回复
利用win32 API函数setwindowrgn就可以将窗口定义为任何形状,以下是将窗口定义为园角矩形的例子:
procedure TPortForm.FormCreate(Sender: Tobject);
var hr :thandle;
begin
hr:=createroundrectrgn(0,0,width,height,20,20);//定义园角矩形(win API函数)
setwindowrgn(handle,hr,true); //设置园角窗口
end;
为了使该窗口更好,应在onResize事件处理程序放相同的代码。
/////////////////////////////////////
用汉字做窗体形状
procedure TForm1.FormCreate(Sender: TObject);
var
rgn:HRGN;
begin
BeginPath(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;
王集鹄 2002-05-17
  • 打赏
  • 举报
回复
你点[管理]再看一看
有一个回帖被隐藏了
王集鹄 2002-05-17
  • 打赏
  • 举报
回复
你点[管理]再看一看
有一个回帖被隐藏了
王集鹄 2002-05-17
  • 打赏
  • 举报
回复
procedure TForm1.FormCreate(Sender: TObject);
var
vRGN: HRGN;
begin
BeginPath(Canvas.Handle);
SetBkMode(Canvas.Handle, TRANSPARENT);
Canvas.Font.Name := '宋体';
Canvas.Font.Size := 100;
Canvas.TextOut(20, 20, '星 ☆ 星');
EndPath(Canvas.Handle);
vRGN := PathToRegion(Canvas.Handle);
SetWindowRgn(Handle, vRGN, True);
DeleteObject(vRGN);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbRight then Exit;
ReleaseCapture;
Perform(WM_SYSCOMMAND, SC_MOVE + 1, 0);
end;
darkread 2002-05-17
  • 打赏
  • 举报
回复
我是一个delphi初学者,听的一头雾水,能给原代码吗?
有劳了
王集鹄 2002-05-17
  • 打赏
  • 举报
回复
vRGN := CreateEllipticRgn(0, 0, Width, Height); //创建一个区域
SetWindowRgn(Handle, vRGN, True); //设置窗体的区域
DeleteObject(vRGN); //释放资源

(* from help
Following are the functions used with regions.

CombineRgn
CreateEllipticRgn
CreateEllipticRgnIndirect
CreatePolygonRgn
CreatePolyPolygonRgn
CreateRectRgn
CreateRectRgnIndirect
CreateRoundRectRgn
EqualRgn
ExtCreateRegion
FillRgn
FrameRgn
GetPolyFillMode
GetRegionData
GetRgnBox
InvertRgn
OffsetRgn
PaintRgn
PtInRegion
RectInRegion
SetPolyFillMode
*)

参考研究这些函数,你可以画出任意形状的窗体
王集鹄 2002-05-17
  • 打赏
  • 举报
回复
把 RGN(区域)数据 和 相关图片 做到资源中
一个个的播放就可以了

嘻嘻嘻个人观点仅供参考嘻嘻嘻嘻

王集鹄 2002-05-17
  • 打赏
  • 举报
回复
把 RGN(区域)数据 和 相关图片 做到资源中
一个个的播放就可以了

嘻嘻嘻个人观点仅供参考嘻嘻嘻嘻

darkread 2002-05-17
  • 打赏
  • 举报
回复
请问具体每一句程序什么意思,有劳了。
还有想东方影都那样的很不规则的,中间还空了一块的,边上还是波浪型的
cgblaochang 2002-05-17
  • 打赏
  • 举报
回复
有谁会做出桌面宠物那样的图形窗体界面?有无源代码或思路?
王集鹄 2002-05-17
  • 打赏
  • 举报
回复
procedure TForm1.FormCreate(Sender: TObject);
var
vRGN: HRGN;
begin
vRGN := CreateEllipticRgn(0, 0, Width, Height);
SetWindowRgn(Handle, vRGN, True);
DeleteObject(vRGN);
end;

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧