Fórum Versão do Sistema #366544

28/11/2008

0

:D Ola Amigos Delphianos;

Algum de vcs poderia me dar uma força, gostaria de saber como devo proceder para colocar na tela principal em que VERSÃO esta o Sistema Desenvolvido para o Cliente, Exemplo:


Na Tela Principal temos um Caption on de informamos a que se refere o Sistema Tipo:

Caption = Sistema Comercial

a frente disso gostaria de completar com a versão do Sistema apos um Build, tipo:

Caption = [b:906a690dc6]Sistema Comercial - Versão 1.0[/b:906a690dc6] <-- 1ª Compilação entregue ao Cliente.

Caption = [b:906a690dc6]Sistema Comercial - Versão 1.1[/b:906a690dc6] <-- 2ª Compilação entregue ao Cliente, após o BUILD.

Caption = [b:906a690dc6]Sistema Comercial - Versão 1.2[/b:906a690dc6] <-- 2ª Compilação entregue ao Cliente, após o BUILD.

Ficarei grato pela ajuda.


Peterpan

Peterpan

Responder

Posts

29/11/2008

Petelegalmsn

Ola Peterpan...

Em relação ao topico que vc menciona, veja se isso te ajuda...

function FileVerInfo(const FileName: string;var FileInfo: TStringList): Boolean;
//
// Obtem diversas informações de um arquivo executável
//
// Requer um StringList criado antes de executar a função
// deve ser declarado na clausula Var no inicio da Unit
// StrLst := TStringList.Create;
//
//
const
 
Key: array[1..9] of string =(´CompanyName´,
  ´FileDescription´,
  ´FileVersion´,
  ´InternalName´,
  ´LegalCopyright´,
  ´OriginalFilename´,
  ´ProductName´,
  ´ProductVersion´,
  ´Comments´);
 
KeyBr: array [1..9] of string = (´Empresa..........................´,
  ´Descricao........................´,
  ´Versao do Arquivo...........´,
  ´Nome Interno...................´,
  ´Copyright..........................´,
  ´Nome Original do Arquivo.´,
  ´Produto.............................´,
  ´Versao do Produto............´,
  ´Comentarios...............:´);
var
  Dummy : THandle;
  BufferSize, Len : Integer;
  Buffer : PChar;
  LoCharSet, HiCharSet : Word;
  Translate, Return : Pointer;
  StrFileInfo, Flags : string;
  TargetOS, TypeArq : string;
  FixedFileInfo : Pointer;
  i : Byte;
begin
Result := False;
If not FileExists(FileName) then
  begin
  showmessage(´Arquivo não encontrado´);
  Result := False;
  exit;
  end;
BufferSize := GetFileVersionInfoSize(PChar(FileName), Dummy);
if BufferSize <> 0 then
  begin
  GetMem(Buffer, Succ(BufferSize));
  try
  if GetFileVersionInfo(PChar(FileName), 0, BufferSize,Buffer) then
  begin
  if VerQueryValue(Buffer, ´\VarFileInfo\Translation´, Translate, UINT(Len)) then
  begin
  LoCharSet := LoWord(Longint(Translate^));
  HiCharSet := HiWord(Longint(Translate^));
  for i := 1 to 9 do
  begin
  StrFileInfo := Format(´\StringFileInfo\0¬x0¬x\¬s´,[LoCharSet, HiCharSet, Key[i]]);
  if VerQueryValue(Buffer,PChar(StrFileInfo), Return,UINT(Len)) then
  begin
  FileInfo.Add(KeyBr[i] + ´: ´ + PChar(Return));
  end;
  end;
  if VerQueryValue(Buffer,´\´,FixedFileInfo, UINT(Len)) then
  with TVSFixedFileInfo(FixedFileInfo^) do
  begin
  Flags := ´´;
  if (dwFileFlags and VS_FF_DEBUG) = VS_FF_DEBUG then
  begin
  Flags := Concat(Flags,´*Debug* ´);
  end;
  if (dwFileFlags and VS_FF_SPECIALBUILD) = VS_FF_SPECIALBUILD then
  begin
  Flags := Concat(Flags, ´*Special Build* ´);
  end;
  if (dwFileFlags and VS_FF_PRIVATEBUILD) = VS_FF_PRIVATEBUILD then
  begin
  Flags := Concat(Flags, ´*Private Build* ´);
  end;
  if (dwFileFlags and VS_FF_PRERELEASE) = VS_FF_PRERELEASE then
  begin
  Flags := Concat(Flags, ´*Pre-Release Build* ´);
  end;
  if (dwFileFlags and VS_FF_PATCHED) = VS_FF_PATCHED then
  begin
  Flags := Concat(Flags, ´*Patched* ´);
  end;
  if Flags <> ´´ then
  begin
  FileInfo.Add(´Atributos: ´ + Flags);
  end;
  TargetOS := ´Plataforma (OS): ´;
  case dwFileOS of
  VOS_UNKNOWN : TargetOS := Concat(TargetOS, ´Desconhecido´);
  VOS_DOS : TargetOS := Concat(TargetOS, ´MS-DOS´);
  VOS_OS216 : TargetOS := Concat(TargetOS, ´16-bit OS/2´);
  VOS_OS232 : TargetOS := Concat(TargetOS, ´32-bit OS/2´);
  VOS_NT : TargetOS := Concat(TargetOS, ´Windows NT´);
  VOS_NT_WINDOWS32, 4: TargetOS := Concat(TargetOS, ´Win32 API´);
  VOS_DOS_WINDOWS16: TargetOS := Concat(TargetOS, ´16-bit Windows ´,´sob MS-DOS´);
  else
  TargetOS := Concat(TargetOS, ´Fora do Padrão. Código: ´, IntToStr(dwFileOS));
  end;
  FileInfo.Add(TargetOS);
  TypeArq := ´Tipo de Arquivo: ´;
  case dwFileType of
  VFT_UNKNOWN : TypeArq := Concat(TypeArq,´Desconhecido´);
  VFT_APP : TypeArq := Concat(TypeArq,´Aplicacao´);
  VFT_DLL : TypeArq := Concat(TypeArq,´Dynamic-Link Lib.´);
  VFT_DRV : begin
  TypeArq := Concat(TypeArq,´Device driver - Driver ´);
  case dwFileSubtype of
  VFT2_UNKNOWN : TypeArq := Concat(TypeArq,´Desconhecido´);
  VFT2_DRV_PRINTER : TypeArq := Concat(TypeArq,´de Impressao´);
  VFT2_DRV_KEYBOARD : TypeArq := Concat(TypeArq,´de Teclado´);
  VFT2_DRV_LANGUAGE : TypeArq := Concat(TypeArq,´de Idioma´);
  VFT2_DRV_DISPLAY : TypeArq := Concat(TypeArq,´de Vídeo´);
  VFT2_DRV_MOUSE : TypeArq := Concat(TypeArq,´de Mouse´);
  VFT2_DRV_NETWORK : TypeArq := Concat(TypeArq,´de Rede´);
  VFT2_DRV_SYSTEM : TypeArq := Concat(TypeArq,´de Sistema´);
  VFT2_DRV_INSTALLABLE : TypeArq := Concat(TypeArq,´Instalavel´);
  VFT2_DRV_SOUND : TypeArq := Concat(TypeArq,´Multimida´);
  end;
  end;
  VFT_FONT : begin
  TypeArq := Concat(TypeArq,´Fonte - Fonte ´);
  case dwFileSubtype of
  VFT2_UNKNOWN : TypeArq := Concat(TypeArq, ´Desconhecida´);
  VFT2_FONT_RASTER : TypeArq := Concat(TypeArq,´Raster´);
  VFT2_FONT_VECTOR : TypeArq := Concat(TypeArq,´Vetorial´);
  VFT2_FONT_TRUETYPE : TypeArq := Concat(TypeArq,´TrueType´);
  end;
  end;
  VFT_VXD : TypeArq := Concat(TypeArq,´Virtual Device´);
  VFT_STATIC_LIB: TypeArq := Concat(TypeArq,´Static-Link Lib.´);
  end;
  FileInfo.Add(TypeArq);
  end;
  end;
  end;
  finally
  FreeMem(Buffer, Succ(BufferSize));
  Result := FileInfo.Text <> ´´;
  end;
  end;
end;



Responder

Gostei + 0

29/11/2008

Petelegalmsn

Ola Peterpan

Esse codigo foi extraido de um e-mail que recebi pois eu tbem prec isei usar esse tipo de informação ok...

Os créditos desse código ficam para o Rodrigo Carreiro da DevMedia...

Qquer dúvida posta ai, que talvez outras pessoas possam te ajudar como usar esse código.

Abraços


Responder

Gostei + 0

29/11/2008

Peterpan

Ola Petelegalmsn...

Valeu pela dica, realmente muito interessante o código que vc me passou, mas como sou novato ainda nao sei como utilizar o mesmo.

Alguem pode me dar uma dica.

Abraços


Responder

Gostei + 0

30/11/2008

Edsoncabral

A função postada pelo petelegalmsn é interessante.
Para a finalidade que vc pediu, eu adaptei a função para que ela retorna a versão do arquivo passado como parâmetro, que pode ser o seu próprio executável.

Veja:
Function TForm1.RetornaVersaoSistema(Arquivo: String): String;
//Retorna a versão do arquivo passado como parâmetro...
Var
  Dummy : THandle;
  BufferSize, Len : Integer;
  Buffer : PChar;
  LoCharSet, HiCharSet : Word;
  Translate, Return : Pointer;
  StrFileInfo, Flags : string;
begin

  Result := ´´;
  If Not FileExists(Arquivo) Then
  Begin
    ShowMessage(´Arquivo não encontrado.´);
    Result := ´´;
    Exit;
  End;

  BufferSize := GetFileVersionInfoSize(PChar(Arquivo), Dummy);
  If BufferSize <> 0 then
  Begin
    GetMem(Buffer, Succ(BufferSize));
    Try
      If GetFileVersionInfo(PChar(Arquivo), 0, BufferSize, Buffer) then
      Begin
        If VerQueryValue(Buffer, ´\VarFileInfo\Translation´, Translate, UINT(Len)) then
        begin
          LoCharSet := LoWord(Longint(Translate^));
          HiCharSet := HiWord(Longint(Translate^));
          //Pega a versão...
          StrFileInfo := Format(´\StringFileInfo\0¬x0¬x\¬s´,[LoCharSet, HiCharSet, ´FileVersion´]);
          If VerQueryValue(Buffer,PChar(StrFileInfo), Return,UINT(Len)) then
          begin
            Result := PChar(Return);
          end;
        End;
      End;
    Finally
      FreeMem(Buffer, Succ(BufferSize));
    End;
  End;
End;


Você pode usá-la assim:
Label1.Caption := RetornaVersaoSistema(Application.ExeName);
//Nesse caso o label1 terá o seu caption setado para o valor 
//retornado pela função, que é a versão do seu aplicativo.


PS: Todo o crédito é do desenvolvedor da função. Eu apenas a modifiquei.

Edson Cabral
Criterion Software


Responder

Gostei + 0

02/12/2008

Peterpan

Ola Amigos Delphianos...

Graannnnnnde Edson Cabral

Obrigado pela informação agora sim esta começando a ficar legal espero poder encontrar outras dicas como essas por aki....

Obrigado de coração.

Abraços


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar