通用的关于对话框
来源:互联网 发布: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.
- 通用的关于对话框
- 通用的“关于本软件”对话框
- 关于通用对话框!!!
- 通用对话框的简单使用
- 选择文件夹的通用对话框
- 通用对话框
- 通用对话框
- 通用对话框
- Web上的通用对话框封装
- web上的一些通用对话框[摘]
- 通用对话框类的数据成员
- VC中通用对话框的子类化
- Qt之标准通用对话框的使用
- Qt之标准通用对话框的使用
- Qt之标准通用对话框的使用
- WIN32汇编语言之通用对话框的使用
- C#界面设计之通用对话框的使用
- MFC通用对话框的字体对话框失败问题
- 轻装上阵拥抱明天—写在龙年开工的第一天
- 为什么我们苦逼的程序员难晋升
- 使用XCat管理集群用户的正确步骤
- Linux进程间的通信,信号量的使用,生产者消费者
- 解读和分析Linux核心源码的两种方法
- 通用的关于对话框
- Linux Socket编程 C
- Linux Socket编程 详解
- Linux Socket编程 实例
- Linux Socket编程 总结
- box2d核心概念应用到游戏之初步理解
- Linux socket编程实例:echo服务器程序
- JSON的理解
- Linux Socket编程 续