123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- unit fGLAbout;
- interface
- uses
- Winapi.Windows,
- Winapi.Messages,
- Winapi.ShellAPI,
- System.SysUtils,
- System.Variants,
- System.Classes,
- Vcl.Graphics,
- Vcl.Controls,
- Vcl.Forms,
- Vcl.Dialogs,
- Vcl.StdCtrls,
- Vcl.ExtCtrls,
- Vcl.Imaging.jpeg,
- //
- fGLDialog;
- type
- TGLAbout = class(TGLDialog)
- LabelCopyright: TLabel;
- PanelYears: TPanel;
- imgOpenGL: TImage;
- imgSourceForge: TImage;
- imgGLScene: TImage;
- LabelVersion: TLabel;
- StaticTextVersion: TStaticText;
- LabelGeoblock: TLabel;
- Label1: TLabel;
- Label3: TLabel;
- FreeAndOpenSource: TLabel;
- Label2: TLabel;
- procedure imgSourceForgeDblClick(Sender: TObject);
- procedure imgGLSceneDblClick(Sender: TObject);
- procedure imgOpenGLDblClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure BuiltWithDelphiDblClick(Sender: TObject);
- private
- function GetFileInfo(const FileName: TFileName): TVSFixedFileInfo;
- function ReadVersionInfo(FileName: TFileName): TFileName;
- end;
- var
- GLAbout: TGLAbout;
- implementation
- {$R *.dfm}
- procedure GotoURL(Handle: integer; const URL: string);
- var
- S: array[0..255] of char;
- begin
- ShellExecute(Handle, 'Open', StrPCopy(S, URL), nil, nil, SW_SHOW);
- end;
- procedure TGLAbout.BuiltWithDelphiDblClick(Sender: TObject);
- begin
- inherited;
- GotoURL(Handle, 'http://www.embarcadero.com');
- end;
- procedure TGLAbout.FormCreate(Sender: TObject);
- begin
- inherited;
- StaticTextVersion.Caption := ReadVersionInfo(ParamStr(0));
- end;
- function TGLAbout.GetFileInfo(const FileName: TFileName): TVSFixedFileInfo;
- var
- Handle, VersionSize: DWord;
- SubBlock: string;
- Temp: Pointer;
- Data: Pointer;
- begin
- SubBlock := '\';
- VersionSize := GetFileVersionInfoSize(PChar(FileName), Handle);
- if VersionSize > 0 then
- begin
- GetMem(Temp, VersionSize);
- try
- if GetFileVersionInfo(PChar(FileName), Handle, VersionSize, Temp) then
- if VerQueryValue(Temp, PChar(SubBlock), Data, VersionSize) then
- Result := PVSFixedFileInfo(Data)^;
- finally
- FreeMem(Temp);
- end;
- end;
- end;
- procedure TGLAbout.imgGLSceneDblClick(Sender: TObject);
- begin
- GotoURL(Handle, 'http://www.glscene.org/');
- end;
- procedure TGLAbout.imgOpenGLDblClick(Sender: TObject);
- begin
- GotoURL(Handle, 'http://www.opengl.org/');
- end;
- procedure TGLAbout.imgSourceForgeDblClick(Sender: TObject);
- begin
- GotoURL(Handle, 'http://www.sourceforge.net/projects/glscene/');
- end;
- function TGLAbout.ReadVersionInfo(FileName: TFileName): TFileName;
- type
- TGetWords = record
- case boolean of
- True: (C: cardinal);
- False: (Lo, Hi: word);
- end;
- var
- VerSize, Wnd: cardinal;
- Buf, Value: Pointer;
- MS, LS: TGetWords;
- begin
- VerSize := GetFileVersionInfoSize(PChar(FileName), Wnd);
- if VerSize > 0 then
- begin
- GetMem(Buf, VerSize);
- GetFileVersionInfo(PChar(ParamStr(0)), 0, VerSize, Buf);
- VerQueryValue(Buf, '\', Value, VerSize);
- with TVSFixedFileInfo(Value^) do
- begin
- MS.C := dwFileVersionMS;
- LS.C := dwFileVersionLS;
- Result := Format('%d.%d.%d Build %d', [MS.Hi, MS.Lo, LS.Hi, LS.Lo]);
- end;
- FreeMem(Buf);
- end
- else
- Result := 'Unknown'; // or LoadResString(@sUnknown);
- end;
- end.
|