通用的关于对话框

来源:互联网 发布:js中字符串转换成数组 编辑:程序博客网 时间:2024/05/17 02:20

    每当完成一个软件作品的时候,我们需要一个about对话框!

    为了省去这样的重复工作,我们有必要制作一个通用的关于对话框!


    根据他们的共性,可以分两部分:

   一、单位信息

   二、程序信息


   单位信息:主要为单位名称、单位地址、单位电话、单位E-Mail、单位网址;

   程序信息:主要为此程序对计算机硬件需求、计算机软件需求和程序版本。


   为了美观,可以在对话框左上方,放一个logo!

   整体的窗体布局图,如下图,所示:


在程序实现部分,需要填写打开网址和主程序版本号。


打开网址需要使用WIN32函数ShellExecute;

他的原型为:

HINSTANCE ShellExecute(  __in_opt  HWND hwnd,  __in_opt  LPCTSTR lpOperation,  __in      LPCTSTR lpFile,  __in_opt  LPCTSTR lpParameters,  __in_opt  LPCTSTR lpDirectory,  __in      INT nShowCmd);

我们只要三个参数即可:句柄、网址、打开方式

代码如下:

    ShellExecute(Handle, nil, PChar(Label10.Caption), nil, nil, SW_SHOWNORMAL);

读取程序版本号,需要使用如下函数:

1. GetFileVersionInfo

函数原型:

BOOL WINAPI GetFileVersionInfo(  __in        LPCTSTR lptstrFilename,  __reserved  DWORD dwHandle,  __in        DWORD dwLen,  __out       LPVOID lpData);

2. VerQueryValue

函数原型:

BOOL WINAPI VerQueryValue(  __in   LPCVOID pBlock,  __in   LPCTSTR lpSubBlock,  __out  LPVOID *lplpBuffer,  __out  PUINT puLen);

3. GetModuleFileName

DWORD WINAPI GetModuleFileName(  __in_opt  HMODULE hModule,  __out     LPTSTR lpFilename,  __in      DWORD nSize);

具体代码u_about.pas

unit u_about;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls, ShellApi;type  Tfrm_about = class(TForm)    mo_about: TMemo;    Label7: TLabel;    Label8: TLabel;    Label5: TLabel;    Label6: TLabel;    Label9: TLabel;    Label10: TLabel;    Image1: TImage;    Label2: TLabel;    StaticText1: TStaticText;    StaticText2: TStaticText;    Label1: TLabel;    procedure Label10Click(Sender: TObject);    procedure FormShow(Sender: TObject);  private    { Private declarations }  public    verStr:string;    function GetCDPFileVersion(FileName: String): String;    { Public declarations }  end;var  frm_about: Tfrm_about;implementation{$R *.dfm}procedure Tfrm_about.Label10Click(Sender: TObject);begin//    ShellExecute(Handle, nil, PChar(Label10.Caption), nil, nil, SW_SHOWNORMAL);end;function Tfrm_about.GetCDPFileVersion(FileName: String): String;var  InfoSize, Wnd: DWORD;  VerBuf: Pointer;  VerInfo: ^VS_FIXEDFILEINFO;begin    Result := '1.0.0.0';    InfoSize := GetFileVersionInfoSize(PChar(FileName), Wnd);    if InfoSize<>0 then    begin      GetMem(VerBuf, InfoSize);      try        if GetFileVersionInfo(PChar(FileName), Wnd, InfoSize, VerBuf) then        begin          VerInfo:=nil;          VerQueryValue(VerBuf, '\', Pointer(VerInfo), Wnd);          if VerInfo<>nil then            Result:=Format('%d.%d.%d.%d',                          [VerInfo^.dwFileVersionMS shr 16,                          VerInfo^.dwFileVersionMS and $0000ffff,                          VerInfo^.dwFileVersionLS shr 16,                          VerInfo^.dwFileVersionLS and $0000ffff]);        end;      finally        FreeMem(VerBuf, InfoSize);      end;    end;end;procedure Tfrm_about.FormShow(Sender: TObject);var  szExePathname: array [0..266] of char;  hMoudleA: DWORD;begin  hMoudleA := GetModuleHandle(nil);  GetModuleFileName(hMoudleA, szExePathname, MAX_PATH);  verStr := GetCDPFileVersion(string(szExePathname));  mo_about.Lines.Append(#13);  mo_about.Lines.Append('主程序版本号:');  mo_about.Lines.Add('             ' + verStr);end;end.




原创粉丝点击