source: cprs/trunk/BDK50/BDK32_P50/Source/frmVistAAbout.pas@ 1806

Last change on this file since 1806 was 1678, checked in by healthsevak, 10 years ago

Added this new version of Broker component libraries while updating the working copy to CPRS version 28

File size: 9.5 KB
Line 
1{ **************************************************************
2 Package: XWB - Kernel RPCBroker
3 Date Created: Sept 18, 1997 (Version 1.1)
4 Site Name: Oakland, OI Field Office, Dept of Veteran Affairs
5 Developers: Wally Fort, Joel Ivey
6 Description: Generic About form, simply call ShowAboutBox.
7 Includes display of date, CRC32, and info from
8 Program Info.
9 Current Release: Version 1.1 Patch 47 (Jun. 17, 2008))
10*************************************************************** }
11
12unit frmVistAAbout;
13
14interface
15
16uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
17 Buttons, ExtCtrls, jpeg, jconsts, Dialogs;
18
19TYPE
20 TInteger8 = Int64;
21
22type
23 TfrmVistAAbout = class(TForm)
24 Panel1: TPanel;
25 VistaLogo: TImage;
26 lblProductName: TLabel;
27 lblVersion: TLabel;
28 lblGovStatement: TLabel;
29 OKButton: TButton;
30 lblCRC: TLabel;
31 Memo1: TMemo;
32 lblDate: TLabel;
33 ProgramIcon: TImage;
34 procedure FormCreate(Sender: TObject);
35 private
36 { Private declarations }
37 public
38 { Public declarations }
39 procedure getfileinfo(var Version: String; var ProductName: String); virtual;
40 end;
41
42procedure ShowAboutBox;
43
44implementation
45
46{$R *.DFM}
47
48 CONST
49 table: ARRAY[0..255] OF DWORD =
50 ($00000000, $77073096, $EE0E612C, $990951BA,
51 $076DC419, $706AF48F, $E963A535, $9E6495A3,
52 $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
53 $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,
54 $1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
55 $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
56 $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
57 $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,
58 $3B6E20C8, $4C69105E, $D56041E4, $A2677172,
59 $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
60 $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
61 $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,
62 $26D930AC, $51DE003A, $C8D75180, $BFD06116,
63 $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
64 $2802B89E, $5F058808, $C60CD9B2, $B10BE924,
65 $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,
66
67 $76DC4190, $01DB7106, $98D220BC, $EFD5102A,
68 $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
69 $7807C9A2, $0F00F934, $9609A88E, $E10E9818,
70 $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,
71 $6B6B51F4, $1C6C6162, $856530D8, $F262004E,
72 $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
73 $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
74 $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,
75 $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
76 $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
77 $4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
78 $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,
79 $5005713C, $270241AA, $BE0B1010, $C90C2086,
80 $5768B525, $206F85B3, $B966D409, $CE61E49F,
81 $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
82 $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,
83
84 $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
85 $EAD54739, $9DD277AF, $04DB2615, $73DC1683,
86 $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
87 $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,
88 $F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
89 $F762575D, $806567CB, $196C3671, $6E6B06E7,
90 $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
91 $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,
92 $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252,
93 $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B,
94 $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60,
95 $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79,
96 $CB61B38C, $BC66831A, $256FD2A0, $5268E236,
97 $CC0C7795, $BB0B4703, $220216B9, $5505262F,
98 $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
99 $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,
100
101 $9B64C2B0, $EC63F226, $756AA39C, $026D930A,
102 $9C0906A9, $EB0E363F, $72076785, $05005713,
103 $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
104 $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,
105 $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
106 $81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
107 $88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
108 $8F659EFF, $F862AE69, $616BFFD3, $166CCF45,
109 $A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
110 $A7672661, $D06016F7, $4969474D, $3E6E77DB,
111 $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
112 $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,
113 $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
114 $BAD03605, $CDD70693, $54DE5729, $23D967BF,
115 $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
116 $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);
117
118 // Use CalcCRC32 as a procedure so CRCValue can be passed in but
119 // also returned. This allows multiple calls to CalcCRC32 for
120 // the "same" CRC-32 calculation.
121 PROCEDURE CalcCRC32 (p: pointer; ByteCount: DWORD; VAR CRCValue: DWORD);
122 // The following is a little cryptic (but executes very quickly).
123 // The algorithm is as follows:
124 // 1. exclusive-or the input byte with the low-order byte of
125 // the CRC register to get an INDEX
126 // 2. shift the CRC register eight bits to the right
127 // 3. exclusive-or the CRC register with the contents of
128 // Table[INDEX]
129 // 4. repeat steps 1 through 3 for all bytes
130
131 VAR
132 i: DWORD;
133 q: ^BYTE;
134 BEGIN
135 q := p;
136 FOR i := 0 TO ByteCount-1 DO BEGIN
137 CRCvalue := (CRCvalue SHR 8) XOR
138 Table[ q^ XOR (CRCvalue AND $000000FF) ];
139 INC(q)
140 END
141 END {CalcCRC32};
142
143
144 // The CRC-32 value calculated here matches the one from the PKZIP program.
145 // Use MemoryStream to read file in binary mode.
146 PROCEDURE CalcFileCRC32 (FromName: STRING; VAR CRCvalue: DWORD;
147 VAR TotalBytes: TInteger8;
148 VAR error: WORD);
149 VAR
150 Stream: TMemoryStream;
151 BEGIN
152 error := 0;
153 CRCValue := $FFFFFFFF;
154 Stream := TMemoryStream.Create;
155 TRY
156 TRY
157 Stream.LoadFromFile(FromName);
158 IF Stream.Size > 0
159 THEN CalcCRC32 (Stream.Memory, Stream.Size, CRCvalue)
160 EXCEPT
161 ON E: EReadError DO
162 error := 1
163 END;
164
165 CRCvalue := NOT CRCvalue;
166 TotalBytes := Stream.Size
167 FINALLY
168 Stream.Free
169 END;
170 END {CalcFileCRC32};
171
172procedure TfrmVistAAbout.FormCreate(Sender: TObject);
173var
174 CRC32: DWord;
175 TotalBytes: Int64;
176 Error: Word;
177 Text: String;
178 Version: String;
179 ProductName: String;
180begin
181 CalcFileCRC32(Application.ExeName, CRC32, TotalBytes, Error);
182 lblCRC.Caption := 'CRC: ' + IntToHex(CRC32,8);
183 Text := Application.ExeName;
184 while pos('\',Text) > 0 do
185 begin
186 Text := copy(Text,pos('\',Text)+1,Length(Text));
187 end; // while
188 Text := copy(Text,1,Length(Text)-4);
189 Caption := 'About ' + Text;
190 getfileinfo(Version, ProductName);
191 lblProductName.Caption := ProductName;
192 lblVersion.Caption := 'Version: ' + Version;
193 lblProductName.Width := Panel1.Width-10;
194 lblGovStatement.Width := Panel1.Width-10;
195 if ProgramIcon.Picture.Graphic = nil then
196 begin
197 VistALogo.Left := (Panel1.Width - VistALogo.Width) div 2;
198 end;
199end;
200
201procedure TfrmVistAAbout.GetFileInfo(var Version: String; var ProductName: String);
202var
203 VerInfoSize: DWORD; // holds the size of the version info resource
204 GetInfoSizeJunk: DWORD; // a junk variable, its value is ignored
205 VersionInfo: Pointer; // points to the version info resource
206 Translation: Pointer; // holds version info translation table
207 InfoPointer: Pointer; // a pointer to version information
208
209 VersionInfoSize: UINT; // holds the size of version information
210 VersionValue: string; // holds the version info request string
211 SearchRec: TSearchRec;
212 DateTimeVal: TDateTime;
213 WriteTime: Integer;
214begin
215 {retrieve the size of the version information resource, if one exists}
216 VerInfoSize := GetFileVersionInfoSize(PChar(Application.ExeName),
217 GetInfoSizeJunk);
218
219 {if there was a version information resource available...}
220
221 if VerInfoSize>0 then
222 begin
223 {retrieve enough memory to hold the version resource}
224 GetMem(VersionInfo, VerInfoSize);
225
226 {retrieve the version resource for the selected file}
227 GetFileVersionInfo(PChar(Application.ExeName), 0,
228 VerInfoSize, VersionInfo);
229
230 {retrieve a pointer to the translation table}
231 VerQueryValue(VersionInfo, '\\VarFileInfo\\Translation',
232 Translation, VersionInfoSize);
233
234 {initialize the version value request string}
235 VersionValue :='\\StringFileInfo\\'+
236 IntToHex(LoWord(LongInt(Translation^)),4)+
237 IntToHex(HiWord(LongInt(Translation^)),4)+
238 '\\';
239
240 {retrieve and display the file version}
241 VerQueryValue(VersionInfo, PChar(VersionValue+'FileVersion'), InfoPointer,
242 VersionInfoSize);
243 Version := string(PChar(InfoPointer));
244
245 {retrieve and display the product name}
246 VerQueryValue(VersionInfo, PChar(VersionValue+'ProductName'), InfoPointer,
247 VersionInfoSize);
248 ProductName := string(PChar(InfoPointer));
249
250 {free the version resource memory}
251 FreeMem(VersionInfo, VerInfoSize);
252 end
253 else
254 begin
255 Version := 'Not in File';
256 ProductName := 'Not Identified In File';
257 end;
258 if findfirst(Application.ExeName, faAnyFile, SearchRec) = 0 then
259 begin
260 WriteTime := SearchRec.Time;
261 DateTimeVal := FileDateToDateTime(WriteTime);
262 lblDate.Caption := FormatDateTime('mmmm dd, yyyy hh:nn',DateTimeVal);
263 end;
264end;
265
266procedure ShowAboutBox;
267begin
268 with TfrmVistAAbout.Create(Application) do
269 try
270 ShowModal;
271 finally
272 free;
273 end;
274end;
275
276end.
277
278
Note: See TracBrowser for help on using the repository browser.