學(xué)習(xí)DELPHI程序開(kāi)發(fā)中的幾則應(yīng)用技巧

字號(hào):

Delphi是全新的可視化編程環(huán)境,為我們提供了一種方便、快捷的Windows應(yīng)用程序開(kāi)發(fā)工具。它使用了microsoft windows圖形用戶界面的許多先進(jìn)特性和設(shè)計(jì)思想,采用了彈性可重復(fù)利用的完整的面向?qū)ο蟪绦蛘Z(yǔ)言(object-oriented language)、當(dāng)今世界上最快的編輯器、最為的開(kāi)發(fā)工具之一。對(duì)于廣大的程序開(kāi)發(fā)人員來(lái)講,使用delphi開(kāi)發(fā)應(yīng)用軟件,無(wú)疑會(huì)大大地提高編程效率。另外DELPHI是一個(gè)開(kāi)放系統(tǒng),只要靈活使用一些控件,即可開(kāi)發(fā)出各種類型的系統(tǒng),不論N-Tie程序、多線程程序、分布計(jì)算程序(包括DCOM和CORBAR)、TCP程序、Web程序、ActiveX、中間件、推程序(Push),甚至你可以用它來(lái)寫匯編程序。下面筆者就列舉幾則DELPHI的開(kāi)發(fā)應(yīng)用事例。
    1、實(shí)現(xiàn)鏈接效果
    該效果是表示當(dāng)鼠標(biāo)指向某字體,該字體就出現(xiàn)下劃線,鼠標(biāo)指針變?yōu)橐恢种福聪潞缶痛蜷_(kāi)瀏覽器或郵件編寫器的功能,請(qǐng)按下列辦法做:
    先在一個(gè)窗體中加入一個(gè)Label1,在OnMouseMove事件里加入下列代碼
    procedure TForm1.Label1MouseMove(Sender: TObject;shift:Tshiftstate;x,y:integer);
    begin
    Label1.Font.Style:=[fsbold,fsunderline];
    Label1.Font.Color:=clYellow;
    end;
    接著在Form1的OnMouseMove事件里加入下列代碼
    procedure TForm1.FormMouseMove(Sender: TObject;shift:Tshiftstate;x,y:integer);
    begin
    Label1.Font.Style:=[fsbold];
    Label1.Font.Color :=clmaroon;
    end;
    procedure TForm1.Label1Click(Sender: TObject);
    begin
    Shellexecute(handle,nil,pchar('mailto:test@21cn.com'),nil,nil,sw_shownormal);
    end;
    再將Label1.Cursor的鼠標(biāo)指針設(shè)為crHandPoint,那么就有這種效果了。
    2、獲取計(jì)算機(jī)的身份信息
    獲取計(jì)算機(jī)的身份信息功能表示通過(guò)程序設(shè)計(jì),達(dá)到自動(dòng)獲取機(jī)器的名字和IP地址的目的。要實(shí)現(xiàn)這個(gè)功能,我們可以使用DELPHI程序提供的TCP控件來(lái)完成。下面是一個(gè)調(diào)用了WINSOCK的獨(dú)立單元的一段功能代碼,我們可以把它直接嵌入到自己的程序中去。
    uses Winsock;
    procedure TForm1.FormCreate(Sender: TObject);
    var
    wVersionRequested : WORD;
    wsaData : TWSAData;
    begin
    {創(chuàng)建 WinSock}
    wVersionRequested := MAKEWORD(1, 1);
    WSAStartup(wVersionRequested, wsaData);
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var p : PHostEnt; s : array[0..128] of char; p2 : pchar;
    begin
    {得到計(jì)算機(jī)名稱}
    GetHostName(@s,128);
    p:=GetHostByName(@s);
    Memo1.Lines.Add(p^.h_Name);
    {得到機(jī)器IP地址}
    p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    Memo1.Lines.Add(p2);
    end;
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    {釋放 WinSock}
    WSACleanup;
    end
    3、修改顯示分辨率
    Windows提供給我們兩個(gè)API函數(shù),可以動(dòng)態(tài)調(diào)整顯示器的分辨率,他們是EnumDisplaySettings() 和ChangeDisplaySettings(),下面的這個(gè)源代碼實(shí)現(xiàn)了在兩中分辨率之間的變換,并且可以不用重新啟動(dòng)計(jì)算機(jī):
    function DynamicResolution(X, Y: word): BOOL;
    var
    lpDevMode: TDeviceMode;
    begin
    Result := EnumDisplaySettings(nil, 0, lpDevMode);
    if Result then
    begin
    lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
    lpDevMode.dmPelsWidth := X;
    lpDevMode.dmPelsHeight := Y;
    Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
    end
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if DynamicResolution(640, 480) then
    ShowMessage('Now is 640*480');
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    if DynamicResolution(800, 600) then
    ShowMessage('Now is 800*600'); end;