麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

用API函數在DELPHI中實現“非典型”窗體

2019-11-18 18:34:42
字體:
來源:轉載
供稿:網友
 用API函數在DELPHI中實現“非典型”窗體
    現在的一些共享軟件特別是一些多媒體播放器軟件為了吸引用戶,很注重程序界面的設計。實際上,我們使用API函數也可以實現那些好看又另類的效果。
    1.異形窗體
    窗體只能是方的嗎?不是,還可以有其他形狀。這要用到兩個Win32 API函數。首先用CreateRoundRectRgn()函數在窗體內界定一個橢圓形區域。這里所指的區域(region)是一個特殊的API對象,我們可以在區域內部進行填充和剪裁等操作,從而定義窗體的外部特征。然后調用SetWindowRgn()函數繪制,更進一步還可以再用CombineRgn()函數來合并多個區域,例如在Delphi的單元文件中加入以下代碼:
    PRocedure TForm1.FormCreate(Sender: TObject);
    var
      FRegion1:THandle;
      FRegion2:THandle;
    begin
      FRegion1:=CreateRoundRectRgn(20,20,200,200,300,300);//界定一個橢圓區域
      FRegion2:=CreateRectRgn(170,170,400,400);//界定一個矩形區域
      CombineRgn(FRegion1,FRegion1,FRegion2,RGN_OR);//將兩個區域連接起來
      SetwindowRgn(handle,FRegion1,True);//對連接后的區域進行繪制
    end;
    程序段中的CreateRoundRectRgn()函數用來創建一個圓角矩形區域,它的原型為:
    HRGN CreateRoundRectRgn(
    int nLeftRect, // 左上角的X坐標
    int nTopRect, // 左上角的Y坐標
    int nRightRect, // 右下角的X坐標
    int nBottomRect, // 右下角的Y坐標
    int nWidthEllipse, //圓角所在橢圓的寬
    int nHeightEllipse  // 圓角所在橢圓的高
    );
    其他圖形如多邊形、橢圓形等都有對應的API函數,它們的原型如下:
    HRGN CreateEllipticRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
    HRGN CreateEllipticRgnIndirect( CONST RECT *lprc)
    HRGN CreatePolygonRgn(CONST POINT *lPPT,int cPoints, int fnPolyFillMode)
    HRGN CreatepolypolygonRgn(CONST POINT *lppt,CONST INT *lpPolyCounts,int nCount,int fnPolyFillMode)
    HRGN CreateRectRgn(int nLeftRect,int nTopRect,int nRightRect,int nBottomRect)
    HRGN CreateRectRgnIndirect(CONST RECT *lprc)
    以上函數的參數很好理解,用來說明圖形內置矩形的坐標或指向該矩形。重點來看一下另外兩個函數:
    函數原型:SetWindowRgn(
              HWND hWnd,         //當前窗體的句柄
              HRGN hRgn,          //當前區域的句柄
              BOOL bRedraw,      //重繪標志
              )
    函數功能:該函數把已創建的區域的句柄作為參數傳遞給當前窗體的句柄,并在該區域范圍內繪制窗體;
    函數原型:CombineRgn(
              HRGN hrgnDest,  // 連接目的區域的句柄
              HRGN hrgnSrc1,  // 第一個連接源區域的句柄
              HRGN hrgnSrc2,  // 第二個連接源區域的句柄
              int fnCombineMode  // 連接模式
              )
    函數功能:該函數將兩個區域合并為一個新的區域,其中連接模式可取以下值:
    參數值          作用
    RGN_AND         由區域1與區域2的共有部分即交集創建新的區域
    RGN_COPY        創建區域1的副本作為新的區域
    RGN_DIFF        連接屬于區域1但不屬于區域2的部分為新的區域
    RGN_OR          連接區域1和區域2的所有部分即并集
    RGN_XOR。     連接區域1和區域2的所有部分即并去掉共有部分
    2.空心窗體
    這種窗體的特點是好端端的一個窗體,中間被挖了一部分。例如在Delphi的單元文件中加入以下代碼:
    procedure TForm1.FormCreate(Sender: TObject);
    var
      FRegion3:THandle;
    begin
      Canvas.Font.Name:='華文行楷';//設置字體 
      Canvas.Font.Size:=100;//設置字號
      BeginPath(Canvas.Handle); //得到vanvas上繪制的輪廓
      TextOut(form1.Canvas.Handle,0,20,'程序春秋',8);//將“程序春秋”四個字所占區域摳掉
      EndPath(Canvas.Handle);
      FRegion3:=PathToRegion(Canvas.Handle);//將以上區域賦給窗體
      SetwindowRgn(Handle,FRegion3,True);//開始繪制
    end;
    這里主要用到了三個API函數:
    函數原型:BOOL BeginPath(HDC hdc  //設備環境的句柄)
    函數功能:開始接收當前設備環境的路徑軌跡;
    函數原型:BOOL EndPath(HDC hdc  //設備環境的句柄) 
    函數功能:停止接收并將已接收的路徑軌跡賦給當前設備環境的句柄
    函數原型  BOOL TextOut(
              HDC hdc, // handle of device context
              int nXStart, // 起始位置的X坐標 
              int nYStart, // 起始位置的Y坐標
              LPCTSTR lpString, // 字符串地址
              int cbString  //字符串所包含字符數(注意一個漢字占兩個字符)
              )
    函數功能:在指定位置繪制給定字符串。
    小結:學會熟練使用API進行編程,是一項很重要的技能,有時可以達到意想不到的效果。以上幾種技巧旨在拋磚引玉,希望大家充分運用各種技巧,發揮自己想像,設計出更炫的窗體,美化自己的程序

上一篇:Delphi組件與屬性編輯器

下一篇:Delphi程序設計之--慣用法

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 羞羞视频免费网站入口 | 免费a级毛片大学生免费观看 | 日韩中文字幕一区二区三区 | 久久久中| 国产羞羞视频在线观看 | 成人辣文 | 黄色av片在线观看 | 久久精品视频1 | 免费人成在线播放 | 日韩视频一二三 | 欧美一级黄色录像片 | 欧美久久一区二区 | 久久国产综合视频 | 18被视频免费观看视频 | 看免费黄色大片 | 久久精品国产99久久久古代 | 国产视频在线免费观看 | 高清做爰免费无遮网站挡 | 中国美女一级黄色大片 | 欧美大电影免费观看 | 毛片视频网站 | 国产一区亚洲 | 美女在线视频一区二区 | xxxx8| 久久国产亚洲精品 | 国产二区三区在线播放 | 在线观看中文字幕av | 欧美色大成网站www永久男同 | 精品国产乱码久久久久久久 | 成人情欲视频在线看免费 | 一级做受毛片免费大片 | 午夜视频大全 | 国产91亚洲精品一区二区三区 | 精品国产一区二区三区久久久 | 免费在线观看国产精品 | 亚洲精品午夜电影 | 久久丝袜脚交足黄网站免费 | 色的综合 | 欧美精品免费一区二区三区 | 国产精品自在线拍 | 精品黑人一区二区三区国语馆 |