Delphi編程實(shí)現(xiàn)3D圖形修飾技術(shù)

字號:

本文論述了用Delphi進(jìn)行圖形界面修飾的技術(shù),給出了窗口漸變色背景、3D邊界、3D邊框的實(shí)現(xiàn)源代碼和一個(gè)軟件界面的實(shí)例。
    作為一個(gè)程序員,在開發(fā)程序的時(shí)候,都希望自己程序的界面美觀一些,與眾不同一些,有自己鮮明的特色,這需要美化自己的界面。一般的方法是用圖形工具制作一個(gè)圖形界面,再經(jīng)過簡單的編程便可獲得一個(gè)理想的效果,很多能夠界面換膚的程序大多也基于這種思
    想;但程序員一般不精通圖形制作工具,請外面的美工來做也不方便,其實(shí)對一般的3D效果,我們自己也可用程序做。
    編程方式實(shí)現(xiàn)3D效果的方法
    為了改變電腦早期時(shí)候的文字界面的單一狀況,各大軟件公司都作出了不懈努力,先后推出了作為圖形處理工業(yè)標(biāo)準(zhǔn)的OpenGL和微軟研發(fā)的Direct3D,至于一些公司自用的3D技術(shù)更是不計(jì)其數(shù)。但本文提出的方法不需要上面大公司的技術(shù),純粹用Delphi的基本函數(shù)來實(shí)現(xiàn)比較逼真的3D效果。
    我以前作過一個(gè)卡拉OK電腦點(diǎn)歌程序,點(diǎn)歌方式有多種,其中有一種傳統(tǒng)的點(diǎn)歌方式叫編碼點(diǎn)歌,它需要在屏幕上畫一個(gè)點(diǎn)歌鍵盤,用鼠標(biāo)點(diǎn)擊鍵盤(觸摸屏?xí)r用手觸摸)輸入歌曲編碼
    圖中除了迎客松的圖片外,其它如背景、銅柱邊框、3D鍵盤等都是由程序?qū)崿F(xiàn)的,下面我對實(shí)現(xiàn)程序予以簡單說明,上圖界面的完整實(shí)現(xiàn)請看本文附帶的源程序。
    在給出程序之前先說一下技術(shù)思想,Delphi中有些對象具有畫布屬性Canvas,它本身也是一個(gè)對象,它具有很多屬性和方法,這里只列出本文用到的幾個(gè)。
    Canvas.Brush.Style:=bsClear;//設(shè)置畫刷風(fēng)格
    Canvas.pen.color:=rgb(R,G,B);// 設(shè)置畫筆顏色
    Canvas.pen.style:=psSolid;// 設(shè)置畫筆風(fēng)格
    Canvas.pen.width:=1;//設(shè)置畫筆寬度
    procedure MoveTo(X, Y: Integer);
    //將畫筆移到坐標(biāo)(X, Y) 處作為畫畫的起點(diǎn)
    procedure LineTo(X, Y: Integer);
    //從當(dāng)前位置畫一條直線到坐標(biāo)(X, Y) 處
    procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer);
    //根據(jù)給定的參數(shù)畫一個(gè)圓角矩形,X3、Y3用于確定圓角大小
    下面給出3D效果制作子程序:
    1、 背景制作子程序
    本段程序是用來畫背景,只要給出不同的顏色RGB值就能畫出不同的背景。下面的子程序都是利用對象的畫布Canvas并按一定的算法來生成效果。
    procedure draw_bk(Sender:TForm;R,G,B:integer);
    var i,j,k:integer;
    begin
    with Sender do
    begin
    canvas.pen.style:=psSolid;
    canvas.pen.width:=1;
    k:=(B div 3)*2;
    for i:=0 to 480 do
    begin
    if i    if j>B then j:=B;
    Canvas.pen.color:=rgb(R,G,B-j);
    canvas.moveTo(0,i);
    canvas.lineTo(640,i);
    end;
    end;
    end;