科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Delphi编程实现3D图形修饰技术

Delphi编程实现3D图形修饰技术

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文论述了用Delphi进行图形界面修饰的技术,给出了窗口渐变色背景、3D边界、3D边框的实现方法。

作者:尹小元 来源:csdn开发高手 2007年10月31日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
3、中间铜柱子程序

  本段程序是用来画窗口中间的铜柱,只要给出不同的颜色RGB值就能画出不同颜色的柱子。

procedure draw_sroll(Sender:TForm;X0,Y0,W,H,R,G,B,lw:integer);
var i,J,j1,J2,J3,m,X,Y,i1,i2:integer;
begin
 J1:=R div lw-2;
 J2:=G div lw;
 J3:=B div lw+2;
 m:=lw div 3;
 with Sender do
 begin
  for i:=0 to lw do
  begin
   i1:=i;
   i2:=i;
   if h=0 then i1:=0;
   if w=0 then i2:=0;
   if i<m then j:=m-i else j:=i-m;
   Canvas.pen.color:=rgb(R-J1*J,G-J2*J,BJ3*J);
   canvas.moveTo(i1+X0,i2+Y0);
   canvas.lineTo(i1+W+X0,i2+H+Y0);
  end;
 end;
end;

  4、3D框制作子程序

  本段程序是用来画控件周围的边框,使该控件看起来有立体感,只要给出不同的颜色RGB值就能画出不同颜色的边框,ww是立体景深。

procedure draw_rect(Sender:TForm;X0,Y0,W,H,R,G,B,lw,ww,fg:integer);
 var ii,i,J,j1,J2,J3,m:integer;
 begin
  J1:=R div lw-2;
  J2:=G div lw;
  J3:=B div lw+2;
  m:=lw div 3;
  if fg=1 then{fg=0 ê.°.}
  begin
   j1:=j1 div 2+(j1+2) div 3;
   j2:=j2 div 2+(j2+2) div 3;
   j3:=j3 div 2+(j3+2) div 3;
  end;
  with Sender do
  begin
   Canvas.Brush.Style:=bsClear;
   for ii:=0 to lw do
   begin
    if fg=0 then
    begin
     i:=ii;
     if i<m then j:=m-i else j:=i-m;
    end
    else i:=lw-ii;
    j:=ii;
    Canvas.pen.color:=rgb(R-J1*J,G-J2*J,B-J3*J);
    canvas.RoundRect(i+X0-lw,i+Y0-lw,X0+W-i+lw, H+Y0-i+lw,ww,ww);
  end;
 end;
end;

  利用以上子程序就可实现一些3D效果,实现的算法就是利用循环语句作画,至于语句为什么要这样写,这是我通过多次试验调试出来的,正因为如此该算法不可能很完善,您可以对此改进作出更完美的效果。

  最后,利用上面提供的子程序就可完成上图所示的界面编制,其程序代码如下:

procedure TForm2.FormPaint(Sender: TObject);
begin
 draw_bk(Form2,60,60,255);//画蓝色渐变背景
 draw_roll(Form2,0,0,640,480,250,200,100,10);
 //画边框周围铜柱
 with Image1 do draw_rect(Form2,left,top,width,height, 250,200,100,10,1,1); //画图片框
 with Panel1 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel2 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel3 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel4 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel5 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel6 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel7 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel8 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel9 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel10 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel11 do draw_rect(Form2,left,top,width, height*2+2,250,238,238,10,1,1);
 with Panel13 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel14 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel16 do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 //以上画键盘
 with sele_fun do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with Panel15 do draw_rect(Form2,left,top,222,height, 250,238,238,10,1,1);
 with Panel15 do draw_rect(Form2,left-11,top-11,242, 350,250,258,238,10,1,1);
 draw_sroll(Form2,291,5,0,470,250,200,100,12);
 with gd do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
 with gk do draw_rect(Form2,left,top,width,height, 250,238,238,10,1,1);
end;

  本文带有源程序,该程序在Delphi 6.0下调试通过,无需扩展控件支持,纯软件方式实现,在界面设计上具有很大的灵活性,与图片界面相比有其方便性,并且制作出来的界面有自己鲜明的特色。

  结束语

  本文阐述了不借助OpenGLDirect3D图形库自己编程实现3D效果的方法,给出了实现一个键盘界面的完整源代码。在工作中究竟使用什么来实现3D和其它效果,要看工作性质而定,例如开发图形效果表现丰富的游戏软件,就要用到OpenGL或Direct3D技术,至于一些行业应用和工具软件一般使用手工编程改善一下界面效果即可,就像上面的代码,将比使用图形库的程序大大节省资源,而且易维护、易管理、兼容性也好。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章