source: cprs/trunk/BDK50/BDK32_P50/Samples D2006/RPCBroker/BrokerEx/frmVistAAbout.pas@ 1694

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