KAKO DA – iščitavanje informacija o programu, Delphi
U svaki Delphi projekat/aplikaciju možete smestiti i osnovne informacije o programa, što će biti korisno i korisnicima aplikacija ali i programerima koji vrše eventualni reinženjering.
Delphi svojim korisnicima - programerima, omogućava da uz svaki projekat (aplikaciju) smeste i osnovne informacije o programu, kao što su:
• Naziv programa• Verzija programa• Opis projekta• Podaci o pravima korišćenja programa• Komentari, itd.
Sve ove informacije možete uneti pri kreiranju aplikacija, preko menija Project > Options i kartice “Version Info”. Ovde unete informacije koriste i samim programerima, ali i budućim korisnicima. Programerima, ponajviše zbog beleženja izmena, revizija, i prepravki u kodu, tj. radi boljeg snalaženja unutar jednog projekta. Korisnicima ova opcija može biti važna, kako zbog praćenja verzije programa kojeg koriste (u sklopu održavanja softverskog proizvoda), tako i zbog prava i obaveza preuzetih kupovinom nekog programa (sekcije “LegalCopyright” i “LegalTrademarks”).
Za iščitavanje “VersionInfo” informacija služi procedura “GetFileVersionInfo”. U sledećim redovima videćemo primer procedure koja će da iščita sve dostupne VersionInfo informacije i da ih smesti u jedan listbox. Na praznu formu postavi te jedno dugme i jednu listu (listbox). Klikom na dugme pozivaćemo funkciju koja će sve odraditi:
procedure TForm1. Button1Click(Sender: TObject);beginInformacijeOVerziji(ListBox1);end;
Preostali deo koda smestite u isti Unit:
Function StringPad(InputStr,FillChar: String;StrLen: Integer;StrJustify: Boolean): String;VarTempFill: String;Counter : Integer;BeginIf Not (Length(InputStr) = StrLen) ThenBeginIf Length(InputStr) > StrLen ThenBeginInputStr := Copy(InputStr,1,StrLen);EndElseBeginTempFill := ”;For Counter := 1 To StrLen-Length(InputStr) DoBeginTempFill := TempFill + FillChar;End;If StrJustify ThenBegin{Left Justified}InputStr := InputStr + TempFill;EndElseBegin{Right Justified}InputStr := TempFill + InputStr ;End;End;End;Result := InputStr;End;
Function InformacijeOVerziji(ListBox : TListBox): Boolean;constInfoNum = 11;InfoStr : array [1. . InfoNum] of String =(’CompanyName’, ‘FileDescription’, ‘FileVersion’,‘InternalName’, ‘LegalCopyright’, ‘LegalTradeMarks’,‘OriginalFilename’, ‘ProductName’, ‘ProductVersion’,‘Comments’, ‘Author’);LabelStr : array [1. . InfoNum] of String =(’Company Name’, ‘Description’, ‘File Version’,‘Internal Name’, ‘Copyright’, ‘TradeMarks’,‘Original File Name’, ‘Product Name’,‘Product Version’, ‘Comments’, ‘Author’);varS: String;n, Len, i : Integer;Buf : PChar;Value : PChar;beginTryS := Application. ExeName;ListBox. Items. Clear;ListBox. Sorted := True;ListBox. Font. Name := ‘Courier New’;n := GetFileVersionInfoSize(PChar(S),n);If n > 0 Then BeginBuf := AllocMem(n);ListBox. Items. Add(StringPad(’Size’,’ ‘,20,True)+’ = ‘+IntToStr(n));GetFileVersionInfo(PChar(S),0,n,Buf);For i:=1 To InfoNum Do BeginIf VerQueryValue(Buf,PChar(’StringFileInfo\040904E4\’+InfoStr[i]),Pointer(Value),Len) ThenBeginValue := PChar(Trim(Value));If Length(Value) > 0 ThenBeginListBox. Items. Add(StringPad(labelStr[i],’ ‘,20,True)+’ = ‘+Value);End;End;End;FreeMem(Buf,n);EndElse BeginListBox. Items. Add(’Nema FileVersionInfo podataka’);End;Result := True;ExceptResult := False;End;End;
Pripremio: Milenko Kusurović